summaryrefslogtreecommitdiff
path: root/libopie2/opiepim/ocontact.cpp
authoreilers <eilers>2002-10-27 16:20:03 (UTC)
committer eilers <eilers>2002-10-27 16:20:03 (UTC)
commit1d1fdae1ff88ed6f1e331cbbab59fc978c04b370 (patch) (unidiff)
tree42041d05d79624d247a52375b9a9e19d70efaca5 /libopie2/opiepim/ocontact.cpp
parentcc01384d8c2b421d5f455f32631d8c2ec4b7e844 (diff)
downloadopie-1d1fdae1ff88ed6f1e331cbbab59fc978c04b370.zip
opie-1d1fdae1ff88ed6f1e331cbbab59fc978c04b370.tar.gz
opie-1d1fdae1ff88ed6f1e331cbbab59fc978c04b370.tar.bz2
ocontact now uses QDate for Birthday and Anniversary.. Moved
some inline functions into the library
Diffstat (limited to 'libopie2/opiepim/ocontact.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/ocontact.cpp168
1 files changed, 141 insertions, 27 deletions
diff --git a/libopie2/opiepim/ocontact.cpp b/libopie2/opiepim/ocontact.cpp
index 6f648ac..21fc088 100644
--- a/libopie2/opiepim/ocontact.cpp
+++ b/libopie2/opiepim/ocontact.cpp
@@ -1,76 +1,78 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** Copyright (C) 2002 by Stefan Eilers (eilers.stefan@epost.de)
3** 4**
4** This file is part of the Qtopia Environment. 5** This file is part of the Qtopia Environment.
5** 6**
6** This file may be distributed and/or modified under the terms of the 7** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 8** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 9** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 10** packaging of this file.
10** 11**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 12** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 13** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 14**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 15** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 16**
16** Contact info@trolltech.com if any conditions of this licensing are 17** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 18** not clear to you.
18** 19**
19**********************************************************************/ 20**********************************************************************/
20 21
21#define QTOPIA_INTERNAL_CONTACT_MRE 22#define QTOPIA_INTERNAL_CONTACT_MRE
22 23
23#include "ocontact.h" 24#include "ocontact.h"
24#include "../../library/backend/vobject_p.h" 25#include "../../library/backend/vobject_p.h"
25#include "../../library/backend/qfiledirect_p.h" 26#include "../../library/backend/qfiledirect_p.h"
26 27
27#include <qpe/stringutil.h> 28#include <qpe/stringutil.h>
28#include <qpe/timeconversion.h> 29#include <qpe/timeconversion.h>
30#include <qpe/timestring.h>
29 31
30#include <qobject.h> 32#include <qobject.h>
31#include <qregexp.h> 33#include <qregexp.h>
32#include <qstylesheet.h> 34#include <qstylesheet.h>
33#include <qfileinfo.h> 35#include <qfileinfo.h>
34#include <qmap.h> 36#include <qmap.h>
35 37
36#include <stdio.h> 38#include <stdio.h>
37 39
38/*! 40/*!
39 \class Contact contact.h 41 \class Contact contact.h
40 \brief The Contact class holds the data of an address book entry. 42 \brief The Contact class holds the data of an address book entry.
41 43
42 This data includes information the name of the person, contact 44 This data includes information the name of the person, contact
43 information, and business information such as deparment and job title. 45 information, and business information such as deparment and job title.
44 46
45 \ingroup qtopiaemb 47 \ingroup qtopiaemb
46 \ingroup qtopiadesktop 48 \ingroup qtopiadesktop
47*/ 49*/
48 50
49Qtopia::UidGen OContact::sUidGen( Qtopia::UidGen::Qtopia ); 51Qtopia::UidGen OContact::sUidGen( Qtopia::UidGen::Qtopia );
50 52
51/*! 53/*!
52 Creates a new, empty contact. 54 Creates a new, empty contact.
53*/ 55*/
54OContact::OContact() 56OContact::OContact()
55 : OPimRecord(), mMap(), d( 0 ) 57 : OPimRecord(), mMap(), d( 0 )
56{ 58{
57} 59}
58 60
59/*! 61/*!
60 \internal 62 \internal
61 Creates a new contact. The properties of the contact are 63 Creates a new contact. The properties of the contact are
62 set from \a fromMap. 64 set from \a fromMap.
63*/ 65*/
64OContact::OContact( const QMap<int, QString> &fromMap ) : 66OContact::OContact( const QMap<int, QString> &fromMap ) :
65 OPimRecord(), mMap( fromMap ), d( 0 ) 67 OPimRecord(), mMap( fromMap ), d( 0 )
66{ 68{
67 QString cats = mMap[ Qtopia::AddressCategory ]; 69 QString cats = mMap[ Qtopia::AddressCategory ];
68 if ( !cats.isEmpty() ) 70 if ( !cats.isEmpty() )
69 setCategories( idsFromString( cats ) ); 71 setCategories( idsFromString( cats ) );
70 QString uidStr = find( Qtopia::AddressUid ); 72 QString uidStr = find( Qtopia::AddressUid );
71 73
72 if ( uidStr.isEmpty() ) 74 if ( uidStr.isEmpty() )
73 setUid( uidGen().generate() ); 75 setUid( uidGen().generate() );
74 else 76 else
75 setUid( uidStr.toInt() ); 77 setUid( uidStr.toInt() );
76 78
@@ -180,104 +182,96 @@ OContact::~OContact()
180/*! \fn void OContact::setBusinessZip( const QString &str ) 182/*! \fn void OContact::setBusinessZip( const QString &str )
181 Sets the business zip code of the contact to \a str. 183 Sets the business zip code of the contact to \a str.
182*/ 184*/
183 185
184/*! \fn void OContact::setBusinessCountry( const QString &str ) 186/*! \fn void OContact::setBusinessCountry( const QString &str )
185 Sets the business country of the contact to \a str. 187 Sets the business country of the contact to \a str.
186*/ 188*/
187 189
188/*! \fn void OContact::setBusinessPhone( const QString &str ) 190/*! \fn void OContact::setBusinessPhone( const QString &str )
189 Sets the business phone number of the contact to \a str. 191 Sets the business phone number of the contact to \a str.
190*/ 192*/
191 193
192/*! \fn void OContact::setBusinessFax( const QString &str ) 194/*! \fn void OContact::setBusinessFax( const QString &str )
193 Sets the business fax number of the contact to \a str. 195 Sets the business fax number of the contact to \a str.
194*/ 196*/
195 197
196/*! \fn void OContact::setBusinessMobile( const QString &str ) 198/*! \fn void OContact::setBusinessMobile( const QString &str )
197 Sets the business mobile phone number of the contact to \a str. 199 Sets the business mobile phone number of the contact to \a str.
198*/ 200*/
199 201
200/*! \fn void OContact::setBusinessPager( const QString &str ) 202/*! \fn void OContact::setBusinessPager( const QString &str )
201 Sets the business pager number of the contact to \a str. 203 Sets the business pager number of the contact to \a str.
202*/ 204*/
203 205
204/*! \fn void OContact::setBusinessWebpage( const QString &str ) 206/*! \fn void OContact::setBusinessWebpage( const QString &str )
205 Sets the business webpage of the contact to \a str. 207 Sets the business webpage of the contact to \a str.
206*/ 208*/
207 209
208/*! \fn void OContact::setProfession( const QString &str ) 210/*! \fn void OContact::setProfession( const QString &str )
209 Sets the profession of the contact to \a str. 211 Sets the profession of the contact to \a str.
210*/ 212*/
211 213
212/*! \fn void OContact::setAssistant( const QString &str ) 214/*! \fn void OContact::setAssistant( const QString &str )
213 Sets the assistant of the contact to \a str. 215 Sets the assistant of the contact to \a str.
214*/ 216*/
215 217
216/*! \fn void OContact::setManager( const QString &str ) 218/*! \fn void OContact::setManager( const QString &str )
217 Sets the manager of the contact to \a str. 219 Sets the manager of the contact to \a str.
218*/ 220*/
219 221
220/*! \fn void OContact::setSpouse( const QString &str ) 222/*! \fn void OContact::setSpouse( const QString &str )
221 Sets the spouse of the contact to \a str. 223 Sets the spouse of the contact to \a str.
222*/ 224*/
223 225
224/*! \fn void OContact::setGender( const QString &str ) 226/*! \fn void OContact::setGender( const QString &str )
225 Sets the gender of the contact to \a str. 227 Sets the gender of the contact to \a str.
226*/ 228*/
227 229
228/*! \fn void OContact::setBirthday( const QString &str )
229 Sets the birthday for the contact to \a str.
230*/
231
232/*! \fn void OContact::setAnniversary( const QString &str )
233 Sets the anniversary of the contact to \a str.
234*/
235
236/*! \fn void OContact::setNickname( const QString &str ) 230/*! \fn void OContact::setNickname( const QString &str )
237 Sets the nickname of the contact to \a str. 231 Sets the nickname of the contact to \a str.
238*/ 232*/
239 233
240/*! \fn void OContact::setNotes( const QString &str ) 234/*! \fn void OContact::setNotes( const QString &str )
241 Sets the notes about the contact to \a str. 235 Sets the notes about the contact to \a str.
242*/ 236*/
243 237
244/*! \fn QString OContact::title() const 238/*! \fn QString OContact::title() const
245 Returns the title of the contact. 239 Returns the title of the contact.
246*/ 240*/
247 241
248/*! \fn QString OContact::firstName() const 242/*! \fn QString OContact::firstName() const
249 Returns the first name of the contact. 243 Returns the first name of the contact.
250*/ 244*/
251 245
252/*! \fn QString OContact::middleName() const 246/*! \fn QString OContact::middleName() const
253 Returns the middle name of the contact. 247 Returns the middle name of the contact.
254*/ 248*/
255 249
256/*! \fn QString OContact::lastName() const 250/*! \fn QString OContact::lastName() const
257 Returns the last name of the contact. 251 Returns the last name of the contact.
258*/ 252*/
259 253
260/*! \fn QString OContact::suffix() const 254/*! \fn QString OContact::suffix() const
261 Returns the suffix of the contact. 255 Returns the suffix of the contact.
262*/ 256*/
263 257
264/*! \fn QString OContact::fileAs() const 258/*! \fn QString OContact::fileAs() const
265 Returns the string the contact is filed as. 259 Returns the string the contact is filed as.
266*/ 260*/
267 261
268/*! \fn QString OContact::defaultEmail() const 262/*! \fn QString OContact::defaultEmail() const
269 Returns the default email address of the contact. 263 Returns the default email address of the contact.
270*/ 264*/
271 265
272/*! \fn QString OContact::emails() const 266/*! \fn QString OContact::emails() const
273 Returns the list of email address for a contact separated by ';'s in a single 267 Returns the list of email address for a contact separated by ';'s in a single
274 string. 268 string.
275*/ 269*/
276 270
277/*! \fn QString OContact::homeStreet() const 271/*! \fn QString OContact::homeStreet() const
278 Returns the home street address of the contact. 272 Returns the home street address of the contact.
279*/ 273*/
280 274
281/*! \fn QString OContact::homeCity() const 275/*! \fn QString OContact::homeCity() const
282 Returns the home city of the contact. 276 Returns the home city of the contact.
283*/ 277*/
@@ -341,104 +335,96 @@ OContact::~OContact()
341/*! \fn QString OContact::businessStreet() const 335/*! \fn QString OContact::businessStreet() const
342 Returns the business street address of the contact. 336 Returns the business street address of the contact.
343*/ 337*/
344 338
345/*! \fn QString OContact::businessCity() const 339/*! \fn QString OContact::businessCity() const
346 Returns the business city of the contact. 340 Returns the business city of the contact.
347*/ 341*/
348 342
349/*! \fn QString OContact::businessState() const 343/*! \fn QString OContact::businessState() const
350 Returns the business state of the contact. 344 Returns the business state of the contact.
351*/ 345*/
352 346
353/*! \fn QString OContact::businessZip() const 347/*! \fn QString OContact::businessZip() const
354 Returns the business zip of the contact. 348 Returns the business zip of the contact.
355*/ 349*/
356 350
357/*! \fn QString OContact::businessCountry() const 351/*! \fn QString OContact::businessCountry() const
358 Returns the business country of the contact. 352 Returns the business country of the contact.
359*/ 353*/
360 354
361/*! \fn QString OContact::businessPhone() const 355/*! \fn QString OContact::businessPhone() const
362 Returns the business phone number of the contact. 356 Returns the business phone number of the contact.
363*/ 357*/
364 358
365/*! \fn QString OContact::businessFax() const 359/*! \fn QString OContact::businessFax() const
366 Returns the business fax number of the contact. 360 Returns the business fax number of the contact.
367*/ 361*/
368 362
369/*! \fn QString OContact::businessMobile() const 363/*! \fn QString OContact::businessMobile() const
370 Returns the business mobile number of the contact. 364 Returns the business mobile number of the contact.
371*/ 365*/
372 366
373/*! \fn QString OContact::businessPager() const 367/*! \fn QString OContact::businessPager() const
374 Returns the business pager number of the contact. 368 Returns the business pager number of the contact.
375*/ 369*/
376 370
377/*! \fn QString OContact::businessWebpage() const 371/*! \fn QString OContact::businessWebpage() const
378 Returns the business webpage of the contact. 372 Returns the business webpage of the contact.
379*/ 373*/
380 374
381/*! \fn QString OContact::spouse() const 375/*! \fn QString OContact::spouse() const
382 Returns the spouse of the contact. 376 Returns the spouse of the contact.
383*/ 377*/
384 378
385/*! \fn QString OContact::gender() const 379/*! \fn QString OContact::gender() const
386 Returns the gender of the contact. 380 Returns the gender of the contact.
387*/ 381*/
388 382
389/*! \fn QString OContact::birthday() const
390 Returns the birthday of the contact.
391*/
392
393/*! \fn QString OContact::anniversary() const
394 Returns the anniversary of the contact.
395*/
396
397/*! \fn QString OContact::nickname() const 383/*! \fn QString OContact::nickname() const
398 Returns the nickname of the contact. 384 Returns the nickname of the contact.
399*/ 385*/
400 386
401/*! \fn QString OContact::children() const 387/*! \fn QString OContact::children() const
402 Returns the children of the contact. 388 Returns the children of the contact.
403*/ 389*/
404 390
405/*! \fn QString OContact::notes() const 391/*! \fn QString OContact::notes() const
406 Returns the notes relating to the the contact. 392 Returns the notes relating to the the contact.
407*/ 393*/
408 394
409/*! \fn QString OContact::groups() const 395/*! \fn QString OContact::groups() const
410 \internal 396 \internal
411 Returns the groups for the contact. 397 Returns the groups for the contact.
412*/ 398*/
413 399
414/*! \fn QStringList OContact::groupList() const 400/*! \fn QStringList OContact::groupList() const
415 \internal 401 \internal
416*/ 402*/
417 403
418/*! \fn QString OContact::field(int) const 404/*! \fn QString OContact::field(int) const
419 \internal 405 \internal
420*/ 406*/
421 407
422/*! \fn void OContact::saveJournal( journal_action, const QString & = QString::null ) 408/*! \fn void OContact::saveJournal( journal_action, const QString & = QString::null )
423 \internal 409 \internal
424*/ 410*/
425 411
426/*! \fn void OContact::setUid( int id ) 412/*! \fn void OContact::setUid( int id )
427 \internal 413 \internal
428 Sets the uid for this record to \a id. 414 Sets the uid for this record to \a id.
429*/ 415*/
430 416
431/*! \enum OContact::journal_action 417/*! \enum OContact::journal_action
432 \internal 418 \internal
433*/ 419*/
434 420
435/*! 421/*!
436 \internal 422 \internal
437*/ 423*/
438QMap<int, QString> OContact::toMap() const 424QMap<int, QString> OContact::toMap() const
439{ 425{
440 QMap<int, QString> map = mMap; 426 QMap<int, QString> map = mMap;
441 QString cats = idsToString( categories() ); 427 QString cats = idsToString( categories() );
442 if ( !cats.isEmpty() ) 428 if ( !cats.isEmpty() )
443 map.insert( Qtopia::AddressCategory, cats ); 429 map.insert( Qtopia::AddressCategory, cats );
444 return map; 430 return map;
@@ -540,104 +526,106 @@ QString OContact::toRichText() const
540 str = businessWebpage(); 526 str = businessWebpage();
541 if ( !str.isEmpty() ) 527 if ( !str.isEmpty() )
542 text += "<b>" + QObject::tr("Business Web Page: ") + "</b>" 528 text += "<b>" + QObject::tr("Business Web Page: ") + "</b>"
543 + Qtopia::escapeString(str) + "<br>"; 529 + Qtopia::escapeString(str) + "<br>";
544 str = office(); 530 str = office();
545 if ( !str.isEmpty() ) 531 if ( !str.isEmpty() )
546 text += "<b>" + QObject::tr("Office: ") + "</b>" 532 text += "<b>" + QObject::tr("Office: ") + "</b>"
547 + Qtopia::escapeString(str) + "<br>"; 533 + Qtopia::escapeString(str) + "<br>";
548 str = businessPhone(); 534 str = businessPhone();
549 if ( !str.isEmpty() ) 535 if ( !str.isEmpty() )
550 text += "<b>" + QObject::tr("Business Phone: ") + "</b>" 536 text += "<b>" + QObject::tr("Business Phone: ") + "</b>"
551 + Qtopia::escapeString(str) + "<br>"; 537 + Qtopia::escapeString(str) + "<br>";
552 str = businessFax(); 538 str = businessFax();
553 if ( !str.isEmpty() ) 539 if ( !str.isEmpty() )
554 text += "<b>" + QObject::tr("Business Fax: ") + "</b>" 540 text += "<b>" + QObject::tr("Business Fax: ") + "</b>"
555 + Qtopia::escapeString(str) + "<br>"; 541 + Qtopia::escapeString(str) + "<br>";
556 str = businessMobile(); 542 str = businessMobile();
557 if ( !str.isEmpty() ) 543 if ( !str.isEmpty() )
558 text += "<b>" + QObject::tr("Business Mobile: ") + "</b>" 544 text += "<b>" + QObject::tr("Business Mobile: ") + "</b>"
559 + Qtopia::escapeString(str) + "<br>"; 545 + Qtopia::escapeString(str) + "<br>";
560 str = businessPager(); 546 str = businessPager();
561 if ( !str.isEmpty() ) 547 if ( !str.isEmpty() )
562 text += "<b>" + QObject::tr("Business Pager: ") + "</b>" 548 text += "<b>" + QObject::tr("Business Pager: ") + "</b>"
563 + Qtopia::escapeString(str) + "<br>"; 549 + Qtopia::escapeString(str) + "<br>";
564 str = profession(); 550 str = profession();
565 if ( !str.isEmpty() ) 551 if ( !str.isEmpty() )
566 text += "<b>" + QObject::tr("Profession: ") + "</b>" 552 text += "<b>" + QObject::tr("Profession: ") + "</b>"
567 + Qtopia::escapeString(str) + "<br>"; 553 + Qtopia::escapeString(str) + "<br>";
568 str = assistant(); 554 str = assistant();
569 if ( !str.isEmpty() ) 555 if ( !str.isEmpty() )
570 text += "<b>" + QObject::tr("Assistant: ") + "</b>" 556 text += "<b>" + QObject::tr("Assistant: ") + "</b>"
571 + Qtopia::escapeString(str) + "<br>"; 557 + Qtopia::escapeString(str) + "<br>";
572 str = manager(); 558 str = manager();
573 if ( !str.isEmpty() ) 559 if ( !str.isEmpty() )
574 text += "<b>" + QObject::tr("Manager: ") + "</b>" 560 text += "<b>" + QObject::tr("Manager: ") + "</b>"
575 + Qtopia::escapeString(str) + "<br>"; 561 + Qtopia::escapeString(str) + "<br>";
576 str = gender(); 562 str = gender();
577 if ( !str.isEmpty() && str.toInt() != 0 ) { 563 if ( !str.isEmpty() && str.toInt() != 0 ) {
578 if ( str.toInt() == 1 ) 564 if ( str.toInt() == 1 )
579 str = QObject::tr( "Male" ); 565 str = QObject::tr( "Male" );
580 else if ( str.toInt() == 2 ) 566 else if ( str.toInt() == 2 )
581 str = QObject::tr( "Female" ); 567 str = QObject::tr( "Female" );
582 text += "<b>" + QObject::tr("Gender: ") + "</b>" + str + "<br>"; 568 text += "<b>" + QObject::tr("Gender: ") + "</b>" + str + "<br>";
583 } 569 }
584 str = spouse(); 570 str = spouse();
585 if ( !str.isEmpty() ) 571 if ( !str.isEmpty() )
586 text += "<b>" + QObject::tr("Spouse: ") + "</b>" 572 text += "<b>" + QObject::tr("Spouse: ") + "</b>"
587 + Qtopia::escapeString(str) + "<br>"; 573 + Qtopia::escapeString(str) + "<br>";
588 str = birthday(); 574 if ( !birthday().isNull() ){
589 if ( !str.isEmpty() ) 575 str = TimeString::numberDateString( birthday() );
590 text += "<b>" + QObject::tr("Birthday: ") + "</b>" 576 text += "<b>" + QObject::tr("Birthday: ") + "</b>"
591 + Qtopia::escapeString(str) + "<br>"; 577 + Qtopia::escapeString(str) + "<br>";
592 str = anniversary(); 578 }
593 if ( !str.isEmpty() ) 579 if ( !anniversary().isNull() ){
594 text += "<b>" + QObject::tr("Anniversary: ") + "</b>" 580 str = TimeString::numberDateString( anniversary() );
595 + Qtopia::escapeString(str) + "<br>"; 581 text += "<b>" + QObject::tr("Anniversary: ") + "</b>"
582 + Qtopia::escapeString(str) + "<br>";
583 }
596 str = nickname(); 584 str = nickname();
597 if ( !str.isEmpty() ) 585 if ( !str.isEmpty() )
598 text += "<b>" + QObject::tr("Nickname: ") + "</b>" 586 text += "<b>" + QObject::tr("Nickname: ") + "</b>"
599 + Qtopia::escapeString(str) + "<br>"; 587 + Qtopia::escapeString(str) + "<br>";
600 588
601 // notes last 589 // notes last
602 if ( (value = notes()) ) { 590 if ( (value = notes()) ) {
603 QRegExp reg("\n"); 591 QRegExp reg("\n");
604 592
605 //QString tmp = Qtopia::escapeString(value); 593 //QString tmp = Qtopia::escapeString(value);
606 QString tmp = QStyleSheet::convertFromPlainText(value); 594 QString tmp = QStyleSheet::convertFromPlainText(value);
607 //tmp.replace( reg, "<br>" ); 595 //tmp.replace( reg, "<br>" );
608 text += "<br>" + tmp + "<br>"; 596 text += "<br>" + tmp + "<br>";
609 } 597 }
610 return text; 598 return text;
611} 599}
612 600
613/*! 601/*!
614 \internal 602 \internal
615*/ 603*/
616void OContact::insert( int key, const QString &v ) 604void OContact::insert( int key, const QString &v )
617{ 605{
618 QString value = v.stripWhiteSpace(); 606 QString value = v.stripWhiteSpace();
619 if ( value.isEmpty() ) 607 if ( value.isEmpty() )
620 mMap.remove( key ); 608 mMap.remove( key );
621 else 609 else
622 mMap.insert( key, value ); 610 mMap.insert( key, value );
623} 611}
624 612
625/*! 613/*!
626 \internal 614 \internal
627*/ 615*/
628void OContact::replace( int key, const QString & v ) 616void OContact::replace( int key, const QString & v )
629{ 617{
630 QString value = v.stripWhiteSpace(); 618 QString value = v.stripWhiteSpace();
631 if ( value.isEmpty() ) 619 if ( value.isEmpty() )
632 mMap.remove( key ); 620 mMap.remove( key );
633 else 621 else
634 mMap.replace( key, value ); 622 mMap.replace( key, value );
635} 623}
636 624
637/*! 625/*!
638 \internal 626 \internal
639*/ 627*/
640QString OContact::find( int key ) const 628QString OContact::find( int key ) const
641{ 629{
642 return mMap[key]; 630 return mMap[key];
643} 631}
@@ -1089,113 +1077,113 @@ static VObject *createVObject( const OContact &c )
1089 safeAddProp( home_phone, VCHomeProp ); 1077 safeAddProp( home_phone, VCHomeProp );
1090 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeMobile() ); 1078 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeMobile() );
1091 safeAddProp( home_phone, VCHomeProp ); 1079 safeAddProp( home_phone, VCHomeProp );
1092 safeAddProp( home_phone, VCCellularProp ); 1080 safeAddProp( home_phone, VCCellularProp );
1093 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeFax() ); 1081 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeFax() );
1094 safeAddProp( home_phone, VCHomeProp ); 1082 safeAddProp( home_phone, VCHomeProp );
1095 safeAddProp( home_phone, VCFaxProp ); 1083 safeAddProp( home_phone, VCFaxProp );
1096 1084
1097 VObject *url = safeAddPropValue( vcard, VCURLProp, c.homeWebpage() ); 1085 VObject *url = safeAddPropValue( vcard, VCURLProp, c.homeWebpage() );
1098 safeAddProp( url, VCHomeProp ); 1086 safeAddProp( url, VCHomeProp );
1099 1087
1100 // work properties 1088 // work properties
1101 VObject *work_adr= safeAddProp( vcard, VCAdrProp ); 1089 VObject *work_adr= safeAddProp( vcard, VCAdrProp );
1102 safeAddProp( work_adr, VCWorkProp ); 1090 safeAddProp( work_adr, VCWorkProp );
1103 safeAddPropValue( work_adr, VCStreetAddressProp, c.businessStreet() ); 1091 safeAddPropValue( work_adr, VCStreetAddressProp, c.businessStreet() );
1104 safeAddPropValue( work_adr, VCCityProp, c.businessCity() ); 1092 safeAddPropValue( work_adr, VCCityProp, c.businessCity() );
1105 safeAddPropValue( work_adr, VCRegionProp, c.businessState() ); 1093 safeAddPropValue( work_adr, VCRegionProp, c.businessState() );
1106 safeAddPropValue( work_adr, VCPostalCodeProp, c.businessZip() ); 1094 safeAddPropValue( work_adr, VCPostalCodeProp, c.businessZip() );
1107 safeAddPropValue( work_adr, VCCountryNameProp, c.businessCountry() ); 1095 safeAddPropValue( work_adr, VCCountryNameProp, c.businessCountry() );
1108 1096
1109 VObject *work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPhone() ); 1097 VObject *work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPhone() );
1110 safeAddProp( work_phone, VCWorkProp ); 1098 safeAddProp( work_phone, VCWorkProp );
1111 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessMobile() ); 1099 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessMobile() );
1112 safeAddProp( work_phone, VCWorkProp ); 1100 safeAddProp( work_phone, VCWorkProp );
1113 safeAddProp( work_phone, VCCellularProp ); 1101 safeAddProp( work_phone, VCCellularProp );
1114 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessFax() ); 1102 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessFax() );
1115 safeAddProp( work_phone, VCWorkProp ); 1103 safeAddProp( work_phone, VCWorkProp );
1116 safeAddProp( work_phone, VCFaxProp ); 1104 safeAddProp( work_phone, VCFaxProp );
1117 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPager() ); 1105 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPager() );
1118 safeAddProp( work_phone, VCWorkProp ); 1106 safeAddProp( work_phone, VCWorkProp );
1119 safeAddProp( work_phone, VCPagerProp ); 1107 safeAddProp( work_phone, VCPagerProp );
1120 1108
1121 url = safeAddPropValue( vcard, VCURLProp, c.businessWebpage() ); 1109 url = safeAddPropValue( vcard, VCURLProp, c.businessWebpage() );
1122 safeAddProp( url, VCWorkProp ); 1110 safeAddProp( url, VCWorkProp );
1123 1111
1124 VObject *title = safeAddPropValue( vcard, VCTitleProp, c.jobTitle() ); 1112 VObject *title = safeAddPropValue( vcard, VCTitleProp, c.jobTitle() );
1125 safeAddProp( title, VCWorkProp ); 1113 safeAddProp( title, VCWorkProp );
1126 1114
1127 1115
1128 QStringList emails = c.emailList(); 1116 QStringList emails = c.emailList();
1129 emails.prepend( c.defaultEmail() ); 1117 emails.prepend( c.defaultEmail() );
1130 for( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) { 1118 for( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) {
1131 VObject *email = safeAddPropValue( vcard, VCEmailAddressProp, *it ); 1119 VObject *email = safeAddPropValue( vcard, VCEmailAddressProp, *it );
1132 safeAddProp( email, VCInternetProp ); 1120 safeAddProp( email, VCInternetProp );
1133 } 1121 }
1134 1122
1135 safeAddPropValue( vcard, VCNoteProp, c.notes() ); 1123 safeAddPropValue( vcard, VCNoteProp, c.notes() );
1136 1124
1137 safeAddPropValue( vcard, VCBirthDateProp, c.birthday() ); 1125 safeAddPropValue( vcard, VCBirthDateProp, TimeConversion::toString( c.birthday() ) );
1138 1126
1139 if ( !c.company().isEmpty() || !c.department().isEmpty() || !c.office().isEmpty() ) { 1127 if ( !c.company().isEmpty() || !c.department().isEmpty() || !c.office().isEmpty() ) {
1140 VObject *org = safeAddProp( vcard, VCOrgProp ); 1128 VObject *org = safeAddProp( vcard, VCOrgProp );
1141 safeAddPropValue( org, VCOrgNameProp, c.company() ); 1129 safeAddPropValue( org, VCOrgNameProp, c.company() );
1142 safeAddPropValue( org, VCOrgUnitProp, c.department() ); 1130 safeAddPropValue( org, VCOrgUnitProp, c.department() );
1143 safeAddPropValue( org, VCOrgUnit2Prop, c.office() ); 1131 safeAddPropValue( org, VCOrgUnit2Prop, c.office() );
1144 } 1132 }
1145 1133
1146 // some values we have to export as custom fields 1134 // some values we have to export as custom fields
1147 safeAddPropValue( vcard, "X-Qtopia-Profession", c.profession() ); 1135 safeAddPropValue( vcard, "X-Qtopia-Profession", c.profession() );
1148 safeAddPropValue( vcard, "X-Qtopia-Manager", c.manager() ); 1136 safeAddPropValue( vcard, "X-Qtopia-Manager", c.manager() );
1149 safeAddPropValue( vcard, "X-Qtopia-Assistant", c.assistant() ); 1137 safeAddPropValue( vcard, "X-Qtopia-Assistant", c.assistant() );
1150 1138
1151 safeAddPropValue( vcard, "X-Qtopia-Spouse", c.spouse() ); 1139 safeAddPropValue( vcard, "X-Qtopia-Spouse", c.spouse() );
1152 safeAddPropValue( vcard, "X-Qtopia-Gender", c.gender() ); 1140 safeAddPropValue( vcard, "X-Qtopia-Gender", c.gender() );
1153 safeAddPropValue( vcard, "X-Qtopia-Anniversary", c.anniversary() ); 1141 safeAddPropValue( vcard, "X-Qtopia-Anniversary", TimeConversion::toString( c.anniversary() ) );
1154 safeAddPropValue( vcard, "X-Qtopia-Nickname", c.nickname() ); 1142 safeAddPropValue( vcard, "X-Qtopia-Nickname", c.nickname() );
1155 safeAddPropValue( vcard, "X-Qtopia-Children", c.children() ); 1143 safeAddPropValue( vcard, "X-Qtopia-Children", c.children() );
1156 1144
1157 return vcard; 1145 return vcard;
1158} 1146}
1159 1147
1160 1148
1161/*! 1149/*!
1162 \internal 1150 \internal
1163*/ 1151*/
1164static OContact parseVObject( VObject *obj ) 1152static OContact parseVObject( VObject *obj )
1165{ 1153{
1166 OContact c; 1154 OContact c;
1167 1155
1168 VObjectIterator it; 1156 VObjectIterator it;
1169 initPropIterator( &it, obj ); 1157 initPropIterator( &it, obj );
1170 while( moreIteration( &it ) ) { 1158 while( moreIteration( &it ) ) {
1171 VObject *o = nextVObject( &it ); 1159 VObject *o = nextVObject( &it );
1172 QCString name = vObjectName( o ); 1160 QCString name = vObjectName( o );
1173 QCString value = vObjectStringZValue( o ); 1161 QCString value = vObjectStringZValue( o );
1174 if ( name == VCNameProp ) { 1162 if ( name == VCNameProp ) {
1175 VObjectIterator nit; 1163 VObjectIterator nit;
1176 initPropIterator( &nit, o ); 1164 initPropIterator( &nit, o );
1177 while( moreIteration( &nit ) ) { 1165 while( moreIteration( &nit ) ) {
1178 VObject *o = nextVObject( &nit ); 1166 VObject *o = nextVObject( &nit );
1179 QCString name = vObjectTypeInfo( o ); 1167 QCString name = vObjectTypeInfo( o );
1180 QString value = vObjectStringZValue( o ); 1168 QString value = vObjectStringZValue( o );
1181 if ( name == VCNamePrefixesProp ) 1169 if ( name == VCNamePrefixesProp )
1182 c.setTitle( value ); 1170 c.setTitle( value );
1183 else if ( name == VCNameSuffixesProp ) 1171 else if ( name == VCNameSuffixesProp )
1184 c.setSuffix( value ); 1172 c.setSuffix( value );
1185 else if ( name == VCFamilyNameProp ) 1173 else if ( name == VCFamilyNameProp )
1186 c.setLastName( value ); 1174 c.setLastName( value );
1187 else if ( name == VCGivenNameProp ) 1175 else if ( name == VCGivenNameProp )
1188 c.setFirstName( value ); 1176 c.setFirstName( value );
1189 else if ( name == VCAdditionalNamesProp ) 1177 else if ( name == VCAdditionalNamesProp )
1190 c.setMiddleName( value ); 1178 c.setMiddleName( value );
1191 } 1179 }
1192 } 1180 }
1193 else if ( name == VCAdrProp ) { 1181 else if ( name == VCAdrProp ) {
1194 bool work = TRUE; // default address is work address 1182 bool work = TRUE; // default address is work address
1195 QString street; 1183 QString street;
1196 QString city; 1184 QString city;
1197 QString region; 1185 QString region;
1198 QString postal; 1186 QString postal;
1199 QString country; 1187 QString country;
1200 1188
1201 VObjectIterator nit; 1189 VObjectIterator nit;
@@ -1308,97 +1296,97 @@ static OContact parseVObject( VObject *obj )
1308 } 1296 }
1309 } 1297 }
1310 else if ( name == VCURLProp ) { 1298 else if ( name == VCURLProp ) {
1311 VObjectIterator nit; 1299 VObjectIterator nit;
1312 initPropIterator( &nit, o ); 1300 initPropIterator( &nit, o );
1313 while( moreIteration( &nit ) ) { 1301 while( moreIteration( &nit ) ) {
1314 VObject *o = nextVObject( &nit ); 1302 VObject *o = nextVObject( &nit );
1315 QCString name = vObjectTypeInfo( o ); 1303 QCString name = vObjectTypeInfo( o );
1316 if ( name == VCHomeProp ) 1304 if ( name == VCHomeProp )
1317 c.setHomeWebpage( value ); 1305 c.setHomeWebpage( value );
1318 else if ( name == VCWorkProp ) 1306 else if ( name == VCWorkProp )
1319 c.setBusinessWebpage( value ); 1307 c.setBusinessWebpage( value );
1320 } 1308 }
1321 } 1309 }
1322 else if ( name == VCOrgProp ) { 1310 else if ( name == VCOrgProp ) {
1323 VObjectIterator nit; 1311 VObjectIterator nit;
1324 initPropIterator( &nit, o ); 1312 initPropIterator( &nit, o );
1325 while( moreIteration( &nit ) ) { 1313 while( moreIteration( &nit ) ) {
1326 VObject *o = nextVObject( &nit ); 1314 VObject *o = nextVObject( &nit );
1327 QCString name = vObjectName( o ); 1315 QCString name = vObjectName( o );
1328 QString value = vObjectStringZValue( o ); 1316 QString value = vObjectStringZValue( o );
1329 if ( name == VCOrgNameProp ) 1317 if ( name == VCOrgNameProp )
1330 c.setCompany( value ); 1318 c.setCompany( value );
1331 else if ( name == VCOrgUnitProp ) 1319 else if ( name == VCOrgUnitProp )
1332 c.setDepartment( value ); 1320 c.setDepartment( value );
1333 else if ( name == VCOrgUnit2Prop ) 1321 else if ( name == VCOrgUnit2Prop )
1334 c.setOffice( value ); 1322 c.setOffice( value );
1335 } 1323 }
1336 } 1324 }
1337 else if ( name == VCTitleProp ) { 1325 else if ( name == VCTitleProp ) {
1338 c.setJobTitle( value ); 1326 c.setJobTitle( value );
1339 } 1327 }
1340 else if ( name == "X-Qtopia-Profession" ) { 1328 else if ( name == "X-Qtopia-Profession" ) {
1341 c.setProfession( value ); 1329 c.setProfession( value );
1342 } 1330 }
1343 else if ( name == "X-Qtopia-Manager" ) { 1331 else if ( name == "X-Qtopia-Manager" ) {
1344 c.setManager( value ); 1332 c.setManager( value );
1345 } 1333 }
1346 else if ( name == "X-Qtopia-Assistant" ) { 1334 else if ( name == "X-Qtopia-Assistant" ) {
1347 c.setAssistant( value ); 1335 c.setAssistant( value );
1348 } 1336 }
1349 else if ( name == "X-Qtopia-Spouse" ) { 1337 else if ( name == "X-Qtopia-Spouse" ) {
1350 c.setSpouse( value ); 1338 c.setSpouse( value );
1351 } 1339 }
1352 else if ( name == "X-Qtopia-Gender" ) { 1340 else if ( name == "X-Qtopia-Gender" ) {
1353 c.setGender( value ); 1341 c.setGender( value );
1354 } 1342 }
1355 else if ( name == "X-Qtopia-Anniversary" ) { 1343 else if ( name == "X-Qtopia-Anniversary" ) {
1356 c.setAnniversary( value ); 1344 c.setAnniversary( TimeConversion::fromString( value ) );
1357 } 1345 }
1358 else if ( name == "X-Qtopia-Nickname" ) { 1346 else if ( name == "X-Qtopia-Nickname" ) {
1359 c.setNickname( value ); 1347 c.setNickname( value );
1360 } 1348 }
1361 else if ( name == "X-Qtopia-Children" ) { 1349 else if ( name == "X-Qtopia-Children" ) {
1362 c.setChildren( value ); 1350 c.setChildren( value );
1363 } 1351 }
1364 1352
1365 1353
1366#if 0 1354#if 0
1367 else { 1355 else {
1368 printf("Name: %s, value=%s\n", name.data(), vObjectStringZValue( o ) ); 1356 printf("Name: %s, value=%s\n", name.data(), vObjectStringZValue( o ) );
1369 VObjectIterator nit; 1357 VObjectIterator nit;
1370 initPropIterator( &nit, o ); 1358 initPropIterator( &nit, o );
1371 while( moreIteration( &nit ) ) { 1359 while( moreIteration( &nit ) ) {
1372 VObject *o = nextVObject( &nit ); 1360 VObject *o = nextVObject( &nit );
1373 QCString name = vObjectName( o ); 1361 QCString name = vObjectName( o );
1374 QString value = vObjectStringZValue( o ); 1362 QString value = vObjectStringZValue( o );
1375 printf(" subprop: %s = %s\n", name.data(), value.latin1() ); 1363 printf(" subprop: %s = %s\n", name.data(), value.latin1() );
1376 } 1364 }
1377 } 1365 }
1378#endif 1366#endif
1379 } 1367 }
1380 c.setFileAs(); 1368 c.setFileAs();
1381 return c; 1369 return c;
1382} 1370}
1383 1371
1384/*! 1372/*!
1385 Writes the list of \a contacts as a set of VCards to the file \a filename. 1373 Writes the list of \a contacts as a set of VCards to the file \a filename.
1386*/ 1374*/
1387void OContact::writeVCard( const QString &filename, const QValueList<OContact> &contacts) 1375void OContact::writeVCard( const QString &filename, const QValueList<OContact> &contacts)
1388{ 1376{
1389 QFileDirect f( filename.utf8().data() ); 1377 QFileDirect f( filename.utf8().data() );
1390 if ( !f.open( IO_WriteOnly ) ) { 1378 if ( !f.open( IO_WriteOnly ) ) {
1391 qWarning("Unable to open vcard write"); 1379 qWarning("Unable to open vcard write");
1392 return; 1380 return;
1393 } 1381 }
1394 1382
1395 QValueList<OContact>::ConstIterator it; 1383 QValueList<OContact>::ConstIterator it;
1396 for( it = contacts.begin(); it != contacts.end(); ++it ) { 1384 for( it = contacts.begin(); it != contacts.end(); ++it ) {
1397 VObject *obj = createVObject( *it ); 1385 VObject *obj = createVObject( *it );
1398 writeVObject(f.directHandle() , obj ); 1386 writeVObject(f.directHandle() , obj );
1399 cleanVObject( obj ); 1387 cleanVObject( obj );
1400 } 1388 }
1401 cleanStrTbl(); 1389 cleanStrTbl();
1402} 1390}
1403 1391
1404/*! 1392/*!
@@ -1448,48 +1436,174 @@ QValueList<OContact> OContact::readVCard( const QString &filename )
1448*/ 1436*/
1449bool OContact::match( const QString &regexp ) const 1437bool OContact::match( const QString &regexp ) const
1450{ 1438{
1451 return match(QRegExp(regexp)); 1439 return match(QRegExp(regexp));
1452} 1440}
1453 1441
1454/*! 1442/*!
1455 \overload 1443 \overload
1456 Returns TRUE if the contact matches the regular expression \a regexp. 1444 Returns TRUE if the contact matches the regular expression \a regexp.
1457 Otherwise returns FALSE. 1445 Otherwise returns FALSE.
1458*/ 1446*/
1459bool OContact::match( const QRegExp &r ) const 1447bool OContact::match( const QRegExp &r ) const
1460{ 1448{
1461 bool match; 1449 bool match;
1462 match = false; 1450 match = false;
1463 QMap<int, QString>::ConstIterator it; 1451 QMap<int, QString>::ConstIterator it;
1464 for ( it = mMap.begin(); it != mMap.end(); ++it ) { 1452 for ( it = mMap.begin(); it != mMap.end(); ++it ) {
1465 if ( (*it).find( r ) > -1 ) { 1453 if ( (*it).find( r ) > -1 ) {
1466 match = true; 1454 match = true;
1467 break; 1455 break;
1468 } 1456 }
1469 } 1457 }
1470 return match; 1458 return match;
1471} 1459}
1472 1460
1473 1461
1474QString OContact::toShortText() const 1462QString OContact::toShortText() const
1475{ 1463{
1476 return ( fullName() ); 1464 return ( fullName() );
1477} 1465}
1478QString OContact::type() const 1466QString OContact::type() const
1479{ 1467{
1480 return QString::fromLatin1( "OContact" ); 1468 return QString::fromLatin1( "OContact" );
1481} 1469}
1482 1470
1483// Definition is missing ! (se) 1471// Definition is missing ! (se)
1484QMap<QString,QString> OContact::toExtraMap() const 1472QMap<QString,QString> OContact::toExtraMap() const
1485{ 1473{
1486 qWarning ("Function not implemented: OContact::toExtraMap()"); 1474 qWarning ("Function not implemented: OContact::toExtraMap()");
1487 QMap <QString,QString> useless; 1475 QMap <QString,QString> useless;
1488 return useless; 1476 return useless;
1489} 1477}
1490 1478
1491class QString OContact::recordField( int pos ) const 1479class QString OContact::recordField( int pos ) const
1492{ 1480{
1493 QStringList SLFIELDS = fields(); // ?? why this ? (se) 1481 QStringList SLFIELDS = fields(); // ?? why this ? (se)
1494 return SLFIELDS[pos]; 1482 return SLFIELDS[pos];
1495} 1483}
1484
1485// In future releases, we should store birthday and anniversary
1486// internally as QDate instead of QString !
1487// QString is always too complicate to interprete (DD.MM.YY, DD/MM/YY, MM/DD/YY, etc..)(se)
1488
1489/*! \fn void OContact::setBirthday( const QDate& date )
1490 Sets the birthday for the contact to \a date.
1491*/
1492void OContact::setBirthday( const QDate &v )
1493{
1494 if ( ( !v.isNull() ) && ( v.isValid() ) )
1495 replace( Qtopia::Birthday, TimeConversion::toString( v ) );
1496
1497}
1498
1499
1500/*! \fn void OContact::setAnniversary( const QDate &date )
1501 Sets the anniversary of the contact to \a date.
1502*/
1503void OContact::setAnniversary( const QDate &v )
1504{
1505 if ( ( !v.isNull() ) && ( v.isValid() ) )
1506 replace( Qtopia::Anniversary, TimeConversion::toString( v ) );
1507}
1508
1509/*! \fn QDate OContact::birthday() const
1510 Returns the birthday of the contact.
1511*/
1512QDate OContact::birthday() const
1513{
1514 QDate empty;
1515 QString str = find( Qtopia::Birthday );
1516 qWarning ("Birthday %s", str.latin1() );
1517 if ( !str.isEmpty() )
1518 return TimeConversion::fromString ( str );
1519 else
1520 return empty;
1521}
1522
1523
1524/*! \fn QDate OContact::anniversary() const
1525 Returns the anniversary of the contact.
1526*/
1527QDate OContact::anniversary() const
1528{
1529 QDate empty;
1530 QString str = find( Qtopia::Anniversary );
1531 qWarning ("Anniversary %s", str.latin1() );
1532 if ( !str.isEmpty() )
1533 return TimeConversion::fromString ( str );
1534 else
1535 return empty;
1536}
1537
1538
1539void OContact::insertEmail( const QString &v )
1540{
1541 //qDebug("insertEmail %s", v.latin1());
1542 QString e = v.simplifyWhiteSpace();
1543 QString def = defaultEmail();
1544
1545 // if no default, set it as the default email and don't insert
1546 if ( def.isEmpty() ) {
1547 setDefaultEmail( e ); // will insert into the list for us
1548 return;
1549 }
1550
1551 // otherwise, insert assuming doesn't already exist
1552 QString emailsStr = find( Qtopia::Emails );
1553 if ( emailsStr.contains( e ))
1554 return;
1555 if ( !emailsStr.isEmpty() )
1556 emailsStr += emailSeparator();
1557 emailsStr += e;
1558 replace( Qtopia::Emails, emailsStr );
1559}
1560
1561void OContact::removeEmail( const QString &v )
1562{
1563 QString e = v.simplifyWhiteSpace();
1564 QString def = defaultEmail();
1565 QString emailsStr = find( Qtopia::Emails );
1566 QStringList emails = emailList();
1567
1568 // otherwise, must first contain it
1569 if ( !emailsStr.contains( e ) )
1570 return;
1571
1572 // remove it
1573 //qDebug(" removing email from list %s", e.latin1());
1574 emails.remove( e );
1575 // reset the string
1576 emailsStr = emails.join(emailSeparator()); // Sharp's brain dead separator
1577 replace( Qtopia::Emails, emailsStr );
1578
1579 // if default, then replace the default email with the first one
1580 if ( def == e ) {
1581 //qDebug("removeEmail is default; setting new default");
1582 if ( !emails.count() )
1583 clearEmails();
1584 else // setDefaultEmail will remove e from the list
1585 setDefaultEmail( emails.first() );
1586 }
1587}
1588void OContact::clearEmails()
1589{
1590 mMap.remove( Qtopia::DefaultEmail );
1591 mMap.remove( Qtopia::Emails );
1592}
1593void OContact::setDefaultEmail( const QString &v )
1594{
1595 QString e = v.simplifyWhiteSpace();
1596
1597 //qDebug("OContact::setDefaultEmail %s", e.latin1());
1598 replace( Qtopia::DefaultEmail, e );
1599
1600 if ( !e.isEmpty() )
1601 insertEmail( e );
1602
1603}
1604
1605void OContact::insertEmails( const QStringList &v )
1606{
1607 for ( QStringList::ConstIterator it = v.begin(); it != v.end(); ++it )
1608 insertEmail( *it );
1609}