summaryrefslogtreecommitdiffabout
path: root/kabc/addressee.cpp
authorzautrix <zautrix>2005-04-07 07:42:53 (UTC)
committer zautrix <zautrix>2005-04-07 07:42:53 (UTC)
commitc82f9b40f6023dc7b39ac555cba8c4c313f15ca8 (patch) (unidiff)
treee9e4f0c0ed3243ec060a475983b271bd27b40d15 /kabc/addressee.cpp
parent76e220bf1236ae6afa9d91f18f0cd9ced730cff0 (diff)
downloadkdepimpi-c82f9b40f6023dc7b39ac555cba8c4c313f15ca8.zip
kdepimpi-c82f9b40f6023dc7b39ac555cba8c4c313f15ca8.tar.gz
kdepimpi-c82f9b40f6023dc7b39ac555cba8c4c313f15ca8.tar.bz2
added fields to kapi
Diffstat (limited to 'kabc/addressee.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressee.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index 39d14bb..7f592e9 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -1,1366 +1,1391 @@
1/*** Warning! This file has been generated by the script makeaddressee ***/ 1/*** Warning! This file has been generated by the script makeaddressee ***/
2/* 2/*
3 This file is part of libkabc. 3 This file is part of libkabc.
4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22/* 22/*
23Enhanced Version of the file for platform independent KDE tools. 23Enhanced Version of the file for platform independent KDE tools.
24Copyright (c) 2004 Ulf Schenk 24Copyright (c) 2004 Ulf Schenk
25 25
26$Id$ 26$Id$
27*/ 27*/
28 28
29#include <kconfig.h> 29#include <kconfig.h>
30 30
31#include <ksharedptr.h> 31#include <ksharedptr.h>
32#include <kdebug.h> 32#include <kdebug.h>
33#include <kapplication.h> 33#include <kapplication.h>
34#include <klocale.h> 34#include <klocale.h>
35#include <kidmanager.h> 35#include <kidmanager.h>
36//US 36//US
37#include <kstandarddirs.h> 37#include <kstandarddirs.h>
38#include <libkcal/syncdefines.h> 38#include <libkcal/syncdefines.h>
39 39
40//US #include "resource.h" 40//US #include "resource.h"
41#include "addressee.h" 41#include "addressee.h"
42 42
43using namespace KABC; 43using namespace KABC;
44 44
45static bool matchBinaryPattern( int value, int pattern ); 45static bool matchBinaryPattern( int value, int pattern );
46static bool matchBinaryPatternA( int value, int pattern ); 46static bool matchBinaryPatternA( int value, int pattern );
47static bool matchBinaryPatternP( int value, int pattern ); 47static bool matchBinaryPatternP( int value, int pattern );
48 48
49struct Addressee::AddresseeData : public KShared 49struct Addressee::AddresseeData : public KShared
50{ 50{
51 QString uid; 51 QString uid;
52 QString name; 52 QString name;
53 QString formattedName; 53 QString formattedName;
54 QString defaultFormattedName;
54 QString familyName; 55 QString familyName;
55 QString givenName; 56 QString givenName;
56 QString additionalName; 57 QString additionalName;
57 QString prefix; 58 QString prefix;
58 QString suffix; 59 QString suffix;
59 QString nickName; 60 QString nickName;
60 QDateTime birthday; 61 QDateTime birthday;
61 QString mailer; 62 QString mailer;
62 TimeZone timeZone; 63 TimeZone timeZone;
63 Geo geo; 64 Geo geo;
64 QString title; 65 QString title;
65 QString role; 66 QString role;
66 QString organization; 67 QString organization;
67 QString note; 68 QString note;
68 QString productId; 69 QString productId;
69 QDateTime revision; 70 QDateTime revision;
70 QString sortString; 71 QString sortString;
71 QString externalUID; 72 QString externalUID;
72 QString originalExternalUID; 73 QString originalExternalUID;
73 KURL url; 74 KURL url;
74 Secrecy secrecy; 75 Secrecy secrecy;
75 Picture logo; 76 Picture logo;
76 Picture photo; 77 Picture photo;
77 Sound sound; 78 Sound sound;
78 Agent agent; 79 Agent agent;
79 QString mExternalId; 80 QString mExternalId;
80 PhoneNumber::List phoneNumbers; 81 PhoneNumber::List phoneNumbers;
81 Address::List addresses; 82 Address::List addresses;
82 Key::List keys; 83 Key::List keys;
83 QStringList emails; 84 QStringList emails;
84 QStringList categories; 85 QStringList categories;
85 QStringList custom; 86 QStringList custom;
86 int mTempSyncStat; 87 int mTempSyncStat;
87 Resource *resource; 88 Resource *resource;
88 89
89 bool empty :1; 90 bool empty :1;
90 bool changed :1; 91 bool changed :1;
91 bool tagged :1; 92 bool tagged :1;
92}; 93};
93 94
94Addressee::Addressee() 95Addressee::Addressee()
95{ 96{
96 mData = new AddresseeData; 97 mData = new AddresseeData;
97 mData->empty = true; 98 mData->empty = true;
98 mData->changed = false; 99 mData->changed = false;
99 mData->resource = 0; 100 mData->resource = 0;
100 mData->mExternalId = ":"; 101 mData->mExternalId = ":";
101 mData->revision = QDateTime ( QDate( 2003,1,1)); 102 mData->revision = QDateTime ( QDate( 2003,1,1));
102 mData->mTempSyncStat = SYNC_TEMPSTATE_INITIAL; 103 mData->mTempSyncStat = SYNC_TEMPSTATE_INITIAL;
103} 104}
104 105
105Addressee::~Addressee() 106Addressee::~Addressee()
106{ 107{
107} 108}
108 109
109Addressee::Addressee( const Addressee &a ) 110Addressee::Addressee( const Addressee &a )
110{ 111{
111 mData = a.mData; 112 mData = a.mData;
112} 113}
113 114
114Addressee &Addressee::operator=( const Addressee &a ) 115Addressee &Addressee::operator=( const Addressee &a )
115{ 116{
116 mData = a.mData; 117 mData = a.mData;
117 return (*this); 118 return (*this);
118} 119}
119 120
120Addressee Addressee::copy() 121Addressee Addressee::copy()
121{ 122{
122 Addressee a; 123 Addressee a;
123 *(a.mData) = *mData; 124 *(a.mData) = *mData;
124 return a; 125 return a;
125} 126}
126 127
127void Addressee::detach() 128void Addressee::detach()
128{ 129{
129 if ( mData.count() == 1 ) return; 130 if ( mData.count() == 1 ) return;
130 *this = copy(); 131 *this = copy();
131} 132}
132 133
133bool Addressee::operator==( const Addressee &a ) const 134bool Addressee::operator==( const Addressee &a ) const
134{ 135{
135 if ( uid() != a.uid() ) return false; 136 if ( uid() != a.uid() ) return false;
136 if ( mData->name != a.mData->name ) return false; 137 if ( mData->name != a.mData->name ) return false;
137 if ( mData->formattedName != a.mData->formattedName ) return false; 138 if ( mData->formattedName != a.mData->formattedName ) return false;
138 if ( mData->familyName != a.mData->familyName ) return false; 139 if ( mData->familyName != a.mData->familyName ) return false;
139 if ( mData->givenName != a.mData->givenName ) return false; 140 if ( mData->givenName != a.mData->givenName ) return false;
140 if ( mData->additionalName != a.mData->additionalName ) return false; 141 if ( mData->additionalName != a.mData->additionalName ) return false;
141 if ( mData->prefix != a.mData->prefix ) return false; 142 if ( mData->prefix != a.mData->prefix ) return false;
142 if ( mData->suffix != a.mData->suffix ) return false; 143 if ( mData->suffix != a.mData->suffix ) return false;
143 if ( mData->nickName != a.mData->nickName ) return false; 144 if ( mData->nickName != a.mData->nickName ) return false;
144 if ( mData->birthday != a.mData->birthday ) return false; 145 if ( mData->birthday != a.mData->birthday ) return false;
145 if ( mData->mailer != a.mData->mailer ) return false; 146 if ( mData->mailer != a.mData->mailer ) return false;
146 if ( mData->timeZone != a.mData->timeZone ) return false; 147 if ( mData->timeZone != a.mData->timeZone ) return false;
147 if ( mData->geo != a.mData->geo ) return false; 148 if ( mData->geo != a.mData->geo ) return false;
148 if ( mData->title != a.mData->title ) return false; 149 if ( mData->title != a.mData->title ) return false;
149 if ( mData->role != a.mData->role ) return false; 150 if ( mData->role != a.mData->role ) return false;
150 if ( mData->organization != a.mData->organization ) return false; 151 if ( mData->organization != a.mData->organization ) return false;
151 if ( mData->note != a.mData->note ) return false; 152 if ( mData->note != a.mData->note ) return false;
152 if ( mData->productId != a.mData->productId ) return false; 153 if ( mData->productId != a.mData->productId ) return false;
153 //if ( mData->revision != a.mData->revision ) return false; 154 //if ( mData->revision != a.mData->revision ) return false;
154 if ( mData->sortString != a.mData->sortString ) return false; 155 if ( mData->sortString != a.mData->sortString ) return false;
155 if ( mData->secrecy != a.mData->secrecy ) return false; 156 if ( mData->secrecy != a.mData->secrecy ) return false;
156 if ( mData->logo != a.mData->logo ) return false; 157 if ( mData->logo != a.mData->logo ) return false;
157 if ( mData->photo != a.mData->photo ) return false; 158 if ( mData->photo != a.mData->photo ) return false;
158 if ( mData->sound != a.mData->sound ) return false; 159 if ( mData->sound != a.mData->sound ) return false;
159 if ( mData->agent != a.mData->agent ) return false; 160 if ( mData->agent != a.mData->agent ) return false;
160 if ( ( mData->url.isValid() || a.mData->url.isValid() ) && 161 if ( ( mData->url.isValid() || a.mData->url.isValid() ) &&
161 ( mData->url != a.mData->url ) ) return false; 162 ( mData->url != a.mData->url ) ) return false;
162 if ( mData->phoneNumbers != a.mData->phoneNumbers ) return false; 163 if ( mData->phoneNumbers != a.mData->phoneNumbers ) return false;
163 if ( mData->addresses != a.mData->addresses ) return false; 164 if ( mData->addresses != a.mData->addresses ) return false;
164 if ( mData->keys != a.mData->keys ) return false; 165 if ( mData->keys != a.mData->keys ) return false;
165 if ( mData->emails != a.mData->emails ) return false; 166 if ( mData->emails != a.mData->emails ) return false;
166 if ( mData->categories != a.mData->categories ) return false; 167 if ( mData->categories != a.mData->categories ) return false;
167 if ( mData->custom != a.mData->custom ) return false; 168 if ( mData->custom != a.mData->custom ) return false;
168 169
169 return true; 170 return true;
170} 171}
171 172
172bool Addressee::operator!=( const Addressee &a ) const 173bool Addressee::operator!=( const Addressee &a ) const
173{ 174{
174 return !( a == *this ); 175 return !( a == *this );
175} 176}
176 177
177bool Addressee::isEmpty() const 178bool Addressee::isEmpty() const
178{ 179{
179 return mData->empty; 180 return mData->empty;
180} 181}
181ulong Addressee::getCsum4List( const QStringList & attList) 182ulong Addressee::getCsum4List( const QStringList & attList)
182{ 183{
183 int max = attList.count(); 184 int max = attList.count();
184 ulong cSum = 0; 185 ulong cSum = 0;
185 int j,k,i; 186 int j,k,i;
186 int add; 187 int add;
187 for ( i = 0; i < max ; ++i ) { 188 for ( i = 0; i < max ; ++i ) {
188 QString s = attList[i]; 189 QString s = attList[i];
189 if ( ! s.isEmpty() ){ 190 if ( ! s.isEmpty() ){
190 j = s.length(); 191 j = s.length();
191 for ( k = 0; k < j; ++k ) { 192 for ( k = 0; k < j; ++k ) {
192 int mul = k +1; 193 int mul = k +1;
193 add = s[k].unicode (); 194 add = s[k].unicode ();
194 if ( k < 16 ) 195 if ( k < 16 )
195 mul = mul * mul; 196 mul = mul * mul;
196 int ii = i+1; 197 int ii = i+1;
197 add = add * mul *ii*ii*ii; 198 add = add * mul *ii*ii*ii;
198 cSum += add; 199 cSum += add;
199 //qDebug("csum: %d %d %d", i,k,cSum); 200 //qDebug("csum: %d %d %d", i,k,cSum);
200 } 201 }
201 } 202 }
202 203
203 } 204 }
204 //QString dump = attList.join(","); 205 //QString dump = attList.join(",");
205 //qDebug("csum: %d %s", cSum,dump.latin1()); 206 //qDebug("csum: %d %s", cSum,dump.latin1());
206 207
207 return cSum; 208 return cSum;
208 209
209} 210}
210void Addressee::computeCsum(const QString &dev) 211void Addressee::computeCsum(const QString &dev)
211{ 212{
212 QStringList l; 213 QStringList l;
213 //if ( !mData->name.isEmpty() ) l.append(mData->name); 214 //if ( !mData->name.isEmpty() ) l.append(mData->name);
214 //if ( !mData->formattedName.isEmpty() ) l.append(mData->formattedName ); 215 //if ( !mData->formattedName.isEmpty() ) l.append(mData->formattedName );
215 if ( !mData->familyName.isEmpty() ) l.append( mData->familyName ); 216 if ( !mData->familyName.isEmpty() ) l.append( mData->familyName );
216 if ( !mData->givenName.isEmpty() ) l.append(mData->givenName ); 217 if ( !mData->givenName.isEmpty() ) l.append(mData->givenName );
217 if ( !mData->additionalName.isEmpty() ) l.append( mData->additionalName ); 218 if ( !mData->additionalName.isEmpty() ) l.append( mData->additionalName );
218 if ( !mData->prefix.isEmpty() ) l.append( mData->prefix ); 219 if ( !mData->prefix.isEmpty() ) l.append( mData->prefix );
219 if ( !mData->suffix.isEmpty() ) l.append( mData->suffix ); 220 if ( !mData->suffix.isEmpty() ) l.append( mData->suffix );
220 if ( !mData->nickName.isEmpty() ) l.append( mData->nickName ); 221 if ( !mData->nickName.isEmpty() ) l.append( mData->nickName );
221 if ( mData->birthday.isValid() ) l.append( mData->birthday.toString() ); 222 if ( mData->birthday.isValid() ) l.append( mData->birthday.toString() );
222 if ( !mData->mailer.isEmpty() ) l.append( mData->mailer ); 223 if ( !mData->mailer.isEmpty() ) l.append( mData->mailer );
223 if ( mData->timeZone.isValid() ) l.append( mData->timeZone.asString() ); 224 if ( mData->timeZone.isValid() ) l.append( mData->timeZone.asString() );
224 if ( mData->geo.isValid() ) l.append( mData->geo.asString() ); 225 if ( mData->geo.isValid() ) l.append( mData->geo.asString() );
225 if ( !mData->title .isEmpty() ) l.append( mData->title ); 226 if ( !mData->title .isEmpty() ) l.append( mData->title );
226 if ( !mData->role.isEmpty() ) l.append( mData->role ); 227 if ( !mData->role.isEmpty() ) l.append( mData->role );
227 if ( !mData->organization.isEmpty() ) l.append( mData->organization ); 228 if ( !mData->organization.isEmpty() ) l.append( mData->organization );
228 if ( !mData->note.isEmpty() ) l.append( mData->note ); 229 if ( !mData->note.isEmpty() ) l.append( mData->note );
229 if ( !mData->productId.isEmpty() ) l.append(mData->productId ); 230 if ( !mData->productId.isEmpty() ) l.append(mData->productId );
230 if ( !mData->sortString.isEmpty() ) l.append( mData->sortString ); 231 if ( !mData->sortString.isEmpty() ) l.append( mData->sortString );
231 if ( mData->secrecy.isValid() ) l.append( mData->secrecy.asString()); 232 if ( mData->secrecy.isValid() ) l.append( mData->secrecy.asString());
232 if ( !mData->logo.undefined() ) { 233 if ( !mData->logo.undefined() ) {
233 if ( !mData->logo.isIntern() ) 234 if ( !mData->logo.isIntern() )
234 l.append( mData->logo.url() ); 235 l.append( mData->logo.url() );
235 else 236 else
236 l.append( QString::number(mData->logo.data().width()* mData->logo.data().height())); 237 l.append( QString::number(mData->logo.data().width()* mData->logo.data().height()));
237 } else { 238 } else {
238 l.append( "nologo"); 239 l.append( "nologo");
239 } 240 }
240 if ( !mData->photo.undefined() ) { 241 if ( !mData->photo.undefined() ) {
241 if ( !mData->photo.isIntern() ) 242 if ( !mData->photo.isIntern() )
242 l.append( mData->photo.url() ); 243 l.append( mData->photo.url() );
243 else 244 else
244 l.append( QString::number(mData->photo.data().width()* mData->photo.data().height())); 245 l.append( QString::number(mData->photo.data().width()* mData->photo.data().height()));
245 } else { 246 } else {
246 l.append( "nophoto"); 247 l.append( "nophoto");
247 } 248 }
248#if 0 249#if 0
249 if ( !mData->sound.undefined() ) { 250 if ( !mData->sound.undefined() ) {
250 if ( !mData->sound.isIntern() ) 251 if ( !mData->sound.isIntern() )
251 l.append( mData->sound.url() ); 252 l.append( mData->sound.url() );
252 else 253 else
253 l.append( QString(mData->sound.data().with()* mData->sound.data().height())); 254 l.append( QString(mData->sound.data().with()* mData->sound.data().height()));
254 } else { 255 } else {
255 l.append( "nosound"); 256 l.append( "nosound");
256 } 257 }
257#endif 258#endif
258 //if ( !mData->agent.isEmpty() ) l.append( ); 259 //if ( !mData->agent.isEmpty() ) l.append( );
259 if ( mData->url.isValid() ) 260 if ( mData->url.isValid() )
260 if ( ! mData->url.path().isEmpty()) l.append( mData->url.path() ); 261 if ( ! mData->url.path().isEmpty()) l.append( mData->url.path() );
261 KABC::PhoneNumber::List phoneNumbers; 262 KABC::PhoneNumber::List phoneNumbers;
262 KABC::PhoneNumber::List::Iterator phoneIter; 263 KABC::PhoneNumber::List::Iterator phoneIter;
263 264
264 QStringList t; 265 QStringList t;
265 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 266 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
266 ++phoneIter ) 267 ++phoneIter )
267 t.append( ( *phoneIter ).number()+QString::number( ( *phoneIter ).type() ) ); 268 t.append( ( *phoneIter ).number()+QString::number( ( *phoneIter ).type() ) );
268 t.sort(); 269 t.sort();
269 uint iii; 270 uint iii;
270 for ( iii = 0; iii < t.count(); ++iii) 271 for ( iii = 0; iii < t.count(); ++iii)
271 l.append( t[iii] ); 272 l.append( t[iii] );
272 t = mData->emails; 273 t = mData->emails;
273 t.sort(); 274 t.sort();
274 for ( iii = 0; iii < t.count(); ++iii) 275 for ( iii = 0; iii < t.count(); ++iii)
275 l.append( t[iii] ); 276 l.append( t[iii] );
276 t = mData->categories; 277 t = mData->categories;
277 t.sort(); 278 t.sort();
278 for ( iii = 0; iii < t.count(); ++iii) 279 for ( iii = 0; iii < t.count(); ++iii)
279 l.append( t[iii] ); 280 l.append( t[iii] );
280 t = mData->custom; 281 t = mData->custom;
281 t.sort(); 282 t.sort();
282 for ( iii = 0; iii < t.count(); ++iii) 283 for ( iii = 0; iii < t.count(); ++iii)
283 if ( t[iii].left( 25 ) != "KADDRESSBOOK-X-ExternalID" ) { 284 if ( t[iii].left( 25 ) != "KADDRESSBOOK-X-ExternalID" ) {
284 int find = t[iii].find (':')+1; 285 int find = t[iii].find (':')+1;
285 //qDebug("lennnn %d %d ", find, t[iii].length()); 286 //qDebug("lennnn %d %d ", find, t[iii].length());
286 if ( find < t[iii].length()) 287 if ( find < t[iii].length())
287 l.append( t[iii] ); 288 l.append( t[iii] );
288 289
289 } 290 }
290 KABC::Address::List::Iterator addressIter; 291 KABC::Address::List::Iterator addressIter;
291 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end(); 292 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end();
292 ++addressIter ) { 293 ++addressIter ) {
293 t = (*addressIter).asList(); 294 t = (*addressIter).asList();
294 t.sort(); 295 t.sort();
295 for ( iii = 0; iii < t.count(); ++iii) 296 for ( iii = 0; iii < t.count(); ++iii)
296 l.append( t[iii] ); 297 l.append( t[iii] );
297 } 298 }
298 uint cs = getCsum4List(l); 299 uint cs = getCsum4List(l);
299 300
300#if 0 301#if 0
301 for ( iii = 0; iii < l.count(); ++iii) 302 for ( iii = 0; iii < l.count(); ++iii)
302 qDebug("%d***%s***",iii,l[iii].latin1()); 303 qDebug("%d***%s***",iii,l[iii].latin1());
303 qDebug("CSUM computed %d %s %s", cs,QString::number (cs ).latin1(), uid().latin1() ); 304 qDebug("CSUM computed %d %s %s", cs,QString::number (cs ).latin1(), uid().latin1() );
304#endif 305#endif
305 306
306 307
307 setCsum( dev, QString::number (cs )); 308 setCsum( dev, QString::number (cs ));
308} 309}
309 310
310void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false) 311void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false)
311{ 312{
312 // merge all standard non-outlook fields. 313 // merge all standard non-outlook fields.
313 //if isSubSet (e.g. mobile phone sync) merge all fields 314 //if isSubSet (e.g. mobile phone sync) merge all fields
314 315
315 detach(); 316 detach();
316 if ( isSubSet ) { 317 if ( isSubSet ) {
317 if ( mData->name.isEmpty() ) mData->name = ad.mData->name; 318 if ( mData->name.isEmpty() ) mData->name = ad.mData->name;
318 if ( mData->formattedName.isEmpty() ) mData->formattedName = ad.mData->formattedName; 319 if ( mData->formattedName.isEmpty() ) mData->formattedName = ad.mData->formattedName;
319 if ( mData->familyName.isEmpty() ) mData->familyName = ad.mData->familyName; 320 if ( mData->familyName.isEmpty() ) mData->familyName = ad.mData->familyName;
320 if ( mData->givenName.isEmpty() ) mData->givenName = ad.mData->givenName ; 321 if ( mData->givenName.isEmpty() ) mData->givenName = ad.mData->givenName ;
321 if ( mData->additionalName ) mData->additionalName = ad.mData->additionalName; 322 if ( mData->additionalName ) mData->additionalName = ad.mData->additionalName;
322 if ( mData->prefix.isEmpty() ) mData->prefix = ad.mData->prefix; 323 if ( mData->prefix.isEmpty() ) mData->prefix = ad.mData->prefix;
323 if ( mData->suffix.isEmpty() ) mData->suffix = ad.mData->suffix; 324 if ( mData->suffix.isEmpty() ) mData->suffix = ad.mData->suffix;
324 if ( mData->title .isEmpty() ) mData->title = ad.mData->title ; 325 if ( mData->title .isEmpty() ) mData->title = ad.mData->title ;
325 if ( mData->role.isEmpty() ) mData->role = ad.mData->role ; 326 if ( mData->role.isEmpty() ) mData->role = ad.mData->role ;
326 if ( mData->nickName.isEmpty() ) mData->nickName = ad.mData->nickName; 327 if ( mData->nickName.isEmpty() ) mData->nickName = ad.mData->nickName;
327 if ( mData->organization.isEmpty() ) mData->organization = ad.mData->organization ; 328 if ( mData->organization.isEmpty() ) mData->organization = ad.mData->organization ;
328 if ( mData->note.isEmpty() ) mData->note = ad.mData->note ; 329 if ( mData->note.isEmpty() ) mData->note = ad.mData->note ;
329 if ( !mData->secrecy.isValid() ) mData->secrecy = ad.mData->secrecy; 330 if ( !mData->secrecy.isValid() ) mData->secrecy = ad.mData->secrecy;
330 if ( ( !mData->url.isValid() && ad.mData->url.isValid() ) ) mData->url = ad.mData->url ; 331 if ( ( !mData->url.isValid() && ad.mData->url.isValid() ) ) mData->url = ad.mData->url ;
331 if ( !mData->birthday.isValid() ) 332 if ( !mData->birthday.isValid() )
332 if ( ad.mData->birthday.isValid()) 333 if ( ad.mData->birthday.isValid())
333 mData->birthday = ad.mData->birthday; 334 mData->birthday = ad.mData->birthday;
334 335
335 } 336 }
336 if ( mData->mailer.isEmpty() ) mData->mailer = ad.mData->mailer; 337 if ( mData->mailer.isEmpty() ) mData->mailer = ad.mData->mailer;
337 if ( !mData->timeZone.isValid() ) mData->timeZone = ad.mData->timeZone; 338 if ( !mData->timeZone.isValid() ) mData->timeZone = ad.mData->timeZone;
338 if ( !mData->geo.isValid() ) mData->geo = ad.mData->geo; 339 if ( !mData->geo.isValid() ) mData->geo = ad.mData->geo;
339 if ( mData->productId.isEmpty() ) mData->productId = ad.mData->productId; 340 if ( mData->productId.isEmpty() ) mData->productId = ad.mData->productId;
340 if ( mData->sortString.isEmpty() ) mData->sortString = ad.mData->sortString; 341 if ( mData->sortString.isEmpty() ) mData->sortString = ad.mData->sortString;
341 QStringList t; 342 QStringList t;
342 QStringList tAD; 343 QStringList tAD;
343 uint iii; 344 uint iii;
344 345
345 // ********** phone numbers 346 // ********** phone numbers
346 if ( isSubSet ) { 347 if ( isSubSet ) {
347 PhoneNumber::List phoneAD = ad.phoneNumbers(); 348 PhoneNumber::List phoneAD = ad.phoneNumbers();
348 PhoneNumber::List::Iterator phoneItAD; 349 PhoneNumber::List::Iterator phoneItAD;
349 for ( phoneItAD = phoneAD.begin(); phoneItAD != phoneAD.end(); ++phoneItAD ) { 350 for ( phoneItAD = phoneAD.begin(); phoneItAD != phoneAD.end(); ++phoneItAD ) {
350 bool found = false; 351 bool found = false;
351 PhoneNumber::List::Iterator it; 352 PhoneNumber::List::Iterator it;
352 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 353 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
353 if ( ( *phoneItAD ).contains( (*it) ) ) { 354 if ( ( *phoneItAD ).contains( (*it) ) ) {
354 found = true; 355 found = true;
355 (*it).setType( ( *phoneItAD ).type() ); 356 (*it).setType( ( *phoneItAD ).type() );
356 (*it).setNumber( ( *phoneItAD ).number() ); 357 (*it).setNumber( ( *phoneItAD ).number() );
357 break; 358 break;
358 } 359 }
359 } 360 }
360 // if ( isSubSet && ! found ) 361 // if ( isSubSet && ! found )
361 if ( ! found ) // LR try this one... 362 if ( ! found ) // LR try this one...
362 mData->phoneNumbers.append( *phoneItAD ); 363 mData->phoneNumbers.append( *phoneItAD );
363 } 364 }
364 } else { 365 } else {
365 PhoneNumber::List phoneAD = ad.phoneNumbers(); 366 PhoneNumber::List phoneAD = ad.phoneNumbers();
366 PhoneNumber::List::Iterator phoneItAD; 367 PhoneNumber::List::Iterator phoneItAD;
367 for ( phoneItAD = phoneAD.begin(); phoneItAD != phoneAD.end(); ++phoneItAD ) { 368 for ( phoneItAD = phoneAD.begin(); phoneItAD != phoneAD.end(); ++phoneItAD ) {
368 bool found = false; 369 bool found = false;
369 PhoneNumber::List::Iterator it; 370 PhoneNumber::List::Iterator it;
370 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 371 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
371 if ( ( *phoneItAD ).contains( (*it) ) ) { 372 if ( ( *phoneItAD ).contains( (*it) ) ) {
372 found = true; 373 found = true;
373 (*it).setType( ( *phoneItAD ).type() ); 374 (*it).setType( ( *phoneItAD ).type() );
374 (*it).setNumber( ( *phoneItAD ).number() ); 375 (*it).setNumber( ( *phoneItAD ).number() );
375 break; 376 break;
376 } 377 }
377 } 378 }
378 if ( ! found ) { // append numbers which do not have work or home type 379 if ( ! found ) { // append numbers which do not have work or home type
379 if ( ! ( ( *phoneItAD ).type() & (PhoneNumber::Work | PhoneNumber::Home) ) ) 380 if ( ! ( ( *phoneItAD ).type() & (PhoneNumber::Work | PhoneNumber::Home) ) )
380 mData->phoneNumbers.append( *phoneItAD ); 381 mData->phoneNumbers.append( *phoneItAD );
381 } 382 }
382 } 383 }
383 } 384 }
384 if ( isSubSet ) { 385 if ( isSubSet ) {
385 // ************* emails; 386 // ************* emails;
386 t = mData->emails; 387 t = mData->emails;
387 tAD = ad.mData->emails; 388 tAD = ad.mData->emails;
388 for ( iii = 0; iii < tAD.count(); ++iii) 389 for ( iii = 0; iii < tAD.count(); ++iii)
389 if ( !t.contains(tAD[iii] ) ) 390 if ( !t.contains(tAD[iii] ) )
390 mData->emails.append( tAD[iii] ); 391 mData->emails.append( tAD[iii] );
391 } 392 }
392 393
393 // ************* categories; 394 // ************* categories;
394 if ( isSubSet ) { 395 if ( isSubSet ) {
395 t = mData->categories; 396 t = mData->categories;
396 tAD = ad.mData->categories; 397 tAD = ad.mData->categories;
397 for ( iii = 0; iii < tAD.count(); ++iii) 398 for ( iii = 0; iii < tAD.count(); ++iii)
398 if ( !t.contains(tAD[iii] ) ) 399 if ( !t.contains(tAD[iii] ) )
399 mData->categories.append( tAD[iii] ); 400 mData->categories.append( tAD[iii] );
400 } 401 }
401 QStringList::ConstIterator it; 402 QStringList::ConstIterator it;
402 for( it = ad.mData->custom.begin(); it != ad.mData->custom.end(); ++it ) { 403 for( it = ad.mData->custom.begin(); it != ad.mData->custom.end(); ++it ) {
403 QString qualifiedName = (*it).left( (*it).find( ":" )); 404 QString qualifiedName = (*it).left( (*it).find( ":" ));
404 bool found = false; 405 bool found = false;
405 QStringList::ConstIterator itL; 406 QStringList::ConstIterator itL;
406 for( itL = mData->custom.begin(); itL != mData->custom.end(); ++itL ) { 407 for( itL = mData->custom.begin(); itL != mData->custom.end(); ++itL ) {
407 if ( (*itL).startsWith( qualifiedName ) ) { 408 if ( (*itL).startsWith( qualifiedName ) ) {
408 found = true; 409 found = true;
409 break; 410 break;
410 } 411 }
411 } 412 }
412 if ( ! found ) { 413 if ( ! found ) {
413 mData->custom.append( *it ); 414 mData->custom.append( *it );
414 } 415 }
415 } 416 }
416 if ( mData->logo.undefined() && !ad.mData->logo.undefined() ) mData->logo = ad.mData->logo; 417 if ( mData->logo.undefined() && !ad.mData->logo.undefined() ) mData->logo = ad.mData->logo;
417 if ( mData->photo.undefined() && !ad.mData->photo.undefined() ) mData->photo = ad.mData->photo; 418 if ( mData->photo.undefined() && !ad.mData->photo.undefined() ) mData->photo = ad.mData->photo;
418 if ( !mData->sound.isIntern() ) { 419 if ( !mData->sound.isIntern() ) {
419 if ( mData->sound.url().isEmpty() ) { 420 if ( mData->sound.url().isEmpty() ) {
420 mData->sound = ad.mData->sound; 421 mData->sound = ad.mData->sound;
421 } 422 }
422 } 423 }
423 if ( !mData->agent.isIntern() ) { 424 if ( !mData->agent.isIntern() ) {
424 if ( mData->agent.url().isEmpty() ) { 425 if ( mData->agent.url().isEmpty() ) {
425 mData->agent = ad.mData->agent; 426 mData->agent = ad.mData->agent;
426 } 427 }
427 } 428 }
428 { 429 {
429 Key::List::Iterator itA; 430 Key::List::Iterator itA;
430 for( itA = ad.mData->keys.begin(); itA != ad.mData->keys.end(); ++itA ) { 431 for( itA = ad.mData->keys.begin(); itA != ad.mData->keys.end(); ++itA ) {
431 bool found = false; 432 bool found = false;
432 Key::List::Iterator it; 433 Key::List::Iterator it;
433 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 434 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
434 if ( (*it) == (*itA)) { 435 if ( (*it) == (*itA)) {
435 found = true; 436 found = true;
436 break; 437 break;
437 438
438 } 439 }
439 } 440 }
440 if ( ! found ) { 441 if ( ! found ) {
441 mData->keys.append( *itA ); 442 mData->keys.append( *itA );
442 } 443 }
443 } 444 }
444 } 445 }
445 if ( isSubSet ) { 446 if ( isSubSet ) {
446 KABC::Address::List::Iterator addressIterA; 447 KABC::Address::List::Iterator addressIterA;
447 for ( addressIterA = ad.mData->addresses.begin(); addressIterA != ad.mData->addresses.end(); ++addressIterA ) { 448 for ( addressIterA = ad.mData->addresses.begin(); addressIterA != ad.mData->addresses.end(); ++addressIterA ) {
448 bool found = false; 449 bool found = false;
449 KABC::Address::List::Iterator addressIter; 450 KABC::Address::List::Iterator addressIter;
450 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end(); 451 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end();
451 ++addressIter ) { 452 ++addressIter ) {
452 if ( (*addressIter) == (*addressIterA)) { 453 if ( (*addressIter) == (*addressIterA)) {
453 found = true; 454 found = true;
454 (*addressIter).setType( (*addressIterA).type() ); 455 (*addressIter).setType( (*addressIterA).type() );
455 break; 456 break;
456 } 457 }
457 458
458 } 459 }
459 if ( isSubSet && ! found ) { 460 if ( isSubSet && ! found ) {
460 mData->addresses.append( *addressIterA ); 461 mData->addresses.append( *addressIterA );
461 } 462 }
462 } 463 }
463 } 464 }
464 //qDebug("merge contact %s ", ad.uid().latin1()); 465 //qDebug("merge contact %s ", ad.uid().latin1());
465 setUid( ad.uid() ); 466 setUid( ad.uid() );
466 setRevision( ad.revision() ); 467 setRevision( ad.revision() );
467} 468}
468 469
469bool Addressee::removeVoice() 470bool Addressee::removeVoice()
470{ 471{
471 PhoneNumber::List phoneN = phoneNumbers(); 472 PhoneNumber::List phoneN = phoneNumbers();
472 PhoneNumber::List::Iterator phoneIt; 473 PhoneNumber::List::Iterator phoneIt;
473 bool found = false; 474 bool found = false;
474 for ( phoneIt = phoneN.begin(); phoneIt != phoneN.end(); ++phoneIt ) { 475 for ( phoneIt = phoneN.begin(); phoneIt != phoneN.end(); ++phoneIt ) {
475 if ( (*phoneIt).type() & PhoneNumber::Voice) { // voice found 476 if ( (*phoneIt).type() & PhoneNumber::Voice) { // voice found
476 if ((*phoneIt).type() - PhoneNumber::Voice ) { 477 if ((*phoneIt).type() - PhoneNumber::Voice ) {
477 (*phoneIt).setType((*phoneIt).type() - PhoneNumber::Voice ); 478 (*phoneIt).setType((*phoneIt).type() - PhoneNumber::Voice );
478 insertPhoneNumber( (*phoneIt) ); 479 insertPhoneNumber( (*phoneIt) );
479 found = true; 480 found = true;
480 } 481 }
481 } 482 }
482 483
483 } 484 }
484 return found; 485 return found;
485} 486}
486 487
487bool Addressee::containsAdr(const Addressee& ad ) 488bool Addressee::containsAdr(const Addressee& ad )
488{ 489{
489 if ( ! ad.mData->familyName.isEmpty() ) if ( mData->familyName != ad.mData->familyName) return false; 490 if ( ! ad.mData->familyName.isEmpty() ) if ( mData->familyName != ad.mData->familyName) return false;
490 if ( ! ad.mData->givenName.isEmpty() )if ( mData->givenName != ad.mData->givenName ) return false; 491 if ( ! ad.mData->givenName.isEmpty() )if ( mData->givenName != ad.mData->givenName ) return false;
491 if ( ad.mData->url.isValid() ) if (mData->url != ad.mData->url) return false ; 492 if ( ad.mData->url.isValid() ) if (mData->url != ad.mData->url) return false ;
492 if ( ! ad.mData->role.isEmpty() ) if (mData->role != ad.mData->role) return false ; 493 if ( ! ad.mData->role.isEmpty() ) if (mData->role != ad.mData->role) return false ;
493 if ( ! ad.mData->organization.isEmpty() ) if (mData->organization != ad.mData->organization) return false ; 494 if ( ! ad.mData->organization.isEmpty() ) if (mData->organization != ad.mData->organization) return false ;
494 if ( ! ad.mData->note.isEmpty() ) if (mData->note != ad.mData->note) return false ; 495 if ( ! ad.mData->note.isEmpty() ) if (mData->note != ad.mData->note) return false ;
495 if ( ! ad.mData->title .isEmpty() ) if (mData->title != ad.mData->title ) return false ; 496 if ( ! ad.mData->title .isEmpty() ) if (mData->title != ad.mData->title ) return false ;
496 497
497 // compare phone numbers 498 // compare phone numbers
498 PhoneNumber::List phoneN = ad.phoneNumbers(); 499 PhoneNumber::List phoneN = ad.phoneNumbers();
499 PhoneNumber::List::Iterator phoneIt; 500 PhoneNumber::List::Iterator phoneIt;
500 bool found = false; 501 bool found = false;
501 for ( phoneIt = phoneN.begin(); phoneIt != phoneN.end(); ++phoneIt ) { 502 for ( phoneIt = phoneN.begin(); phoneIt != phoneN.end(); ++phoneIt ) {
502 bool found = false; 503 bool found = false;
503 PhoneNumber::List phoneL = ad.phoneNumbers(); 504 PhoneNumber::List phoneL = ad.phoneNumbers();
504 PhoneNumber::List::Iterator phoneItL; 505 PhoneNumber::List::Iterator phoneItL;
505 for ( phoneItL = phoneL.begin(); phoneItL != phoneL.end(); ++phoneItL ) { 506 for ( phoneItL = phoneL.begin(); phoneItL != phoneL.end(); ++phoneItL ) {
506 if ( ( *phoneItL ).number() == ( *phoneIt ).number() ) { 507 if ( ( *phoneItL ).number() == ( *phoneIt ).number() ) {
507 found = true; 508 found = true;
508 break; 509 break;
509 } 510 }
510 } 511 }
511 if ( ! found ) 512 if ( ! found )
512 return false; 513 return false;
513 } 514 }
514 return true; 515 return true;
515 516
516} 517}
517void Addressee::simplifyAddresses() 518void Addressee::simplifyAddresses()
518{ 519{
519 520
520 521
521 Address::List list; 522 Address::List list;
522 Address::List::Iterator it; 523 Address::List::Iterator it;
523 Address::List::Iterator it2; 524 Address::List::Iterator it2;
524 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 525 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
525 it2 = it; 526 it2 = it;
526 ++it2; 527 ++it2;
527 for( ; it2 != mData->addresses.end(); ++it2 ) { 528 for( ; it2 != mData->addresses.end(); ++it2 ) {
528 if ( (*it) == (*it2) ) { 529 if ( (*it) == (*it2) ) {
529 list.append( *it ); 530 list.append( *it );
530 break; 531 break;
531 } 532 }
532 } 533 }
533 } 534 }
534 for( it = list.begin(); it != list.end(); ++it ) { 535 for( it = list.begin(); it != list.end(); ++it ) {
535 removeAddress( (*it) ); 536 removeAddress( (*it) );
536 } 537 }
537 538
538 list.clear(); 539 list.clear();
539 int max = 2; 540 int max = 2;
540 if ( mData->url.isValid() ) 541 if ( mData->url.isValid() )
541 max = 1; 542 max = 1;
542 if ( mData->addresses.count() <= max ) return ; 543 if ( mData->addresses.count() <= max ) return ;
543 int count = 0; 544 int count = 0;
544 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 545 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
545 if ( count >= max ) 546 if ( count >= max )
546 list.append( *it ); 547 list.append( *it );
547 ++count; 548 ++count;
548 } 549 }
549 for( it = list.begin(); it != list.end(); ++it ) { 550 for( it = list.begin(); it != list.end(); ++it ) {
550 removeAddress( (*it) ); 551 removeAddress( (*it) );
551 } 552 }
552} 553}
553 554
554// removes all emails but the first 555// removes all emails but the first
555// needed by phone sync 556// needed by phone sync
556void Addressee::simplifyEmails() 557void Addressee::simplifyEmails()
557{ 558{
558 if ( mData->emails.count() == 0 ) return ; 559 if ( mData->emails.count() == 0 ) return ;
559 QString email = mData->emails.first(); 560 QString email = mData->emails.first();
560 detach(); 561 detach();
561 mData->emails.clear(); 562 mData->emails.clear();
562 mData->emails.append( email ); 563 mData->emails.append( email );
563} 564}
564 565
565void Addressee::simplifyPhoneNumbers() 566void Addressee::simplifyPhoneNumbers()
566{ 567{
567 int max = 4; 568 int max = 4;
568 int inList = mData->phoneNumbers.count(); 569 int inList = mData->phoneNumbers.count();
569 KABC::PhoneNumber::List removeNumbers; 570 KABC::PhoneNumber::List removeNumbers;
570 KABC::PhoneNumber::List::Iterator phoneIter; 571 KABC::PhoneNumber::List::Iterator phoneIter;
571 if ( inList > max ) { 572 if ( inList > max ) {
572 // delete non-preferred numbers 573 // delete non-preferred numbers
573 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 574 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
574 ++phoneIter ) { 575 ++phoneIter ) {
575 if ( inList > max ) { 576 if ( inList > max ) {
576 if ( ! (( *phoneIter ).type() & PhoneNumber::Pref )) { 577 if ( ! (( *phoneIter ).type() & PhoneNumber::Pref )) {
577 removeNumbers.append( ( *phoneIter ) ); 578 removeNumbers.append( ( *phoneIter ) );
578 --inList; 579 --inList;
579 } 580 }
580 } else 581 } else
581 break; 582 break;
582 } 583 }
583 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end(); 584 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end();
584 ++phoneIter ) { 585 ++phoneIter ) {
585 removePhoneNumber(( *phoneIter )); 586 removePhoneNumber(( *phoneIter ));
586 } 587 }
587 // delete preferred numbers 588 // delete preferred numbers
588 if ( inList > max ) { 589 if ( inList > max ) {
589 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 590 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
590 ++phoneIter ) { 591 ++phoneIter ) {
591 if ( inList > max ) { 592 if ( inList > max ) {
592 removeNumbers.append( ( *phoneIter ) ); 593 removeNumbers.append( ( *phoneIter ) );
593 --inList; 594 --inList;
594 } else 595 } else
595 break; 596 break;
596 } 597 }
597 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end(); 598 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end();
598 ++phoneIter ) { 599 ++phoneIter ) {
599 removePhoneNumber(( *phoneIter )); 600 removePhoneNumber(( *phoneIter ));
600 } 601 }
601 } 602 }
602 } 603 }
603 // remove non-numeric characters 604 // remove non-numeric characters
604 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 605 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
605 ++phoneIter ) { 606 ++phoneIter ) {
606 if ( ! ( *phoneIter ).simplifyNumber() ) 607 if ( ! ( *phoneIter ).simplifyNumber() )
607 removeNumbers.append( ( *phoneIter ) ); 608 removeNumbers.append( ( *phoneIter ) );
608 } 609 }
609 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end(); 610 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end();
610 ++phoneIter ) { 611 ++phoneIter ) {
611 removePhoneNumber(( *phoneIter )); 612 removePhoneNumber(( *phoneIter ));
612 } 613 }
613} 614}
614void Addressee::simplifyPhoneNumberTypes() 615void Addressee::simplifyPhoneNumberTypes()
615{ 616{
616 KABC::PhoneNumber::List::Iterator phoneIter; 617 KABC::PhoneNumber::List::Iterator phoneIter;
617 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 618 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
618 ++phoneIter ) 619 ++phoneIter )
619 ( *phoneIter ).simplifyType(); 620 ( *phoneIter ).simplifyType();
620} 621}
621void Addressee::removeID(const QString &prof) 622void Addressee::removeID(const QString &prof)
622{ 623{
623 detach(); 624 detach();
624 if ( prof.isEmpty() ) 625 if ( prof.isEmpty() )
625 mData->mExternalId = ":"; 626 mData->mExternalId = ":";
626 else 627 else
627 mData->mExternalId = KIdManager::removeId ( mData->mExternalId, prof); 628 mData->mExternalId = KIdManager::removeId ( mData->mExternalId, prof);
628 629
629} 630}
630void Addressee::setID( const QString & prof , const QString & id ) 631void Addressee::setID( const QString & prof , const QString & id )
631{ 632{
632 detach(); 633 detach();
633 mData->mExternalId = KIdManager::setId ( mData->mExternalId, prof, id ); 634 mData->mExternalId = KIdManager::setId ( mData->mExternalId, prof, id );
634 //qDebug("setID2 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() ); 635 //qDebug("setID2 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() );
635} 636}
636void Addressee::setTempSyncStat( int id ) 637void Addressee::setTempSyncStat( int id )
637{ 638{
638 if ( mData->mTempSyncStat == id ) return; 639 if ( mData->mTempSyncStat == id ) return;
639 detach(); 640 detach();
640 mData->mTempSyncStat = id; 641 mData->mTempSyncStat = id;
641} 642}
642int Addressee::tempSyncStat() const 643int Addressee::tempSyncStat() const
643{ 644{
644 return mData->mTempSyncStat; 645 return mData->mTempSyncStat;
645} 646}
646 647
647const QString Addressee::getID( const QString & prof) const 648const QString Addressee::getID( const QString & prof) const
648{ 649{
649 return KIdManager::getId ( mData->mExternalId, prof ); 650 return KIdManager::getId ( mData->mExternalId, prof );
650} 651}
651 652
652void Addressee::setCsum( const QString & prof , const QString & id ) 653void Addressee::setCsum( const QString & prof , const QString & id )
653{ 654{
654 detach(); 655 detach();
655 //qDebug("setcsum1 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() ); 656 //qDebug("setcsum1 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() );
656 mData->mExternalId = KIdManager::setCsum ( mData->mExternalId, prof, id ); 657 mData->mExternalId = KIdManager::setCsum ( mData->mExternalId, prof, id );
657 //qDebug("setcsum2 %s ",mData->mExternalId.latin1() ); 658 //qDebug("setcsum2 %s ",mData->mExternalId.latin1() );
658} 659}
659 660
660const QString Addressee::getCsum( const QString & prof) const 661const QString Addressee::getCsum( const QString & prof) const
661{ 662{
662 return KIdManager::getCsum ( mData->mExternalId, prof ); 663 return KIdManager::getCsum ( mData->mExternalId, prof );
663} 664}
664 665
665void Addressee::setIDStr( const QString & s ) 666void Addressee::setIDStr( const QString & s )
666{ 667{
667 detach(); 668 detach();
668 mData->mExternalId = s; 669 mData->mExternalId = s;
669} 670}
670 671
671const QString Addressee::IDStr() const 672const QString Addressee::IDStr() const
672{ 673{
673 return mData->mExternalId; 674 return mData->mExternalId;
674} 675}
675 676
676void Addressee::setExternalUID( const QString &id ) 677void Addressee::setExternalUID( const QString &id )
677{ 678{
678 if ( id == mData->externalUID ) return; 679 if ( id == mData->externalUID ) return;
679 detach(); 680 detach();
680 mData->empty = false; 681 mData->empty = false;
681 mData->externalUID = id; 682 mData->externalUID = id;
682} 683}
683 684
684const QString Addressee::externalUID() const 685const QString Addressee::externalUID() const
685{ 686{
686 return mData->externalUID; 687 return mData->externalUID;
687} 688}
688void Addressee::setOriginalExternalUID( const QString &id ) 689void Addressee::setOriginalExternalUID( const QString &id )
689{ 690{
690 if ( id == mData->originalExternalUID ) return; 691 if ( id == mData->originalExternalUID ) return;
691 detach(); 692 detach();
692 mData->empty = false; 693 mData->empty = false;
693 //qDebug("*******Set orig uid %s ", id.latin1()); 694 //qDebug("*******Set orig uid %s ", id.latin1());
694 mData->originalExternalUID = id; 695 mData->originalExternalUID = id;
695} 696}
696 697
697QString Addressee::originalExternalUID() const 698QString Addressee::originalExternalUID() const
698{ 699{
699 return mData->originalExternalUID; 700 return mData->originalExternalUID;
700} 701}
701 702
702void Addressee::setUid( const QString &id ) 703void Addressee::setUid( const QString &id )
703{ 704{
704 if ( id == mData->uid ) return; 705 if ( id == mData->uid ) return;
705 detach(); 706 detach();
706 //qDebug("****setuid %s ", id.latin1()); 707 //qDebug("****setuid %s ", id.latin1());
707 mData->empty = false; 708 mData->empty = false;
708 mData->uid = id; 709 mData->uid = id;
709} 710}
710 711
711const QString Addressee::uid() const 712const QString Addressee::uid() const
712{ 713{
713 if ( mData->uid.isEmpty() ) 714 if ( mData->uid.isEmpty() )
714 mData->uid = KApplication::randomString( 10 ); 715 mData->uid = KApplication::randomString( 10 );
715 716
716 return mData->uid; 717 return mData->uid;
717} 718}
718 719
719QString Addressee::uidLabel() 720QString Addressee::uidLabel()
720{ 721{
721 return i18n("Unique Identifier"); 722 return i18n("Unique Identifier");
722} 723}
723 724
724void Addressee::setName( const QString &name ) 725void Addressee::setName( const QString &name )
725{ 726{
726 if ( name == mData->name ) return; 727 if ( name == mData->name ) return;
727 detach(); 728 detach();
728 mData->empty = false; 729 mData->empty = false;
729 mData->name = name; 730 mData->name = name;
730} 731}
731 732
732QString Addressee::name() const 733QString Addressee::name() const
733{ 734{
734 return mData->name; 735 return mData->name;
735} 736}
736 737
737QString Addressee::nameLabel() 738QString Addressee::nameLabel()
738{ 739{
739 return i18n("Name"); 740 return i18n("Name");
740} 741}
741 742
742 743
743void Addressee::setFormattedName( const QString &formattedName ) 744void Addressee::setFormattedName( const QString &formattedName )
744{ 745{
745 if ( formattedName == mData->formattedName ) return; 746 if ( formattedName == mData->formattedName ) return;
746 detach(); 747 detach();
747 mData->empty = false; 748 mData->empty = false;
748 mData->formattedName = formattedName; 749 mData->formattedName = formattedName;
749} 750}
751void Addressee::setDefaultFormattedName( const QString &formattedName )
752{
753 if ( formattedName == mData->defaultFormattedName ) return;
754 detach();
755 mData->empty = false;
756 mData->defaultFormattedName = formattedName;
757}
750 758
751QString Addressee::formattedName() const 759QString Addressee::formattedName() const
752{ 760{
753 return mData->formattedName; 761 return mData->formattedName;
754} 762}
763QString Addressee::defaultFormattedName() const
764{
765 return mData->defaultFormattedName;
766}
755 767
756QString Addressee::formattedNameLabel() 768QString Addressee::formattedNameLabel()
757{ 769{
758 return i18n("Formatted Name"); 770 return i18n("Formatted Name");
759} 771}
760 772
773QString Addressee::defaultFormattedNameLabel()
774{
775 return i18n("Def.Formatted Name");
776}
777
761 778
762void Addressee::setFamilyName( const QString &familyName ) 779void Addressee::setFamilyName( const QString &familyName )
763{ 780{
764 if ( familyName == mData->familyName ) return; 781 if ( familyName == mData->familyName ) return;
765 detach(); 782 detach();
766 mData->empty = false; 783 mData->empty = false;
767 mData->familyName = familyName; 784 mData->familyName = familyName;
768} 785}
769 786
770QString Addressee::familyName() const 787QString Addressee::familyName() const
771{ 788{
772 return mData->familyName; 789 return mData->familyName;
773} 790}
774 791
775QString Addressee::familyNameLabel() 792QString Addressee::familyNameLabel()
776{ 793{
777 return i18n("Family Name"); 794 return i18n("Family Name");
778} 795}
779 796
780 797
781void Addressee::setGivenName( const QString &givenName ) 798void Addressee::setGivenName( const QString &givenName )
782{ 799{
783 if ( givenName == mData->givenName ) return; 800 if ( givenName == mData->givenName ) return;
784 detach(); 801 detach();
785 mData->empty = false; 802 mData->empty = false;
786 mData->givenName = givenName; 803 mData->givenName = givenName;
787} 804}
788 805
789QString Addressee::givenName() const 806QString Addressee::givenName() const
790{ 807{
791 return mData->givenName; 808 return mData->givenName;
792} 809}
793 810
794QString Addressee::givenNameLabel() 811QString Addressee::givenNameLabel()
795{ 812{
796 return i18n("Given Name"); 813 return i18n("Given Name");
797} 814}
798 815
799 816
800void Addressee::setAdditionalName( const QString &additionalName ) 817void Addressee::setAdditionalName( const QString &additionalName )
801{ 818{
802 if ( additionalName == mData->additionalName ) return; 819 if ( additionalName == mData->additionalName ) return;
803 detach(); 820 detach();
804 mData->empty = false; 821 mData->empty = false;
805 mData->additionalName = additionalName; 822 mData->additionalName = additionalName;
806} 823}
807 824
808QString Addressee::additionalName() const 825QString Addressee::additionalName() const
809{ 826{
810 return mData->additionalName; 827 return mData->additionalName;
811} 828}
812 829
813QString Addressee::additionalNameLabel() 830QString Addressee::additionalNameLabel()
814{ 831{
815 return i18n("Additional Names"); 832 return i18n("Additional Names");
816} 833}
817 834
818 835
819void Addressee::setPrefix( const QString &prefix ) 836void Addressee::setPrefix( const QString &prefix )
820{ 837{
821 if ( prefix == mData->prefix ) return; 838 if ( prefix == mData->prefix ) return;
822 detach(); 839 detach();
823 mData->empty = false; 840 mData->empty = false;
824 mData->prefix = prefix; 841 mData->prefix = prefix;
825} 842}
826 843
827QString Addressee::prefix() const 844QString Addressee::prefix() const
828{ 845{
829 return mData->prefix; 846 return mData->prefix;
830} 847}
831 848
832QString Addressee::prefixLabel() 849QString Addressee::prefixLabel()
833{ 850{
834 return i18n("Honorific Prefixes"); 851 return i18n("Honorific Prefixes");
835} 852}
836 853
837 854
838void Addressee::setSuffix( const QString &suffix ) 855void Addressee::setSuffix( const QString &suffix )
839{ 856{
840 if ( suffix == mData->suffix ) return; 857 if ( suffix == mData->suffix ) return;
841 detach(); 858 detach();
842 mData->empty = false; 859 mData->empty = false;
843 mData->suffix = suffix; 860 mData->suffix = suffix;
844} 861}
845 862
846QString Addressee::suffix() const 863QString Addressee::suffix() const
847{ 864{
848 return mData->suffix; 865 return mData->suffix;
849} 866}
850 867
851QString Addressee::suffixLabel() 868QString Addressee::suffixLabel()
852{ 869{
853 return i18n("Honorific Suffixes"); 870 return i18n("Honorific Suffixes");
854} 871}
855 872
856 873
857void Addressee::setNickName( const QString &nickName ) 874void Addressee::setNickName( const QString &nickName )
858{ 875{
859 if ( nickName == mData->nickName ) return; 876 if ( nickName == mData->nickName ) return;
860 detach(); 877 detach();
861 mData->empty = false; 878 mData->empty = false;
862 mData->nickName = nickName; 879 mData->nickName = nickName;
863} 880}
864 881
865QString Addressee::nickName() const 882QString Addressee::nickName() const
866{ 883{
867 return mData->nickName; 884 return mData->nickName;
868} 885}
869 886
870QString Addressee::nickNameLabel() 887QString Addressee::nickNameLabel()
871{ 888{
872 return i18n("Nick Name"); 889 return i18n("Nick Name");
873} 890}
874 891
875 892
876void Addressee::setBirthday( const QDateTime &birthday ) 893void Addressee::setBirthday( const QDateTime &birthday )
877{ 894{
878 if ( birthday == mData->birthday ) return; 895 if ( birthday == mData->birthday ) return;
879 detach(); 896 detach();
880 mData->empty = false; 897 mData->empty = false;
881 mData->birthday = birthday; 898 mData->birthday = birthday;
882} 899}
883 900
884QDateTime Addressee::birthday() const 901QDateTime Addressee::birthday() const
885{ 902{
886 return mData->birthday; 903 return mData->birthday;
887} 904}
888 905
889QString Addressee::birthdayLabel() 906QString Addressee::birthdayLabel()
890{ 907{
891 return i18n("Birthday"); 908 return i18n("Birthday");
892} 909}
893 910
894 911
895QString Addressee::homeAddressStreetLabel() 912QString Addressee::homeAddressStreetLabel()
896{ 913{
897 return i18n("Home Address Street"); 914 return i18n("Home Address Street");
898} 915}
899 916
900 917
901QString Addressee::homeAddressLocalityLabel() 918QString Addressee::homeAddressLocalityLabel()
902{ 919{
903 return i18n("Home Address Locality"); 920 return i18n("Home Address Locality");
904} 921}
905 922
906 923
907QString Addressee::homeAddressRegionLabel() 924QString Addressee::homeAddressRegionLabel()
908{ 925{
909 return i18n("Home Address Region"); 926 return i18n("Home Address Region");
910} 927}
911 928
912 929
913QString Addressee::homeAddressPostalCodeLabel() 930QString Addressee::homeAddressPostalCodeLabel()
914{ 931{
915 return i18n("Home Address Postal Code"); 932 return i18n("Home Address Postal Code");
916} 933}
917 934
918 935
919QString Addressee::homeAddressCountryLabel() 936QString Addressee::homeAddressCountryLabel()
920{ 937{
921 return i18n("Home Address Country"); 938 return i18n("Home Address Country");
922} 939}
923 940
924 941
925QString Addressee::homeAddressLabelLabel() 942QString Addressee::homeAddressLabelLabel()
926{ 943{
927 return i18n("Home Address Label"); 944 return i18n("Home Address Label");
928} 945}
929 946
930 947
931QString Addressee::businessAddressStreetLabel() 948QString Addressee::businessAddressStreetLabel()
932{ 949{
933 return i18n("Business Address Street"); 950 return i18n("Business Address Street");
934} 951}
935 952
936 953
937QString Addressee::businessAddressLocalityLabel() 954QString Addressee::businessAddressLocalityLabel()
938{ 955{
939 return i18n("Business Address Locality"); 956 return i18n("Business Address Locality");
940} 957}
941 958
942 959
943QString Addressee::businessAddressRegionLabel() 960QString Addressee::businessAddressRegionLabel()
944{ 961{
945 return i18n("Business Address Region"); 962 return i18n("Business Address Region");
946} 963}
947 964
948 965
949QString Addressee::businessAddressPostalCodeLabel() 966QString Addressee::businessAddressPostalCodeLabel()
950{ 967{
951 return i18n("Business Address Postal Code"); 968 return i18n("Business Address Postal Code");
952} 969}
953 970
954 971
955QString Addressee::businessAddressCountryLabel() 972QString Addressee::businessAddressCountryLabel()
956{ 973{
957 return i18n("Business Address Country"); 974 return i18n("Business Address Country");
958} 975}
959 976
960 977
961QString Addressee::businessAddressLabelLabel() 978QString Addressee::businessAddressLabelLabel()
962{ 979{
963 return i18n("Business Address Label"); 980 return i18n("Business Address Label");
964} 981}
965 982
966 983
967QString Addressee::homePhoneLabel() 984QString Addressee::homePhoneLabel()
968{ 985{
969 return i18n("Home Phone"); 986 return i18n("Home Phone");
970} 987}
971 988
972 989
973QString Addressee::businessPhoneLabel() 990QString Addressee::businessPhoneLabel()
974{ 991{
975 return i18n("Business Phone"); 992 return i18n("Business Phone");
976} 993}
977 994
978 995
979QString Addressee::mobilePhoneLabel() 996QString Addressee::mobilePhoneLabel()
980{ 997{
981 return i18n("Mobile Phone"); 998 return i18n("Mobile Phone");
982} 999}
1000QString Addressee::mobileWorkPhoneLabel()
1001{
1002 return i18n("Mobile (work)");
1003}
1004QString Addressee::mobileHomePhoneLabel()
1005{
1006 return i18n("Mobile (home)");
1007}
983 1008
984 1009
985QString Addressee::homeFaxLabel() 1010QString Addressee::homeFaxLabel()
986{ 1011{
987 return i18n("Home Fax"); 1012 return i18n("Home Fax");
988} 1013}
989 1014
990 1015
991QString Addressee::businessFaxLabel() 1016QString Addressee::businessFaxLabel()
992{ 1017{
993 return i18n("Business Fax"); 1018 return i18n("Business Fax");
994} 1019}
995 1020
996 1021
997QString Addressee::carPhoneLabel() 1022QString Addressee::carPhoneLabel()
998{ 1023{
999 return i18n("Car Phone"); 1024 return i18n("Car Phone");
1000} 1025}
1001 1026
1002 1027
1003QString Addressee::isdnLabel() 1028QString Addressee::isdnLabel()
1004{ 1029{
1005 return i18n("ISDN"); 1030 return i18n("ISDN");
1006} 1031}
1007 1032
1008 1033
1009QString Addressee::pagerLabel() 1034QString Addressee::pagerLabel()
1010{ 1035{
1011 return i18n("Pager"); 1036 return i18n("Pager");
1012} 1037}
1013 1038
1014QString Addressee::sipLabel() 1039QString Addressee::sipLabel()
1015{ 1040{
1016 return i18n("SIP"); 1041 return i18n("SIP");
1017} 1042}
1018 1043
1019QString Addressee::emailLabel() 1044QString Addressee::emailLabel()
1020{ 1045{
1021 return i18n("Email Address"); 1046 return i18n("Email Address");
1022} 1047}
1023 1048
1024 1049
1025void Addressee::setMailer( const QString &mailer ) 1050void Addressee::setMailer( const QString &mailer )
1026{ 1051{
1027 if ( mailer == mData->mailer ) return; 1052 if ( mailer == mData->mailer ) return;
1028 detach(); 1053 detach();
1029 mData->empty = false; 1054 mData->empty = false;
1030 mData->mailer = mailer; 1055 mData->mailer = mailer;
1031} 1056}
1032 1057
1033QString Addressee::mailer() const 1058QString Addressee::mailer() const
1034{ 1059{
1035 return mData->mailer; 1060 return mData->mailer;
1036} 1061}
1037 1062
1038QString Addressee::mailerLabel() 1063QString Addressee::mailerLabel()
1039{ 1064{
1040 return i18n("Mail Client"); 1065 return i18n("Mail Client");
1041} 1066}
1042 1067
1043 1068
1044void Addressee::setTimeZone( const TimeZone &timeZone ) 1069void Addressee::setTimeZone( const TimeZone &timeZone )
1045{ 1070{
1046 if ( timeZone == mData->timeZone ) return; 1071 if ( timeZone == mData->timeZone ) return;
1047 detach(); 1072 detach();
1048 mData->empty = false; 1073 mData->empty = false;
1049 mData->timeZone = timeZone; 1074 mData->timeZone = timeZone;
1050} 1075}
1051 1076
1052TimeZone Addressee::timeZone() const 1077TimeZone Addressee::timeZone() const
1053{ 1078{
1054 return mData->timeZone; 1079 return mData->timeZone;
1055} 1080}
1056 1081
1057QString Addressee::timeZoneLabel() 1082QString Addressee::timeZoneLabel()
1058{ 1083{
1059 return i18n("Time Zone"); 1084 return i18n("Time Zone");
1060} 1085}
1061 1086
1062 1087
1063void Addressee::setGeo( const Geo &geo ) 1088void Addressee::setGeo( const Geo &geo )
1064{ 1089{
1065 if ( geo == mData->geo ) return; 1090 if ( geo == mData->geo ) return;
1066 detach(); 1091 detach();
1067 mData->empty = false; 1092 mData->empty = false;
1068 mData->geo = geo; 1093 mData->geo = geo;
1069} 1094}
1070 1095
1071Geo Addressee::geo() const 1096Geo Addressee::geo() const
1072{ 1097{
1073 return mData->geo; 1098 return mData->geo;
1074} 1099}
1075 1100
1076QString Addressee::geoLabel() 1101QString Addressee::geoLabel()
1077{ 1102{
1078 return i18n("Geographic Position"); 1103 return i18n("Geographic Position");
1079} 1104}
1080 1105
1081 1106
1082void Addressee::setTitle( const QString &title ) 1107void Addressee::setTitle( const QString &title )
1083{ 1108{
1084 if ( title == mData->title ) return; 1109 if ( title == mData->title ) return;
1085 detach(); 1110 detach();
1086 mData->empty = false; 1111 mData->empty = false;
1087 mData->title = title; 1112 mData->title = title;
1088} 1113}
1089 1114
1090QString Addressee::title() const 1115QString Addressee::title() const
1091{ 1116{
1092 return mData->title; 1117 return mData->title;
1093} 1118}
1094 1119
1095QString Addressee::titleLabel() 1120QString Addressee::titleLabel()
1096{ 1121{
1097 return i18n("Title"); 1122 return i18n("Title");
1098} 1123}
1099 1124
1100 1125
1101void Addressee::setRole( const QString &role ) 1126void Addressee::setRole( const QString &role )
1102{ 1127{
1103 if ( role == mData->role ) return; 1128 if ( role == mData->role ) return;
1104 detach(); 1129 detach();
1105 mData->empty = false; 1130 mData->empty = false;
1106 mData->role = role; 1131 mData->role = role;
1107} 1132}
1108 1133
1109QString Addressee::role() const 1134QString Addressee::role() const
1110{ 1135{
1111 return mData->role; 1136 return mData->role;
1112} 1137}
1113 1138
1114QString Addressee::roleLabel() 1139QString Addressee::roleLabel()
1115{ 1140{
1116 return i18n("Role"); 1141 return i18n("Role");
1117} 1142}
1118 1143
1119 1144
1120void Addressee::setOrganization( const QString &organization ) 1145void Addressee::setOrganization( const QString &organization )
1121{ 1146{
1122 if ( organization == mData->organization ) return; 1147 if ( organization == mData->organization ) return;
1123 detach(); 1148 detach();
1124 mData->empty = false; 1149 mData->empty = false;
1125 mData->organization = organization; 1150 mData->organization = organization;
1126} 1151}
1127 1152
1128QString Addressee::organization() const 1153QString Addressee::organization() const
1129{ 1154{
1130 return mData->organization; 1155 return mData->organization;
1131} 1156}
1132 1157
1133QString Addressee::organizationLabel() 1158QString Addressee::organizationLabel()
1134{ 1159{
1135 return i18n("Organization"); 1160 return i18n("Organization");
1136} 1161}
1137 1162
1138 1163
1139void Addressee::setNote( const QString &note ) 1164void Addressee::setNote( const QString &note )
1140{ 1165{
1141 if ( note == mData->note ) return; 1166 if ( note == mData->note ) return;
1142 detach(); 1167 detach();
1143 mData->empty = false; 1168 mData->empty = false;
1144 mData->note = note; 1169 mData->note = note;
1145} 1170}
1146 1171
1147QString Addressee::note() const 1172QString Addressee::note() const
1148{ 1173{
1149 return mData->note; 1174 return mData->note;
1150} 1175}
1151 1176
1152QString Addressee::noteLabel() 1177QString Addressee::noteLabel()
1153{ 1178{
1154 return i18n("Note"); 1179 return i18n("Note");
1155} 1180}
1156 1181
1157 1182
1158void Addressee::setProductId( const QString &productId ) 1183void Addressee::setProductId( const QString &productId )
1159{ 1184{
1160 if ( productId == mData->productId ) return; 1185 if ( productId == mData->productId ) return;
1161 detach(); 1186 detach();
1162 mData->empty = false; 1187 mData->empty = false;
1163 mData->productId = productId; 1188 mData->productId = productId;
1164} 1189}
1165 1190
1166QString Addressee::productId() const 1191QString Addressee::productId() const
1167{ 1192{
1168 return mData->productId; 1193 return mData->productId;
1169} 1194}
1170 1195
1171QString Addressee::productIdLabel() 1196QString Addressee::productIdLabel()
1172{ 1197{
1173 return i18n("Product Identifier"); 1198 return i18n("Product Identifier");
1174} 1199}
1175 1200
1176 1201
1177void Addressee::setRevision( const QDateTime &revision ) 1202void Addressee::setRevision( const QDateTime &revision )
1178{ 1203{
1179 if ( revision == mData->revision ) return; 1204 if ( revision == mData->revision ) return;
1180 detach(); 1205 detach();
1181 mData->empty = false; 1206 mData->empty = false;
1182 mData->revision = QDateTime( revision.date(), 1207 mData->revision = QDateTime( revision.date(),
1183 QTime (revision.time().hour(), 1208 QTime (revision.time().hour(),
1184 revision.time().minute(), 1209 revision.time().minute(),
1185 revision.time().second())); 1210 revision.time().second()));
1186} 1211}
1187 1212
1188QDateTime Addressee::revision() const 1213QDateTime Addressee::revision() const
1189{ 1214{
1190 return mData->revision; 1215 return mData->revision;
1191} 1216}
1192 1217
1193QString Addressee::revisionLabel() 1218QString Addressee::revisionLabel()
1194{ 1219{
1195 return i18n("Revision Date"); 1220 return i18n("Revision Date");
1196} 1221}
1197 1222
1198 1223
1199void Addressee::setSortString( const QString &sortString ) 1224void Addressee::setSortString( const QString &sortString )
1200{ 1225{
1201 if ( sortString == mData->sortString ) return; 1226 if ( sortString == mData->sortString ) return;
1202 detach(); 1227 detach();
1203 mData->empty = false; 1228 mData->empty = false;
1204 mData->sortString = sortString; 1229 mData->sortString = sortString;
1205} 1230}
1206 1231
1207QString Addressee::sortString() const 1232QString Addressee::sortString() const
1208{ 1233{
1209 return mData->sortString; 1234 return mData->sortString;
1210} 1235}
1211 1236
1212QString Addressee::sortStringLabel() 1237QString Addressee::sortStringLabel()
1213{ 1238{
1214 return i18n("Sort String"); 1239 return i18n("Sort String");
1215} 1240}
1216 1241
1217 1242
1218void Addressee::setUrl( const KURL &url ) 1243void Addressee::setUrl( const KURL &url )
1219{ 1244{
1220 if ( url == mData->url ) return; 1245 if ( url == mData->url ) return;
1221 detach(); 1246 detach();
1222 mData->empty = false; 1247 mData->empty = false;
1223 mData->url = url; 1248 mData->url = url;
1224} 1249}
1225 1250
1226KURL Addressee::url() const 1251KURL Addressee::url() const
1227{ 1252{
1228 return mData->url; 1253 return mData->url;
1229} 1254}
1230 1255
1231QString Addressee::urlLabel() 1256QString Addressee::urlLabel()
1232{ 1257{
1233 return i18n("URL"); 1258 return i18n("URL");
1234} 1259}
1235 1260
1236 1261
1237void Addressee::setSecrecy( const Secrecy &secrecy ) 1262void Addressee::setSecrecy( const Secrecy &secrecy )
1238{ 1263{
1239 if ( secrecy == mData->secrecy ) return; 1264 if ( secrecy == mData->secrecy ) return;
1240 detach(); 1265 detach();
1241 mData->empty = false; 1266 mData->empty = false;
1242 mData->secrecy = secrecy; 1267 mData->secrecy = secrecy;
1243} 1268}
1244 1269
1245Secrecy Addressee::secrecy() const 1270Secrecy Addressee::secrecy() const
1246{ 1271{
1247 return mData->secrecy; 1272 return mData->secrecy;
1248} 1273}
1249 1274
1250QString Addressee::secrecyLabel() 1275QString Addressee::secrecyLabel()
1251{ 1276{
1252 return i18n("Security Class"); 1277 return i18n("Security Class");
1253} 1278}
1254 1279
1255 1280
1256void Addressee::setLogo( const Picture &logo ) 1281void Addressee::setLogo( const Picture &logo )
1257{ 1282{
1258 if ( logo == mData->logo ) return; 1283 if ( logo == mData->logo ) return;
1259 detach(); 1284 detach();
1260 mData->empty = false; 1285 mData->empty = false;
1261 mData->logo = logo; 1286 mData->logo = logo;
1262} 1287}
1263 1288
1264Picture Addressee::logo() const 1289Picture Addressee::logo() const
1265{ 1290{
1266 return mData->logo; 1291 return mData->logo;
1267} 1292}
1268 1293
1269QString Addressee::logoLabel() 1294QString Addressee::logoLabel()
1270{ 1295{
1271 return i18n("Logo"); 1296 return i18n("Logo");
1272} 1297}
1273 1298
1274 1299
1275void Addressee::setPhoto( const Picture &photo ) 1300void Addressee::setPhoto( const Picture &photo )
1276{ 1301{
1277 if ( photo == mData->photo ) return; 1302 if ( photo == mData->photo ) return;
1278 detach(); 1303 detach();
1279 mData->empty = false; 1304 mData->empty = false;
1280 mData->photo = photo; 1305 mData->photo = photo;
1281} 1306}
1282 1307
1283Picture Addressee::photo() const 1308Picture Addressee::photo() const
1284{ 1309{
1285 return mData->photo; 1310 return mData->photo;
1286} 1311}
1287 1312
1288QString Addressee::photoLabel() 1313QString Addressee::photoLabel()
1289{ 1314{
1290 return i18n("Photo"); 1315 return i18n("Photo");
1291} 1316}
1292 1317
1293 1318
1294void Addressee::setSound( const Sound &sound ) 1319void Addressee::setSound( const Sound &sound )
1295{ 1320{
1296 if ( sound == mData->sound ) return; 1321 if ( sound == mData->sound ) return;
1297 detach(); 1322 detach();
1298 mData->empty = false; 1323 mData->empty = false;
1299 mData->sound = sound; 1324 mData->sound = sound;
1300} 1325}
1301 1326
1302Sound Addressee::sound() const 1327Sound Addressee::sound() const
1303{ 1328{
1304 return mData->sound; 1329 return mData->sound;
1305} 1330}
1306 1331
1307QString Addressee::soundLabel() 1332QString Addressee::soundLabel()
1308{ 1333{
1309 return i18n("Sound"); 1334 return i18n("Sound");
1310} 1335}
1311 1336
1312 1337
1313void Addressee::setAgent( const Agent &agent ) 1338void Addressee::setAgent( const Agent &agent )
1314{ 1339{
1315 if ( agent == mData->agent ) return; 1340 if ( agent == mData->agent ) return;
1316 detach(); 1341 detach();
1317 mData->empty = false; 1342 mData->empty = false;
1318 mData->agent = agent; 1343 mData->agent = agent;
1319} 1344}
1320 1345
1321Agent Addressee::agent() const 1346Agent Addressee::agent() const
1322{ 1347{
1323 return mData->agent; 1348 return mData->agent;
1324} 1349}
1325 1350
1326QString Addressee::agentLabel() 1351QString Addressee::agentLabel()
1327{ 1352{
1328 return i18n("Agent"); 1353 return i18n("Agent");
1329} 1354}
1330 1355
1331 1356
1332 1357
1333void Addressee::setNameFromString( const QString &str ) 1358void Addressee::setNameFromString( const QString &str )
1334{ 1359{
1335 setFormattedName( str ); 1360 setFormattedName( str );
1336 setName( str ); 1361 setName( str );
1337 1362
1338 static bool first = true; 1363 static bool first = true;
1339 static QStringList titles; 1364 static QStringList titles;
1340 static QStringList suffixes; 1365 static QStringList suffixes;
1341 static QStringList prefixes; 1366 static QStringList prefixes;
1342 1367
1343 if ( first ) { 1368 if ( first ) {
1344 first = false; 1369 first = false;
1345 titles += i18n( "Dr." ); 1370 titles += i18n( "Dr." );
1346 titles += i18n( "Miss" ); 1371 titles += i18n( "Miss" );
1347 titles += i18n( "Mr." ); 1372 titles += i18n( "Mr." );
1348 titles += i18n( "Mrs." ); 1373 titles += i18n( "Mrs." );
1349 titles += i18n( "Ms." ); 1374 titles += i18n( "Ms." );
1350 titles += i18n( "Prof." ); 1375 titles += i18n( "Prof." );
1351 1376
1352 suffixes += i18n( "I" ); 1377 suffixes += i18n( "I" );
1353 suffixes += i18n( "II" ); 1378 suffixes += i18n( "II" );
1354 suffixes += i18n( "III" ); 1379 suffixes += i18n( "III" );
1355 suffixes += i18n( "Jr." ); 1380 suffixes += i18n( "Jr." );
1356 suffixes += i18n( "Sr." ); 1381 suffixes += i18n( "Sr." );
1357 1382
1358 prefixes += "van"; 1383 prefixes += "van";
1359 prefixes += "von"; 1384 prefixes += "von";
1360 prefixes += "de"; 1385 prefixes += "de";
1361 1386
1362 KConfig config( locateLocal( "config", "kabcrc") ); 1387 KConfig config( locateLocal( "config", "kabcrc") );
1363 config.setGroup( "General" ); 1388 config.setGroup( "General" );
1364 titles += config.readListEntry( "Prefixes" ); 1389 titles += config.readListEntry( "Prefixes" );
1365 titles.remove( "" ); 1390 titles.remove( "" );
1366 prefixes += config.readListEntry( "Inclusions" ); 1391 prefixes += config.readListEntry( "Inclusions" );