summaryrefslogtreecommitdiffabout
path: root/kabc/addressee.cpp
authorzautrix <zautrix>2004-09-19 09:00:55 (UTC)
committer zautrix <zautrix>2004-09-19 09:00:55 (UTC)
commit787181d34f0d195ad72c9cf6aedbc317b6dd713e (patch) (unidiff)
treeac49d2b1d7887f96f3834458071b89e77b59218b /kabc/addressee.cpp
parentf370d0f89bcaeeb68bd60152a9812a9cd55e5d8a (diff)
downloadkdepimpi-787181d34f0d195ad72c9cf6aedbc317b6dd713e.zip
kdepimpi-787181d34f0d195ad72c9cf6aedbc317b6dd713e.tar.gz
kdepimpi-787181d34f0d195ad72c9cf6aedbc317b6dd713e.tar.bz2
more AB sync
Diffstat (limited to 'kabc/addressee.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressee.cpp19
1 files changed, 13 insertions, 6 deletions
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index 0f5d605..d6b70c4 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -1,1069 +1,1076 @@
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 );
46 46
47struct Addressee::AddresseeData : public KShared 47struct Addressee::AddresseeData : public KShared
48{ 48{
49 QString uid; 49 QString uid;
50 QString name; 50 QString name;
51 QString formattedName; 51 QString formattedName;
52 QString familyName; 52 QString familyName;
53 QString givenName; 53 QString givenName;
54 QString additionalName; 54 QString additionalName;
55 QString prefix; 55 QString prefix;
56 QString suffix; 56 QString suffix;
57 QString nickName; 57 QString nickName;
58 QDateTime birthday; 58 QDateTime birthday;
59 QString mailer; 59 QString mailer;
60 TimeZone timeZone; 60 TimeZone timeZone;
61 Geo geo; 61 Geo geo;
62 QString title; 62 QString title;
63 QString role; 63 QString role;
64 QString organization; 64 QString organization;
65 QString note; 65 QString note;
66 QString productId; 66 QString productId;
67 QDateTime revision; 67 QDateTime revision;
68 QString sortString; 68 QString sortString;
69 KURL url; 69 KURL url;
70 Secrecy secrecy; 70 Secrecy secrecy;
71 Picture logo; 71 Picture logo;
72 Picture photo; 72 Picture photo;
73 Sound sound; 73 Sound sound;
74 Agent agent; 74 Agent agent;
75 QString mExternalId; 75 QString mExternalId;
76 PhoneNumber::List phoneNumbers; 76 PhoneNumber::List phoneNumbers;
77 Address::List addresses; 77 Address::List addresses;
78 Key::List keys; 78 Key::List keys;
79 QStringList emails; 79 QStringList emails;
80 QStringList categories; 80 QStringList categories;
81 QStringList custom; 81 QStringList custom;
82 82 int mTempSyncStat;
83 Resource *resource; 83 Resource *resource;
84 84
85 bool empty :1; 85 bool empty :1;
86 bool changed :1; 86 bool changed :1;
87}; 87};
88 88
89Addressee::Addressee() 89Addressee::Addressee()
90{ 90{
91 mData = new AddresseeData; 91 mData = new AddresseeData;
92 mData->empty = true; 92 mData->empty = true;
93 mData->changed = false; 93 mData->changed = false;
94 mData->resource = 0; 94 mData->resource = 0;
95 mData->mExternalId = ":"; 95 mData->mExternalId = ":";
96 mData->revision = QDateTime ( QDate( 2004,1,1)); 96 mData->revision = QDateTime ( QDate( 2004,1,1));
97 mTempSyncStat = SYNC_TEMPSTATE_INITIAL; 97 mData->mTempSyncStat = SYNC_TEMPSTATE_INITIAL;
98} 98}
99 99
100Addressee::~Addressee() 100Addressee::~Addressee()
101{ 101{
102} 102}
103 103
104Addressee::Addressee( const Addressee &a ) 104Addressee::Addressee( const Addressee &a )
105{ 105{
106 mData = a.mData; 106 mData = a.mData;
107 mTempSyncStat = SYNC_TEMPSTATE_INITIAL;
108} 107}
109 108
110Addressee &Addressee::operator=( const Addressee &a ) 109Addressee &Addressee::operator=( const Addressee &a )
111{ 110{
112 mData = a.mData; 111 mData = a.mData;
113 return (*this); 112 return (*this);
114} 113}
115 114
116Addressee Addressee::copy() 115Addressee Addressee::copy()
117{ 116{
118 Addressee a; 117 Addressee a;
119 *(a.mData) = *mData; 118 *(a.mData) = *mData;
120 return a; 119 return a;
121} 120}
122 121
123void Addressee::detach() 122void Addressee::detach()
124{ 123{
125 if ( mData.count() == 1 ) return; 124 if ( mData.count() == 1 ) return;
126 *this = copy(); 125 *this = copy();
127} 126}
128 127
129bool Addressee::operator==( const Addressee &a ) const 128bool Addressee::operator==( const Addressee &a ) const
130{ 129{
131 if ( uid() != a.uid() ) return false; 130 if ( uid() != a.uid() ) return false;
132 if ( mData->name != a.mData->name ) return false; 131 if ( mData->name != a.mData->name ) return false;
133 if ( mData->formattedName != a.mData->formattedName ) return false; 132 if ( mData->formattedName != a.mData->formattedName ) return false;
134 if ( mData->familyName != a.mData->familyName ) return false; 133 if ( mData->familyName != a.mData->familyName ) return false;
135 if ( mData->givenName != a.mData->givenName ) return false; 134 if ( mData->givenName != a.mData->givenName ) return false;
136 if ( mData->additionalName != a.mData->additionalName ) return false; 135 if ( mData->additionalName != a.mData->additionalName ) return false;
137 if ( mData->prefix != a.mData->prefix ) return false; 136 if ( mData->prefix != a.mData->prefix ) return false;
138 if ( mData->suffix != a.mData->suffix ) return false; 137 if ( mData->suffix != a.mData->suffix ) return false;
139 if ( mData->nickName != a.mData->nickName ) return false; 138 if ( mData->nickName != a.mData->nickName ) return false;
140 if ( mData->birthday != a.mData->birthday ) return false; 139 if ( mData->birthday != a.mData->birthday ) return false;
141 if ( mData->mailer != a.mData->mailer ) return false; 140 if ( mData->mailer != a.mData->mailer ) return false;
142 if ( mData->timeZone != a.mData->timeZone ) return false; 141 if ( mData->timeZone != a.mData->timeZone ) return false;
143 if ( mData->geo != a.mData->geo ) return false; 142 if ( mData->geo != a.mData->geo ) return false;
144 if ( mData->title != a.mData->title ) return false; 143 if ( mData->title != a.mData->title ) return false;
145 if ( mData->role != a.mData->role ) return false; 144 if ( mData->role != a.mData->role ) return false;
146 if ( mData->organization != a.mData->organization ) return false; 145 if ( mData->organization != a.mData->organization ) return false;
147 if ( mData->note != a.mData->note ) return false; 146 if ( mData->note != a.mData->note ) return false;
148 if ( mData->productId != a.mData->productId ) return false; 147 if ( mData->productId != a.mData->productId ) return false;
149 if ( mData->revision != a.mData->revision ) return false; 148 if ( mData->revision != a.mData->revision ) return false;
150 if ( mData->sortString != a.mData->sortString ) return false; 149 if ( mData->sortString != a.mData->sortString ) return false;
151 if ( mData->secrecy != a.mData->secrecy ) return false; 150 if ( mData->secrecy != a.mData->secrecy ) return false;
152 if ( mData->logo != a.mData->logo ) return false; 151 if ( mData->logo != a.mData->logo ) return false;
153 if ( mData->photo != a.mData->photo ) return false; 152 if ( mData->photo != a.mData->photo ) return false;
154 if ( mData->sound != a.mData->sound ) return false; 153 if ( mData->sound != a.mData->sound ) return false;
155 if ( mData->agent != a.mData->agent ) return false; 154 if ( mData->agent != a.mData->agent ) return false;
156 if ( ( mData->url.isValid() || a.mData->url.isValid() ) && 155 if ( ( mData->url.isValid() || a.mData->url.isValid() ) &&
157 ( mData->url != a.mData->url ) ) return false; 156 ( mData->url != a.mData->url ) ) return false;
158 if ( mData->phoneNumbers != a.mData->phoneNumbers ) return false; 157 if ( mData->phoneNumbers != a.mData->phoneNumbers ) return false;
159 if ( mData->addresses != a.mData->addresses ) return false; 158 if ( mData->addresses != a.mData->addresses ) return false;
160 if ( mData->keys != a.mData->keys ) return false; 159 if ( mData->keys != a.mData->keys ) return false;
161 if ( mData->emails != a.mData->emails ) return false; 160 if ( mData->emails != a.mData->emails ) return false;
162 if ( mData->categories != a.mData->categories ) return false; 161 if ( mData->categories != a.mData->categories ) return false;
163 if ( mData->custom != a.mData->custom ) return false; 162 if ( mData->custom != a.mData->custom ) return false;
164 163
165 return true; 164 return true;
166} 165}
167 166
168bool Addressee::operator!=( const Addressee &a ) const 167bool Addressee::operator!=( const Addressee &a ) const
169{ 168{
170 return !( a == *this ); 169 return !( a == *this );
171} 170}
172 171
173bool Addressee::isEmpty() const 172bool Addressee::isEmpty() const
174{ 173{
175 return mData->empty; 174 return mData->empty;
176} 175}
177ulong Addressee::getCsum4List( const QStringList & attList) 176ulong Addressee::getCsum4List( const QStringList & attList)
178{ 177{
179 int max = attList.count(); 178 int max = attList.count();
180 ulong cSum = 0; 179 ulong cSum = 0;
181 int j,k,i; 180 int j,k,i;
182 int add; 181 int add;
183 for ( i = 0; i < max ; ++i ) { 182 for ( i = 0; i < max ; ++i ) {
184 QString s = attList[i]; 183 QString s = attList[i];
185 if ( ! s.isEmpty() ){ 184 if ( ! s.isEmpty() ){
186 j = s.length(); 185 j = s.length();
187 for ( k = 0; k < j; ++k ) { 186 for ( k = 0; k < j; ++k ) {
188 int mul = k +1; 187 int mul = k +1;
189 add = s[k].unicode (); 188 add = s[k].unicode ();
190 if ( k < 16 ) 189 if ( k < 16 )
191 mul = mul * mul; 190 mul = mul * mul;
192 int ii = i+1; 191 int ii = i+1;
193 add = add * mul *ii*ii*ii; 192 add = add * mul *ii*ii*ii;
194 cSum += add; 193 cSum += add;
195 } 194 }
196 } 195 }
197 196
198 } 197 }
199 //QString dump = attList.join(","); 198 //QString dump = attList.join(",");
200 //qDebug("csum: %d %s", cSum,dump.latin1()); 199 //qDebug("csum: %d %s", cSum,dump.latin1());
201 200
202 return cSum; 201 return cSum;
203 202
204} 203}
205void Addressee::computeCsum(const QString &dev) 204void Addressee::computeCsum(const QString &dev)
206{ 205{
207 QStringList l; 206 QStringList l;
208 if ( !mData->name.isEmpty() ) l.append(mData->name); 207 if ( !mData->name.isEmpty() ) l.append(mData->name);
209 if ( !mData->formattedName.isEmpty() ) l.append(mData->formattedName ); 208 if ( !mData->formattedName.isEmpty() ) l.append(mData->formattedName );
210 if ( !mData->familyName.isEmpty() ) l.append( mData->familyName ); 209 if ( !mData->familyName.isEmpty() ) l.append( mData->familyName );
211 if ( !mData->givenName.isEmpty() ) l.append(mData->givenName ); 210 if ( !mData->givenName.isEmpty() ) l.append(mData->givenName );
212 if ( !mData->additionalName ) l.append( mData->additionalName ); 211 if ( !mData->additionalName ) l.append( mData->additionalName );
213 if ( !mData->prefix.isEmpty() ) l.append( mData->prefix ); 212 if ( !mData->prefix.isEmpty() ) l.append( mData->prefix );
214 if ( !mData->suffix.isEmpty() ) l.append( mData->suffix ); 213 if ( !mData->suffix.isEmpty() ) l.append( mData->suffix );
215 if ( !mData->nickName.isEmpty() ) l.append( mData->nickName ); 214 if ( !mData->nickName.isEmpty() ) l.append( mData->nickName );
216 if ( mData->birthday.isValid() ) l.append( mData->birthday.toString() ); 215 if ( mData->birthday.isValid() ) l.append( mData->birthday.toString() );
217 if ( !mData->mailer.isEmpty() ) l.append( mData->mailer ); 216 if ( !mData->mailer.isEmpty() ) l.append( mData->mailer );
218 if ( mData->timeZone.isValid() ) l.append( mData->timeZone.asString() ); 217 if ( mData->timeZone.isValid() ) l.append( mData->timeZone.asString() );
219 if ( mData->geo.isValid() ) l.append( mData->geo.asString() ); 218 if ( mData->geo.isValid() ) l.append( mData->geo.asString() );
220 if ( !mData->title .isEmpty() ) l.append( mData->title ); 219 if ( !mData->title .isEmpty() ) l.append( mData->title );
221 if ( !mData->role.isEmpty() ) l.append( mData->role ); 220 if ( !mData->role.isEmpty() ) l.append( mData->role );
222 if ( !mData->organization.isEmpty() ) l.append( mData->organization ); 221 if ( !mData->organization.isEmpty() ) l.append( mData->organization );
223 if ( !mData->note.isEmpty() ) l.append( mData->note ); 222 if ( !mData->note.isEmpty() ) l.append( mData->note );
224 if ( !mData->productId.isEmpty() ) l.append(mData->productId ); 223 if ( !mData->productId.isEmpty() ) l.append(mData->productId );
225 if ( !mData->sortString.isEmpty() ) l.append( mData->sortString ); 224 if ( !mData->sortString.isEmpty() ) l.append( mData->sortString );
226 if ( mData->secrecy.isValid() ) l.append( mData->secrecy.asString()); 225 if ( mData->secrecy.isValid() ) l.append( mData->secrecy.asString());
227 // if ( !mData->logo.isEmpty() ) l.append( ); 226 // if ( !mData->logo.isEmpty() ) l.append( );
228 //if ( !mData->photo.isEmpty() ) l.append( ); 227 //if ( !mData->photo.isEmpty() ) l.append( );
229 //if ( !mData->sound.isEmpty() ) l.append( ); 228 //if ( !mData->sound.isEmpty() ) l.append( );
230 //if ( !mData->agent.isEmpty() ) l.append( ); 229 //if ( !mData->agent.isEmpty() ) l.append( );
231 //if ( mData->url.isValid() ) l.append( ); 230 //if ( mData->url.isValid() ) l.append( );
232#if 0 231#if 0
233 if ( !mData->phoneNumbers.isEmpty() ) l.append( ); 232 if ( !mData->phoneNumbers.isEmpty() ) l.append( );
234 if ( !mData->addresses.isEmpty() ) l.append( ); 233 if ( !mData->addresses.isEmpty() ) l.append( );
235 //if ( !mData->keys.isEmpty() ) l.append( ); 234 //if ( !mData->keys.isEmpty() ) l.append( );
236 if ( !mData->emails.isEmpty() ) l.append( ); 235 if ( !mData->emails.isEmpty() ) l.append( );
237 if ( !mData->categories .isEmpty() ) l.append( ); 236 if ( !mData->categories .isEmpty() ) l.append( );
238 if ( !mData->custom.isEmpty() ) l.append( ); 237 if ( !mData->custom.isEmpty() ) l.append( );
239#endif 238#endif
240 KABC::PhoneNumber::List phoneNumbers; 239 KABC::PhoneNumber::List phoneNumbers;
241 KABC::PhoneNumber::List::Iterator phoneIter; 240 KABC::PhoneNumber::List::Iterator phoneIter;
242 241
243 QStringList t; 242 QStringList t;
244 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 243 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
245 ++phoneIter ) 244 ++phoneIter )
246 t.append( ( *phoneIter ).number()+QString::number( ( *phoneIter ).type() ) ); 245 t.append( ( *phoneIter ).number()+QString::number( ( *phoneIter ).type() ) );
247 t.sort(); 246 t.sort();
248 uint iii; 247 uint iii;
249 for ( iii = 0; iii < t.count(); ++iii) 248 for ( iii = 0; iii < t.count(); ++iii)
250 l.append( t[iii] ); 249 l.append( t[iii] );
251 t = mData->emails; 250 t = mData->emails;
252 t.sort(); 251 t.sort();
253 for ( iii = 0; iii < t.count(); ++iii) 252 for ( iii = 0; iii < t.count(); ++iii)
254 l.append( t[iii] ); 253 l.append( t[iii] );
255 t = mData->categories; 254 t = mData->categories;
256 t.sort(); 255 t.sort();
257 for ( iii = 0; iii < t.count(); ++iii) 256 for ( iii = 0; iii < t.count(); ++iii)
258 l.append( t[iii] ); 257 l.append( t[iii] );
259 t = mData->custom; 258 t = mData->custom;
260 t.sort(); 259 t.sort();
261 for ( iii = 0; iii < t.count(); ++iii) 260 for ( iii = 0; iii < t.count(); ++iii)
262 l.append( t[iii] ); 261 l.append( t[iii] );
263 KABC::Address::List::Iterator addressIter; 262 KABC::Address::List::Iterator addressIter;
264 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end(); 263 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end();
265 ++addressIter ) { 264 ++addressIter ) {
266 t = (*addressIter).asList(); 265 t = (*addressIter).asList();
267 t.sort(); 266 t.sort();
268 for ( iii = 0; iii < t.count(); ++iii) 267 for ( iii = 0; iii < t.count(); ++iii)
269 l.append( t[iii] ); 268 l.append( t[iii] );
270 } 269 }
271 setCsum( dev, QString::number (getCsum4List(l)) ); 270 uint cs = getCsum4List(l);
271 qDebug("CSUM computed %d %s %s", cs,QString::number (cs ).latin1(), uid().latin1() );
272 setCsum( dev, QString::number (cs ));
272} 273}
273void Addressee::removeID(const QString &prof) 274void Addressee::removeID(const QString &prof)
274{ 275{
275 detach(); 276 detach();
276 mData->mExternalId = KIdManager::removeId ( mData->mExternalId, prof); 277 mData->mExternalId = KIdManager::removeId ( mData->mExternalId, prof);
277 278
278} 279}
279void Addressee::setID( const QString & prof , const QString & id ) 280void Addressee::setID( const QString & prof , const QString & id )
280{ 281{
281 detach(); 282 detach();
283 qDebug("setID1 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() );
282 mData->mExternalId = KIdManager::setId ( mData->mExternalId, prof, id ); 284 mData->mExternalId = KIdManager::setId ( mData->mExternalId, prof, id );
285 qDebug("setID2 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() );
283} 286}
284void Addressee::setTempSyncStat( int id ) 287void Addressee::setTempSyncStat( int id )
285{ 288{
286 mTempSyncStat = id; 289 if ( mData->mTempSyncStat == id ) return;
290 detach();
291 mData->mTempSyncStat = id;
287} 292}
288int Addressee::tempSyncStat() const 293int Addressee::tempSyncStat() const
289{ 294{
290 return mTempSyncStat; 295 return mData->mTempSyncStat;
291} 296}
292 297
293QString Addressee::getID( const QString & prof) 298QString Addressee::getID( const QString & prof)
294{ 299{
295 return KIdManager::getId ( mData->mExternalId, prof ); 300 return KIdManager::getId ( mData->mExternalId, prof );
296} 301}
297 302
298void Addressee::setCsum( const QString & prof , const QString & id ) 303void Addressee::setCsum( const QString & prof , const QString & id )
299{ 304{
300 detach(); 305 detach();
306 qDebug("setcsum1 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() );
301 mData->mExternalId = KIdManager::setCsum ( mData->mExternalId, prof, id ); 307 mData->mExternalId = KIdManager::setCsum ( mData->mExternalId, prof, id );
308 qDebug("setcsum2 %s ",mData->mExternalId.latin1() );
302} 309}
303 310
304QString Addressee::getCsum( const QString & prof) 311QString Addressee::getCsum( const QString & prof)
305{ 312{
306 return KIdManager::getCsum ( mData->mExternalId, prof ); 313 return KIdManager::getCsum ( mData->mExternalId, prof );
307} 314}
308 315
309void Addressee::setIDStr( const QString & s ) 316void Addressee::setIDStr( const QString & s )
310{ 317{
311 detach(); 318 detach();
312 mData->mExternalId = s; 319 mData->mExternalId = s;
313} 320}
314 321
315QString Addressee::IDStr() const 322QString Addressee::IDStr() const
316{ 323{
317 return mData->mExternalId; 324 return mData->mExternalId;
318} 325}
319 326
320 327
321void Addressee::setUid( const QString &id ) 328void Addressee::setUid( const QString &id )
322{ 329{
323 if ( id == mData->uid ) return; 330 if ( id == mData->uid ) return;
324 detach(); 331 detach();
325 mData->empty = false; 332 mData->empty = false;
326 mData->uid = id; 333 mData->uid = id;
327} 334}
328 335
329QString Addressee::uid() const 336QString Addressee::uid() const
330{ 337{
331 if ( mData->uid.isEmpty() ) 338 if ( mData->uid.isEmpty() )
332 mData->uid = KApplication::randomString( 10 ); 339 mData->uid = KApplication::randomString( 10 );
333 340
334 return mData->uid; 341 return mData->uid;
335} 342}
336 343
337QString Addressee::uidLabel() 344QString Addressee::uidLabel()
338{ 345{
339 return i18n("Unique Identifier"); 346 return i18n("Unique Identifier");
340} 347}
341 348
342void Addressee::setName( const QString &name ) 349void Addressee::setName( const QString &name )
343{ 350{
344 if ( name == mData->name ) return; 351 if ( name == mData->name ) return;
345 detach(); 352 detach();
346 mData->empty = false; 353 mData->empty = false;
347 mData->name = name; 354 mData->name = name;
348} 355}
349 356
350QString Addressee::name() const 357QString Addressee::name() const
351{ 358{
352 return mData->name; 359 return mData->name;
353} 360}
354 361
355QString Addressee::nameLabel() 362QString Addressee::nameLabel()
356{ 363{
357 return i18n("Name"); 364 return i18n("Name");
358} 365}
359 366
360 367
361void Addressee::setFormattedName( const QString &formattedName ) 368void Addressee::setFormattedName( const QString &formattedName )
362{ 369{
363 if ( formattedName == mData->formattedName ) return; 370 if ( formattedName == mData->formattedName ) return;
364 detach(); 371 detach();
365 mData->empty = false; 372 mData->empty = false;
366 mData->formattedName = formattedName; 373 mData->formattedName = formattedName;
367} 374}
368 375
369QString Addressee::formattedName() const 376QString Addressee::formattedName() const
370{ 377{
371 return mData->formattedName; 378 return mData->formattedName;
372} 379}
373 380
374QString Addressee::formattedNameLabel() 381QString Addressee::formattedNameLabel()
375{ 382{
376 return i18n("Formatted Name"); 383 return i18n("Formatted Name");
377} 384}
378 385
379 386
380void Addressee::setFamilyName( const QString &familyName ) 387void Addressee::setFamilyName( const QString &familyName )
381{ 388{
382 if ( familyName == mData->familyName ) return; 389 if ( familyName == mData->familyName ) return;
383 detach(); 390 detach();
384 mData->empty = false; 391 mData->empty = false;
385 mData->familyName = familyName; 392 mData->familyName = familyName;
386} 393}
387 394
388QString Addressee::familyName() const 395QString Addressee::familyName() const
389{ 396{
390 return mData->familyName; 397 return mData->familyName;
391} 398}
392 399
393QString Addressee::familyNameLabel() 400QString Addressee::familyNameLabel()
394{ 401{
395 return i18n("Family Name"); 402 return i18n("Family Name");
396} 403}
397 404
398 405
399void Addressee::setGivenName( const QString &givenName ) 406void Addressee::setGivenName( const QString &givenName )
400{ 407{
401 if ( givenName == mData->givenName ) return; 408 if ( givenName == mData->givenName ) return;
402 detach(); 409 detach();
403 mData->empty = false; 410 mData->empty = false;
404 mData->givenName = givenName; 411 mData->givenName = givenName;
405} 412}
406 413
407QString Addressee::givenName() const 414QString Addressee::givenName() const
408{ 415{
409 return mData->givenName; 416 return mData->givenName;
410} 417}
411 418
412QString Addressee::givenNameLabel() 419QString Addressee::givenNameLabel()
413{ 420{
414 return i18n("Given Name"); 421 return i18n("Given Name");
415} 422}
416 423
417 424
418void Addressee::setAdditionalName( const QString &additionalName ) 425void Addressee::setAdditionalName( const QString &additionalName )
419{ 426{
420 if ( additionalName == mData->additionalName ) return; 427 if ( additionalName == mData->additionalName ) return;
421 detach(); 428 detach();
422 mData->empty = false; 429 mData->empty = false;
423 mData->additionalName = additionalName; 430 mData->additionalName = additionalName;
424} 431}
425 432
426QString Addressee::additionalName() const 433QString Addressee::additionalName() const
427{ 434{
428 return mData->additionalName; 435 return mData->additionalName;
429} 436}
430 437
431QString Addressee::additionalNameLabel() 438QString Addressee::additionalNameLabel()
432{ 439{
433 return i18n("Additional Names"); 440 return i18n("Additional Names");
434} 441}
435 442
436 443
437void Addressee::setPrefix( const QString &prefix ) 444void Addressee::setPrefix( const QString &prefix )
438{ 445{
439 if ( prefix == mData->prefix ) return; 446 if ( prefix == mData->prefix ) return;
440 detach(); 447 detach();
441 mData->empty = false; 448 mData->empty = false;
442 mData->prefix = prefix; 449 mData->prefix = prefix;
443} 450}
444 451
445QString Addressee::prefix() const 452QString Addressee::prefix() const
446{ 453{
447 return mData->prefix; 454 return mData->prefix;
448} 455}
449 456
450QString Addressee::prefixLabel() 457QString Addressee::prefixLabel()
451{ 458{
452 return i18n("Honorific Prefixes"); 459 return i18n("Honorific Prefixes");
453} 460}
454 461
455 462
456void Addressee::setSuffix( const QString &suffix ) 463void Addressee::setSuffix( const QString &suffix )
457{ 464{
458 if ( suffix == mData->suffix ) return; 465 if ( suffix == mData->suffix ) return;
459 detach(); 466 detach();
460 mData->empty = false; 467 mData->empty = false;
461 mData->suffix = suffix; 468 mData->suffix = suffix;
462} 469}
463 470
464QString Addressee::suffix() const 471QString Addressee::suffix() const
465{ 472{
466 return mData->suffix; 473 return mData->suffix;
467} 474}
468 475
469QString Addressee::suffixLabel() 476QString Addressee::suffixLabel()
470{ 477{
471 return i18n("Honorific Suffixes"); 478 return i18n("Honorific Suffixes");
472} 479}
473 480
474 481
475void Addressee::setNickName( const QString &nickName ) 482void Addressee::setNickName( const QString &nickName )
476{ 483{
477 if ( nickName == mData->nickName ) return; 484 if ( nickName == mData->nickName ) return;
478 detach(); 485 detach();
479 mData->empty = false; 486 mData->empty = false;
480 mData->nickName = nickName; 487 mData->nickName = nickName;
481} 488}
482 489
483QString Addressee::nickName() const 490QString Addressee::nickName() const
484{ 491{
485 return mData->nickName; 492 return mData->nickName;
486} 493}
487 494
488QString Addressee::nickNameLabel() 495QString Addressee::nickNameLabel()
489{ 496{
490 return i18n("Nick Name"); 497 return i18n("Nick Name");
491} 498}
492 499
493 500
494void Addressee::setBirthday( const QDateTime &birthday ) 501void Addressee::setBirthday( const QDateTime &birthday )
495{ 502{
496 if ( birthday == mData->birthday ) return; 503 if ( birthday == mData->birthday ) return;
497 detach(); 504 detach();
498 mData->empty = false; 505 mData->empty = false;
499 mData->birthday = birthday; 506 mData->birthday = birthday;
500} 507}
501 508
502QDateTime Addressee::birthday() const 509QDateTime Addressee::birthday() const
503{ 510{
504 return mData->birthday; 511 return mData->birthday;
505} 512}
506 513
507QString Addressee::birthdayLabel() 514QString Addressee::birthdayLabel()
508{ 515{
509 return i18n("Birthday"); 516 return i18n("Birthday");
510} 517}
511 518
512 519
513QString Addressee::homeAddressStreetLabel() 520QString Addressee::homeAddressStreetLabel()
514{ 521{
515 return i18n("Home Address Street"); 522 return i18n("Home Address Street");
516} 523}
517 524
518 525
519QString Addressee::homeAddressLocalityLabel() 526QString Addressee::homeAddressLocalityLabel()
520{ 527{
521 return i18n("Home Address Locality"); 528 return i18n("Home Address Locality");
522} 529}
523 530
524 531
525QString Addressee::homeAddressRegionLabel() 532QString Addressee::homeAddressRegionLabel()
526{ 533{
527 return i18n("Home Address Region"); 534 return i18n("Home Address Region");
528} 535}
529 536
530 537
531QString Addressee::homeAddressPostalCodeLabel() 538QString Addressee::homeAddressPostalCodeLabel()
532{ 539{
533 return i18n("Home Address Postal Code"); 540 return i18n("Home Address Postal Code");
534} 541}
535 542
536 543
537QString Addressee::homeAddressCountryLabel() 544QString Addressee::homeAddressCountryLabel()
538{ 545{
539 return i18n("Home Address Country"); 546 return i18n("Home Address Country");
540} 547}
541 548
542 549
543QString Addressee::homeAddressLabelLabel() 550QString Addressee::homeAddressLabelLabel()
544{ 551{
545 return i18n("Home Address Label"); 552 return i18n("Home Address Label");
546} 553}
547 554
548 555
549QString Addressee::businessAddressStreetLabel() 556QString Addressee::businessAddressStreetLabel()
550{ 557{
551 return i18n("Business Address Street"); 558 return i18n("Business Address Street");
552} 559}
553 560
554 561
555QString Addressee::businessAddressLocalityLabel() 562QString Addressee::businessAddressLocalityLabel()
556{ 563{
557 return i18n("Business Address Locality"); 564 return i18n("Business Address Locality");
558} 565}
559 566
560 567
561QString Addressee::businessAddressRegionLabel() 568QString Addressee::businessAddressRegionLabel()
562{ 569{
563 return i18n("Business Address Region"); 570 return i18n("Business Address Region");
564} 571}
565 572
566 573
567QString Addressee::businessAddressPostalCodeLabel() 574QString Addressee::businessAddressPostalCodeLabel()
568{ 575{
569 return i18n("Business Address Postal Code"); 576 return i18n("Business Address Postal Code");
570} 577}
571 578
572 579
573QString Addressee::businessAddressCountryLabel() 580QString Addressee::businessAddressCountryLabel()
574{ 581{
575 return i18n("Business Address Country"); 582 return i18n("Business Address Country");
576} 583}
577 584
578 585
579QString Addressee::businessAddressLabelLabel() 586QString Addressee::businessAddressLabelLabel()
580{ 587{
581 return i18n("Business Address Label"); 588 return i18n("Business Address Label");
582} 589}
583 590
584 591
585QString Addressee::homePhoneLabel() 592QString Addressee::homePhoneLabel()
586{ 593{
587 return i18n("Home Phone"); 594 return i18n("Home Phone");
588} 595}
589 596
590 597
591QString Addressee::businessPhoneLabel() 598QString Addressee::businessPhoneLabel()
592{ 599{
593 return i18n("Business Phone"); 600 return i18n("Business Phone");
594} 601}
595 602
596 603
597QString Addressee::mobilePhoneLabel() 604QString Addressee::mobilePhoneLabel()
598{ 605{
599 return i18n("Mobile Phone"); 606 return i18n("Mobile Phone");
600} 607}
601 608
602 609
603QString Addressee::homeFaxLabel() 610QString Addressee::homeFaxLabel()
604{ 611{
605 return i18n("Home Fax"); 612 return i18n("Home Fax");
606} 613}
607 614
608 615
609QString Addressee::businessFaxLabel() 616QString Addressee::businessFaxLabel()
610{ 617{
611 return i18n("Business Fax"); 618 return i18n("Business Fax");
612} 619}
613 620
614 621
615QString Addressee::carPhoneLabel() 622QString Addressee::carPhoneLabel()
616{ 623{
617 return i18n("Car Phone"); 624 return i18n("Car Phone");
618} 625}
619 626
620 627
621QString Addressee::isdnLabel() 628QString Addressee::isdnLabel()
622{ 629{
623 return i18n("ISDN"); 630 return i18n("ISDN");
624} 631}
625 632
626 633
627QString Addressee::pagerLabel() 634QString Addressee::pagerLabel()
628{ 635{
629 return i18n("Pager"); 636 return i18n("Pager");
630} 637}
631 638
632QString Addressee::sipLabel() 639QString Addressee::sipLabel()
633{ 640{
634 return i18n("SIP"); 641 return i18n("SIP");
635} 642}
636 643
637QString Addressee::emailLabel() 644QString Addressee::emailLabel()
638{ 645{
639 return i18n("Email Address"); 646 return i18n("Email Address");
640} 647}
641 648
642 649
643void Addressee::setMailer( const QString &mailer ) 650void Addressee::setMailer( const QString &mailer )
644{ 651{
645 if ( mailer == mData->mailer ) return; 652 if ( mailer == mData->mailer ) return;
646 detach(); 653 detach();
647 mData->empty = false; 654 mData->empty = false;
648 mData->mailer = mailer; 655 mData->mailer = mailer;
649} 656}
650 657
651QString Addressee::mailer() const 658QString Addressee::mailer() const
652{ 659{
653 return mData->mailer; 660 return mData->mailer;
654} 661}
655 662
656QString Addressee::mailerLabel() 663QString Addressee::mailerLabel()
657{ 664{
658 return i18n("Mail Client"); 665 return i18n("Mail Client");
659} 666}
660 667
661 668
662void Addressee::setTimeZone( const TimeZone &timeZone ) 669void Addressee::setTimeZone( const TimeZone &timeZone )
663{ 670{
664 if ( timeZone == mData->timeZone ) return; 671 if ( timeZone == mData->timeZone ) return;
665 detach(); 672 detach();
666 mData->empty = false; 673 mData->empty = false;
667 mData->timeZone = timeZone; 674 mData->timeZone = timeZone;
668} 675}
669 676
670TimeZone Addressee::timeZone() const 677TimeZone Addressee::timeZone() const
671{ 678{
672 return mData->timeZone; 679 return mData->timeZone;
673} 680}
674 681
675QString Addressee::timeZoneLabel() 682QString Addressee::timeZoneLabel()
676{ 683{
677 return i18n("Time Zone"); 684 return i18n("Time Zone");
678} 685}
679 686
680 687
681void Addressee::setGeo( const Geo &geo ) 688void Addressee::setGeo( const Geo &geo )
682{ 689{
683 if ( geo == mData->geo ) return; 690 if ( geo == mData->geo ) return;
684 detach(); 691 detach();
685 mData->empty = false; 692 mData->empty = false;
686 mData->geo = geo; 693 mData->geo = geo;
687} 694}
688 695
689Geo Addressee::geo() const 696Geo Addressee::geo() const
690{ 697{
691 return mData->geo; 698 return mData->geo;
692} 699}
693 700
694QString Addressee::geoLabel() 701QString Addressee::geoLabel()
695{ 702{
696 return i18n("Geographic Position"); 703 return i18n("Geographic Position");
697} 704}
698 705
699 706
700void Addressee::setTitle( const QString &title ) 707void Addressee::setTitle( const QString &title )
701{ 708{
702 if ( title == mData->title ) return; 709 if ( title == mData->title ) return;
703 detach(); 710 detach();
704 mData->empty = false; 711 mData->empty = false;
705 mData->title = title; 712 mData->title = title;
706} 713}
707 714
708QString Addressee::title() const 715QString Addressee::title() const
709{ 716{
710 return mData->title; 717 return mData->title;
711} 718}
712 719
713QString Addressee::titleLabel() 720QString Addressee::titleLabel()
714{ 721{
715 return i18n("Title"); 722 return i18n("Title");
716} 723}
717 724
718 725
719void Addressee::setRole( const QString &role ) 726void Addressee::setRole( const QString &role )
720{ 727{
721 if ( role == mData->role ) return; 728 if ( role == mData->role ) return;
722 detach(); 729 detach();
723 mData->empty = false; 730 mData->empty = false;
724 mData->role = role; 731 mData->role = role;
725} 732}
726 733
727QString Addressee::role() const 734QString Addressee::role() const
728{ 735{
729 return mData->role; 736 return mData->role;
730} 737}
731 738
732QString Addressee::roleLabel() 739QString Addressee::roleLabel()
733{ 740{
734 return i18n("Role"); 741 return i18n("Role");
735} 742}
736 743
737 744
738void Addressee::setOrganization( const QString &organization ) 745void Addressee::setOrganization( const QString &organization )
739{ 746{
740 if ( organization == mData->organization ) return; 747 if ( organization == mData->organization ) return;
741 detach(); 748 detach();
742 mData->empty = false; 749 mData->empty = false;
743 mData->organization = organization; 750 mData->organization = organization;
744} 751}
745 752
746QString Addressee::organization() const 753QString Addressee::organization() const
747{ 754{
748 return mData->organization; 755 return mData->organization;
749} 756}
750 757
751QString Addressee::organizationLabel() 758QString Addressee::organizationLabel()
752{ 759{
753 return i18n("Organization"); 760 return i18n("Organization");
754} 761}
755 762
756 763
757void Addressee::setNote( const QString &note ) 764void Addressee::setNote( const QString &note )
758{ 765{
759 if ( note == mData->note ) return; 766 if ( note == mData->note ) return;
760 detach(); 767 detach();
761 mData->empty = false; 768 mData->empty = false;
762 mData->note = note; 769 mData->note = note;
763} 770}
764 771
765QString Addressee::note() const 772QString Addressee::note() const
766{ 773{
767 return mData->note; 774 return mData->note;
768} 775}
769 776
770QString Addressee::noteLabel() 777QString Addressee::noteLabel()
771{ 778{
772 return i18n("Note"); 779 return i18n("Note");
773} 780}
774 781
775 782
776void Addressee::setProductId( const QString &productId ) 783void Addressee::setProductId( const QString &productId )
777{ 784{
778 if ( productId == mData->productId ) return; 785 if ( productId == mData->productId ) return;
779 detach(); 786 detach();
780 mData->empty = false; 787 mData->empty = false;
781 mData->productId = productId; 788 mData->productId = productId;
782} 789}
783 790
784QString Addressee::productId() const 791QString Addressee::productId() const
785{ 792{
786 return mData->productId; 793 return mData->productId;
787} 794}
788 795
789QString Addressee::productIdLabel() 796QString Addressee::productIdLabel()
790{ 797{
791 return i18n("Product Identifier"); 798 return i18n("Product Identifier");
792} 799}
793 800
794 801
795void Addressee::setRevision( const QDateTime &revision ) 802void Addressee::setRevision( const QDateTime &revision )
796{ 803{
797 if ( revision == mData->revision ) return; 804 if ( revision == mData->revision ) return;
798 detach(); 805 detach();
799 mData->empty = false; 806 mData->empty = false;
800 mData->revision = revision; 807 mData->revision = revision;
801} 808}
802 809
803QDateTime Addressee::revision() const 810QDateTime Addressee::revision() const
804{ 811{
805 return mData->revision; 812 return mData->revision;
806} 813}
807 814
808QString Addressee::revisionLabel() 815QString Addressee::revisionLabel()
809{ 816{
810 return i18n("Revision Date"); 817 return i18n("Revision Date");
811} 818}
812 819
813 820
814void Addressee::setSortString( const QString &sortString ) 821void Addressee::setSortString( const QString &sortString )
815{ 822{
816 if ( sortString == mData->sortString ) return; 823 if ( sortString == mData->sortString ) return;
817 detach(); 824 detach();
818 mData->empty = false; 825 mData->empty = false;
819 mData->sortString = sortString; 826 mData->sortString = sortString;
820} 827}
821 828
822QString Addressee::sortString() const 829QString Addressee::sortString() const
823{ 830{
824 return mData->sortString; 831 return mData->sortString;
825} 832}
826 833
827QString Addressee::sortStringLabel() 834QString Addressee::sortStringLabel()
828{ 835{
829 return i18n("Sort String"); 836 return i18n("Sort String");
830} 837}
831 838
832 839
833void Addressee::setUrl( const KURL &url ) 840void Addressee::setUrl( const KURL &url )
834{ 841{
835 if ( url == mData->url ) return; 842 if ( url == mData->url ) return;
836 detach(); 843 detach();
837 mData->empty = false; 844 mData->empty = false;
838 mData->url = url; 845 mData->url = url;
839} 846}
840 847
841KURL Addressee::url() const 848KURL Addressee::url() const
842{ 849{
843 return mData->url; 850 return mData->url;
844} 851}
845 852
846QString Addressee::urlLabel() 853QString Addressee::urlLabel()
847{ 854{
848 return i18n("URL"); 855 return i18n("URL");
849} 856}
850 857
851 858
852void Addressee::setSecrecy( const Secrecy &secrecy ) 859void Addressee::setSecrecy( const Secrecy &secrecy )
853{ 860{
854 if ( secrecy == mData->secrecy ) return; 861 if ( secrecy == mData->secrecy ) return;
855 detach(); 862 detach();
856 mData->empty = false; 863 mData->empty = false;
857 mData->secrecy = secrecy; 864 mData->secrecy = secrecy;
858} 865}
859 866
860Secrecy Addressee::secrecy() const 867Secrecy Addressee::secrecy() const
861{ 868{
862 return mData->secrecy; 869 return mData->secrecy;
863} 870}
864 871
865QString Addressee::secrecyLabel() 872QString Addressee::secrecyLabel()
866{ 873{
867 return i18n("Security Class"); 874 return i18n("Security Class");
868} 875}
869 876
870 877
871void Addressee::setLogo( const Picture &logo ) 878void Addressee::setLogo( const Picture &logo )
872{ 879{
873 if ( logo == mData->logo ) return; 880 if ( logo == mData->logo ) return;
874 detach(); 881 detach();
875 mData->empty = false; 882 mData->empty = false;
876 mData->logo = logo; 883 mData->logo = logo;
877} 884}
878 885
879Picture Addressee::logo() const 886Picture Addressee::logo() const
880{ 887{
881 return mData->logo; 888 return mData->logo;
882} 889}
883 890
884QString Addressee::logoLabel() 891QString Addressee::logoLabel()
885{ 892{
886 return i18n("Logo"); 893 return i18n("Logo");
887} 894}
888 895
889 896
890void Addressee::setPhoto( const Picture &photo ) 897void Addressee::setPhoto( const Picture &photo )
891{ 898{
892 if ( photo == mData->photo ) return; 899 if ( photo == mData->photo ) return;
893 detach(); 900 detach();
894 mData->empty = false; 901 mData->empty = false;
895 mData->photo = photo; 902 mData->photo = photo;
896} 903}
897 904
898Picture Addressee::photo() const 905Picture Addressee::photo() const
899{ 906{
900 return mData->photo; 907 return mData->photo;
901} 908}
902 909
903QString Addressee::photoLabel() 910QString Addressee::photoLabel()
904{ 911{
905 return i18n("Photo"); 912 return i18n("Photo");
906} 913}
907 914
908 915
909void Addressee::setSound( const Sound &sound ) 916void Addressee::setSound( const Sound &sound )
910{ 917{
911 if ( sound == mData->sound ) return; 918 if ( sound == mData->sound ) return;
912 detach(); 919 detach();
913 mData->empty = false; 920 mData->empty = false;
914 mData->sound = sound; 921 mData->sound = sound;
915} 922}
916 923
917Sound Addressee::sound() const 924Sound Addressee::sound() const
918{ 925{
919 return mData->sound; 926 return mData->sound;
920} 927}
921 928
922QString Addressee::soundLabel() 929QString Addressee::soundLabel()
923{ 930{
924 return i18n("Sound"); 931 return i18n("Sound");
925} 932}
926 933
927 934
928void Addressee::setAgent( const Agent &agent ) 935void Addressee::setAgent( const Agent &agent )
929{ 936{
930 if ( agent == mData->agent ) return; 937 if ( agent == mData->agent ) return;
931 detach(); 938 detach();
932 mData->empty = false; 939 mData->empty = false;
933 mData->agent = agent; 940 mData->agent = agent;
934} 941}
935 942
936Agent Addressee::agent() const 943Agent Addressee::agent() const
937{ 944{
938 return mData->agent; 945 return mData->agent;
939} 946}
940 947
941QString Addressee::agentLabel() 948QString Addressee::agentLabel()
942{ 949{
943 return i18n("Agent"); 950 return i18n("Agent");
944} 951}
945 952
946 953
947 954
948void Addressee::setNameFromString( const QString &str ) 955void Addressee::setNameFromString( const QString &str )
949{ 956{
950 setFormattedName( str ); 957 setFormattedName( str );
951 setName( str ); 958 setName( str );
952 959
953 static bool first = true; 960 static bool first = true;
954 static QStringList titles; 961 static QStringList titles;
955 static QStringList suffixes; 962 static QStringList suffixes;
956 static QStringList prefixes; 963 static QStringList prefixes;
957 964
958 if ( first ) { 965 if ( first ) {
959 first = false; 966 first = false;
960 titles += i18n( "Dr." ); 967 titles += i18n( "Dr." );
961 titles += i18n( "Miss" ); 968 titles += i18n( "Miss" );
962 titles += i18n( "Mr." ); 969 titles += i18n( "Mr." );
963 titles += i18n( "Mrs." ); 970 titles += i18n( "Mrs." );
964 titles += i18n( "Ms." ); 971 titles += i18n( "Ms." );
965 titles += i18n( "Prof." ); 972 titles += i18n( "Prof." );
966 973
967 suffixes += i18n( "I" ); 974 suffixes += i18n( "I" );
968 suffixes += i18n( "II" ); 975 suffixes += i18n( "II" );
969 suffixes += i18n( "III" ); 976 suffixes += i18n( "III" );
970 suffixes += i18n( "Jr." ); 977 suffixes += i18n( "Jr." );
971 suffixes += i18n( "Sr." ); 978 suffixes += i18n( "Sr." );
972 979
973 prefixes += "van"; 980 prefixes += "van";
974 prefixes += "von"; 981 prefixes += "von";
975 prefixes += "de"; 982 prefixes += "de";
976 983
977 KConfig config( locateLocal( "config", "kabcrc") ); 984 KConfig config( locateLocal( "config", "kabcrc") );
978 config.setGroup( "General" ); 985 config.setGroup( "General" );
979 titles += config.readListEntry( "Prefixes" ); 986 titles += config.readListEntry( "Prefixes" );
980 titles.remove( "" ); 987 titles.remove( "" );
981 prefixes += config.readListEntry( "Inclusions" ); 988 prefixes += config.readListEntry( "Inclusions" );
982 prefixes.remove( "" ); 989 prefixes.remove( "" );
983 suffixes += config.readListEntry( "Suffixes" ); 990 suffixes += config.readListEntry( "Suffixes" );
984 suffixes.remove( "" ); 991 suffixes.remove( "" );
985 } 992 }
986 993
987 // clear all name parts 994 // clear all name parts
988 setPrefix( "" ); 995 setPrefix( "" );
989 setGivenName( "" ); 996 setGivenName( "" );
990 setAdditionalName( "" ); 997 setAdditionalName( "" );
991 setFamilyName( "" ); 998 setFamilyName( "" );
992 setSuffix( "" ); 999 setSuffix( "" );
993 1000
994 if ( str.isEmpty() ) 1001 if ( str.isEmpty() )
995 return; 1002 return;
996 1003
997 int i = str.find(','); 1004 int i = str.find(',');
998 if( i < 0 ) { 1005 if( i < 0 ) {
999 QStringList parts = QStringList::split( " ", str ); 1006 QStringList parts = QStringList::split( " ", str );
1000 int leftOffset = 0; 1007 int leftOffset = 0;
1001 int rightOffset = parts.count() - 1; 1008 int rightOffset = parts.count() - 1;
1002 1009
1003 QString suffix; 1010 QString suffix;
1004 while ( rightOffset >= 0 ) { 1011 while ( rightOffset >= 0 ) {
1005 if ( suffixes.contains( parts[ rightOffset ] ) ) { 1012 if ( suffixes.contains( parts[ rightOffset ] ) ) {
1006 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " ")); 1013 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " "));
1007 rightOffset--; 1014 rightOffset--;
1008 } else 1015 } else
1009 break; 1016 break;
1010 } 1017 }
1011 setSuffix( suffix ); 1018 setSuffix( suffix );
1012 1019
1013 if ( rightOffset < 0 ) 1020 if ( rightOffset < 0 )
1014 return; 1021 return;
1015 1022
1016 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) { 1023 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) {
1017 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] ); 1024 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] );
1018 rightOffset--; 1025 rightOffset--;
1019 } else 1026 } else
1020 setFamilyName( parts[ rightOffset ] ); 1027 setFamilyName( parts[ rightOffset ] );
1021 1028
1022 QString prefix; 1029 QString prefix;
1023 while ( leftOffset < rightOffset ) { 1030 while ( leftOffset < rightOffset ) {
1024 if ( titles.contains( parts[ leftOffset ] ) ) { 1031 if ( titles.contains( parts[ leftOffset ] ) ) {
1025 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1032 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1026 leftOffset++; 1033 leftOffset++;
1027 } else 1034 } else
1028 break; 1035 break;
1029 } 1036 }
1030 setPrefix( prefix ); 1037 setPrefix( prefix );
1031 1038
1032 if ( leftOffset < rightOffset ) { 1039 if ( leftOffset < rightOffset ) {
1033 setGivenName( parts[ leftOffset ] ); 1040 setGivenName( parts[ leftOffset ] );
1034 leftOffset++; 1041 leftOffset++;
1035 } 1042 }
1036 1043
1037 QString additionalName; 1044 QString additionalName;
1038 while ( leftOffset < rightOffset ) { 1045 while ( leftOffset < rightOffset ) {
1039 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1046 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1040 leftOffset++; 1047 leftOffset++;
1041 } 1048 }
1042 setAdditionalName( additionalName ); 1049 setAdditionalName( additionalName );
1043 } else { 1050 } else {
1044 QString part1 = str.left( i ); 1051 QString part1 = str.left( i );
1045 QString part2 = str.mid( i + 1 ); 1052 QString part2 = str.mid( i + 1 );
1046 1053
1047 QStringList parts = QStringList::split( " ", part1 ); 1054 QStringList parts = QStringList::split( " ", part1 );
1048 int leftOffset = 0; 1055 int leftOffset = 0;
1049 int rightOffset = parts.count() - 1; 1056 int rightOffset = parts.count() - 1;
1050 1057
1051 QString suffix; 1058 QString suffix;
1052 while ( rightOffset >= 0 ) { 1059 while ( rightOffset >= 0 ) {
1053 if ( suffixes.contains( parts[ rightOffset ] ) ) { 1060 if ( suffixes.contains( parts[ rightOffset ] ) ) {
1054 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " ")); 1061 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " "));
1055 rightOffset--; 1062 rightOffset--;
1056 } else 1063 } else
1057 break; 1064 break;
1058 } 1065 }
1059 setSuffix( suffix ); 1066 setSuffix( suffix );
1060 1067
1061 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) { 1068 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) {
1062 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] ); 1069 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] );
1063 rightOffset--; 1070 rightOffset--;
1064 } else 1071 } else
1065 setFamilyName( parts[ rightOffset ] ); 1072 setFamilyName( parts[ rightOffset ] );
1066 1073
1067 QString prefix; 1074 QString prefix;
1068 while ( leftOffset < rightOffset ) { 1075 while ( leftOffset < rightOffset ) {
1069 if ( titles.contains( parts[ leftOffset ] ) ) { 1076 if ( titles.contains( parts[ leftOffset ] ) ) {