summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-10-09 10:29:56 (UTC)
committer zautrix <zautrix>2004-10-09 10:29:56 (UTC)
commited1eac5e36e675b030cb5a5aa90fb2d44eb40c73 (patch) (unidiff)
tree2d4dd35819f17c4b5758b64defd40e7a4bf3cbde
parent69af2ac56474e3a1e3e59be318caf53f5d357f94 (diff)
downloadkdepimpi-ed1eac5e36e675b030cb5a5aa90fb2d44eb40c73.zip
kdepimpi-ed1eac5e36e675b030cb5a5aa90fb2d44eb40c73.tar.gz
kdepimpi-ed1eac5e36e675b030cb5a5aa90fb2d44eb40c73.tar.bz2
phone fixes
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressbook.cpp1
-rw-r--r--kaddressbook/kabcore.cpp3
-rw-r--r--libkdepim/phoneaccess.cpp6
3 files changed, 8 insertions, 2 deletions
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp
index 1a06956..1050f55 100644
--- a/kabc/addressbook.cpp
+++ b/kabc/addressbook.cpp
@@ -1,1003 +1,1004 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21/* 21/*
22Enhanced Version of the file for platform independent KDE tools. 22Enhanced Version of the file for platform independent KDE tools.
23Copyright (c) 2004 Ulf Schenk 23Copyright (c) 2004 Ulf Schenk
24 24
25$Id$ 25$Id$
26*/ 26*/
27 27
28/*US 28/*US
29 29
30#include <qfile.h> 30#include <qfile.h>
31#include <qregexp.h> 31#include <qregexp.h>
32#include <qtimer.h> 32#include <qtimer.h>
33 33
34#include <kapplication.h> 34#include <kapplication.h>
35#include <kinstance.h> 35#include <kinstance.h>
36#include <kstandarddirs.h> 36#include <kstandarddirs.h>
37 37
38#include "errorhandler.h" 38#include "errorhandler.h"
39*/ 39*/
40#include <qptrlist.h> 40#include <qptrlist.h>
41#include <qtextstream.h> 41#include <qtextstream.h>
42#include <qfile.h> 42#include <qfile.h>
43#include <qregexp.h>
43 44
44#include <kglobal.h> 45#include <kglobal.h>
45#include <klocale.h> 46#include <klocale.h>
46#include <kmessagebox.h> 47#include <kmessagebox.h>
47#include <kdebug.h> 48#include <kdebug.h>
48#include <libkcal/syncdefines.h> 49#include <libkcal/syncdefines.h>
49#include "addressbook.h" 50#include "addressbook.h"
50#include "resource.h" 51#include "resource.h"
51#include "vcardconverter.h" 52#include "vcardconverter.h"
52#include "vcardparser/vcardtool.h" 53#include "vcardparser/vcardtool.h"
53 54
54//US #include "addressbook.moc" 55//US #include "addressbook.moc"
55 56
56using namespace KABC; 57using namespace KABC;
57 58
58struct AddressBook::AddressBookData 59struct AddressBook::AddressBookData
59{ 60{
60 Addressee::List mAddressees; 61 Addressee::List mAddressees;
61 Addressee::List mRemovedAddressees; 62 Addressee::List mRemovedAddressees;
62 Field::List mAllFields; 63 Field::List mAllFields;
63 KConfig *mConfig; 64 KConfig *mConfig;
64 KRES::Manager<Resource> *mManager; 65 KRES::Manager<Resource> *mManager;
65//US ErrorHandler *mErrorHandler; 66//US ErrorHandler *mErrorHandler;
66}; 67};
67 68
68struct AddressBook::Iterator::IteratorData 69struct AddressBook::Iterator::IteratorData
69{ 70{
70 Addressee::List::Iterator mIt; 71 Addressee::List::Iterator mIt;
71}; 72};
72 73
73struct AddressBook::ConstIterator::ConstIteratorData 74struct AddressBook::ConstIterator::ConstIteratorData
74{ 75{
75 Addressee::List::ConstIterator mIt; 76 Addressee::List::ConstIterator mIt;
76}; 77};
77 78
78AddressBook::Iterator::Iterator() 79AddressBook::Iterator::Iterator()
79{ 80{
80 d = new IteratorData; 81 d = new IteratorData;
81} 82}
82 83
83AddressBook::Iterator::Iterator( const AddressBook::Iterator &i ) 84AddressBook::Iterator::Iterator( const AddressBook::Iterator &i )
84{ 85{
85 d = new IteratorData; 86 d = new IteratorData;
86 d->mIt = i.d->mIt; 87 d->mIt = i.d->mIt;
87} 88}
88 89
89AddressBook::Iterator &AddressBook::Iterator::operator=( const AddressBook::Iterator &i ) 90AddressBook::Iterator &AddressBook::Iterator::operator=( const AddressBook::Iterator &i )
90{ 91{
91 if( this == &i ) return *this; // guard against self assignment 92 if( this == &i ) return *this; // guard against self assignment
92 delete d; // delete the old data the Iterator was completely constructed before 93 delete d; // delete the old data the Iterator was completely constructed before
93 d = new IteratorData; 94 d = new IteratorData;
94 d->mIt = i.d->mIt; 95 d->mIt = i.d->mIt;
95 return *this; 96 return *this;
96} 97}
97 98
98AddressBook::Iterator::~Iterator() 99AddressBook::Iterator::~Iterator()
99{ 100{
100 delete d; 101 delete d;
101} 102}
102 103
103const Addressee &AddressBook::Iterator::operator*() const 104const Addressee &AddressBook::Iterator::operator*() const
104{ 105{
105 return *(d->mIt); 106 return *(d->mIt);
106} 107}
107 108
108Addressee &AddressBook::Iterator::operator*() 109Addressee &AddressBook::Iterator::operator*()
109{ 110{
110 return *(d->mIt); 111 return *(d->mIt);
111} 112}
112 113
113Addressee *AddressBook::Iterator::operator->() 114Addressee *AddressBook::Iterator::operator->()
114{ 115{
115 return &(*(d->mIt)); 116 return &(*(d->mIt));
116} 117}
117 118
118AddressBook::Iterator &AddressBook::Iterator::operator++() 119AddressBook::Iterator &AddressBook::Iterator::operator++()
119{ 120{
120 (d->mIt)++; 121 (d->mIt)++;
121 return *this; 122 return *this;
122} 123}
123 124
124AddressBook::Iterator &AddressBook::Iterator::operator++(int) 125AddressBook::Iterator &AddressBook::Iterator::operator++(int)
125{ 126{
126 (d->mIt)++; 127 (d->mIt)++;
127 return *this; 128 return *this;
128} 129}
129 130
130AddressBook::Iterator &AddressBook::Iterator::operator--() 131AddressBook::Iterator &AddressBook::Iterator::operator--()
131{ 132{
132 (d->mIt)--; 133 (d->mIt)--;
133 return *this; 134 return *this;
134} 135}
135 136
136AddressBook::Iterator &AddressBook::Iterator::operator--(int) 137AddressBook::Iterator &AddressBook::Iterator::operator--(int)
137{ 138{
138 (d->mIt)--; 139 (d->mIt)--;
139 return *this; 140 return *this;
140} 141}
141 142
142bool AddressBook::Iterator::operator==( const Iterator &it ) 143bool AddressBook::Iterator::operator==( const Iterator &it )
143{ 144{
144 return ( d->mIt == it.d->mIt ); 145 return ( d->mIt == it.d->mIt );
145} 146}
146 147
147bool AddressBook::Iterator::operator!=( const Iterator &it ) 148bool AddressBook::Iterator::operator!=( const Iterator &it )
148{ 149{
149 return ( d->mIt != it.d->mIt ); 150 return ( d->mIt != it.d->mIt );
150} 151}
151 152
152 153
153AddressBook::ConstIterator::ConstIterator() 154AddressBook::ConstIterator::ConstIterator()
154{ 155{
155 d = new ConstIteratorData; 156 d = new ConstIteratorData;
156} 157}
157 158
158AddressBook::ConstIterator::ConstIterator( const AddressBook::ConstIterator &i ) 159AddressBook::ConstIterator::ConstIterator( const AddressBook::ConstIterator &i )
159{ 160{
160 d = new ConstIteratorData; 161 d = new ConstIteratorData;
161 d->mIt = i.d->mIt; 162 d->mIt = i.d->mIt;
162} 163}
163 164
164AddressBook::ConstIterator &AddressBook::ConstIterator::operator=( const AddressBook::ConstIterator &i ) 165AddressBook::ConstIterator &AddressBook::ConstIterator::operator=( const AddressBook::ConstIterator &i )
165{ 166{
166 if( this == &i ) return *this; // guard for self assignment 167 if( this == &i ) return *this; // guard for self assignment
167 delete d; // delete the old data because the Iterator was really constructed before 168 delete d; // delete the old data because the Iterator was really constructed before
168 d = new ConstIteratorData; 169 d = new ConstIteratorData;
169 d->mIt = i.d->mIt; 170 d->mIt = i.d->mIt;
170 return *this; 171 return *this;
171} 172}
172 173
173AddressBook::ConstIterator::~ConstIterator() 174AddressBook::ConstIterator::~ConstIterator()
174{ 175{
175 delete d; 176 delete d;
176} 177}
177 178
178const Addressee &AddressBook::ConstIterator::operator*() const 179const Addressee &AddressBook::ConstIterator::operator*() const
179{ 180{
180 return *(d->mIt); 181 return *(d->mIt);
181} 182}
182 183
183const Addressee* AddressBook::ConstIterator::operator->() const 184const Addressee* AddressBook::ConstIterator::operator->() const
184{ 185{
185 return &(*(d->mIt)); 186 return &(*(d->mIt));
186} 187}
187 188
188AddressBook::ConstIterator &AddressBook::ConstIterator::operator++() 189AddressBook::ConstIterator &AddressBook::ConstIterator::operator++()
189{ 190{
190 (d->mIt)++; 191 (d->mIt)++;
191 return *this; 192 return *this;
192} 193}
193 194
194AddressBook::ConstIterator &AddressBook::ConstIterator::operator++(int) 195AddressBook::ConstIterator &AddressBook::ConstIterator::operator++(int)
195{ 196{
196 (d->mIt)++; 197 (d->mIt)++;
197 return *this; 198 return *this;
198} 199}
199 200
200AddressBook::ConstIterator &AddressBook::ConstIterator::operator--() 201AddressBook::ConstIterator &AddressBook::ConstIterator::operator--()
201{ 202{
202 (d->mIt)--; 203 (d->mIt)--;
203 return *this; 204 return *this;
204} 205}
205 206
206AddressBook::ConstIterator &AddressBook::ConstIterator::operator--(int) 207AddressBook::ConstIterator &AddressBook::ConstIterator::operator--(int)
207{ 208{
208 (d->mIt)--; 209 (d->mIt)--;
209 return *this; 210 return *this;
210} 211}
211 212
212bool AddressBook::ConstIterator::operator==( const ConstIterator &it ) 213bool AddressBook::ConstIterator::operator==( const ConstIterator &it )
213{ 214{
214 return ( d->mIt == it.d->mIt ); 215 return ( d->mIt == it.d->mIt );
215} 216}
216 217
217bool AddressBook::ConstIterator::operator!=( const ConstIterator &it ) 218bool AddressBook::ConstIterator::operator!=( const ConstIterator &it )
218{ 219{
219 return ( d->mIt != it.d->mIt ); 220 return ( d->mIt != it.d->mIt );
220} 221}
221 222
222 223
223AddressBook::AddressBook() 224AddressBook::AddressBook()
224{ 225{
225 init(0, "contact"); 226 init(0, "contact");
226} 227}
227 228
228AddressBook::AddressBook( const QString &config ) 229AddressBook::AddressBook( const QString &config )
229{ 230{
230 init(config, "contact"); 231 init(config, "contact");
231} 232}
232 233
233AddressBook::AddressBook( const QString &config, const QString &family ) 234AddressBook::AddressBook( const QString &config, const QString &family )
234{ 235{
235 init(config, family); 236 init(config, family);
236 237
237} 238}
238 239
239// the default family is "contact" 240// the default family is "contact"
240void AddressBook::init(const QString &config, const QString &family ) 241void AddressBook::init(const QString &config, const QString &family )
241{ 242{
242 blockLSEchange = false; 243 blockLSEchange = false;
243 d = new AddressBookData; 244 d = new AddressBookData;
244 QString fami = family; 245 QString fami = family;
245 if (config != 0) { 246 if (config != 0) {
246 if ( family == "syncContact" ) { 247 if ( family == "syncContact" ) {
247 qDebug("creating sync config "); 248 qDebug("creating sync config ");
248 fami = "contact"; 249 fami = "contact";
249 KConfig* con = new KConfig( locateLocal("config", "syncContactrc") ); 250 KConfig* con = new KConfig( locateLocal("config", "syncContactrc") );
250 con->setGroup( "General" ); 251 con->setGroup( "General" );
251 con->writeEntry( "ResourceKeys", QString("sync") ); 252 con->writeEntry( "ResourceKeys", QString("sync") );
252 con->writeEntry( "Standard", QString("sync") ); 253 con->writeEntry( "Standard", QString("sync") );
253 con->setGroup( "Resource_sync" ); 254 con->setGroup( "Resource_sync" );
254 con->writeEntry( "FileName", config ); 255 con->writeEntry( "FileName", config );
255 con->writeEntry( "FileFormat", QString("vcard") ); 256 con->writeEntry( "FileFormat", QString("vcard") );
256 con->writeEntry( "ResourceIdentifier", QString("sync") ); 257 con->writeEntry( "ResourceIdentifier", QString("sync") );
257 con->writeEntry( "ResourceName", QString("sync_res") ); 258 con->writeEntry( "ResourceName", QString("sync_res") );
258 if ( config.right(4) == ".xml" ) 259 if ( config.right(4) == ".xml" )
259 con->writeEntry( "ResourceType", QString("qtopia") ); 260 con->writeEntry( "ResourceType", QString("qtopia") );
260 else if ( config == "sharp" ) { 261 else if ( config == "sharp" ) {
261 con->writeEntry( "ResourceType", QString("sharp") ); 262 con->writeEntry( "ResourceType", QString("sharp") );
262 } else { 263 } else {
263 con->writeEntry( "ResourceType", QString("file") ); 264 con->writeEntry( "ResourceType", QString("file") );
264 } 265 }
265 //con->sync(); 266 //con->sync();
266 d->mConfig = con; 267 d->mConfig = con;
267 } 268 }
268 else 269 else
269 d->mConfig = new KConfig( locateLocal("config", config) ); 270 d->mConfig = new KConfig( locateLocal("config", config) );
270// qDebug("AddressBook::init 1 config=%s",config.latin1() ); 271// qDebug("AddressBook::init 1 config=%s",config.latin1() );
271 } 272 }
272 else { 273 else {
273 d->mConfig = 0; 274 d->mConfig = 0;
274// qDebug("AddressBook::init 1 config=0"); 275// qDebug("AddressBook::init 1 config=0");
275 } 276 }
276 277
277//US d->mErrorHandler = 0; 278//US d->mErrorHandler = 0;
278 d->mManager = new KRES::Manager<Resource>( fami, false ); 279 d->mManager = new KRES::Manager<Resource>( fami, false );
279 d->mManager->readConfig( d->mConfig ); 280 d->mManager->readConfig( d->mConfig );
280 if ( family == "syncContact" ) { 281 if ( family == "syncContact" ) {
281 KRES::Manager<Resource> *manager = d->mManager; 282 KRES::Manager<Resource> *manager = d->mManager;
282 KRES::Manager<Resource>::ActiveIterator it; 283 KRES::Manager<Resource>::ActiveIterator it;
283 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) { 284 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) {
284 (*it)->setAddressBook( this ); 285 (*it)->setAddressBook( this );
285 if ( !(*it)->open() ) 286 if ( !(*it)->open() )
286 error( QString( "Unable to open resource '%1'!" ).arg( (*it)->resourceName() ) ); 287 error( QString( "Unable to open resource '%1'!" ).arg( (*it)->resourceName() ) );
287 } 288 }
288 Resource *res = standardResource(); 289 Resource *res = standardResource();
289 if ( !res ) { 290 if ( !res ) {
290 qDebug("ERROR: no standard resource"); 291 qDebug("ERROR: no standard resource");
291 res = manager->createResource( "file" ); 292 res = manager->createResource( "file" );
292 if ( res ) 293 if ( res )
293 { 294 {
294 addResource( res ); 295 addResource( res );
295 } 296 }
296 else 297 else
297 qDebug(" No resource available!!!"); 298 qDebug(" No resource available!!!");
298 } 299 }
299 setStandardResource( res ); 300 setStandardResource( res );
300 manager->writeConfig(); 301 manager->writeConfig();
301 } 302 }
302 addCustomField( i18n( "Department" ), KABC::Field::Organization, 303 addCustomField( i18n( "Department" ), KABC::Field::Organization,
303 "X-Department", "KADDRESSBOOK" ); 304 "X-Department", "KADDRESSBOOK" );
304 addCustomField( i18n( "Profession" ), KABC::Field::Organization, 305 addCustomField( i18n( "Profession" ), KABC::Field::Organization,
305 "X-Profession", "KADDRESSBOOK" ); 306 "X-Profession", "KADDRESSBOOK" );
306 addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization, 307 addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization,
307 "X-AssistantsName", "KADDRESSBOOK" ); 308 "X-AssistantsName", "KADDRESSBOOK" );
308 addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization, 309 addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization,
309 "X-ManagersName", "KADDRESSBOOK" ); 310 "X-ManagersName", "KADDRESSBOOK" );
310 addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal, 311 addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal,
311 "X-SpousesName", "KADDRESSBOOK" ); 312 "X-SpousesName", "KADDRESSBOOK" );
312 addCustomField( i18n( "Office" ), KABC::Field::Personal, 313 addCustomField( i18n( "Office" ), KABC::Field::Personal,
313 "X-Office", "KADDRESSBOOK" ); 314 "X-Office", "KADDRESSBOOK" );
314 addCustomField( i18n( "IM Address" ), KABC::Field::Personal, 315 addCustomField( i18n( "IM Address" ), KABC::Field::Personal,
315 "X-IMAddress", "KADDRESSBOOK" ); 316 "X-IMAddress", "KADDRESSBOOK" );
316 addCustomField( i18n( "Anniversary" ), KABC::Field::Personal, 317 addCustomField( i18n( "Anniversary" ), KABC::Field::Personal,
317 "X-Anniversary", "KADDRESSBOOK" ); 318 "X-Anniversary", "KADDRESSBOOK" );
318 319
319 //US added this field to become compatible with Opie/qtopia addressbook 320 //US added this field to become compatible with Opie/qtopia addressbook
320 // values can be "female" or "male" or "". An empty field represents undefined. 321 // values can be "female" or "male" or "". An empty field represents undefined.
321 addCustomField( i18n( "Gender" ), KABC::Field::Personal, 322 addCustomField( i18n( "Gender" ), KABC::Field::Personal,
322 "X-Gender", "KADDRESSBOOK" ); 323 "X-Gender", "KADDRESSBOOK" );
323 addCustomField( i18n( "Children" ), KABC::Field::Personal, 324 addCustomField( i18n( "Children" ), KABC::Field::Personal,
324 "X-Children", "KADDRESSBOOK" ); 325 "X-Children", "KADDRESSBOOK" );
325 addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal, 326 addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal,
326 "X-FreeBusyUrl", "KADDRESSBOOK" ); 327 "X-FreeBusyUrl", "KADDRESSBOOK" );
327 addCustomField( i18n( "ExternalID" ), KABC::Field::Personal, 328 addCustomField( i18n( "ExternalID" ), KABC::Field::Personal,
328 "X-ExternalID", "KADDRESSBOOK" ); 329 "X-ExternalID", "KADDRESSBOOK" );
329} 330}
330 331
331AddressBook::~AddressBook() 332AddressBook::~AddressBook()
332{ 333{
333 delete d->mConfig; d->mConfig = 0; 334 delete d->mConfig; d->mConfig = 0;
334 delete d->mManager; d->mManager = 0; 335 delete d->mManager; d->mManager = 0;
335//US delete d->mErrorHandler; d->mErrorHandler = 0; 336//US delete d->mErrorHandler; d->mErrorHandler = 0;
336 delete d; d = 0; 337 delete d; d = 0;
337} 338}
338 339
339bool AddressBook::load() 340bool AddressBook::load()
340{ 341{
341 342
342 343
343 clear(); 344 clear();
344 345
345 KRES::Manager<Resource>::ActiveIterator it; 346 KRES::Manager<Resource>::ActiveIterator it;
346 bool ok = true; 347 bool ok = true;
347 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) 348 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it )
348 if ( !(*it)->load() ) { 349 if ( !(*it)->load() ) {
349 error( i18n("Unable to load resource '%1'").arg( (*it)->resourceName() ) ); 350 error( i18n("Unable to load resource '%1'").arg( (*it)->resourceName() ) );
350 ok = false; 351 ok = false;
351 } 352 }
352 353
353 // mark all addressees as unchanged 354 // mark all addressees as unchanged
354 Addressee::List::Iterator addrIt; 355 Addressee::List::Iterator addrIt;
355 for ( addrIt = d->mAddressees.begin(); addrIt != d->mAddressees.end(); ++addrIt ) { 356 for ( addrIt = d->mAddressees.begin(); addrIt != d->mAddressees.end(); ++addrIt ) {
356 (*addrIt).setChanged( false ); 357 (*addrIt).setChanged( false );
357 QString id = (*addrIt).custom( "KADDRESSBOOK", "X-ExternalID" ); 358 QString id = (*addrIt).custom( "KADDRESSBOOK", "X-ExternalID" );
358 if ( !id.isEmpty() ) { 359 if ( !id.isEmpty() ) {
359 //qDebug("setId aa %s ", id.latin1()); 360 //qDebug("setId aa %s ", id.latin1());
360 (*addrIt).setIDStr(id ); 361 (*addrIt).setIDStr(id );
361 } 362 }
362 } 363 }
363 blockLSEchange = true; 364 blockLSEchange = true;
364 return ok; 365 return ok;
365} 366}
366 367
367bool AddressBook::save( Ticket *ticket ) 368bool AddressBook::save( Ticket *ticket )
368{ 369{
369 kdDebug(5700) << "AddressBook::save()"<< endl; 370 kdDebug(5700) << "AddressBook::save()"<< endl;
370 371
371 if ( ticket->resource() ) { 372 if ( ticket->resource() ) {
372 deleteRemovedAddressees(); 373 deleteRemovedAddressees();
373 return ticket->resource()->save( ticket ); 374 return ticket->resource()->save( ticket );
374 } 375 }
375 376
376 return false; 377 return false;
377} 378}
378void AddressBook::export2File( QString fileName ) 379void AddressBook::export2File( QString fileName )
379{ 380{
380 381
381 QFile outFile( fileName ); 382 QFile outFile( fileName );
382 if ( !outFile.open( IO_WriteOnly ) ) { 383 if ( !outFile.open( IO_WriteOnly ) ) {
383 QString text = i18n( "<qt>Unable to open file <b>%1</b> for export.</qt>" ); 384 QString text = i18n( "<qt>Unable to open file <b>%1</b> for export.</qt>" );
384 KMessageBox::error( 0, text.arg( fileName ) ); 385 KMessageBox::error( 0, text.arg( fileName ) );
385 return ; 386 return ;
386 } 387 }
387 QTextStream t( &outFile ); 388 QTextStream t( &outFile );
388 t.setEncoding( QTextStream::UnicodeUTF8 ); 389 t.setEncoding( QTextStream::UnicodeUTF8 );
389 Iterator it; 390 Iterator it;
390 KABC::VCardConverter::Version version; 391 KABC::VCardConverter::Version version;
391 version = KABC::VCardConverter::v3_0; 392 version = KABC::VCardConverter::v3_0;
392 for ( it = begin(); it != end(); ++it ) { 393 for ( it = begin(); it != end(); ++it ) {
393 if ( !(*it).IDStr().isEmpty() ) { 394 if ( !(*it).IDStr().isEmpty() ) {
394 (*it).insertCustom( "KADDRESSBOOK", "X-ExternalID", (*it).IDStr() ); 395 (*it).insertCustom( "KADDRESSBOOK", "X-ExternalID", (*it).IDStr() );
395 } 396 }
396 KABC::VCardConverter converter; 397 KABC::VCardConverter converter;
397 QString vcard; 398 QString vcard;
398 //Resource *resource() const; 399 //Resource *resource() const;
399 converter.addresseeToVCard( *it, vcard, version ); 400 converter.addresseeToVCard( *it, vcard, version );
400 t << vcard << "\r\n"; 401 t << vcard << "\r\n";
401 } 402 }
402 t << "\r\n\r\n"; 403 t << "\r\n\r\n";
403 outFile.close(); 404 outFile.close();
404} 405}
405void AddressBook::importFromFile( QString fileName, bool replaceLabel ) 406void AddressBook::importFromFile( QString fileName, bool replaceLabel )
406{ 407{
407 408
408 KABC::Addressee::List list; 409 KABC::Addressee::List list;
409 QFile file( fileName ); 410 QFile file( fileName );
410 411
411 file.open( IO_ReadOnly ); 412 file.open( IO_ReadOnly );
412 QByteArray rawData = file.readAll(); 413 QByteArray rawData = file.readAll();
413 file.close(); 414 file.close();
414 QString data; 415 QString data;
415 if ( replaceLabel ) { 416 if ( replaceLabel ) {
416 data = QString::fromLatin1( rawData.data(), rawData.size() + 1 ); 417 data = QString::fromLatin1( rawData.data(), rawData.size() + 1 );
417 data.replace ( QRegExp("LABEL") , "ADR" ); 418 data.replace ( QRegExp("LABEL") , "ADR" );
418 data.replace ( QRegExp("CHARSET=ISO-8859-1") , "" ); 419 data.replace ( QRegExp("CHARSET=ISO-8859-1") , "" );
419 } else 420 } else
420 data = QString::fromUtf8( rawData.data(), rawData.size() + 1 ); 421 data = QString::fromUtf8( rawData.data(), rawData.size() + 1 );
421 KABC::VCardTool tool; 422 KABC::VCardTool tool;
422 list = tool.parseVCards( data ); 423 list = tool.parseVCards( data );
423 KABC::Addressee::List::Iterator it; 424 KABC::Addressee::List::Iterator it;
424 for ( it = list.begin(); it != list.end(); ++it ) { 425 for ( it = list.begin(); it != list.end(); ++it ) {
425 (*it).setResource( 0 ); 426 (*it).setResource( 0 );
426 if ( replaceLabel ) 427 if ( replaceLabel )
427 (*it).removeVoice(); 428 (*it).removeVoice();
428 insertAddressee( (*it), false, true ); 429 insertAddressee( (*it), false, true );
429 } 430 }
430 431
431} 432}
432 433
433bool AddressBook::saveAB() 434bool AddressBook::saveAB()
434{ 435{
435 bool ok = true; 436 bool ok = true;
436 437
437 deleteRemovedAddressees(); 438 deleteRemovedAddressees();
438 Iterator ait; 439 Iterator ait;
439 for ( ait = begin(); ait != end(); ++ait ) { 440 for ( ait = begin(); ait != end(); ++ait ) {
440 if ( !(*ait).IDStr().isEmpty() ) { 441 if ( !(*ait).IDStr().isEmpty() ) {
441 (*ait).insertCustom( "KADDRESSBOOK", "X-ExternalID", (*ait).IDStr() ); 442 (*ait).insertCustom( "KADDRESSBOOK", "X-ExternalID", (*ait).IDStr() );
442 } 443 }
443 } 444 }
444 KRES::Manager<Resource>::ActiveIterator it; 445 KRES::Manager<Resource>::ActiveIterator it;
445 KRES::Manager<Resource> *manager = d->mManager; 446 KRES::Manager<Resource> *manager = d->mManager;
446 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) { 447 for ( it = manager->activeBegin(); it != manager->activeEnd(); ++it ) {
447 if ( !(*it)->readOnly() && (*it)->isOpen() ) { 448 if ( !(*it)->readOnly() && (*it)->isOpen() ) {
448 Ticket *ticket = requestSaveTicket( *it ); 449 Ticket *ticket = requestSaveTicket( *it );
449// qDebug("StdAddressBook::save '%s'", (*it)->resourceName().latin1() ); 450// qDebug("StdAddressBook::save '%s'", (*it)->resourceName().latin1() );
450 if ( !ticket ) { 451 if ( !ticket ) {
451 error( i18n( "Unable to save to resource '%1'. It is locked." ) 452 error( i18n( "Unable to save to resource '%1'. It is locked." )
452 .arg( (*it)->resourceName() ) ); 453 .arg( (*it)->resourceName() ) );
453 return false; 454 return false;
454 } 455 }
455 456
456 //if ( !save( ticket ) ) 457 //if ( !save( ticket ) )
457 if ( ticket->resource() ) { 458 if ( ticket->resource() ) {
458 if ( ! ticket->resource()->save( ticket ) ) 459 if ( ! ticket->resource()->save( ticket ) )
459 ok = false; 460 ok = false;
460 } else 461 } else
461 ok = false; 462 ok = false;
462 463
463 } 464 }
464 } 465 }
465 return ok; 466 return ok;
466} 467}
467 468
468AddressBook::Iterator AddressBook::begin() 469AddressBook::Iterator AddressBook::begin()
469{ 470{
470 Iterator it = Iterator(); 471 Iterator it = Iterator();
471 it.d->mIt = d->mAddressees.begin(); 472 it.d->mIt = d->mAddressees.begin();
472 return it; 473 return it;
473} 474}
474 475
475AddressBook::ConstIterator AddressBook::begin() const 476AddressBook::ConstIterator AddressBook::begin() const
476{ 477{
477 ConstIterator it = ConstIterator(); 478 ConstIterator it = ConstIterator();
478 it.d->mIt = d->mAddressees.begin(); 479 it.d->mIt = d->mAddressees.begin();
479 return it; 480 return it;
480} 481}
481 482
482AddressBook::Iterator AddressBook::end() 483AddressBook::Iterator AddressBook::end()
483{ 484{
484 Iterator it = Iterator(); 485 Iterator it = Iterator();
485 it.d->mIt = d->mAddressees.end(); 486 it.d->mIt = d->mAddressees.end();
486 return it; 487 return it;
487} 488}
488 489
489AddressBook::ConstIterator AddressBook::end() const 490AddressBook::ConstIterator AddressBook::end() const
490{ 491{
491 ConstIterator it = ConstIterator(); 492 ConstIterator it = ConstIterator();
492 it.d->mIt = d->mAddressees.end(); 493 it.d->mIt = d->mAddressees.end();
493 return it; 494 return it;
494} 495}
495 496
496void AddressBook::clear() 497void AddressBook::clear()
497{ 498{
498 d->mAddressees.clear(); 499 d->mAddressees.clear();
499} 500}
500 501
501Ticket *AddressBook::requestSaveTicket( Resource *resource ) 502Ticket *AddressBook::requestSaveTicket( Resource *resource )
502{ 503{
503 kdDebug(5700) << "AddressBook::requestSaveTicket()" << endl; 504 kdDebug(5700) << "AddressBook::requestSaveTicket()" << endl;
504 505
505 if ( !resource ) 506 if ( !resource )
506 { 507 {
507 qDebug("AddressBook::requestSaveTicket no resource" ); 508 qDebug("AddressBook::requestSaveTicket no resource" );
508 resource = standardResource(); 509 resource = standardResource();
509 } 510 }
510 511
511 KRES::Manager<Resource>::ActiveIterator it; 512 KRES::Manager<Resource>::ActiveIterator it;
512 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { 513 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) {
513 if ( (*it) == resource ) { 514 if ( (*it) == resource ) {
514 if ( (*it)->readOnly() || !(*it)->isOpen() ) 515 if ( (*it)->readOnly() || !(*it)->isOpen() )
515 return 0; 516 return 0;
516 else 517 else
517 return (*it)->requestSaveTicket(); 518 return (*it)->requestSaveTicket();
518 } 519 }
519 } 520 }
520 521
521 return 0; 522 return 0;
522} 523}
523 524
524void AddressBook::insertAddressee( const Addressee &a, bool setRev, bool takeResource ) 525void AddressBook::insertAddressee( const Addressee &a, bool setRev, bool takeResource )
525{ 526{
526 if ( blockLSEchange && setRev && a.uid().left( 19 ) == QString("last-syncAddressee-") ) { 527 if ( blockLSEchange && setRev && a.uid().left( 19 ) == QString("last-syncAddressee-") ) {
527 //qDebug("block insert "); 528 //qDebug("block insert ");
528 return; 529 return;
529 } 530 }
530 //qDebug("inserting.... %s ",a.uid().latin1() ); 531 //qDebug("inserting.... %s ",a.uid().latin1() );
531 bool found = false; 532 bool found = false;
532 Addressee::List::Iterator it; 533 Addressee::List::Iterator it;
533 for ( it = d->mAddressees.begin(); it != d->mAddressees.end(); ++it ) { 534 for ( it = d->mAddressees.begin(); it != d->mAddressees.end(); ++it ) {
534 if ( a.uid() == (*it).uid() ) { 535 if ( a.uid() == (*it).uid() ) {
535 536
536 bool changed = false; 537 bool changed = false;
537 Addressee addr = a; 538 Addressee addr = a;
538 if ( addr != (*it) ) 539 if ( addr != (*it) )
539 changed = true; 540 changed = true;
540 541
541 if ( takeResource ) { 542 if ( takeResource ) {
542 Resource * res = (*it).resource(); 543 Resource * res = (*it).resource();
543 (*it) = a; 544 (*it) = a;
544 (*it).setResource( res ); 545 (*it).setResource( res );
545 } else { 546 } else {
546 (*it) = a; 547 (*it) = a;
547 if ( (*it).resource() == 0 ) 548 if ( (*it).resource() == 0 )
548 (*it).setResource( standardResource() ); 549 (*it).setResource( standardResource() );
549 } 550 }
550 if ( changed ) { 551 if ( changed ) {
551 if ( setRev ) { 552 if ( setRev ) {
552 553
553 // get rid of micro seconds 554 // get rid of micro seconds
554 QDateTime dt = QDateTime::currentDateTime(); 555 QDateTime dt = QDateTime::currentDateTime();
555 QTime t = dt.time(); 556 QTime t = dt.time();
556 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 557 dt.setTime( QTime (t.hour (), t.minute (), t.second () ) );
557 (*it).setRevision( dt ); 558 (*it).setRevision( dt );
558 } 559 }
559 (*it).setChanged( true ); 560 (*it).setChanged( true );
560 } 561 }
561 562
562 found = true; 563 found = true;
563 } else { 564 } else {
564 if ( (*it).uid().left( 19 ) == QString("last-syncAddressee-") ) { 565 if ( (*it).uid().left( 19 ) == QString("last-syncAddressee-") ) {
565 QString name = (*it).uid().mid( 19 ); 566 QString name = (*it).uid().mid( 19 );
566 Addressee b = a; 567 Addressee b = a;
567 QString id = b.getID( name ); 568 QString id = b.getID( name );
568 if ( ! id.isEmpty() ) { 569 if ( ! id.isEmpty() ) {
569 QString des = (*it).note(); 570 QString des = (*it).note();
570 int startN; 571 int startN;
571 if( (startN = des.find( id ) ) >= 0 ) { 572 if( (startN = des.find( id ) ) >= 0 ) {
572 int endN = des.find( ",", startN+1 ); 573 int endN = des.find( ",", startN+1 );
573 des = des.left( startN ) + des.mid( endN+1 ); 574 des = des.left( startN ) + des.mid( endN+1 );
574 (*it).setNote( des ); 575 (*it).setNote( des );
575 } 576 }
576 } 577 }
577 } 578 }
578 } 579 }
579 } 580 }
580 if ( found ) 581 if ( found )
581 return; 582 return;
582 d->mAddressees.append( a ); 583 d->mAddressees.append( a );
583 Addressee& addr = d->mAddressees.last(); 584 Addressee& addr = d->mAddressees.last();
584 if ( addr.resource() == 0 ) 585 if ( addr.resource() == 0 )
585 addr.setResource( standardResource() ); 586 addr.setResource( standardResource() );
586 587
587 addr.setChanged( true ); 588 addr.setChanged( true );
588} 589}
589 590
590void AddressBook::removeAddressee( const Addressee &a ) 591void AddressBook::removeAddressee( const Addressee &a )
591{ 592{
592 Iterator it; 593 Iterator it;
593 Iterator it2; 594 Iterator it2;
594 bool found = false; 595 bool found = false;
595 for ( it = begin(); it != end(); ++it ) { 596 for ( it = begin(); it != end(); ++it ) {
596 if ( a.uid() == (*it).uid() ) { 597 if ( a.uid() == (*it).uid() ) {
597 found = true; 598 found = true;
598 it2 = it; 599 it2 = it;
599 } else { 600 } else {
600 if ( (*it).uid().left( 19 ) == QString("last-syncAddressee-") ) { 601 if ( (*it).uid().left( 19 ) == QString("last-syncAddressee-") ) {
601 QString name = (*it).uid().mid( 19 ); 602 QString name = (*it).uid().mid( 19 );
602 Addressee b = a; 603 Addressee b = a;
603 QString id = b.getID( name ); 604 QString id = b.getID( name );
604 if ( ! id.isEmpty() ) { 605 if ( ! id.isEmpty() ) {
605 QString des = (*it).note(); 606 QString des = (*it).note();
606 if( des.find( id ) < 0 ) { 607 if( des.find( id ) < 0 ) {
607 des += id + ","; 608 des += id + ",";
608 (*it).setNote( des ); 609 (*it).setNote( des );
609 } 610 }
610 } 611 }
611 } 612 }
612 613
613 } 614 }
614 } 615 }
615 616
616 if ( found ) 617 if ( found )
617 removeAddressee( it2 ); 618 removeAddressee( it2 );
618 619
619} 620}
620 621
621void AddressBook::removeSyncAddressees( bool removeDeleted ) 622void AddressBook::removeSyncAddressees( bool removeDeleted )
622{ 623{
623 Iterator it = begin(); 624 Iterator it = begin();
624 Iterator it2 ; 625 Iterator it2 ;
625 QDateTime dt ( QDate( 2004,1,1) ); 626 QDateTime dt ( QDate( 2004,1,1) );
626 while ( it != end() ) { 627 while ( it != end() ) {
627 (*it).setRevision( dt ); 628 (*it).setRevision( dt );
628 (*it).removeCustom( "KADDRESSBOOK", "X-ExternalID" ); 629 (*it).removeCustom( "KADDRESSBOOK", "X-ExternalID" );
629 (*it).setIDStr(""); 630 (*it).setIDStr("");
630 if ( ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE && removeDeleted )|| (*it).uid().left( 19 ) == QString("last-syncAddressee-")) { 631 if ( ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE && removeDeleted )|| (*it).uid().left( 19 ) == QString("last-syncAddressee-")) {
631 it2 = it; 632 it2 = it;
632 //qDebug("removing %s ",(*it).uid().latin1() ); 633 //qDebug("removing %s ",(*it).uid().latin1() );
633 ++it; 634 ++it;
634 removeAddressee( it2 ); 635 removeAddressee( it2 );
635 } else { 636 } else {
636 //qDebug("skipping %s ",(*it).uid().latin1() ); 637 //qDebug("skipping %s ",(*it).uid().latin1() );
637 ++it; 638 ++it;
638 } 639 }
639 } 640 }
640 deleteRemovedAddressees(); 641 deleteRemovedAddressees();
641} 642}
642 643
643void AddressBook::removeAddressee( const Iterator &it ) 644void AddressBook::removeAddressee( const Iterator &it )
644{ 645{
645 d->mRemovedAddressees.append( (*it) ); 646 d->mRemovedAddressees.append( (*it) );
646 d->mAddressees.remove( it.d->mIt ); 647 d->mAddressees.remove( it.d->mIt );
647} 648}
648 649
649AddressBook::Iterator AddressBook::find( const Addressee &a ) 650AddressBook::Iterator AddressBook::find( const Addressee &a )
650{ 651{
651 Iterator it; 652 Iterator it;
652 for ( it = begin(); it != end(); ++it ) { 653 for ( it = begin(); it != end(); ++it ) {
653 if ( a.uid() == (*it).uid() ) { 654 if ( a.uid() == (*it).uid() ) {
654 return it; 655 return it;
655 } 656 }
656 } 657 }
657 return end(); 658 return end();
658} 659}
659 660
660Addressee AddressBook::findByUid( const QString &uid ) 661Addressee AddressBook::findByUid( const QString &uid )
661{ 662{
662 Iterator it; 663 Iterator it;
663 for ( it = begin(); it != end(); ++it ) { 664 for ( it = begin(); it != end(); ++it ) {
664 if ( uid == (*it).uid() ) { 665 if ( uid == (*it).uid() ) {
665 return *it; 666 return *it;
666 } 667 }
667 } 668 }
668 return Addressee(); 669 return Addressee();
669} 670}
670void AddressBook::preExternSync( AddressBook* aBook, const QString& csd ) 671void AddressBook::preExternSync( AddressBook* aBook, const QString& csd )
671{ 672{
672 //qDebug("AddressBook::preExternSync "); 673 //qDebug("AddressBook::preExternSync ");
673 AddressBook::Iterator it; 674 AddressBook::Iterator it;
674 for ( it = begin(); it != end(); ++it ) { 675 for ( it = begin(); it != end(); ++it ) {
675 (*it).setID( csd, (*it).externalUID() ); 676 (*it).setID( csd, (*it).externalUID() );
676 (*it).computeCsum( csd ); 677 (*it).computeCsum( csd );
677 } 678 }
678 mergeAB( aBook ,csd ); 679 mergeAB( aBook ,csd );
679} 680}
680void AddressBook::postExternSync( AddressBook* aBook , const QString& csd) 681void AddressBook::postExternSync( AddressBook* aBook , const QString& csd)
681{ 682{
682 //qDebug("AddressBook::postExternSync "); 683 //qDebug("AddressBook::postExternSync ");
683 AddressBook::Iterator it; 684 AddressBook::Iterator it;
684 for ( it = begin(); it != end(); ++it ) { 685 for ( it = begin(); it != end(); ++it ) {
685 // qDebug("check uid %s ", (*it).uid().latin1() ); 686 // qDebug("check uid %s ", (*it).uid().latin1() );
686 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_ID || 687 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ||
687 (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_CSUM ) { 688 (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_CSUM ) {
688 Addressee ad = aBook->findByUid( ( (*it).uid() )); 689 Addressee ad = aBook->findByUid( ( (*it).uid() ));
689 if ( ad.isEmpty() ) { 690 if ( ad.isEmpty() ) {
690 qDebug("postExternSync:ERROR addressee is empty: %s ", (*it).uid().latin1()); 691 qDebug("postExternSync:ERROR addressee is empty: %s ", (*it).uid().latin1());
691 } else { 692 } else {
692 (*it).computeCsum( csd ); 693 (*it).computeCsum( csd );
693 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) 694 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_ID )
694 ad.setID( csd, (*it).externalUID() ); 695 ad.setID( csd, (*it).externalUID() );
695 ad.setCsum( csd, (*it).getCsum( csd ) ); 696 ad.setCsum( csd, (*it).getCsum( csd ) );
696 aBook->insertAddressee( ad ); 697 aBook->insertAddressee( ad );
697 } 698 }
698 } 699 }
699 } 700 }
700} 701}
701 702
702bool AddressBook::containsExternalUid( const QString& uid ) 703bool AddressBook::containsExternalUid( const QString& uid )
703{ 704{
704 Iterator it; 705 Iterator it;
705 for ( it = begin(); it != end(); ++it ) { 706 for ( it = begin(); it != end(); ++it ) {
706 if ( uid == (*it).externalUID( ) ) 707 if ( uid == (*it).externalUID( ) )
707 return true; 708 return true;
708 } 709 }
709 return false; 710 return false;
710} 711}
711Addressee AddressBook::findByExternUid( const QString& uid , const QString& profile ) 712Addressee AddressBook::findByExternUid( const QString& uid , const QString& profile )
712{ 713{
713 Iterator it; 714 Iterator it;
714 for ( it = begin(); it != end(); ++it ) { 715 for ( it = begin(); it != end(); ++it ) {
715 if ( uid == (*it).getID( profile ) ) 716 if ( uid == (*it).getID( profile ) )
716 return (*it); 717 return (*it);
717 } 718 }
718 return Addressee(); 719 return Addressee();
719} 720}
720void AddressBook::mergeAB( AddressBook *aBook, const QString& profile ) 721void AddressBook::mergeAB( AddressBook *aBook, const QString& profile )
721{ 722{
722 Iterator it; 723 Iterator it;
723 Addressee ad; 724 Addressee ad;
724 for ( it = begin(); it != end(); ++it ) { 725 for ( it = begin(); it != end(); ++it ) {
725 ad = aBook->findByExternUid( (*it).externalUID(), profile ); 726 ad = aBook->findByExternUid( (*it).externalUID(), profile );
726 if ( !ad.isEmpty() ) { 727 if ( !ad.isEmpty() ) {
727 (*it).mergeContact( ad ); 728 (*it).mergeContact( ad );
728 } 729 }
729 } 730 }
730#if 0 731#if 0
731 // test only 732 // test only
732 for ( it = begin(); it != end(); ++it ) { 733 for ( it = begin(); it != end(); ++it ) {
733 734
734 qDebug("uid %s ", (*it).uid().latin1()); 735 qDebug("uid %s ", (*it).uid().latin1());
735 } 736 }
736#endif 737#endif
737} 738}
738 739
739#if 0 740#if 0
740Addressee::List AddressBook::getExternLastSyncAddressees() 741Addressee::List AddressBook::getExternLastSyncAddressees()
741{ 742{
742 Addressee::List results; 743 Addressee::List results;
743 744
744 Iterator it; 745 Iterator it;
745 for ( it = begin(); it != end(); ++it ) { 746 for ( it = begin(); it != end(); ++it ) {
746 if ( (*it).uid().left( 19 ) == "last-syncAddressee-" ) { 747 if ( (*it).uid().left( 19 ) == "last-syncAddressee-" ) {
747 if ( (*it).familyName().left(4) == "!E: " ) 748 if ( (*it).familyName().left(4) == "!E: " )
748 results.append( *it ); 749 results.append( *it );
749 } 750 }
750 } 751 }
751 752
752 return results; 753 return results;
753} 754}
754#endif 755#endif
755void AddressBook::resetTempSyncStat() 756void AddressBook::resetTempSyncStat()
756{ 757{
757 Iterator it; 758 Iterator it;
758 for ( it = begin(); it != end(); ++it ) { 759 for ( it = begin(); it != end(); ++it ) {
759 (*it).setTempSyncStat ( SYNC_TEMPSTATE_INITIAL ); 760 (*it).setTempSyncStat ( SYNC_TEMPSTATE_INITIAL );
760 } 761 }
761 762
762} 763}
763 764
764QStringList AddressBook:: uidList() 765QStringList AddressBook:: uidList()
765{ 766{
766 QStringList results; 767 QStringList results;
767 Iterator it; 768 Iterator it;
768 for ( it = begin(); it != end(); ++it ) { 769 for ( it = begin(); it != end(); ++it ) {
769 results.append( (*it).uid() ); 770 results.append( (*it).uid() );
770 } 771 }
771 return results; 772 return results;
772} 773}
773 774
774 775
775Addressee::List AddressBook::allAddressees() 776Addressee::List AddressBook::allAddressees()
776{ 777{
777 return d->mAddressees; 778 return d->mAddressees;
778 779
779} 780}
780 781
781Addressee::List AddressBook::findByName( const QString &name ) 782Addressee::List AddressBook::findByName( const QString &name )
782{ 783{
783 Addressee::List results; 784 Addressee::List results;
784 785
785 Iterator it; 786 Iterator it;
786 for ( it = begin(); it != end(); ++it ) { 787 for ( it = begin(); it != end(); ++it ) {
787 if ( name == (*it).realName() ) { 788 if ( name == (*it).realName() ) {
788 results.append( *it ); 789 results.append( *it );
789 } 790 }
790 } 791 }
791 792
792 return results; 793 return results;
793} 794}
794 795
795Addressee::List AddressBook::findByEmail( const QString &email ) 796Addressee::List AddressBook::findByEmail( const QString &email )
796{ 797{
797 Addressee::List results; 798 Addressee::List results;
798 QStringList mailList; 799 QStringList mailList;
799 800
800 Iterator it; 801 Iterator it;
801 for ( it = begin(); it != end(); ++it ) { 802 for ( it = begin(); it != end(); ++it ) {
802 mailList = (*it).emails(); 803 mailList = (*it).emails();
803 for ( QStringList::Iterator ite = mailList.begin(); ite != mailList.end(); ++ite ) { 804 for ( QStringList::Iterator ite = mailList.begin(); ite != mailList.end(); ++ite ) {
804 if ( email == (*ite) ) { 805 if ( email == (*ite) ) {
805 results.append( *it ); 806 results.append( *it );
806 } 807 }
807 } 808 }
808 } 809 }
809 810
810 return results; 811 return results;
811} 812}
812 813
813Addressee::List AddressBook::findByCategory( const QString &category ) 814Addressee::List AddressBook::findByCategory( const QString &category )
814{ 815{
815 Addressee::List results; 816 Addressee::List results;
816 817
817 Iterator it; 818 Iterator it;
818 for ( it = begin(); it != end(); ++it ) { 819 for ( it = begin(); it != end(); ++it ) {
819 if ( (*it).hasCategory( category) ) { 820 if ( (*it).hasCategory( category) ) {
820 results.append( *it ); 821 results.append( *it );
821 } 822 }
822 } 823 }
823 824
824 return results; 825 return results;
825} 826}
826 827
827void AddressBook::dump() const 828void AddressBook::dump() const
828{ 829{
829 kdDebug(5700) << "AddressBook::dump() --- begin ---" << endl; 830 kdDebug(5700) << "AddressBook::dump() --- begin ---" << endl;
830 831
831 ConstIterator it; 832 ConstIterator it;
832 for( it = begin(); it != end(); ++it ) { 833 for( it = begin(); it != end(); ++it ) {
833 (*it).dump(); 834 (*it).dump();
834 } 835 }
835 836
836 kdDebug(5700) << "AddressBook::dump() --- end ---" << endl; 837 kdDebug(5700) << "AddressBook::dump() --- end ---" << endl;
837} 838}
838 839
839QString AddressBook::identifier() 840QString AddressBook::identifier()
840{ 841{
841 QStringList identifier; 842 QStringList identifier;
842 843
843 844
844 KRES::Manager<Resource>::ActiveIterator it; 845 KRES::Manager<Resource>::ActiveIterator it;
845 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { 846 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) {
846 if ( !(*it)->identifier().isEmpty() ) 847 if ( !(*it)->identifier().isEmpty() )
847 identifier.append( (*it)->identifier() ); 848 identifier.append( (*it)->identifier() );
848 } 849 }
849 850
850 return identifier.join( ":" ); 851 return identifier.join( ":" );
851} 852}
852 853
853Field::List AddressBook::fields( int category ) 854Field::List AddressBook::fields( int category )
854{ 855{
855 if ( d->mAllFields.isEmpty() ) { 856 if ( d->mAllFields.isEmpty() ) {
856 d->mAllFields = Field::allFields(); 857 d->mAllFields = Field::allFields();
857 } 858 }
858 859
859 if ( category == Field::All ) return d->mAllFields; 860 if ( category == Field::All ) return d->mAllFields;
860 861
861 Field::List result; 862 Field::List result;
862 Field::List::ConstIterator it; 863 Field::List::ConstIterator it;
863 for( it = d->mAllFields.begin(); it != d->mAllFields.end(); ++it ) { 864 for( it = d->mAllFields.begin(); it != d->mAllFields.end(); ++it ) {
864 if ( (*it)->category() & category ) result.append( *it ); 865 if ( (*it)->category() & category ) result.append( *it );
865 } 866 }
866 867
867 return result; 868 return result;
868} 869}
869 870
870bool AddressBook::addCustomField( const QString &label, int category, 871bool AddressBook::addCustomField( const QString &label, int category,
871 const QString &key, const QString &app ) 872 const QString &key, const QString &app )
872{ 873{
873 if ( d->mAllFields.isEmpty() ) { 874 if ( d->mAllFields.isEmpty() ) {
874 d->mAllFields = Field::allFields(); 875 d->mAllFields = Field::allFields();
875 } 876 }
876//US QString a = app.isNull() ? KGlobal::instance()->instanceName() : app; 877//US QString a = app.isNull() ? KGlobal::instance()->instanceName() : app;
877 QString a = app.isNull() ? KGlobal::getAppName() : app; 878 QString a = app.isNull() ? KGlobal::getAppName() : app;
878 879
879 QString k = key.isNull() ? label : key; 880 QString k = key.isNull() ? label : key;
880 881
881 Field *field = Field::createCustomField( label, category, k, a ); 882 Field *field = Field::createCustomField( label, category, k, a );
882 883
883 if ( !field ) return false; 884 if ( !field ) return false;
884 885
885 d->mAllFields.append( field ); 886 d->mAllFields.append( field );
886 887
887 return true; 888 return true;
888} 889}
889 890
890QDataStream &KABC::operator<<( QDataStream &s, const AddressBook &ab ) 891QDataStream &KABC::operator<<( QDataStream &s, const AddressBook &ab )
891{ 892{
892 if (!ab.d) return s; 893 if (!ab.d) return s;
893 894
894 return s << ab.d->mAddressees; 895 return s << ab.d->mAddressees;
895} 896}
896 897
897QDataStream &KABC::operator>>( QDataStream &s, AddressBook &ab ) 898QDataStream &KABC::operator>>( QDataStream &s, AddressBook &ab )
898{ 899{
899 if (!ab.d) return s; 900 if (!ab.d) return s;
900 901
901 s >> ab.d->mAddressees; 902 s >> ab.d->mAddressees;
902 903
903 return s; 904 return s;
904} 905}
905 906
906bool AddressBook::addResource( Resource *resource ) 907bool AddressBook::addResource( Resource *resource )
907{ 908{
908 if ( !resource->open() ) { 909 if ( !resource->open() ) {
909 kdDebug(5700) << "AddressBook::addResource(): can't add resource" << endl; 910 kdDebug(5700) << "AddressBook::addResource(): can't add resource" << endl;
910 return false; 911 return false;
911 } 912 }
912 913
913 resource->setAddressBook( this ); 914 resource->setAddressBook( this );
914 915
915 d->mManager->add( resource ); 916 d->mManager->add( resource );
916 return true; 917 return true;
917} 918}
918 919
919bool AddressBook::removeResource( Resource *resource ) 920bool AddressBook::removeResource( Resource *resource )
920{ 921{
921 resource->close(); 922 resource->close();
922 923
923 if ( resource == standardResource() ) 924 if ( resource == standardResource() )
924 d->mManager->setStandardResource( 0 ); 925 d->mManager->setStandardResource( 0 );
925 926
926 resource->setAddressBook( 0 ); 927 resource->setAddressBook( 0 );
927 928
928 d->mManager->remove( resource ); 929 d->mManager->remove( resource );
929 return true; 930 return true;
930} 931}
931 932
932QPtrList<Resource> AddressBook::resources() 933QPtrList<Resource> AddressBook::resources()
933{ 934{
934 QPtrList<Resource> list; 935 QPtrList<Resource> list;
935 936
936// qDebug("AddressBook::resources() 1"); 937// qDebug("AddressBook::resources() 1");
937 938
938 KRES::Manager<Resource>::ActiveIterator it; 939 KRES::Manager<Resource>::ActiveIterator it;
939 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) 940 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it )
940 list.append( *it ); 941 list.append( *it );
941 942
942 return list; 943 return list;
943} 944}
944 945
945/*US 946/*US
946void AddressBook::setErrorHandler( ErrorHandler *handler ) 947void AddressBook::setErrorHandler( ErrorHandler *handler )
947{ 948{
948 delete d->mErrorHandler; 949 delete d->mErrorHandler;
949 d->mErrorHandler = handler; 950 d->mErrorHandler = handler;
950} 951}
951*/ 952*/
952 953
953void AddressBook::error( const QString& msg ) 954void AddressBook::error( const QString& msg )
954{ 955{
955/*US 956/*US
956 if ( !d->mErrorHandler ) // create default error handler 957 if ( !d->mErrorHandler ) // create default error handler
957 d->mErrorHandler = new ConsoleErrorHandler; 958 d->mErrorHandler = new ConsoleErrorHandler;
958 959
959 if ( d->mErrorHandler ) 960 if ( d->mErrorHandler )
960 d->mErrorHandler->error( msg ); 961 d->mErrorHandler->error( msg );
961 else 962 else
962 kdError(5700) << "no error handler defined" << endl; 963 kdError(5700) << "no error handler defined" << endl;
963*/ 964*/
964 kdDebug(5700) << "msg" << endl; 965 kdDebug(5700) << "msg" << endl;
965 qDebug(msg); 966 qDebug(msg);
966} 967}
967 968
968void AddressBook::deleteRemovedAddressees() 969void AddressBook::deleteRemovedAddressees()
969{ 970{
970 Addressee::List::Iterator it; 971 Addressee::List::Iterator it;
971 for ( it = d->mRemovedAddressees.begin(); it != d->mRemovedAddressees.end(); ++it ) { 972 for ( it = d->mRemovedAddressees.begin(); it != d->mRemovedAddressees.end(); ++it ) {
972 Resource *resource = (*it).resource(); 973 Resource *resource = (*it).resource();
973 if ( resource && !resource->readOnly() && resource->isOpen() ) 974 if ( resource && !resource->readOnly() && resource->isOpen() )
974 resource->removeAddressee( *it ); 975 resource->removeAddressee( *it );
975 } 976 }
976 977
977 d->mRemovedAddressees.clear(); 978 d->mRemovedAddressees.clear();
978} 979}
979 980
980void AddressBook::setStandardResource( Resource *resource ) 981void AddressBook::setStandardResource( Resource *resource )
981{ 982{
982// qDebug("AddressBook::setStandardResource 1"); 983// qDebug("AddressBook::setStandardResource 1");
983 d->mManager->setStandardResource( resource ); 984 d->mManager->setStandardResource( resource );
984} 985}
985 986
986Resource *AddressBook::standardResource() 987Resource *AddressBook::standardResource()
987{ 988{
988 return d->mManager->standardResource(); 989 return d->mManager->standardResource();
989} 990}
990 991
991KRES::Manager<Resource> *AddressBook::resourceManager() 992KRES::Manager<Resource> *AddressBook::resourceManager()
992{ 993{
993 return d->mManager; 994 return d->mManager;
994} 995}
995 996
996void AddressBook::cleanUp() 997void AddressBook::cleanUp()
997{ 998{
998 KRES::Manager<Resource>::ActiveIterator it; 999 KRES::Manager<Resource>::ActiveIterator it;
999 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) { 1000 for ( it = d->mManager->activeBegin(); it != d->mManager->activeEnd(); ++it ) {
1000 if ( !(*it)->readOnly() && (*it)->isOpen() ) 1001 if ( !(*it)->readOnly() && (*it)->isOpen() )
1001 (*it)->cleanUp(); 1002 (*it)->cleanUp();
1002 } 1003 }
1003} 1004}
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index efcd492..7ec3fca 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -1,2898 +1,2899 @@
1/* 1/*
2 This file is part of KAddressbook. 2 This file is part of KAddressbook.
3 Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> 3 Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24/*s 24/*s
25Enhanced Version of the file for platform independent KDE tools. 25Enhanced Version of the file for platform independent KDE tools.
26Copyright (c) 2004 Ulf Schenk 26Copyright (c) 2004 Ulf Schenk
27 27
28$Id$ 28$Id$
29*/ 29*/
30 30
31#include "kabcore.h" 31#include "kabcore.h"
32 32
33#include <stdaddressbook.h> 33#include <stdaddressbook.h>
34#include <klocale.h> 34#include <klocale.h>
35#include <kfiledialog.h> 35#include <kfiledialog.h>
36#include <qtimer.h> 36#include <qtimer.h>
37#include <qlabel.h> 37#include <qlabel.h>
38#include <qregexp.h> 38#include <qregexp.h>
39#include <qlineedit.h> 39#include <qlineedit.h>
40#include <qcheckbox.h> 40#include <qcheckbox.h>
41#include <qpushbutton.h> 41#include <qpushbutton.h>
42#include <qprogressbar.h> 42#include <qprogressbar.h>
43#include <libkdepim/phoneaccess.h> 43#include <libkdepim/phoneaccess.h>
44 44
45#ifndef KAB_EMBEDDED 45#ifndef KAB_EMBEDDED
46#include <qclipboard.h> 46#include <qclipboard.h>
47#include <qdir.h> 47#include <qdir.h>
48#include <qfile.h> 48#include <qfile.h>
49#include <qapplicaton.h> 49#include <qapplicaton.h>
50#include <qprogressbar.h> 50#include <qprogressbar.h>
51#include <qlayout.h> 51#include <qlayout.h>
52#include <qregexp.h> 52#include <qregexp.h>
53#include <qvbox.h> 53#include <qvbox.h>
54#include <kabc/addresseelist.h> 54#include <kabc/addresseelist.h>
55#include <kabc/errorhandler.h> 55#include <kabc/errorhandler.h>
56#include <kabc/resource.h> 56#include <kabc/resource.h>
57#include <kabc/vcardconverter.h> 57#include <kabc/vcardconverter.h>
58#include <kapplication.h> 58#include <kapplication.h>
59#include <kactionclasses.h> 59#include <kactionclasses.h>
60#include <kcmultidialog.h> 60#include <kcmultidialog.h>
61#include <kdebug.h> 61#include <kdebug.h>
62#include <kdeversion.h> 62#include <kdeversion.h>
63#include <kkeydialog.h> 63#include <kkeydialog.h>
64#include <kmessagebox.h> 64#include <kmessagebox.h>
65#include <kprinter.h> 65#include <kprinter.h>
66#include <kprotocolinfo.h> 66#include <kprotocolinfo.h>
67#include <kresources/selectdialog.h> 67#include <kresources/selectdialog.h>
68#include <kstandarddirs.h> 68#include <kstandarddirs.h>
69#include <ktempfile.h> 69#include <ktempfile.h>
70#include <kxmlguiclient.h> 70#include <kxmlguiclient.h>
71#include <kaboutdata.h> 71#include <kaboutdata.h>
72#include <libkdepim/categoryselectdialog.h> 72#include <libkdepim/categoryselectdialog.h>
73 73
74#include "addresseeutil.h" 74#include "addresseeutil.h"
75#include "addresseeeditordialog.h" 75#include "addresseeeditordialog.h"
76#include "extensionmanager.h" 76#include "extensionmanager.h"
77#include "kstdaction.h" 77#include "kstdaction.h"
78#include "kaddressbookservice.h" 78#include "kaddressbookservice.h"
79#include "ldapsearchdialog.h" 79#include "ldapsearchdialog.h"
80#include "printing/printingwizard.h" 80#include "printing/printingwizard.h"
81#else // KAB_EMBEDDED 81#else // KAB_EMBEDDED
82 82
83#include <kapplication.h> 83#include <kapplication.h>
84#include "KDGanttMinimizeSplitter.h" 84#include "KDGanttMinimizeSplitter.h"
85#include "kaddressbookmain.h" 85#include "kaddressbookmain.h"
86#include "kactioncollection.h" 86#include "kactioncollection.h"
87#include "addresseedialog.h" 87#include "addresseedialog.h"
88//US 88//US
89#include <addresseeview.h> 89#include <addresseeview.h>
90 90
91#include <qapp.h> 91#include <qapp.h>
92#include <qmenubar.h> 92#include <qmenubar.h>
93//#include <qtoolbar.h> 93//#include <qtoolbar.h>
94#include <qmessagebox.h> 94#include <qmessagebox.h>
95#include <kdebug.h> 95#include <kdebug.h>
96#include <kiconloader.h> // needed for SmallIcon 96#include <kiconloader.h> // needed for SmallIcon
97#include <kresources/kcmkresources.h> 97#include <kresources/kcmkresources.h>
98#include <ktoolbar.h> 98#include <ktoolbar.h>
99 99
100 100
101//#include <qlabel.h> 101//#include <qlabel.h>
102 102
103 103
104#ifndef DESKTOP_VERSION 104#ifndef DESKTOP_VERSION
105#include <qpe/ir.h> 105#include <qpe/ir.h>
106#include <qpe/qpemenubar.h> 106#include <qpe/qpemenubar.h>
107#include <qtopia/qcopenvelope_qws.h> 107#include <qtopia/qcopenvelope_qws.h>
108#else 108#else
109 109
110#include <qmenubar.h> 110#include <qmenubar.h>
111#endif 111#endif
112 112
113#endif // KAB_EMBEDDED 113#endif // KAB_EMBEDDED
114#include "kcmconfigs/kcmkabconfig.h" 114#include "kcmconfigs/kcmkabconfig.h"
115#include "kcmconfigs/kcmkdepimconfig.h" 115#include "kcmconfigs/kcmkdepimconfig.h"
116#include "kpimglobalprefs.h" 116#include "kpimglobalprefs.h"
117#include "externalapphandler.h" 117#include "externalapphandler.h"
118 118
119 119
120#include <kresources/selectdialog.h> 120#include <kresources/selectdialog.h>
121#include <kmessagebox.h> 121#include <kmessagebox.h>
122 122
123#include <picture.h> 123#include <picture.h>
124#include <resource.h> 124#include <resource.h>
125 125
126//US#include <qsplitter.h> 126//US#include <qsplitter.h>
127#include <qmap.h> 127#include <qmap.h>
128#include <qdir.h> 128#include <qdir.h>
129#include <qfile.h> 129#include <qfile.h>
130#include <qvbox.h> 130#include <qvbox.h>
131#include <qlayout.h> 131#include <qlayout.h>
132#include <qclipboard.h> 132#include <qclipboard.h>
133#include <qtextstream.h> 133#include <qtextstream.h>
134 134
135#include <libkdepim/categoryselectdialog.h> 135#include <libkdepim/categoryselectdialog.h>
136#include <kabc/vcardconverter.h> 136#include <kabc/vcardconverter.h>
137 137
138 138
139#include "addresseeutil.h" 139#include "addresseeutil.h"
140#include "undocmds.h" 140#include "undocmds.h"
141#include "addresseeeditordialog.h" 141#include "addresseeeditordialog.h"
142#include "viewmanager.h" 142#include "viewmanager.h"
143#include "details/detailsviewcontainer.h" 143#include "details/detailsviewcontainer.h"
144#include "kabprefs.h" 144#include "kabprefs.h"
145#include "xxportmanager.h" 145#include "xxportmanager.h"
146#include "incsearchwidget.h" 146#include "incsearchwidget.h"
147#include "jumpbuttonbar.h" 147#include "jumpbuttonbar.h"
148#include "extensionmanager.h" 148#include "extensionmanager.h"
149#include "addresseeconfig.h" 149#include "addresseeconfig.h"
150#include <kcmultidialog.h> 150#include <kcmultidialog.h>
151 151
152#ifdef _WIN32_ 152#ifdef _WIN32_
153 153
154#include "kaimportoldialog.h" 154#include "kaimportoldialog.h"
155#else 155#else
156#include <unistd.h> 156#include <unistd.h>
157#endif 157#endif
158// sync includes 158// sync includes
159#include <libkdepim/ksyncprofile.h> 159#include <libkdepim/ksyncprofile.h>
160#include <libkdepim/ksyncprefsdialog.h> 160#include <libkdepim/ksyncprefsdialog.h>
161 161
162class KAex2phonePrefs : public QDialog 162class KAex2phonePrefs : public QDialog
163{ 163{
164 public: 164 public:
165 KAex2phonePrefs( QWidget *parent=0, const char *name=0 ) : 165 KAex2phonePrefs( QWidget *parent=0, const char *name=0 ) :
166 QDialog( parent, name, true ) 166 QDialog( parent, name, true )
167 { 167 {
168 setCaption( i18n("Export to phone options") ); 168 setCaption( i18n("Export to phone options") );
169 QVBoxLayout* lay = new QVBoxLayout( this ); 169 QVBoxLayout* lay = new QVBoxLayout( this );
170 lay->setSpacing( 3 ); 170 lay->setSpacing( 3 );
171 lay->setMargin( 3 ); 171 lay->setMargin( 3 );
172 QLabel *lab; 172 QLabel *lab;
173 lay->addWidget(lab = new QLabel( i18n("Please read Help-Sync Howto\nto know what settings to use."), this ) ); 173 lay->addWidget(lab = new QLabel( i18n("Please read Help-Sync Howto\nto know what settings to use."), this ) );
174 lab->setAlignment (AlignHCenter ); 174 lab->setAlignment (AlignHCenter );
175 QHBox* temphb; 175 QHBox* temphb;
176 temphb = new QHBox( this ); 176 temphb = new QHBox( this );
177 new QLabel( i18n("I/O device: "), temphb ); 177 new QLabel( i18n("I/O device: "), temphb );
178 mPhoneDevice = new QLineEdit( temphb); 178 mPhoneDevice = new QLineEdit( temphb);
179 lay->addWidget( temphb ); 179 lay->addWidget( temphb );
180 temphb = new QHBox( this ); 180 temphb = new QHBox( this );
181 new QLabel( i18n("Connection: "), temphb ); 181 new QLabel( i18n("Connection: "), temphb );
182 mPhoneConnection = new QLineEdit( temphb); 182 mPhoneConnection = new QLineEdit( temphb);
183 lay->addWidget( temphb ); 183 lay->addWidget( temphb );
184 temphb = new QHBox( this ); 184 temphb = new QHBox( this );
185 new QLabel( i18n("Model(opt.): "), temphb ); 185 new QLabel( i18n("Model(opt.): "), temphb );
186 mPhoneModel = new QLineEdit( temphb); 186 mPhoneModel = new QLineEdit( temphb);
187 lay->addWidget( temphb ); 187 lay->addWidget( temphb );
188 mWriteToSim= new QCheckBox( i18n("Write Contacts to SIM card\n(if not, write to phone memory)"), this ); 188 mWriteToSim= new QCheckBox( i18n("Write Contacts to SIM card\n(if not, write to phone memory)"), this );
189 lay->addWidget( mWriteToSim ); 189 lay->addWidget( mWriteToSim );
190 lay->addWidget(lab = new QLabel( i18n("NOTE: This will remove all old\ncontact data on phone!"), this ) ); 190 lay->addWidget(lab = new QLabel( i18n("NOTE: This will remove all old\ncontact data on phone!"), this ) );
191 lab->setAlignment (AlignHCenter ); 191 lab->setAlignment (AlignHCenter );
192 QPushButton * ok = new QPushButton( i18n("Export to mobile phone!"), this ); 192 QPushButton * ok = new QPushButton( i18n("Export to mobile phone!"), this );
193 lay->addWidget( ok ); 193 lay->addWidget( ok );
194 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 194 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
195 lay->addWidget( cancel ); 195 lay->addWidget( cancel );
196 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 196 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
197 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 197 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
198 resize( 220, 240 ); 198 resize( 220, 240 );
199 199
200 } 200 }
201 201
202public: 202public:
203 QLineEdit* mPhoneConnection, *mPhoneDevice, *mPhoneModel; 203 QLineEdit* mPhoneConnection, *mPhoneDevice, *mPhoneModel;
204 QCheckBox* mWriteToSim; 204 QCheckBox* mWriteToSim;
205}; 205};
206 206
207bool pasteWithNewUid = true; 207bool pasteWithNewUid = true;
208 208
209#ifdef KAB_EMBEDDED 209#ifdef KAB_EMBEDDED
210KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name ) 210KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name )
211 : QWidget( parent, name ), KSyncInterface(), mGUIClient( client ), mViewManager( 0 ), 211 : QWidget( parent, name ), KSyncInterface(), mGUIClient( client ), mViewManager( 0 ),
212 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/ 212 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/
213 mReadWrite( readWrite ), mModified( false ), mMainWindow(client) 213 mReadWrite( readWrite ), mModified( false ), mMainWindow(client)
214#else //KAB_EMBEDDED 214#else //KAB_EMBEDDED
215KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name ) 215KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name )
216 : QWidget( parent, name ), KSyncInterface(), mGUIClient( client ), mViewManager( 0 ), 216 : QWidget( parent, name ), KSyncInterface(), mGUIClient( client ), mViewManager( 0 ),
217 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ), 217 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ),
218 mReadWrite( readWrite ), mModified( false ) 218 mReadWrite( readWrite ), mModified( false )
219#endif //KAB_EMBEDDED 219#endif //KAB_EMBEDDED
220{ 220{
221 // syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::KAPI, KABPrefs::instance(), syncMenu); 221 // syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::KAPI, KABPrefs::instance(), syncMenu);
222 // syncManager->setBlockSave(false); 222 // syncManager->setBlockSave(false);
223 mExtensionBarSplitter = 0; 223 mExtensionBarSplitter = 0;
224 mIsPart = !parent->inherits( "KAddressBookMain" ); 224 mIsPart = !parent->inherits( "KAddressBookMain" );
225 225
226 mAddressBook = KABC::StdAddressBook::self(); 226 mAddressBook = KABC::StdAddressBook::self();
227 KABC::StdAddressBook::setAutomaticSave( false ); 227 KABC::StdAddressBook::setAutomaticSave( false );
228 228
229#ifndef KAB_EMBEDDED 229#ifndef KAB_EMBEDDED
230 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler ); 230 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler );
231#endif //KAB_EMBEDDED 231#endif //KAB_EMBEDDED
232 232
233 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ), 233 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ),
234 SLOT( addressBookChanged() ) ); 234 SLOT( addressBookChanged() ) );
235 235
236#if 0 236#if 0
237 // LP moved to addressbook init method 237 // LP moved to addressbook init method
238 mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization, 238 mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization,
239 "X-Department", "KADDRESSBOOK" ); 239 "X-Department", "KADDRESSBOOK" );
240 mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization, 240 mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization,
241 "X-Profession", "KADDRESSBOOK" ); 241 "X-Profession", "KADDRESSBOOK" );
242 mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization, 242 mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization,
243 "X-AssistantsName", "KADDRESSBOOK" ); 243 "X-AssistantsName", "KADDRESSBOOK" );
244 mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization, 244 mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization,
245 "X-ManagersName", "KADDRESSBOOK" ); 245 "X-ManagersName", "KADDRESSBOOK" );
246 mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal, 246 mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal,
247 "X-SpousesName", "KADDRESSBOOK" ); 247 "X-SpousesName", "KADDRESSBOOK" );
248 mAddressBook->addCustomField( i18n( "Office" ), KABC::Field::Personal, 248 mAddressBook->addCustomField( i18n( "Office" ), KABC::Field::Personal,
249 "X-Office", "KADDRESSBOOK" ); 249 "X-Office", "KADDRESSBOOK" );
250 mAddressBook->addCustomField( i18n( "IM Address" ), KABC::Field::Personal, 250 mAddressBook->addCustomField( i18n( "IM Address" ), KABC::Field::Personal,
251 "X-IMAddress", "KADDRESSBOOK" ); 251 "X-IMAddress", "KADDRESSBOOK" );
252 mAddressBook->addCustomField( i18n( "Anniversary" ), KABC::Field::Personal, 252 mAddressBook->addCustomField( i18n( "Anniversary" ), KABC::Field::Personal,
253 "X-Anniversary", "KADDRESSBOOK" ); 253 "X-Anniversary", "KADDRESSBOOK" );
254 254
255 //US added this field to become compatible with Opie/qtopia addressbook 255 //US added this field to become compatible with Opie/qtopia addressbook
256 // values can be "female" or "male" or "". An empty field represents undefined. 256 // values can be "female" or "male" or "". An empty field represents undefined.
257 mAddressBook->addCustomField( i18n( "Gender" ), KABC::Field::Personal, 257 mAddressBook->addCustomField( i18n( "Gender" ), KABC::Field::Personal,
258 "X-Gender", "KADDRESSBOOK" ); 258 "X-Gender", "KADDRESSBOOK" );
259 mAddressBook->addCustomField( i18n( "Children" ), KABC::Field::Personal, 259 mAddressBook->addCustomField( i18n( "Children" ), KABC::Field::Personal,
260 "X-Children", "KADDRESSBOOK" ); 260 "X-Children", "KADDRESSBOOK" );
261 mAddressBook->addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal, 261 mAddressBook->addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal,
262 "X-FreeBusyUrl", "KADDRESSBOOK" ); 262 "X-FreeBusyUrl", "KADDRESSBOOK" );
263#endif 263#endif
264 initGUI(); 264 initGUI();
265 265
266 mIncSearchWidget->setFocus(); 266 mIncSearchWidget->setFocus();
267 267
268 268
269 connect( mViewManager, SIGNAL( selected( const QString& ) ), 269 connect( mViewManager, SIGNAL( selected( const QString& ) ),
270 SLOT( setContactSelected( const QString& ) ) ); 270 SLOT( setContactSelected( const QString& ) ) );
271 connect( mViewManager, SIGNAL( executed( const QString& ) ), 271 connect( mViewManager, SIGNAL( executed( const QString& ) ),
272 SLOT( executeContact( const QString& ) ) ); 272 SLOT( executeContact( const QString& ) ) );
273 273
274 connect( mViewManager, SIGNAL( deleteRequest( ) ), 274 connect( mViewManager, SIGNAL( deleteRequest( ) ),
275 SLOT( deleteContacts( ) ) ); 275 SLOT( deleteContacts( ) ) );
276 connect( mViewManager, SIGNAL( modified() ), 276 connect( mViewManager, SIGNAL( modified() ),
277 SLOT( setModified() ) ); 277 SLOT( setModified() ) );
278 278
279 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) ); 279 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) );
280 connect( mExtensionManager, SIGNAL( changedActiveExtension( int ) ), this, SLOT( extensionChanged( int ) ) ); 280 connect( mExtensionManager, SIGNAL( changedActiveExtension( int ) ), this, SLOT( extensionChanged( int ) ) );
281 281
282 connect( mXXPortManager, SIGNAL( modified() ), 282 connect( mXXPortManager, SIGNAL( modified() ),
283 SLOT( setModified() ) ); 283 SLOT( setModified() ) );
284 284
285 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ), 285 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ),
286 SLOT( incrementalSearch( const QString& ) ) ); 286 SLOT( incrementalSearch( const QString& ) ) );
287 connect( mIncSearchWidget, SIGNAL( fieldChanged() ), 287 connect( mIncSearchWidget, SIGNAL( fieldChanged() ),
288 mJumpButtonBar, SLOT( recreateButtons() ) ); 288 mJumpButtonBar, SLOT( recreateButtons() ) );
289 289
290 connect( mDetails, SIGNAL( sendEmail( const QString& ) ), 290 connect( mDetails, SIGNAL( sendEmail( const QString& ) ),
291 SLOT( sendMail( const QString& ) ) ); 291 SLOT( sendMail( const QString& ) ) );
292 292
293 293
294 connect( ExternalAppHandler::instance(), SIGNAL (requestForNameEmailUidList(const QString&, const QString&)),this, SLOT(requestForNameEmailUidList(const QString&, const QString&))); 294 connect( ExternalAppHandler::instance(), SIGNAL (requestForNameEmailUidList(const QString&, const QString&)),this, SLOT(requestForNameEmailUidList(const QString&, const QString&)));
295 connect( ExternalAppHandler::instance(), SIGNAL (requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)),this, SLOT(requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&))); 295 connect( ExternalAppHandler::instance(), SIGNAL (requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)),this, SLOT(requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)));
296 connect( ExternalAppHandler::instance(), SIGNAL (requestForBirthdayList(const QString&, const QString&)),this, SLOT(requestForBirthdayList(const QString&, const QString&))); 296 connect( ExternalAppHandler::instance(), SIGNAL (requestForBirthdayList(const QString&, const QString&)),this, SLOT(requestForBirthdayList(const QString&, const QString&)));
297 297
298 298
299#ifndef KAB_EMBEDDED 299#ifndef KAB_EMBEDDED
300 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ), 300 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ),
301 mXXPortManager, SLOT( importVCard( const KURL& ) ) ); 301 mXXPortManager, SLOT( importVCard( const KURL& ) ) );
302 302
303 connect( mDetails, SIGNAL( browse( const QString& ) ), 303 connect( mDetails, SIGNAL( browse( const QString& ) ),
304 SLOT( browse( const QString& ) ) ); 304 SLOT( browse( const QString& ) ) );
305 305
306 306
307 mAddressBookService = new KAddressBookService( this ); 307 mAddressBookService = new KAddressBookService( this );
308 308
309#endif //KAB_EMBEDDED 309#endif //KAB_EMBEDDED
310 mEditorDialog = 0; 310 mEditorDialog = 0;
311 createAddresseeEditorDialog( this ); 311 createAddresseeEditorDialog( this );
312 setModified( false ); 312 setModified( false );
313} 313}
314 314
315KABCore::~KABCore() 315KABCore::~KABCore()
316{ 316{
317 // save(); 317 // save();
318 //saveSettings(); 318 //saveSettings();
319 //KABPrefs::instance()->writeConfig(); 319 //KABPrefs::instance()->writeConfig();
320 delete AddresseeConfig::instance(); 320 delete AddresseeConfig::instance();
321 mAddressBook = 0; 321 mAddressBook = 0;
322 KABC::StdAddressBook::close(); 322 KABC::StdAddressBook::close();
323 323
324 delete syncManager; 324 delete syncManager;
325 325
326} 326}
327 327
328void KABCore::recieve( QString fn ) 328void KABCore::recieve( QString fn )
329{ 329{
330 //qDebug("KABCore::recieve "); 330 //qDebug("KABCore::recieve ");
331 mAddressBook->importFromFile( fn, true ); 331 mAddressBook->importFromFile( fn, true );
332 mViewManager->refreshView(); 332 mViewManager->refreshView();
333 topLevelWidget()->raise(); 333 topLevelWidget()->raise();
334} 334}
335void KABCore::restoreSettings() 335void KABCore::restoreSettings()
336{ 336{
337 mMultipleViewsAtOnce = KABPrefs::instance()->mMultipleViewsAtOnce; 337 mMultipleViewsAtOnce = KABPrefs::instance()->mMultipleViewsAtOnce;
338 338
339 bool state; 339 bool state;
340 340
341 if (mMultipleViewsAtOnce) 341 if (mMultipleViewsAtOnce)
342 state = KABPrefs::instance()->mDetailsPageVisible; 342 state = KABPrefs::instance()->mDetailsPageVisible;
343 else 343 else
344 state = false; 344 state = false;
345 345
346 mActionDetails->setChecked( state ); 346 mActionDetails->setChecked( state );
347 setDetailsVisible( state ); 347 setDetailsVisible( state );
348 348
349 state = KABPrefs::instance()->mJumpButtonBarVisible; 349 state = KABPrefs::instance()->mJumpButtonBarVisible;
350 350
351 mActionJumpBar->setChecked( state ); 351 mActionJumpBar->setChecked( state );
352 setJumpButtonBarVisible( state ); 352 setJumpButtonBarVisible( state );
353/*US 353/*US
354 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter; 354 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter;
355 if ( splitterSize.count() == 0 ) { 355 if ( splitterSize.count() == 0 ) {
356 splitterSize.append( width() / 2 ); 356 splitterSize.append( width() / 2 );
357 splitterSize.append( width() / 2 ); 357 splitterSize.append( width() / 2 );
358 } 358 }
359 mMiniSplitter->setSizes( splitterSize ); 359 mMiniSplitter->setSizes( splitterSize );
360 if ( mExtensionBarSplitter ) { 360 if ( mExtensionBarSplitter ) {
361 splitterSize = KABPrefs::instance()->mExtensionsSplitter; 361 splitterSize = KABPrefs::instance()->mExtensionsSplitter;
362 if ( splitterSize.count() == 0 ) { 362 if ( splitterSize.count() == 0 ) {
363 splitterSize.append( width() / 2 ); 363 splitterSize.append( width() / 2 );
364 splitterSize.append( width() / 2 ); 364 splitterSize.append( width() / 2 );
365 } 365 }
366 mExtensionBarSplitter->setSizes( splitterSize ); 366 mExtensionBarSplitter->setSizes( splitterSize );
367 367
368 } 368 }
369*/ 369*/
370 mViewManager->restoreSettings(); 370 mViewManager->restoreSettings();
371 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField ); 371 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField );
372 mExtensionManager->restoreSettings(); 372 mExtensionManager->restoreSettings();
373#ifdef DESKTOP_VERSION 373#ifdef DESKTOP_VERSION
374 int wid = width(); 374 int wid = width();
375 if ( wid < 10 ) 375 if ( wid < 10 )
376 wid = 400; 376 wid = 400;
377#else 377#else
378 int wid = QApplication::desktop()->width(); 378 int wid = QApplication::desktop()->width();
379 if ( wid < 640 ) 379 if ( wid < 640 )
380 wid = QApplication::desktop()->height(); 380 wid = QApplication::desktop()->height();
381#endif 381#endif
382 QValueList<int> splitterSize;// = KABPrefs::instance()->mDetailsSplitter; 382 QValueList<int> splitterSize;// = KABPrefs::instance()->mDetailsSplitter;
383 if ( true /*splitterSize.count() == 0*/ ) { 383 if ( true /*splitterSize.count() == 0*/ ) {
384 splitterSize.append( wid / 2 ); 384 splitterSize.append( wid / 2 );
385 splitterSize.append( wid / 2 ); 385 splitterSize.append( wid / 2 );
386 } 386 }
387 mMiniSplitter->setSizes( splitterSize ); 387 mMiniSplitter->setSizes( splitterSize );
388 if ( mExtensionBarSplitter ) { 388 if ( mExtensionBarSplitter ) {
389 //splitterSize = KABPrefs::instance()->mExtensionsSplitter; 389 //splitterSize = KABPrefs::instance()->mExtensionsSplitter;
390 if ( true /*splitterSize.count() == 0*/ ) { 390 if ( true /*splitterSize.count() == 0*/ ) {
391 splitterSize.append( wid / 2 ); 391 splitterSize.append( wid / 2 );
392 splitterSize.append( wid / 2 ); 392 splitterSize.append( wid / 2 );
393 } 393 }
394 mExtensionBarSplitter->setSizes( splitterSize ); 394 mExtensionBarSplitter->setSizes( splitterSize );
395 395
396 } 396 }
397 397
398 398
399} 399}
400 400
401void KABCore::saveSettings() 401void KABCore::saveSettings()
402{ 402{
403 KABPrefs::instance()->mJumpButtonBarVisible = mActionJumpBar->isChecked(); 403 KABPrefs::instance()->mJumpButtonBarVisible = mActionJumpBar->isChecked();
404 if ( mExtensionBarSplitter ) 404 if ( mExtensionBarSplitter )
405 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); 405 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes();
406 KABPrefs::instance()->mDetailsPageVisible = mActionDetails->isChecked(); 406 KABPrefs::instance()->mDetailsPageVisible = mActionDetails->isChecked();
407 KABPrefs::instance()->mDetailsSplitter = mMiniSplitter->sizes(); 407 KABPrefs::instance()->mDetailsSplitter = mMiniSplitter->sizes();
408#ifndef KAB_EMBEDDED 408#ifndef KAB_EMBEDDED
409 409
410 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); 410 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes();
411 KABPrefs::instance()->mDetailsSplitter = mDetailsSplitter->sizes(); 411 KABPrefs::instance()->mDetailsSplitter = mDetailsSplitter->sizes();
412#endif //KAB_EMBEDDED 412#endif //KAB_EMBEDDED
413 mExtensionManager->saveSettings(); 413 mExtensionManager->saveSettings();
414 mViewManager->saveSettings(); 414 mViewManager->saveSettings();
415 415
416 KABPrefs::instance()->mCurrentIncSearchField = mIncSearchWidget->currentItem(); 416 KABPrefs::instance()->mCurrentIncSearchField = mIncSearchWidget->currentItem();
417} 417}
418 418
419KABC::AddressBook *KABCore::addressBook() const 419KABC::AddressBook *KABCore::addressBook() const
420{ 420{
421 return mAddressBook; 421 return mAddressBook;
422} 422}
423 423
424KConfig *KABCore::config() 424KConfig *KABCore::config()
425{ 425{
426#ifndef KAB_EMBEDDED 426#ifndef KAB_EMBEDDED
427 return KABPrefs::instance()->config(); 427 return KABPrefs::instance()->config();
428#else //KAB_EMBEDDED 428#else //KAB_EMBEDDED
429 return KABPrefs::instance()->getConfig(); 429 return KABPrefs::instance()->getConfig();
430#endif //KAB_EMBEDDED 430#endif //KAB_EMBEDDED
431} 431}
432 432
433KActionCollection *KABCore::actionCollection() const 433KActionCollection *KABCore::actionCollection() const
434{ 434{
435 return mGUIClient->actionCollection(); 435 return mGUIClient->actionCollection();
436} 436}
437 437
438KABC::Field *KABCore::currentSearchField() const 438KABC::Field *KABCore::currentSearchField() const
439{ 439{
440 if (mIncSearchWidget) 440 if (mIncSearchWidget)
441 return mIncSearchWidget->currentField(); 441 return mIncSearchWidget->currentField();
442 else 442 else
443 return 0; 443 return 0;
444} 444}
445 445
446QStringList KABCore::selectedUIDs() const 446QStringList KABCore::selectedUIDs() const
447{ 447{
448 return mViewManager->selectedUids(); 448 return mViewManager->selectedUids();
449} 449}
450 450
451KABC::Resource *KABCore::requestResource( QWidget *parent ) 451KABC::Resource *KABCore::requestResource( QWidget *parent )
452{ 452{
453 QPtrList<KABC::Resource> kabcResources = addressBook()->resources(); 453 QPtrList<KABC::Resource> kabcResources = addressBook()->resources();
454 454
455 QPtrList<KRES::Resource> kresResources; 455 QPtrList<KRES::Resource> kresResources;
456 QPtrListIterator<KABC::Resource> resIt( kabcResources ); 456 QPtrListIterator<KABC::Resource> resIt( kabcResources );
457 KABC::Resource *resource; 457 KABC::Resource *resource;
458 while ( ( resource = resIt.current() ) != 0 ) { 458 while ( ( resource = resIt.current() ) != 0 ) {
459 ++resIt; 459 ++resIt;
460 if ( !resource->readOnly() ) { 460 if ( !resource->readOnly() ) {
461 KRES::Resource *res = static_cast<KRES::Resource*>( resource ); 461 KRES::Resource *res = static_cast<KRES::Resource*>( resource );
462 if ( res ) 462 if ( res )
463 kresResources.append( res ); 463 kresResources.append( res );
464 } 464 }
465 } 465 }
466 466
467 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent ); 467 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent );
468 return static_cast<KABC::Resource*>( res ); 468 return static_cast<KABC::Resource*>( res );
469} 469}
470 470
471#ifndef KAB_EMBEDDED 471#ifndef KAB_EMBEDDED
472KAboutData *KABCore::createAboutData() 472KAboutData *KABCore::createAboutData()
473#else //KAB_EMBEDDED 473#else //KAB_EMBEDDED
474void KABCore::createAboutData() 474void KABCore::createAboutData()
475#endif //KAB_EMBEDDED 475#endif //KAB_EMBEDDED
476{ 476{
477#ifndef KAB_EMBEDDED 477#ifndef KAB_EMBEDDED
478 KAboutData *about = new KAboutData( "kaddressbook", I18N_NOOP( "KAddressBook" ), 478 KAboutData *about = new KAboutData( "kaddressbook", I18N_NOOP( "KAddressBook" ),
479 "3.1", I18N_NOOP( "The KDE Address Book" ), 479 "3.1", I18N_NOOP( "The KDE Address Book" ),
480 KAboutData::License_GPL_V2, 480 KAboutData::License_GPL_V2,
481 I18N_NOOP( "(c) 1997-2003, The KDE PIM Team" ) ); 481 I18N_NOOP( "(c) 1997-2003, The KDE PIM Team" ) );
482 about->addAuthor( "Tobias Koenig", I18N_NOOP( "Current maintainer " ), "tokoe@kde.org" ); 482 about->addAuthor( "Tobias Koenig", I18N_NOOP( "Current maintainer " ), "tokoe@kde.org" );
483 about->addAuthor( "Don Sanders", I18N_NOOP( "Original author " ) ); 483 about->addAuthor( "Don Sanders", I18N_NOOP( "Original author " ) );
484 about->addAuthor( "Cornelius Schumacher", 484 about->addAuthor( "Cornelius Schumacher",
485 I18N_NOOP( "Co-maintainer, libkabc port, CSV import/export " ), 485 I18N_NOOP( "Co-maintainer, libkabc port, CSV import/export " ),
486 "schumacher@kde.org" ); 486 "schumacher@kde.org" );
487 about->addAuthor( "Mike Pilone", I18N_NOOP( "GUI and framework redesign " ), 487 about->addAuthor( "Mike Pilone", I18N_NOOP( "GUI and framework redesign " ),
488 "mpilone@slac.com" ); 488 "mpilone@slac.com" );
489 about->addAuthor( "Greg Stern", I18N_NOOP( "DCOP interface" ) ); 489 about->addAuthor( "Greg Stern", I18N_NOOP( "DCOP interface" ) );
490 about->addAuthor( "Mark Westcott", I18N_NOOP( "Contact pinning" ) ); 490 about->addAuthor( "Mark Westcott", I18N_NOOP( "Contact pinning" ) );
491 about->addAuthor( "Michel Boyer de la Giroday", I18N_NOOP( "LDAP Lookup\n" ), 491 about->addAuthor( "Michel Boyer de la Giroday", I18N_NOOP( "LDAP Lookup\n" ),
492 "michel@klaralvdalens-datakonsult.se" ); 492 "michel@klaralvdalens-datakonsult.se" );
493 about->addAuthor( "Steffen Hansen", I18N_NOOP( "LDAP Lookup " ), 493 about->addAuthor( "Steffen Hansen", I18N_NOOP( "LDAP Lookup " ),
494 "hansen@kde.org" ); 494 "hansen@kde.org" );
495 495
496 return about; 496 return about;
497#endif //KAB_EMBEDDED 497#endif //KAB_EMBEDDED
498 498
499 QString version; 499 QString version;
500#include <../version> 500#include <../version>
501 QMessageBox::about( this, "About KAddressbook/Pi", 501 QMessageBox::about( this, "About KAddressbook/Pi",
502 "KAddressbook/Platform-independent\n" 502 "KAddressbook/Platform-independent\n"
503 "(KA/Pi) " +version + " - " + 503 "(KA/Pi) " +version + " - " +
504#ifdef DESKTOP_VERSION 504#ifdef DESKTOP_VERSION
505 "Desktop Edition\n" 505 "Desktop Edition\n"
506#else 506#else
507 "PDA-Edition\n" 507 "PDA-Edition\n"
508 "for: Zaurus 5500 / 7x0 / 8x0\n" 508 "for: Zaurus 5500 / 7x0 / 8x0\n"
509#endif 509#endif
510 510
511 "(c) 2004 Ulf Schenk\n" 511 "(c) 2004 Ulf Schenk\n"
512 "(c) 2004 Lutz Rogowski\n" 512 "(c) 2004 Lutz Rogowski\n"
513 "(c) 1997-2003, The KDE PIM Team\n" 513 "(c) 1997-2003, The KDE PIM Team\n"
514 "Tobias Koenig Current maintainer\ntokoe@kde.org\n" 514 "Tobias Koenig Current maintainer\ntokoe@kde.org\n"
515 "Don Sanders Original author\n" 515 "Don Sanders Original author\n"
516 "Cornelius Schumacher Co-maintainer\nschumacher@kde.org\n" 516 "Cornelius Schumacher Co-maintainer\nschumacher@kde.org\n"
517 "Mike Pilone GUI and framework redesign\nmpilone@slac.com\n" 517 "Mike Pilone GUI and framework redesign\nmpilone@slac.com\n"
518 "Greg Stern DCOP interface\n" 518 "Greg Stern DCOP interface\n"
519 "Mark Westcot Contact pinning\n" 519 "Mark Westcot Contact pinning\n"
520 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n" 520 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n"
521 "Steffen Hansen LDAP Lookup\nhansen@kde.org\n" 521 "Steffen Hansen LDAP Lookup\nhansen@kde.org\n"
522#ifdef _WIN32_ 522#ifdef _WIN32_
523 "(c) 2004 Lutz Rogowski Import from OL\nrogowski@kde.org\n" 523 "(c) 2004 Lutz Rogowski Import from OL\nrogowski@kde.org\n"
524#endif 524#endif
525 ); 525 );
526} 526}
527 527
528void KABCore::setContactSelected( const QString &uid ) 528void KABCore::setContactSelected( const QString &uid )
529{ 529{
530 KABC::Addressee addr = mAddressBook->findByUid( uid ); 530 KABC::Addressee addr = mAddressBook->findByUid( uid );
531 if ( !mDetails->isHidden() ) 531 if ( !mDetails->isHidden() )
532 mDetails->setAddressee( addr ); 532 mDetails->setAddressee( addr );
533 533
534 if ( !addr.isEmpty() ) { 534 if ( !addr.isEmpty() ) {
535 emit contactSelected( addr.formattedName() ); 535 emit contactSelected( addr.formattedName() );
536 KABC::Picture pic = addr.photo(); 536 KABC::Picture pic = addr.photo();
537 if ( pic.isIntern() ) { 537 if ( pic.isIntern() ) {
538//US emit contactSelected( pic.data() ); 538//US emit contactSelected( pic.data() );
539//US instead use: 539//US instead use:
540 QPixmap px; 540 QPixmap px;
541 if (pic.data().isNull() != true) 541 if (pic.data().isNull() != true)
542 { 542 {
543 px.convertFromImage(pic.data()); 543 px.convertFromImage(pic.data());
544 } 544 }
545 545
546 emit contactSelected( px ); 546 emit contactSelected( px );
547 } 547 }
548 } 548 }
549 549
550 550
551 mExtensionManager->setSelectionChanged(); 551 mExtensionManager->setSelectionChanged();
552 552
553 // update the actions 553 // update the actions
554 bool selected = !uid.isEmpty(); 554 bool selected = !uid.isEmpty();
555 555
556 if ( mReadWrite ) { 556 if ( mReadWrite ) {
557 mActionCut->setEnabled( selected ); 557 mActionCut->setEnabled( selected );
558 mActionPaste->setEnabled( selected ); 558 mActionPaste->setEnabled( selected );
559 } 559 }
560 560
561 mActionCopy->setEnabled( selected ); 561 mActionCopy->setEnabled( selected );
562 mActionDelete->setEnabled( selected ); 562 mActionDelete->setEnabled( selected );
563 mActionEditAddressee->setEnabled( selected ); 563 mActionEditAddressee->setEnabled( selected );
564 mActionMail->setEnabled( selected ); 564 mActionMail->setEnabled( selected );
565 mActionMailVCard->setEnabled( selected ); 565 mActionMailVCard->setEnabled( selected );
566 //if (mActionBeam) 566 //if (mActionBeam)
567 //mActionBeam->setEnabled( selected ); 567 //mActionBeam->setEnabled( selected );
568 568
569 if (mActionBeamVCard) 569 if (mActionBeamVCard)
570 mActionBeamVCard->setEnabled( selected ); 570 mActionBeamVCard->setEnabled( selected );
571 571
572 mActionExport2phone->setEnabled( selected ); 572 mActionExport2phone->setEnabled( selected );
573 mActionWhoAmI->setEnabled( selected ); 573 mActionWhoAmI->setEnabled( selected );
574 mActionCategories->setEnabled( selected ); 574 mActionCategories->setEnabled( selected );
575} 575}
576 576
577void KABCore::sendMail() 577void KABCore::sendMail()
578{ 578{
579 sendMail( mViewManager->selectedEmails().join( ", " ) ); 579 sendMail( mViewManager->selectedEmails().join( ", " ) );
580} 580}
581 581
582void KABCore::sendMail( const QString& emaillist ) 582void KABCore::sendMail( const QString& emaillist )
583{ 583{
584 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... " 584 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... "
585 if (emaillist.contains(",") > 0) 585 if (emaillist.contains(",") > 0)
586 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null ); 586 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null );
587 else 587 else
588 ExternalAppHandler::instance()->mailToOneContact( emaillist ); 588 ExternalAppHandler::instance()->mailToOneContact( emaillist );
589} 589}
590 590
591 591
592 592
593void KABCore::mailVCard() 593void KABCore::mailVCard()
594{ 594{
595 QStringList uids = mViewManager->selectedUids(); 595 QStringList uids = mViewManager->selectedUids();
596 if ( !uids.isEmpty() ) 596 if ( !uids.isEmpty() )
597 mailVCard( uids ); 597 mailVCard( uids );
598} 598}
599 599
600void KABCore::mailVCard( const QStringList& uids ) 600void KABCore::mailVCard( const QStringList& uids )
601{ 601{
602 QStringList urls; 602 QStringList urls;
603 603
604// QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); 604// QString tmpdir = locateLocal("tmp", KGlobal::getAppName());
605 605
606 QString dirName = "/tmp/" + KApplication::randomString( 8 ); 606 QString dirName = "/tmp/" + KApplication::randomString( 8 );
607 607
608 608
609 609
610 QDir().mkdir( dirName, true ); 610 QDir().mkdir( dirName, true );
611 611
612 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 612 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
613 KABC::Addressee a = mAddressBook->findByUid( *it ); 613 KABC::Addressee a = mAddressBook->findByUid( *it );
614 614
615 if ( a.isEmpty() ) 615 if ( a.isEmpty() )
616 continue; 616 continue;
617 617
618 QString name = a.givenName() + "_" + a.familyName() + ".vcf"; 618 QString name = a.givenName() + "_" + a.familyName() + ".vcf";
619 619
620 QString fileName = dirName + "/" + name; 620 QString fileName = dirName + "/" + name;
621 621
622 QFile outFile(fileName); 622 QFile outFile(fileName);
623 623
624 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully 624 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully
625 KABC::VCardConverter converter; 625 KABC::VCardConverter converter;
626 QString vcard; 626 QString vcard;
627 627
628 converter.addresseeToVCard( a, vcard ); 628 converter.addresseeToVCard( a, vcard );
629 629
630 QTextStream t( &outFile ); // use a text stream 630 QTextStream t( &outFile ); // use a text stream
631 t.setEncoding( QTextStream::UnicodeUTF8 ); 631 t.setEncoding( QTextStream::UnicodeUTF8 );
632 t << vcard; 632 t << vcard;
633 633
634 outFile.close(); 634 outFile.close();
635 635
636 urls.append( fileName ); 636 urls.append( fileName );
637 } 637 }
638 } 638 }
639 639
640 bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") ); 640 bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") );
641 641
642 642
643/*US 643/*US
644 kapp->invokeMailer( QString::null, QString::null, QString::null, 644 kapp->invokeMailer( QString::null, QString::null, QString::null,
645 QString::null, // subject 645 QString::null, // subject
646 QString::null, // body 646 QString::null, // body
647 QString::null, 647 QString::null,
648 urls ); // attachments 648 urls ); // attachments
649*/ 649*/
650 650
651} 651}
652 652
653/** 653/**
654 Beams the "WhoAmI contact. 654 Beams the "WhoAmI contact.
655*/ 655*/
656void KABCore::beamMySelf() 656void KABCore::beamMySelf()
657{ 657{
658 KABC::Addressee a = KABC::StdAddressBook::self()->whoAmI(); 658 KABC::Addressee a = KABC::StdAddressBook::self()->whoAmI();
659 if (!a.isEmpty()) 659 if (!a.isEmpty())
660 { 660 {
661 QStringList uids; 661 QStringList uids;
662 uids << a.uid(); 662 uids << a.uid();
663 663
664 beamVCard(uids); 664 beamVCard(uids);
665 } else { 665 } else {
666 KMessageBox::information( this, i18n( "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n" ) ); 666 KMessageBox::information( this, i18n( "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n" ) );
667 667
668 668
669 } 669 }
670} 670}
671 671
672void KABCore::export2phone() 672void KABCore::export2phone()
673{ 673{
674 674
675 KAex2phonePrefs ex2phone; 675 KAex2phonePrefs ex2phone;
676 ex2phone.mPhoneConnection->setText( KPimGlobalPrefs::instance()->mEx2PhoneConnection ); 676 ex2phone.mPhoneConnection->setText( KPimGlobalPrefs::instance()->mEx2PhoneConnection );
677 ex2phone.mPhoneDevice->setText( KPimGlobalPrefs::instance()->mEx2PhoneDevice ); 677 ex2phone.mPhoneDevice->setText( KPimGlobalPrefs::instance()->mEx2PhoneDevice );
678 ex2phone.mPhoneModel->setText( KPimGlobalPrefs::instance()->mEx2PhoneModel ); 678 ex2phone.mPhoneModel->setText( KPimGlobalPrefs::instance()->mEx2PhoneModel );
679 679
680 if ( !ex2phone.exec() ) { 680 if ( !ex2phone.exec() ) {
681 return; 681 return;
682 } 682 }
683 KPimGlobalPrefs::instance()->mEx2PhoneConnection = ex2phone.mPhoneConnection->text(); 683 KPimGlobalPrefs::instance()->mEx2PhoneConnection = ex2phone.mPhoneConnection->text();
684 KPimGlobalPrefs::instance()->mEx2PhoneDevice = ex2phone.mPhoneDevice->text(); 684 KPimGlobalPrefs::instance()->mEx2PhoneDevice = ex2phone.mPhoneDevice->text();
685 KPimGlobalPrefs::instance()->mEx2PhoneModel = ex2phone.mPhoneModel->text(); 685 KPimGlobalPrefs::instance()->mEx2PhoneModel = ex2phone.mPhoneModel->text();
686 686
687 687
688 PhoneAccess::writeConfig( KPimGlobalPrefs::instance()->mEx2PhoneDevice, 688 PhoneAccess::writeConfig( KPimGlobalPrefs::instance()->mEx2PhoneDevice,
689 KPimGlobalPrefs::instance()->mEx2PhoneConnection, 689 KPimGlobalPrefs::instance()->mEx2PhoneConnection,
690 KPimGlobalPrefs::instance()->mEx2PhoneModel ); 690 KPimGlobalPrefs::instance()->mEx2PhoneModel );
691 691
692 QStringList uids = mViewManager->selectedUids(); 692 QStringList uids = mViewManager->selectedUids();
693 if ( uids.isEmpty() ) 693 if ( uids.isEmpty() )
694 return; 694 return;
695 695
696#ifdef _WIN32_ 696#ifdef _WIN32_
697 QString fileName = locateLocal("tmp", "tempfile.vcf"); 697 QString fileName = locateLocal("tmp", "tempfile.vcf");
698#else 698#else
699 QString fileName = "/tmp/kdepimtemp.vcf"; 699 QString fileName = "/tmp/kdepimtemp.vcf";
700#endif 700#endif
701 701
702 KABC::VCardConverter converter; 702 KABC::VCardConverter converter;
703 QString description; 703 QString description;
704 QString datastream; 704 QString datastream;
705 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 705 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
706 KABC::Addressee a = mAddressBook->findByUid( *it ); 706 KABC::Addressee a = mAddressBook->findByUid( *it );
707 707
708 if ( a.isEmpty() ) 708 if ( a.isEmpty() )
709 continue; 709 continue;
710 a.simplifyEmails(); 710 a.simplifyEmails();
711 a.simplifyPhoneNumbers(); 711 a.simplifyPhoneNumbers();
712 a.simplifyPhoneNumberTypes(); 712 a.simplifyPhoneNumberTypes();
713 a.simplifyAddresses(); 713 a.simplifyAddresses();
714 714
715 if (description.isEmpty()) 715 if (description.isEmpty())
716 description = a.formattedName(); 716 description = a.formattedName();
717 QString vcard; 717 QString vcard;
718 QString vcardnew; 718 QString vcardnew;
719 converter.addresseeToVCard( a, vcard ); 719 converter.addresseeToVCard( a, vcard );
720 int start = 0; 720 int start = 0;
721 int next; 721 int next;
722 while ( (next = vcard.find("TYPE=", start) )>= 0 ) { 722 while ( (next = vcard.find("TYPE=", start) )>= 0 ) {
723 int semi = vcard.find(";", next); 723 int semi = vcard.find(";", next);
724 int dopp = vcard.find(":", next); 724 int dopp = vcard.find(":", next);
725 int sep; 725 int sep;
726 if ( semi < dopp && semi >= 0 ) 726 if ( semi < dopp && semi >= 0 )
727 sep = semi ; 727 sep = semi ;
728 else 728 else
729 sep = dopp; 729 sep = dopp;
730 vcardnew +=vcard.mid( start, next - start); 730 vcardnew +=vcard.mid( start, next - start);
731 vcardnew +=vcard.mid( next+5,sep -next -5 ).upper(); 731 vcardnew +=vcard.mid( next+5,sep -next -5 ).upper();
732 start = sep; 732 start = sep;
733 } 733 }
734 vcardnew += vcard.mid( start,vcard.length() ); 734 vcardnew += vcard.mid( start,vcard.length() );
735 vcard = ""; 735 vcard = "";
736 start = 0; 736 start = 0;
737 while ( (next = vcardnew.find("ADR", start) )>= 0 ) { 737 while ( (next = vcardnew.find("ADR", start) )>= 0 ) {
738 int sep = vcardnew.find(":", next); 738 int sep = vcardnew.find(":", next);
739 vcard +=vcardnew.mid( start, next - start+3); 739 vcard +=vcardnew.mid( start, next - start+3);
740 start = sep; 740 start = sep;
741 } 741 }
742 vcard += vcardnew.mid( start,vcardnew.length() ); 742 vcard += vcardnew.mid( start,vcardnew.length() );
743 vcard.replace ( QRegExp(";;;") , "" ); 743 vcard.replace ( QRegExp(";;;") , "" );
744 vcard.replace ( QRegExp(";;") , "" ); 744 vcard.replace ( QRegExp(";;") , "" );
745 datastream += vcard; 745 datastream += vcard;
746 746
747 } 747 }
748 QFile outFile(fileName); 748 QFile outFile(fileName);
749 if ( outFile.open(IO_WriteOnly) ) { 749 if ( outFile.open(IO_WriteOnly) ) {
750 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" ); 750 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" );
751 QTextStream t( &outFile ); // use a text stream 751 QTextStream t( &outFile ); // use a text stream
752 t.setEncoding( QTextStream::UnicodeUTF8 ); 752 t.setEncoding( QTextStream::UnicodeUTF8 );
753 t <<datastream; 753 t <<datastream;
754 outFile.close(); 754 outFile.close();
755 if ( PhoneAccess::writeToPhone( fileName ) ) 755 if ( PhoneAccess::writeToPhone( fileName ) )
756 qDebug("Export okay "); 756 qDebug("Export okay ");
757 else 757 else
758 qDebug("Error export contacts "); 758 qDebug("Error export contacts ");
759 759
760 } else { 760 } else {
761 qDebug("Error open temp file "); 761 qDebug("Error open temp file ");
762 return; 762 return;
763 } 763 }
764 764
765 765
766#if 0 766#if 0
767 767
768 setCaption( i18n("Writing to phone...")); 768 setCaption( i18n("Writing to phone..."));
769 if ( PhoneFormat::writeToPhone( cal ) ) 769 if ( PhoneFormat::writeToPhone( cal ) )
770 setCaption( i18n("Export to phone successful!")); 770 setCaption( i18n("Export to phone successful!"));
771 else 771 else
772 setCaption( i18n("Error exporting to phone!")); 772 setCaption( i18n("Error exporting to phone!"));
773#endif 773#endif
774 774
775 775
776} 776}
777void KABCore::beamVCard() 777void KABCore::beamVCard()
778{ 778{
779 QStringList uids = mViewManager->selectedUids(); 779 QStringList uids = mViewManager->selectedUids();
780 if ( !uids.isEmpty() ) 780 if ( !uids.isEmpty() )
781 beamVCard( uids ); 781 beamVCard( uids );
782} 782}
783 783
784 784
785void KABCore::beamVCard(const QStringList& uids) 785void KABCore::beamVCard(const QStringList& uids)
786{ 786{
787/*US 787/*US
788 QString beamFilename; 788 QString beamFilename;
789 Opie::OPimContact c; 789 Opie::OPimContact c;
790 if ( actionPersonal->isOn() ) { 790 if ( actionPersonal->isOn() ) {
791 beamFilename = addressbookPersonalVCardName(); 791 beamFilename = addressbookPersonalVCardName();
792 if ( !QFile::exists( beamFilename ) ) 792 if ( !QFile::exists( beamFilename ) )
793 return; // can't beam a non-existent file 793 return; // can't beam a non-existent file
794 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null, 794 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null,
795 beamFilename ); 795 beamFilename );
796 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true ); 796 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true );
797 Opie::OPimContactAccess::List allList = access->allRecords(); 797 Opie::OPimContactAccess::List allList = access->allRecords();
798 Opie::OPimContactAccess::List::Iterator it = allList.begin(); // Just take first 798 Opie::OPimContactAccess::List::Iterator it = allList.begin(); // Just take first
799 c = *it; 799 c = *it;
800 800
801 delete access; 801 delete access;
802 } else { 802 } else {
803 unlink( beamfile ); // delete if exists 803 unlink( beamfile ); // delete if exists
804 mkdir("/tmp/obex/", 0755); 804 mkdir("/tmp/obex/", 0755);
805 c = m_abView -> currentEntry(); 805 c = m_abView -> currentEntry();
806 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null, 806 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null,
807 beamfile ); 807 beamfile );
808 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true ); 808 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true );
809 access->add( c ); 809 access->add( c );
810 access->save(); 810 access->save();
811 delete access; 811 delete access;
812 812
813 beamFilename = beamfile; 813 beamFilename = beamfile;
814 } 814 }
815 815
816 owarn << "Beaming: " << beamFilename << oendl; 816 owarn << "Beaming: " << beamFilename << oendl;
817*/ 817*/
818 818
819#if 0 819#if 0
820 QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); 820 QString tmpdir = locateLocal("tmp", KGlobal::getAppName());
821 821
822 QString dirName = tmpdir + "/" + KApplication::randomString( 8 ); 822 QString dirName = tmpdir + "/" + KApplication::randomString( 8 );
823 823
824 QString name = "contact.vcf"; 824 QString name = "contact.vcf";
825 825
826 QString fileName = dirName + "/" + name; 826 QString fileName = dirName + "/" + name;
827#endif 827#endif
828 // LR: we should use the /tmp dir, because: /tmp = RAM, (HOME)/kdepim = flash memory 828 // LR: we should use the /tmp dir, because: /tmp = RAM, (HOME)/kdepim = flash memory
829 // 829 //
830 QString fileName = "/tmp/kapibeamfile.vcf"; 830 QString fileName = "/tmp/kapibeamfile.vcf";
831 831
832 832
833 //QDir().mkdir( dirName, true ); 833 //QDir().mkdir( dirName, true );
834 834
835 835
836 KABC::VCardConverter converter; 836 KABC::VCardConverter converter;
837 QString description; 837 QString description;
838 QString datastream; 838 QString datastream;
839 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 839 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
840 KABC::Addressee a = mAddressBook->findByUid( *it ); 840 KABC::Addressee a = mAddressBook->findByUid( *it );
841 841
842 if ( a.isEmpty() ) 842 if ( a.isEmpty() )
843 continue; 843 continue;
844 844
845 if (description.isEmpty()) 845 if (description.isEmpty())
846 description = a.formattedName(); 846 description = a.formattedName();
847 847
848 QString vcard; 848 QString vcard;
849 converter.addresseeToVCard( a, vcard ); 849 converter.addresseeToVCard( a, vcard );
850 int start = 0; 850 int start = 0;
851 int next; 851 int next;
852 while ( (next = vcard.find("TYPE=", start) )>= 0 ) { 852 while ( (next = vcard.find("TYPE=", start) )>= 0 ) {
853 int semi = vcard.find(";", next); 853 int semi = vcard.find(";", next);
854 int dopp = vcard.find(":", next); 854 int dopp = vcard.find(":", next);
855 int sep; 855 int sep;
856 if ( semi < dopp && semi >= 0 ) 856 if ( semi < dopp && semi >= 0 )
857 sep = semi ; 857 sep = semi ;
858 else 858 else
859 sep = dopp; 859 sep = dopp;
860 datastream +=vcard.mid( start, next - start); 860 datastream +=vcard.mid( start, next - start);
861 datastream +=vcard.mid( next+5,sep -next -5 ).upper(); 861 datastream +=vcard.mid( next+5,sep -next -5 ).upper();
862 start = sep; 862 start = sep;
863 } 863 }
864 datastream += vcard.mid( start,vcard.length() ); 864 datastream += vcard.mid( start,vcard.length() );
865 } 865 }
866#ifndef DESKTOP_VERSION 866#ifndef DESKTOP_VERSION
867 QFile outFile(fileName); 867 QFile outFile(fileName);
868 if ( outFile.open(IO_WriteOnly) ) { 868 if ( outFile.open(IO_WriteOnly) ) {
869 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" ); 869 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" );
870 QTextStream t( &outFile ); // use a text stream 870 QTextStream t( &outFile ); // use a text stream
871 t.setEncoding( QTextStream::UnicodeUTF8 ); 871 t.setEncoding( QTextStream::UnicodeUTF8 );
872 t <<datastream; 872 t <<datastream;
873 outFile.close(); 873 outFile.close();
874 Ir *ir = new Ir( this ); 874 Ir *ir = new Ir( this );
875 connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) ); 875 connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) );
876 ir->send( fileName, description, "text/x-vCard" ); 876 ir->send( fileName, description, "text/x-vCard" );
877 } else { 877 } else {
878 qDebug("Error open temp beam file "); 878 qDebug("Error open temp beam file ");
879 return; 879 return;
880 } 880 }
881#endif 881#endif
882 882
883} 883}
884 884
885void KABCore::beamDone( Ir *ir ) 885void KABCore::beamDone( Ir *ir )
886{ 886{
887#ifndef DESKTOP_VERSION 887#ifndef DESKTOP_VERSION
888 delete ir; 888 delete ir;
889#endif 889#endif
890} 890}
891 891
892 892
893void KABCore::browse( const QString& url ) 893void KABCore::browse( const QString& url )
894{ 894{
895#ifndef KAB_EMBEDDED 895#ifndef KAB_EMBEDDED
896 kapp->invokeBrowser( url ); 896 kapp->invokeBrowser( url );
897#else //KAB_EMBEDDED 897#else //KAB_EMBEDDED
898 qDebug("KABCore::browse must be fixed"); 898 qDebug("KABCore::browse must be fixed");
899#endif //KAB_EMBEDDED 899#endif //KAB_EMBEDDED
900} 900}
901 901
902void KABCore::selectAllContacts() 902void KABCore::selectAllContacts()
903{ 903{
904 mViewManager->setSelected( QString::null, true ); 904 mViewManager->setSelected( QString::null, true );
905} 905}
906 906
907void KABCore::deleteContacts() 907void KABCore::deleteContacts()
908{ 908{
909 QStringList uidList = mViewManager->selectedUids(); 909 QStringList uidList = mViewManager->selectedUids();
910 deleteContacts( uidList ); 910 deleteContacts( uidList );
911} 911}
912 912
913void KABCore::deleteContacts( const QStringList &uids ) 913void KABCore::deleteContacts( const QStringList &uids )
914{ 914{
915 if ( uids.count() > 0 ) { 915 if ( uids.count() > 0 ) {
916 PwDeleteCommand *command = new PwDeleteCommand( mAddressBook, uids ); 916 PwDeleteCommand *command = new PwDeleteCommand( mAddressBook, uids );
917 UndoStack::instance()->push( command ); 917 UndoStack::instance()->push( command );
918 RedoStack::instance()->clear(); 918 RedoStack::instance()->clear();
919 919
920 // now if we deleted anything, refresh 920 // now if we deleted anything, refresh
921 setContactSelected( QString::null ); 921 setContactSelected( QString::null );
922 setModified( true ); 922 setModified( true );
923 } 923 }
924} 924}
925 925
926void KABCore::copyContacts() 926void KABCore::copyContacts()
927{ 927{
928 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 928 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
929 929
930 QString clipText = AddresseeUtil::addresseesToClipboard( addrList ); 930 QString clipText = AddresseeUtil::addresseesToClipboard( addrList );
931 931
932 kdDebug(5720) << "KABCore::copyContacts: " << clipText << endl; 932 kdDebug(5720) << "KABCore::copyContacts: " << clipText << endl;
933 933
934 QClipboard *cb = QApplication::clipboard(); 934 QClipboard *cb = QApplication::clipboard();
935 cb->setText( clipText ); 935 cb->setText( clipText );
936} 936}
937 937
938void KABCore::cutContacts() 938void KABCore::cutContacts()
939{ 939{
940 QStringList uidList = mViewManager->selectedUids(); 940 QStringList uidList = mViewManager->selectedUids();
941 941
942//US if ( uidList.size() > 0 ) { 942//US if ( uidList.size() > 0 ) {
943 if ( uidList.count() > 0 ) { 943 if ( uidList.count() > 0 ) {
944 PwCutCommand *command = new PwCutCommand( mAddressBook, uidList ); 944 PwCutCommand *command = new PwCutCommand( mAddressBook, uidList );
945 UndoStack::instance()->push( command ); 945 UndoStack::instance()->push( command );
946 RedoStack::instance()->clear(); 946 RedoStack::instance()->clear();
947 947
948 setModified( true ); 948 setModified( true );
949 } 949 }
950} 950}
951 951
952void KABCore::pasteContacts() 952void KABCore::pasteContacts()
953{ 953{
954 QClipboard *cb = QApplication::clipboard(); 954 QClipboard *cb = QApplication::clipboard();
955 955
956 KABC::Addressee::List list = AddresseeUtil::clipboardToAddressees( cb->text() ); 956 KABC::Addressee::List list = AddresseeUtil::clipboardToAddressees( cb->text() );
957 957
958 pasteContacts( list ); 958 pasteContacts( list );
959} 959}
960 960
961void KABCore::pasteContacts( KABC::Addressee::List &list ) 961void KABCore::pasteContacts( KABC::Addressee::List &list )
962{ 962{
963 KABC::Resource *resource = requestResource( this ); 963 KABC::Resource *resource = requestResource( this );
964 KABC::Addressee::List::Iterator it; 964 KABC::Addressee::List::Iterator it;
965 for ( it = list.begin(); it != list.end(); ++it ) 965 for ( it = list.begin(); it != list.end(); ++it )
966 (*it).setResource( resource ); 966 (*it).setResource( resource );
967 967
968 PwPasteCommand *command = new PwPasteCommand( this, list ); 968 PwPasteCommand *command = new PwPasteCommand( this, list );
969 UndoStack::instance()->push( command ); 969 UndoStack::instance()->push( command );
970 RedoStack::instance()->clear(); 970 RedoStack::instance()->clear();
971 971
972 setModified( true ); 972 setModified( true );
973} 973}
974 974
975void KABCore::setWhoAmI() 975void KABCore::setWhoAmI()
976{ 976{
977 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 977 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
978 978
979 if ( addrList.count() > 1 ) { 979 if ( addrList.count() > 1 ) {
980 KMessageBox::sorry( this, i18n( "Please select only one contact." ) ); 980 KMessageBox::sorry( this, i18n( "Please select only one contact." ) );
981 return; 981 return;
982 } 982 }
983 983
984 QString text( i18n( "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>" ) ); 984 QString text( i18n( "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>" ) );
985 if ( KMessageBox::questionYesNo( this, text.arg( addrList[ 0 ].assembledName() ) ) == KMessageBox::Yes ) 985 if ( KMessageBox::questionYesNo( this, text.arg( addrList[ 0 ].assembledName() ) ) == KMessageBox::Yes )
986 static_cast<KABC::StdAddressBook*>( KABC::StdAddressBook::self() )->setWhoAmI( addrList[ 0 ] ); 986 static_cast<KABC::StdAddressBook*>( KABC::StdAddressBook::self() )->setWhoAmI( addrList[ 0 ] );
987} 987}
988 988
989void KABCore::setCategories() 989void KABCore::setCategories()
990{ 990{
991 KPIM::CategorySelectDialog dlg( KABPrefs::instance(), this, "", true ); 991 KPIM::CategorySelectDialog dlg( KABPrefs::instance(), this, "", true );
992 if ( !dlg.exec() ) 992 if ( !dlg.exec() )
993 return; 993 return;
994 994
995 bool merge = false; 995 bool merge = false;
996 QString msg = i18n( "Merge with existing categories?" ); 996 QString msg = i18n( "Merge with existing categories?" );
997 if ( KMessageBox::questionYesNo( this, msg ) == KMessageBox::Yes ) 997 if ( KMessageBox::questionYesNo( this, msg ) == KMessageBox::Yes )
998 merge = true; 998 merge = true;
999 999
1000 QStringList categories = dlg.selectedCategories(); 1000 QStringList categories = dlg.selectedCategories();
1001 1001
1002 QStringList uids = mViewManager->selectedUids(); 1002 QStringList uids = mViewManager->selectedUids();
1003 QStringList::Iterator it; 1003 QStringList::Iterator it;
1004 for ( it = uids.begin(); it != uids.end(); ++it ) { 1004 for ( it = uids.begin(); it != uids.end(); ++it ) {
1005 KABC::Addressee addr = mAddressBook->findByUid( *it ); 1005 KABC::Addressee addr = mAddressBook->findByUid( *it );
1006 if ( !addr.isEmpty() ) { 1006 if ( !addr.isEmpty() ) {
1007 if ( !merge ) 1007 if ( !merge )
1008 addr.setCategories( categories ); 1008 addr.setCategories( categories );
1009 else { 1009 else {
1010 QStringList addrCategories = addr.categories(); 1010 QStringList addrCategories = addr.categories();
1011 QStringList::Iterator catIt; 1011 QStringList::Iterator catIt;
1012 for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) { 1012 for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) {
1013 if ( !addrCategories.contains( *catIt ) ) 1013 if ( !addrCategories.contains( *catIt ) )
1014 addrCategories.append( *catIt ); 1014 addrCategories.append( *catIt );
1015 } 1015 }
1016 addr.setCategories( addrCategories ); 1016 addr.setCategories( addrCategories );
1017 } 1017 }
1018 1018
1019 mAddressBook->insertAddressee( addr ); 1019 mAddressBook->insertAddressee( addr );
1020 } 1020 }
1021 } 1021 }
1022 1022
1023 if ( uids.count() > 0 ) 1023 if ( uids.count() > 0 )
1024 setModified( true ); 1024 setModified( true );
1025} 1025}
1026 1026
1027void KABCore::setSearchFields( const KABC::Field::List &fields ) 1027void KABCore::setSearchFields( const KABC::Field::List &fields )
1028{ 1028{
1029 mIncSearchWidget->setFields( fields ); 1029 mIncSearchWidget->setFields( fields );
1030} 1030}
1031 1031
1032void KABCore::incrementalSearch( const QString& text ) 1032void KABCore::incrementalSearch( const QString& text )
1033{ 1033{
1034 mViewManager->doSearch( text, mIncSearchWidget->currentField() ); 1034 mViewManager->doSearch( text, mIncSearchWidget->currentField() );
1035} 1035}
1036 1036
1037void KABCore::setModified() 1037void KABCore::setModified()
1038{ 1038{
1039 setModified( true ); 1039 setModified( true );
1040} 1040}
1041 1041
1042void KABCore::setModifiedWOrefresh() 1042void KABCore::setModifiedWOrefresh()
1043{ 1043{
1044 // qDebug("KABCore::setModifiedWOrefresh() "); 1044 // qDebug("KABCore::setModifiedWOrefresh() ");
1045 mModified = true; 1045 mModified = true;
1046 mActionSave->setEnabled( mModified ); 1046 mActionSave->setEnabled( mModified );
1047#ifdef DESKTOP_VERSION 1047#ifdef DESKTOP_VERSION
1048 mDetails->refreshView(); 1048 mDetails->refreshView();
1049#endif 1049#endif
1050 1050
1051} 1051}
1052void KABCore::setModified( bool modified ) 1052void KABCore::setModified( bool modified )
1053{ 1053{
1054 mModified = modified; 1054 mModified = modified;
1055 mActionSave->setEnabled( mModified ); 1055 mActionSave->setEnabled( mModified );
1056 1056
1057 if ( modified ) 1057 if ( modified )
1058 mJumpButtonBar->recreateButtons(); 1058 mJumpButtonBar->recreateButtons();
1059 1059
1060 mViewManager->refreshView(); 1060 mViewManager->refreshView();
1061 mDetails->refreshView(); 1061 mDetails->refreshView();
1062 1062
1063} 1063}
1064 1064
1065bool KABCore::modified() const 1065bool KABCore::modified() const
1066{ 1066{
1067 return mModified; 1067 return mModified;
1068} 1068}
1069 1069
1070void KABCore::contactModified( const KABC::Addressee &addr ) 1070void KABCore::contactModified( const KABC::Addressee &addr )
1071{ 1071{
1072 1072
1073 Command *command = 0; 1073 Command *command = 0;
1074 QString uid; 1074 QString uid;
1075 1075
1076 // check if it exists already 1076 // check if it exists already
1077 KABC::Addressee origAddr = mAddressBook->findByUid( addr.uid() ); 1077 KABC::Addressee origAddr = mAddressBook->findByUid( addr.uid() );
1078 if ( origAddr.isEmpty() ) 1078 if ( origAddr.isEmpty() )
1079 command = new PwNewCommand( mAddressBook, addr ); 1079 command = new PwNewCommand( mAddressBook, addr );
1080 else { 1080 else {
1081 command = new PwEditCommand( mAddressBook, origAddr, addr ); 1081 command = new PwEditCommand( mAddressBook, origAddr, addr );
1082 uid = addr.uid(); 1082 uid = addr.uid();
1083 } 1083 }
1084 1084
1085 UndoStack::instance()->push( command ); 1085 UndoStack::instance()->push( command );
1086 RedoStack::instance()->clear(); 1086 RedoStack::instance()->clear();
1087 1087
1088 setModified( true ); 1088 setModified( true );
1089} 1089}
1090 1090
1091void KABCore::newContact() 1091void KABCore::newContact()
1092{ 1092{
1093 1093
1094 1094
1095 QPtrList<KABC::Resource> kabcResources = mAddressBook->resources(); 1095 QPtrList<KABC::Resource> kabcResources = mAddressBook->resources();
1096 1096
1097 QPtrList<KRES::Resource> kresResources; 1097 QPtrList<KRES::Resource> kresResources;
1098 QPtrListIterator<KABC::Resource> it( kabcResources ); 1098 QPtrListIterator<KABC::Resource> it( kabcResources );
1099 KABC::Resource *resource; 1099 KABC::Resource *resource;
1100 while ( ( resource = it.current() ) != 0 ) { 1100 while ( ( resource = it.current() ) != 0 ) {
1101 ++it; 1101 ++it;
1102 if ( !resource->readOnly() ) { 1102 if ( !resource->readOnly() ) {
1103 KRES::Resource *res = static_cast<KRES::Resource*>( resource ); 1103 KRES::Resource *res = static_cast<KRES::Resource*>( resource );
1104 if ( res ) 1104 if ( res )
1105 kresResources.append( res ); 1105 kresResources.append( res );
1106 } 1106 }
1107 } 1107 }
1108 1108
1109 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, this ); 1109 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, this );
1110 resource = static_cast<KABC::Resource*>( res ); 1110 resource = static_cast<KABC::Resource*>( res );
1111 1111
1112 if ( resource ) { 1112 if ( resource ) {
1113 KABC::Addressee addr; 1113 KABC::Addressee addr;
1114 addr.setResource( resource ); 1114 addr.setResource( resource );
1115 mEditorDialog->setAddressee( addr ); 1115 mEditorDialog->setAddressee( addr );
1116 KApplication::execDialog ( mEditorDialog ); 1116 KApplication::execDialog ( mEditorDialog );
1117 1117
1118 } else 1118 } else
1119 return; 1119 return;
1120 1120
1121 // mEditorDict.insert( dialog->addressee().uid(), dialog ); 1121 // mEditorDict.insert( dialog->addressee().uid(), dialog );
1122 1122
1123 1123
1124} 1124}
1125 1125
1126void KABCore::addEmail( QString aStr ) 1126void KABCore::addEmail( QString aStr )
1127{ 1127{
1128#ifndef KAB_EMBEDDED 1128#ifndef KAB_EMBEDDED
1129 QString fullName, email; 1129 QString fullName, email;
1130 1130
1131 KABC::Addressee::parseEmailAddress( aStr, fullName, email ); 1131 KABC::Addressee::parseEmailAddress( aStr, fullName, email );
1132 1132
1133 // Try to lookup the addressee matching the email address 1133 // Try to lookup the addressee matching the email address
1134 bool found = false; 1134 bool found = false;
1135 QStringList emailList; 1135 QStringList emailList;
1136 KABC::AddressBook::Iterator it; 1136 KABC::AddressBook::Iterator it;
1137 for ( it = mAddressBook->begin(); !found && (it != mAddressBook->end()); ++it ) { 1137 for ( it = mAddressBook->begin(); !found && (it != mAddressBook->end()); ++it ) {
1138 emailList = (*it).emails(); 1138 emailList = (*it).emails();
1139 if ( emailList.contains( email ) > 0 ) { 1139 if ( emailList.contains( email ) > 0 ) {
1140 found = true; 1140 found = true;
1141 (*it).setNameFromString( fullName ); 1141 (*it).setNameFromString( fullName );
1142 editContact( (*it).uid() ); 1142 editContact( (*it).uid() );
1143 } 1143 }
1144 } 1144 }
1145 1145
1146 if ( !found ) { 1146 if ( !found ) {
1147 KABC::Addressee addr; 1147 KABC::Addressee addr;
1148 addr.setNameFromString( fullName ); 1148 addr.setNameFromString( fullName );
1149 addr.insertEmail( email, true ); 1149 addr.insertEmail( email, true );
1150 1150
1151 mAddressBook->insertAddressee( addr ); 1151 mAddressBook->insertAddressee( addr );
1152 mViewManager->refreshView( addr.uid() ); 1152 mViewManager->refreshView( addr.uid() );
1153 editContact( addr.uid() ); 1153 editContact( addr.uid() );
1154 } 1154 }
1155#else //KAB_EMBEDDED 1155#else //KAB_EMBEDDED
1156 qDebug("KABCore::addEmail finsih method"); 1156 qDebug("KABCore::addEmail finsih method");
1157#endif //KAB_EMBEDDED 1157#endif //KAB_EMBEDDED
1158} 1158}
1159 1159
1160void KABCore::importVCard( const KURL &url, bool showPreview ) 1160void KABCore::importVCard( const KURL &url, bool showPreview )
1161{ 1161{
1162 mXXPortManager->importVCard( url, showPreview ); 1162 mXXPortManager->importVCard( url, showPreview );
1163} 1163}
1164void KABCore::importFromOL() 1164void KABCore::importFromOL()
1165{ 1165{
1166#ifdef _WIN32_ 1166#ifdef _WIN32_
1167 KAImportOLdialog* idgl = new KAImportOLdialog( i18n("Import Contacts from OL"), mAddressBook, this ); 1167 KAImportOLdialog* idgl = new KAImportOLdialog( i18n("Import Contacts from OL"), mAddressBook, this );
1168 idgl->exec(); 1168 idgl->exec();
1169 KABC::Addressee::List list = idgl->getAddressList(); 1169 KABC::Addressee::List list = idgl->getAddressList();
1170 if ( list.count() > 0 ) { 1170 if ( list.count() > 0 ) {
1171 KABC::Addressee::List listNew; 1171 KABC::Addressee::List listNew;
1172 KABC::Addressee::List listExisting; 1172 KABC::Addressee::List listExisting;
1173 KABC::Addressee::List::Iterator it; 1173 KABC::Addressee::List::Iterator it;
1174 KABC::AddressBook::Iterator iter; 1174 KABC::AddressBook::Iterator iter;
1175 for ( it = list.begin(); it != list.end(); ++it ) { 1175 for ( it = list.begin(); it != list.end(); ++it ) {
1176 if ( mAddressBook->findByUid((*it).uid() ).isEmpty()) 1176 if ( mAddressBook->findByUid((*it).uid() ).isEmpty())
1177 listNew.append( (*it) ); 1177 listNew.append( (*it) );
1178 else 1178 else
1179 listExisting.append( (*it) ); 1179 listExisting.append( (*it) );
1180 } 1180 }
1181 if ( listExisting.count() > 0 ) 1181 if ( listExisting.count() > 0 )
1182 KMessageBox::information( this, i18n("%1 contacts not added to addressbook\nbecause they were already in the addressbook!").arg( listExisting.count() )); 1182 KMessageBox::information( this, i18n("%1 contacts not added to addressbook\nbecause they were already in the addressbook!").arg( listExisting.count() ));
1183 if ( listNew.count() > 0 ) { 1183 if ( listNew.count() > 0 ) {
1184 pasteWithNewUid = false; 1184 pasteWithNewUid = false;
1185 pasteContacts( listNew ); 1185 pasteContacts( listNew );
1186 pasteWithNewUid = true; 1186 pasteWithNewUid = true;
1187 } 1187 }
1188 } 1188 }
1189 delete idgl; 1189 delete idgl;
1190#endif 1190#endif
1191} 1191}
1192 1192
1193void KABCore::importVCard( const QString &vCard, bool showPreview ) 1193void KABCore::importVCard( const QString &vCard, bool showPreview )
1194{ 1194{
1195 mXXPortManager->importVCard( vCard, showPreview ); 1195 mXXPortManager->importVCard( vCard, showPreview );
1196} 1196}
1197 1197
1198//US added a second method without defaultparameter 1198//US added a second method without defaultparameter
1199void KABCore::editContact2() { 1199void KABCore::editContact2() {
1200 editContact( QString::null ); 1200 editContact( QString::null );
1201} 1201}
1202 1202
1203void KABCore::editContact( const QString &uid ) 1203void KABCore::editContact( const QString &uid )
1204{ 1204{
1205 1205
1206 if ( mExtensionManager->isQuickEditVisible() ) 1206 if ( mExtensionManager->isQuickEditVisible() )
1207 return; 1207 return;
1208 1208
1209 // First, locate the contact entry 1209 // First, locate the contact entry
1210 QString localUID = uid; 1210 QString localUID = uid;
1211 if ( localUID.isNull() ) { 1211 if ( localUID.isNull() ) {
1212 QStringList uidList = mViewManager->selectedUids(); 1212 QStringList uidList = mViewManager->selectedUids();
1213 if ( uidList.count() > 0 ) 1213 if ( uidList.count() > 0 )
1214 localUID = *( uidList.at( 0 ) ); 1214 localUID = *( uidList.at( 0 ) );
1215 } 1215 }
1216 1216
1217 KABC::Addressee addr = mAddressBook->findByUid( localUID ); 1217 KABC::Addressee addr = mAddressBook->findByUid( localUID );
1218 if ( !addr.isEmpty() ) { 1218 if ( !addr.isEmpty() ) {
1219 mEditorDialog->setAddressee( addr ); 1219 mEditorDialog->setAddressee( addr );
1220 KApplication::execDialog ( mEditorDialog ); 1220 KApplication::execDialog ( mEditorDialog );
1221 } 1221 }
1222} 1222}
1223 1223
1224/** 1224/**
1225 Shows or edits the detail view for the given uid. If the uid is QString::null, 1225 Shows or edits the detail view for the given uid. If the uid is QString::null,
1226 the method will try to find a selected addressee in the view. 1226 the method will try to find a selected addressee in the view.
1227 */ 1227 */
1228void KABCore::executeContact( const QString &uid /*US = QString::null*/ ) 1228void KABCore::executeContact( const QString &uid /*US = QString::null*/ )
1229{ 1229{
1230 if ( mMultipleViewsAtOnce ) 1230 if ( mMultipleViewsAtOnce )
1231 { 1231 {
1232 editContact( uid ); 1232 editContact( uid );
1233 } 1233 }
1234 else 1234 else
1235 { 1235 {
1236 setDetailsVisible( true ); 1236 setDetailsVisible( true );
1237 mActionDetails->setChecked(true); 1237 mActionDetails->setChecked(true);
1238 } 1238 }
1239 1239
1240} 1240}
1241 1241
1242void KABCore::save() 1242void KABCore::save()
1243{ 1243{
1244 if (syncManager->blockSave()) 1244 if (syncManager->blockSave())
1245 return; 1245 return;
1246 if ( !mModified ) 1246 if ( !mModified )
1247 return; 1247 return;
1248 1248
1249 syncManager->setBlockSave(true); 1249 syncManager->setBlockSave(true);
1250 QString text = i18n( "There was an error while attempting to save\n the " 1250 QString text = i18n( "There was an error while attempting to save\n the "
1251 "address book. Please check that some \nother application is " 1251 "address book. Please check that some \nother application is "
1252 "not using it. " ); 1252 "not using it. " );
1253 statusMessage(i18n("Saving addressbook ... ")); 1253 statusMessage(i18n("Saving addressbook ... "));
1254#ifndef KAB_EMBEDDED 1254#ifndef KAB_EMBEDDED
1255 KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook ); 1255 KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook );
1256 if ( !b || !b->save() ) { 1256 if ( !b || !b->save() ) {
1257 KMessageBox::error( this, text, i18n( "Unable to Save" ) ); 1257 KMessageBox::error( this, text, i18n( "Unable to Save" ) );
1258 } 1258 }
1259#else //KAB_EMBEDDED 1259#else //KAB_EMBEDDED
1260 KABC::StdAddressBook *b = (KABC::StdAddressBook*)( mAddressBook ); 1260 KABC::StdAddressBook *b = (KABC::StdAddressBook*)( mAddressBook );
1261 if ( !b || !b->save() ) { 1261 if ( !b || !b->save() ) {
1262 QMessageBox::critical( this, i18n( "Unable to Save" ), text, i18n("Ok")); 1262 QMessageBox::critical( this, i18n( "Unable to Save" ), text, i18n("Ok"));
1263 } 1263 }
1264#endif //KAB_EMBEDDED 1264#endif //KAB_EMBEDDED
1265 1265
1266 statusMessage(i18n("Addressbook saved!")); 1266 statusMessage(i18n("Addressbook saved!"));
1267 setModified( false ); 1267 setModified( false );
1268 syncManager->setBlockSave(false); 1268 syncManager->setBlockSave(false);
1269} 1269}
1270 1270
1271void KABCore::statusMessage(QString mess , int time ) 1271void KABCore::statusMessage(QString mess , int time )
1272{ 1272{
1273 //topLevelWidget()->setCaption( mess ); 1273 //topLevelWidget()->setCaption( mess );
1274 // pending setting timer to revome message 1274 // pending setting timer to revome message
1275} 1275}
1276void KABCore::undo() 1276void KABCore::undo()
1277{ 1277{
1278 UndoStack::instance()->undo(); 1278 UndoStack::instance()->undo();
1279 1279
1280 // Refresh the view 1280 // Refresh the view
1281 mViewManager->refreshView(); 1281 mViewManager->refreshView();
1282} 1282}
1283 1283
1284void KABCore::redo() 1284void KABCore::redo()
1285{ 1285{
1286 RedoStack::instance()->redo(); 1286 RedoStack::instance()->redo();
1287 1287
1288 // Refresh the view 1288 // Refresh the view
1289 mViewManager->refreshView(); 1289 mViewManager->refreshView();
1290} 1290}
1291 1291
1292void KABCore::setJumpButtonBarVisible( bool visible ) 1292void KABCore::setJumpButtonBarVisible( bool visible )
1293{ 1293{
1294 if (mMultipleViewsAtOnce) 1294 if (mMultipleViewsAtOnce)
1295 { 1295 {
1296 if ( visible ) 1296 if ( visible )
1297 mJumpButtonBar->show(); 1297 mJumpButtonBar->show();
1298 else 1298 else
1299 mJumpButtonBar->hide(); 1299 mJumpButtonBar->hide();
1300 } 1300 }
1301 else 1301 else
1302 { 1302 {
1303 // show the jumpbar only if "the details are hidden" == "viewmanager are shown" 1303 // show the jumpbar only if "the details are hidden" == "viewmanager are shown"
1304 if (mViewManager->isVisible()) 1304 if (mViewManager->isVisible())
1305 { 1305 {
1306 if ( visible ) 1306 if ( visible )
1307 mJumpButtonBar->show(); 1307 mJumpButtonBar->show();
1308 else 1308 else
1309 mJumpButtonBar->hide(); 1309 mJumpButtonBar->hide();
1310 } 1310 }
1311 else 1311 else
1312 { 1312 {
1313 mJumpButtonBar->hide(); 1313 mJumpButtonBar->hide();
1314 } 1314 }
1315 } 1315 }
1316} 1316}
1317 1317
1318 1318
1319void KABCore::setDetailsToState() 1319void KABCore::setDetailsToState()
1320{ 1320{
1321 setDetailsVisible( mActionDetails->isChecked() ); 1321 setDetailsVisible( mActionDetails->isChecked() );
1322} 1322}
1323 1323
1324 1324
1325 1325
1326void KABCore::setDetailsVisible( bool visible ) 1326void KABCore::setDetailsVisible( bool visible )
1327{ 1327{
1328 if (visible && mDetails->isHidden()) 1328 if (visible && mDetails->isHidden())
1329 { 1329 {
1330 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 1330 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
1331 if ( addrList.count() > 0 ) 1331 if ( addrList.count() > 0 )
1332 mDetails->setAddressee( addrList[ 0 ] ); 1332 mDetails->setAddressee( addrList[ 0 ] );
1333 } 1333 }
1334 1334
1335 // mMultipleViewsAtOnce=false: mDetails is always visible. But we switch between 1335 // mMultipleViewsAtOnce=false: mDetails is always visible. But we switch between
1336 // the listview and the detailview. We do that by changing the splitbar size. 1336 // the listview and the detailview. We do that by changing the splitbar size.
1337 if (mMultipleViewsAtOnce) 1337 if (mMultipleViewsAtOnce)
1338 { 1338 {
1339 if ( visible ) 1339 if ( visible )
1340 mDetails->show(); 1340 mDetails->show();
1341 else 1341 else
1342 mDetails->hide(); 1342 mDetails->hide();
1343 } 1343 }
1344 else 1344 else
1345 { 1345 {
1346 if ( visible ) { 1346 if ( visible ) {
1347 mViewManager->hide(); 1347 mViewManager->hide();
1348 mDetails->show(); 1348 mDetails->show();
1349 } 1349 }
1350 else { 1350 else {
1351 mViewManager->show(); 1351 mViewManager->show();
1352 mDetails->hide(); 1352 mDetails->hide();
1353 } 1353 }
1354 setJumpButtonBarVisible( !visible ); 1354 setJumpButtonBarVisible( !visible );
1355 } 1355 }
1356 1356
1357} 1357}
1358 1358
1359void KABCore::extensionChanged( int id ) 1359void KABCore::extensionChanged( int id )
1360{ 1360{
1361 //change the details view only for non desktop systems 1361 //change the details view only for non desktop systems
1362#ifndef DESKTOP_VERSION 1362#ifndef DESKTOP_VERSION
1363 1363
1364 if (id == 0) 1364 if (id == 0)
1365 { 1365 {
1366 //the user disabled the extension. 1366 //the user disabled the extension.
1367 1367
1368 if (mMultipleViewsAtOnce) 1368 if (mMultipleViewsAtOnce)
1369 { // enable detailsview again 1369 { // enable detailsview again
1370 setDetailsVisible( true ); 1370 setDetailsVisible( true );
1371 mActionDetails->setChecked( true ); 1371 mActionDetails->setChecked( true );
1372 } 1372 }
1373 else 1373 else
1374 { //go back to the listview 1374 { //go back to the listview
1375 setDetailsVisible( false ); 1375 setDetailsVisible( false );
1376 mActionDetails->setChecked( false ); 1376 mActionDetails->setChecked( false );
1377 mActionDetails->setEnabled(true); 1377 mActionDetails->setEnabled(true);
1378 } 1378 }
1379 1379
1380 } 1380 }
1381 else 1381 else
1382 { 1382 {
1383 //the user enabled the extension. 1383 //the user enabled the extension.
1384 setDetailsVisible( false ); 1384 setDetailsVisible( false );
1385 mActionDetails->setChecked( false ); 1385 mActionDetails->setChecked( false );
1386 1386
1387 if (!mMultipleViewsAtOnce) 1387 if (!mMultipleViewsAtOnce)
1388 { 1388 {
1389 mActionDetails->setEnabled(false); 1389 mActionDetails->setEnabled(false);
1390 } 1390 }
1391 1391
1392 mExtensionManager->setSelectionChanged(); 1392 mExtensionManager->setSelectionChanged();
1393 1393
1394 } 1394 }
1395 1395
1396#endif// DESKTOP_VERSION 1396#endif// DESKTOP_VERSION
1397 1397
1398} 1398}
1399 1399
1400 1400
1401void KABCore::extensionModified( const KABC::Addressee::List &list ) 1401void KABCore::extensionModified( const KABC::Addressee::List &list )
1402{ 1402{
1403 1403
1404 if ( list.count() != 0 ) { 1404 if ( list.count() != 0 ) {
1405 KABC::Addressee::List::ConstIterator it; 1405 KABC::Addressee::List::ConstIterator it;
1406 for ( it = list.begin(); it != list.end(); ++it ) 1406 for ( it = list.begin(); it != list.end(); ++it )
1407 mAddressBook->insertAddressee( *it ); 1407 mAddressBook->insertAddressee( *it );
1408 if ( list.count() > 1 ) 1408 if ( list.count() > 1 )
1409 setModified(); 1409 setModified();
1410 else 1410 else
1411 setModifiedWOrefresh(); 1411 setModifiedWOrefresh();
1412 } 1412 }
1413 if ( list.count() == 0 ) 1413 if ( list.count() == 0 )
1414 mViewManager->refreshView(); 1414 mViewManager->refreshView();
1415 else 1415 else
1416 mViewManager->refreshView( list[ 0 ].uid() ); 1416 mViewManager->refreshView( list[ 0 ].uid() );
1417 1417
1418 1418
1419 1419
1420} 1420}
1421 1421
1422QString KABCore::getNameByPhone( const QString &phone ) 1422QString KABCore::getNameByPhone( const QString &phone )
1423{ 1423{
1424#ifndef KAB_EMBEDDED 1424#ifndef KAB_EMBEDDED
1425 QRegExp r( "[/*/-/ ]" ); 1425 QRegExp r( "[/*/-/ ]" );
1426 QString localPhone( phone ); 1426 QString localPhone( phone );
1427 1427
1428 bool found = false; 1428 bool found = false;
1429 QString ownerName = ""; 1429 QString ownerName = "";
1430 KABC::AddressBook::Iterator iter; 1430 KABC::AddressBook::Iterator iter;
1431 KABC::PhoneNumber::List::Iterator phoneIter; 1431 KABC::PhoneNumber::List::Iterator phoneIter;
1432 KABC::PhoneNumber::List phoneList; 1432 KABC::PhoneNumber::List phoneList;
1433 for ( iter = mAddressBook->begin(); !found && ( iter != mAddressBook->end() ); ++iter ) { 1433 for ( iter = mAddressBook->begin(); !found && ( iter != mAddressBook->end() ); ++iter ) {
1434 phoneList = (*iter).phoneNumbers(); 1434 phoneList = (*iter).phoneNumbers();
1435 for ( phoneIter = phoneList.begin(); !found && ( phoneIter != phoneList.end() ); 1435 for ( phoneIter = phoneList.begin(); !found && ( phoneIter != phoneList.end() );
1436 ++phoneIter) { 1436 ++phoneIter) {
1437 // Get rid of separator chars so just the numbers are compared. 1437 // Get rid of separator chars so just the numbers are compared.
1438 if ( (*phoneIter).number().replace( r, "" ) == localPhone.replace( r, "" ) ) { 1438 if ( (*phoneIter).number().replace( r, "" ) == localPhone.replace( r, "" ) ) {
1439 ownerName = (*iter).formattedName(); 1439 ownerName = (*iter).formattedName();
1440 found = true; 1440 found = true;
1441 } 1441 }
1442 } 1442 }
1443 } 1443 }
1444 1444
1445 return ownerName; 1445 return ownerName;
1446#else //KAB_EMBEDDED 1446#else //KAB_EMBEDDED
1447 qDebug("KABCore::getNameByPhone finsih method"); 1447 qDebug("KABCore::getNameByPhone finsih method");
1448 return ""; 1448 return "";
1449#endif //KAB_EMBEDDED 1449#endif //KAB_EMBEDDED
1450 1450
1451} 1451}
1452 1452
1453void KABCore::openConfigDialog() 1453void KABCore::openConfigDialog()
1454{ 1454{
1455 KCMultiDialog* ConfigureDialog = new KCMultiDialog( "PIM", this ,"kabconfigdialog", true ); 1455 KCMultiDialog* ConfigureDialog = new KCMultiDialog( "PIM", this ,"kabconfigdialog", true );
1456 KCMKabConfig* kabcfg = new KCMKabConfig( ConfigureDialog->getNewVBoxPage(i18n( "Addressbook")) , "KCMKabConfig" ); 1456 KCMKabConfig* kabcfg = new KCMKabConfig( ConfigureDialog->getNewVBoxPage(i18n( "Addressbook")) , "KCMKabConfig" );
1457 ConfigureDialog->addModule(kabcfg ); 1457 ConfigureDialog->addModule(kabcfg );
1458 KCMKdePimConfig* kdelibcfg = new KCMKdePimConfig( ConfigureDialog->getNewVBoxPage(i18n( "Global")) , "KCMKdeLibConfig" ); 1458 KCMKdePimConfig* kdelibcfg = new KCMKdePimConfig( ConfigureDialog->getNewVBoxPage(i18n( "Global")) , "KCMKdeLibConfig" );
1459 ConfigureDialog->addModule(kdelibcfg ); 1459 ConfigureDialog->addModule(kdelibcfg );
1460 1460
1461 connect( ConfigureDialog, SIGNAL( applyClicked() ), 1461 connect( ConfigureDialog, SIGNAL( applyClicked() ),
1462 this, SLOT( configurationChanged() ) ); 1462 this, SLOT( configurationChanged() ) );
1463 connect( ConfigureDialog, SIGNAL( okClicked() ), 1463 connect( ConfigureDialog, SIGNAL( okClicked() ),
1464 this, SLOT( configurationChanged() ) ); 1464 this, SLOT( configurationChanged() ) );
1465 saveSettings(); 1465 saveSettings();
1466#ifndef DESKTOP_VERSION 1466#ifndef DESKTOP_VERSION
1467 ConfigureDialog->showMaximized(); 1467 ConfigureDialog->showMaximized();
1468#endif 1468#endif
1469 if ( ConfigureDialog->exec() ) 1469 if ( ConfigureDialog->exec() )
1470 KMessageBox::information( this, i18n("Some changes are only\neffective after a restart!\n") ); 1470 KMessageBox::information( this, i18n("Some changes are only\neffective after a restart!\n") );
1471 delete ConfigureDialog; 1471 delete ConfigureDialog;
1472} 1472}
1473 1473
1474void KABCore::openLDAPDialog() 1474void KABCore::openLDAPDialog()
1475{ 1475{
1476#ifndef KAB_EMBEDDED 1476#ifndef KAB_EMBEDDED
1477 if ( !mLdapSearchDialog ) { 1477 if ( !mLdapSearchDialog ) {
1478 mLdapSearchDialog = new LDAPSearchDialog( mAddressBook, this ); 1478 mLdapSearchDialog = new LDAPSearchDialog( mAddressBook, this );
1479 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), mViewManager, 1479 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), mViewManager,
1480 SLOT( refreshView() ) ); 1480 SLOT( refreshView() ) );
1481 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), this, 1481 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), this,
1482 SLOT( setModified() ) ); 1482 SLOT( setModified() ) );
1483 } else 1483 } else
1484 mLdapSearchDialog->restoreSettings(); 1484 mLdapSearchDialog->restoreSettings();
1485 1485
1486 if ( mLdapSearchDialog->isOK() ) 1486 if ( mLdapSearchDialog->isOK() )
1487 mLdapSearchDialog->exec(); 1487 mLdapSearchDialog->exec();
1488#else //KAB_EMBEDDED 1488#else //KAB_EMBEDDED
1489 qDebug("KABCore::openLDAPDialog() finsih method"); 1489 qDebug("KABCore::openLDAPDialog() finsih method");
1490#endif //KAB_EMBEDDED 1490#endif //KAB_EMBEDDED
1491} 1491}
1492 1492
1493void KABCore::print() 1493void KABCore::print()
1494{ 1494{
1495#ifndef KAB_EMBEDDED 1495#ifndef KAB_EMBEDDED
1496 KPrinter printer; 1496 KPrinter printer;
1497 if ( !printer.setup( this ) ) 1497 if ( !printer.setup( this ) )
1498 return; 1498 return;
1499 1499
1500 KABPrinting::PrintingWizard wizard( &printer, mAddressBook, 1500 KABPrinting::PrintingWizard wizard( &printer, mAddressBook,
1501 mViewManager->selectedUids(), this ); 1501 mViewManager->selectedUids(), this );
1502 1502
1503 wizard.exec(); 1503 wizard.exec();
1504#else //KAB_EMBEDDED 1504#else //KAB_EMBEDDED
1505 qDebug("KABCore::print() finsih method"); 1505 qDebug("KABCore::print() finsih method");
1506#endif //KAB_EMBEDDED 1506#endif //KAB_EMBEDDED
1507 1507
1508} 1508}
1509 1509
1510 1510
1511void KABCore::addGUIClient( KXMLGUIClient *client ) 1511void KABCore::addGUIClient( KXMLGUIClient *client )
1512{ 1512{
1513 if ( mGUIClient ) 1513 if ( mGUIClient )
1514 mGUIClient->insertChildClient( client ); 1514 mGUIClient->insertChildClient( client );
1515 else 1515 else
1516 KMessageBox::error( this, "no KXMLGUICLient"); 1516 KMessageBox::error( this, "no KXMLGUICLient");
1517} 1517}
1518 1518
1519 1519
1520void KABCore::configurationChanged() 1520void KABCore::configurationChanged()
1521{ 1521{
1522 mExtensionManager->reconfigure(); 1522 mExtensionManager->reconfigure();
1523} 1523}
1524 1524
1525void KABCore::addressBookChanged() 1525void KABCore::addressBookChanged()
1526{ 1526{
1527/*US 1527/*US
1528 QDictIterator<AddresseeEditorDialog> it( mEditorDict ); 1528 QDictIterator<AddresseeEditorDialog> it( mEditorDict );
1529 while ( it.current() ) { 1529 while ( it.current() ) {
1530 if ( it.current()->dirty() ) { 1530 if ( it.current()->dirty() ) {
1531 QString text = i18n( "Data has been changed externally. Unsaved " 1531 QString text = i18n( "Data has been changed externally. Unsaved "
1532 "changes will be lost." ); 1532 "changes will be lost." );
1533 KMessageBox::information( this, text ); 1533 KMessageBox::information( this, text );
1534 } 1534 }
1535 it.current()->setAddressee( mAddressBook->findByUid( it.currentKey() ) ); 1535 it.current()->setAddressee( mAddressBook->findByUid( it.currentKey() ) );
1536 ++it; 1536 ++it;
1537 } 1537 }
1538*/ 1538*/
1539 if (mEditorDialog) 1539 if (mEditorDialog)
1540 { 1540 {
1541 if (mEditorDialog->dirty()) 1541 if (mEditorDialog->dirty())
1542 { 1542 {
1543 QString text = i18n( "Data has been changed externally. Unsaved " 1543 QString text = i18n( "Data has been changed externally. Unsaved "
1544 "changes will be lost." ); 1544 "changes will be lost." );
1545 KMessageBox::information( this, text ); 1545 KMessageBox::information( this, text );
1546 } 1546 }
1547 QString currentuid = mEditorDialog->addressee().uid(); 1547 QString currentuid = mEditorDialog->addressee().uid();
1548 mEditorDialog->setAddressee( mAddressBook->findByUid( currentuid ) ); 1548 mEditorDialog->setAddressee( mAddressBook->findByUid( currentuid ) );
1549 } 1549 }
1550 mViewManager->refreshView(); 1550 mViewManager->refreshView();
1551// mDetails->refreshView(); 1551// mDetails->refreshView();
1552 1552
1553 1553
1554} 1554}
1555 1555
1556AddresseeEditorDialog *KABCore::createAddresseeEditorDialog( QWidget *parent, 1556AddresseeEditorDialog *KABCore::createAddresseeEditorDialog( QWidget *parent,
1557 const char *name ) 1557 const char *name )
1558{ 1558{
1559 1559
1560 if ( mEditorDialog == 0 ) { 1560 if ( mEditorDialog == 0 ) {
1561 mEditorDialog = new AddresseeEditorDialog( this, parent, 1561 mEditorDialog = new AddresseeEditorDialog( this, parent,
1562 name ? name : "editorDialog" ); 1562 name ? name : "editorDialog" );
1563 1563
1564 1564
1565 connect( mEditorDialog, SIGNAL( contactModified( const KABC::Addressee& ) ), 1565 connect( mEditorDialog, SIGNAL( contactModified( const KABC::Addressee& ) ),
1566 SLOT( contactModified( const KABC::Addressee& ) ) ); 1566 SLOT( contactModified( const KABC::Addressee& ) ) );
1567 //connect( mEditorDialog, SIGNAL( editorDestroyed( const QString& ) ), 1567 //connect( mEditorDialog, SIGNAL( editorDestroyed( const QString& ) ),
1568 // SLOT( slotEditorDestroyed( const QString& ) ) ; 1568 // SLOT( slotEditorDestroyed( const QString& ) ) ;
1569 } 1569 }
1570 1570
1571 return mEditorDialog; 1571 return mEditorDialog;
1572} 1572}
1573 1573
1574void KABCore::slotEditorDestroyed( const QString &uid ) 1574void KABCore::slotEditorDestroyed( const QString &uid )
1575{ 1575{
1576 //mEditorDict.remove( uid ); 1576 //mEditorDict.remove( uid );
1577} 1577}
1578 1578
1579void KABCore::initGUI() 1579void KABCore::initGUI()
1580{ 1580{
1581#ifndef KAB_EMBEDDED 1581#ifndef KAB_EMBEDDED
1582 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1582 QHBoxLayout *topLayout = new QHBoxLayout( this );
1583 topLayout->setSpacing( KDialogBase::spacingHint() ); 1583 topLayout->setSpacing( KDialogBase::spacingHint() );
1584 1584
1585 mExtensionBarSplitter = new QSplitter( this ); 1585 mExtensionBarSplitter = new QSplitter( this );
1586 mExtensionBarSplitter->setOrientation( Qt::Vertical ); 1586 mExtensionBarSplitter->setOrientation( Qt::Vertical );
1587 1587
1588 mDetailsSplitter = new QSplitter( mExtensionBarSplitter ); 1588 mDetailsSplitter = new QSplitter( mExtensionBarSplitter );
1589 1589
1590 QVBox *viewSpace = new QVBox( mDetailsSplitter ); 1590 QVBox *viewSpace = new QVBox( mDetailsSplitter );
1591 mIncSearchWidget = new IncSearchWidget( viewSpace ); 1591 mIncSearchWidget = new IncSearchWidget( viewSpace );
1592 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 1592 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
1593 SLOT( incrementalSearch( const QString& ) ) ); 1593 SLOT( incrementalSearch( const QString& ) ) );
1594 1594
1595 mViewManager = new ViewManager( this, viewSpace ); 1595 mViewManager = new ViewManager( this, viewSpace );
1596 viewSpace->setStretchFactor( mViewManager, 1 ); 1596 viewSpace->setStretchFactor( mViewManager, 1 );
1597 1597
1598 mDetails = new ViewContainer( mDetailsSplitter ); 1598 mDetails = new ViewContainer( mDetailsSplitter );
1599 1599
1600 mJumpButtonBar = new JumpButtonBar( this, this ); 1600 mJumpButtonBar = new JumpButtonBar( this, this );
1601 1601
1602 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter ); 1602 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter );
1603 1603
1604 topLayout->addWidget( mExtensionBarSplitter ); 1604 topLayout->addWidget( mExtensionBarSplitter );
1605 topLayout->setStretchFactor( mExtensionBarSplitter, 100 ); 1605 topLayout->setStretchFactor( mExtensionBarSplitter, 100 );
1606 topLayout->addWidget( mJumpButtonBar ); 1606 topLayout->addWidget( mJumpButtonBar );
1607 topLayout->setStretchFactor( mJumpButtonBar, 1 ); 1607 topLayout->setStretchFactor( mJumpButtonBar, 1 );
1608 1608
1609 mXXPortManager = new XXPortManager( this, this ); 1609 mXXPortManager = new XXPortManager( this, this );
1610 1610
1611#else //KAB_EMBEDDED 1611#else //KAB_EMBEDDED
1612 //US initialize viewMenu before settingup viewmanager. 1612 //US initialize viewMenu before settingup viewmanager.
1613 // Viewmanager needs this menu to plugin submenues. 1613 // Viewmanager needs this menu to plugin submenues.
1614 viewMenu = new QPopupMenu( this ); 1614 viewMenu = new QPopupMenu( this );
1615 settingsMenu = new QPopupMenu( this ); 1615 settingsMenu = new QPopupMenu( this );
1616 //filterMenu = new QPopupMenu( this ); 1616 //filterMenu = new QPopupMenu( this );
1617 ImportMenu = new QPopupMenu( this ); 1617 ImportMenu = new QPopupMenu( this );
1618 ExportMenu = new QPopupMenu( this ); 1618 ExportMenu = new QPopupMenu( this );
1619 syncMenu = new QPopupMenu( this ); 1619 syncMenu = new QPopupMenu( this );
1620 changeMenu= new QPopupMenu( this ); 1620 changeMenu= new QPopupMenu( this );
1621 1621
1622//US since we have no splitter for the embedded system, setup 1622//US since we have no splitter for the embedded system, setup
1623// a layout with two frames. One left and one right. 1623// a layout with two frames. One left and one right.
1624 1624
1625 QBoxLayout *topLayout; 1625 QBoxLayout *topLayout;
1626 1626
1627 // = new QHBoxLayout( this ); 1627 // = new QHBoxLayout( this );
1628// QBoxLayout *topLayout = (QBoxLayout*)layout(); 1628// QBoxLayout *topLayout = (QBoxLayout*)layout();
1629 1629
1630// QWidget *mainBox = new QWidget( this ); 1630// QWidget *mainBox = new QWidget( this );
1631// QBoxLayout * mainBoxLayout = new QHBoxLayout(mainBox); 1631// QBoxLayout * mainBoxLayout = new QHBoxLayout(mainBox);
1632 1632
1633#ifdef DESKTOP_VERSION 1633#ifdef DESKTOP_VERSION
1634 topLayout = new QHBoxLayout( this ); 1634 topLayout = new QHBoxLayout( this );
1635 1635
1636 1636
1637 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 1637 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
1638 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 1638 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
1639 1639
1640 topLayout->addWidget(mMiniSplitter ); 1640 topLayout->addWidget(mMiniSplitter );
1641 1641
1642 mExtensionBarSplitter = new KDGanttMinimizeSplitter( Qt::Vertical,mMiniSplitter ); 1642 mExtensionBarSplitter = new KDGanttMinimizeSplitter( Qt::Vertical,mMiniSplitter );
1643 mExtensionBarSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down ); 1643 mExtensionBarSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down );
1644 mViewManager = new ViewManager( this, mExtensionBarSplitter ); 1644 mViewManager = new ViewManager( this, mExtensionBarSplitter );
1645 mDetails = new ViewContainer( mMiniSplitter ); 1645 mDetails = new ViewContainer( mMiniSplitter );
1646 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter ); 1646 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter );
1647#else 1647#else
1648 if ( QApplication::desktop()->width() > 480 ) { 1648 if ( QApplication::desktop()->width() > 480 ) {
1649 topLayout = new QHBoxLayout( this ); 1649 topLayout = new QHBoxLayout( this );
1650 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 1650 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
1651 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 1651 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
1652 } else { 1652 } else {
1653 1653
1654 topLayout = new QHBoxLayout( this ); 1654 topLayout = new QHBoxLayout( this );
1655 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Vertical, this); 1655 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Vertical, this);
1656 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down ); 1656 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down );
1657 } 1657 }
1658 1658
1659 topLayout->addWidget(mMiniSplitter ); 1659 topLayout->addWidget(mMiniSplitter );
1660 mViewManager = new ViewManager( this, mMiniSplitter ); 1660 mViewManager = new ViewManager( this, mMiniSplitter );
1661 mDetails = new ViewContainer( mMiniSplitter ); 1661 mDetails = new ViewContainer( mMiniSplitter );
1662 1662
1663 1663
1664 mExtensionManager = new ExtensionManager( this, mMiniSplitter ); 1664 mExtensionManager = new ExtensionManager( this, mMiniSplitter );
1665#endif 1665#endif
1666 //eh->hide(); 1666 //eh->hide();
1667 // topLayout->addWidget(mExtensionManager ); 1667 // topLayout->addWidget(mExtensionManager );
1668 1668
1669 1669
1670/*US 1670/*US
1671#ifndef KAB_NOSPLITTER 1671#ifndef KAB_NOSPLITTER
1672 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1672 QHBoxLayout *topLayout = new QHBoxLayout( this );
1673//US topLayout->setSpacing( KDialogBase::spacingHint() ); 1673//US topLayout->setSpacing( KDialogBase::spacingHint() );
1674 topLayout->setSpacing( 10 ); 1674 topLayout->setSpacing( 10 );
1675 1675
1676 mDetailsSplitter = new QSplitter( this ); 1676 mDetailsSplitter = new QSplitter( this );
1677 1677
1678 QVBox *viewSpace = new QVBox( mDetailsSplitter ); 1678 QVBox *viewSpace = new QVBox( mDetailsSplitter );
1679 1679
1680 mViewManager = new ViewManager( this, viewSpace ); 1680 mViewManager = new ViewManager( this, viewSpace );
1681 viewSpace->setStretchFactor( mViewManager, 1 ); 1681 viewSpace->setStretchFactor( mViewManager, 1 );
1682 1682
1683 mDetails = new ViewContainer( mDetailsSplitter ); 1683 mDetails = new ViewContainer( mDetailsSplitter );
1684 1684
1685 topLayout->addWidget( mDetailsSplitter ); 1685 topLayout->addWidget( mDetailsSplitter );
1686 topLayout->setStretchFactor( mDetailsSplitter, 100 ); 1686 topLayout->setStretchFactor( mDetailsSplitter, 100 );
1687#else //KAB_NOSPLITTER 1687#else //KAB_NOSPLITTER
1688 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1688 QHBoxLayout *topLayout = new QHBoxLayout( this );
1689//US topLayout->setSpacing( KDialogBase::spacingHint() ); 1689//US topLayout->setSpacing( KDialogBase::spacingHint() );
1690 topLayout->setSpacing( 10 ); 1690 topLayout->setSpacing( 10 );
1691 1691
1692// mDetailsSplitter = new QSplitter( this ); 1692// mDetailsSplitter = new QSplitter( this );
1693 1693
1694 QVBox *viewSpace = new QVBox( this ); 1694 QVBox *viewSpace = new QVBox( this );
1695 1695
1696 mViewManager = new ViewManager( this, viewSpace ); 1696 mViewManager = new ViewManager( this, viewSpace );
1697 viewSpace->setStretchFactor( mViewManager, 1 ); 1697 viewSpace->setStretchFactor( mViewManager, 1 );
1698 1698
1699 mDetails = new ViewContainer( this ); 1699 mDetails = new ViewContainer( this );
1700 1700
1701 topLayout->addWidget( viewSpace ); 1701 topLayout->addWidget( viewSpace );
1702// topLayout->setStretchFactor( mDetailsSplitter, 100 ); 1702// topLayout->setStretchFactor( mDetailsSplitter, 100 );
1703 topLayout->addWidget( mDetails ); 1703 topLayout->addWidget( mDetails );
1704#endif //KAB_NOSPLITTER 1704#endif //KAB_NOSPLITTER
1705*/ 1705*/
1706 1706
1707 syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::KAPI, KABPrefs::instance(), syncMenu); 1707 syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::KAPI, KABPrefs::instance(), syncMenu);
1708 syncManager->setBlockSave(false); 1708 syncManager->setBlockSave(false);
1709 1709
1710 connect(syncManager , SIGNAL( request_file() ), this, SLOT( syncFileRequest() ) ); 1710 connect(syncManager , SIGNAL( request_file() ), this, SLOT( syncFileRequest() ) );
1711 connect(syncManager , SIGNAL( getFile( bool )), this, SLOT(getFile( bool ) ) ); 1711 connect(syncManager , SIGNAL( getFile( bool )), this, SLOT(getFile( bool ) ) );
1712 syncManager->setDefaultFileName( sentSyncFile()); 1712 syncManager->setDefaultFileName( sentSyncFile());
1713 //connect(syncManager , SIGNAL( ), this, SLOT( ) ); 1713 //connect(syncManager , SIGNAL( ), this, SLOT( ) );
1714 1714
1715#endif //KAB_EMBEDDED 1715#endif //KAB_EMBEDDED
1716 initActions(); 1716 initActions();
1717 1717
1718#ifdef KAB_EMBEDDED 1718#ifdef KAB_EMBEDDED
1719 addActionsManually(); 1719 addActionsManually();
1720 //US make sure the export and import menues are initialized before creating the xxPortManager. 1720 //US make sure the export and import menues are initialized before creating the xxPortManager.
1721 mXXPortManager = new XXPortManager( this, this ); 1721 mXXPortManager = new XXPortManager( this, this );
1722 1722
1723 // LR mIncSearchWidget = new IncSearchWidget( mMainWindow->getIconToolBar() ); 1723 // LR mIncSearchWidget = new IncSearchWidget( mMainWindow->getIconToolBar() );
1724 //mMainWindow->toolBar()->insertWidget(-1, 4, mIncSearchWidget); 1724 //mMainWindow->toolBar()->insertWidget(-1, 4, mIncSearchWidget);
1725 // mActionQuit->plug ( mMainWindow->toolBar()); 1725 // mActionQuit->plug ( mMainWindow->toolBar());
1726 //mIncSearchWidget = new IncSearchWidget( mMainWindow->toolBar() ); 1726 //mIncSearchWidget = new IncSearchWidget( mMainWindow->toolBar() );
1727 //mMainWindow->toolBar()->insertWidget(-1, 0, mIncSearchWidget); 1727 //mMainWindow->toolBar()->insertWidget(-1, 0, mIncSearchWidget);
1728 // mIncSearchWidget->hide(); 1728 // mIncSearchWidget->hide();
1729 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 1729 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
1730 SLOT( incrementalSearch( const QString& ) ) ); 1730 SLOT( incrementalSearch( const QString& ) ) );
1731 1731
1732 1732
1733 mJumpButtonBar = new JumpButtonBar( this, this ); 1733 mJumpButtonBar = new JumpButtonBar( this, this );
1734 1734
1735 topLayout->addWidget( mJumpButtonBar ); 1735 topLayout->addWidget( mJumpButtonBar );
1736//US topLayout->setStretchFactor( mJumpButtonBar, 10 ); 1736//US topLayout->setStretchFactor( mJumpButtonBar, 10 );
1737 1737
1738// mMainWindow->getIconToolBar()->raise(); 1738// mMainWindow->getIconToolBar()->raise();
1739 1739
1740#endif //KAB_EMBEDDED 1740#endif //KAB_EMBEDDED
1741 1741
1742} 1742}
1743void KABCore::initActions() 1743void KABCore::initActions()
1744{ 1744{
1745//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart); 1745//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart);
1746 1746
1747#ifndef KAB_EMBEDDED 1747#ifndef KAB_EMBEDDED
1748 connect( QApplication::clipboard(), SIGNAL( dataChanged() ), 1748 connect( QApplication::clipboard(), SIGNAL( dataChanged() ),
1749 SLOT( clipboardDataChanged() ) ); 1749 SLOT( clipboardDataChanged() ) );
1750#endif //KAB_EMBEDDED 1750#endif //KAB_EMBEDDED
1751 1751
1752 // file menu 1752 // file menu
1753 if ( mIsPart ) { 1753 if ( mIsPart ) {
1754 mActionMail = new KAction( i18n( "&Mail" ), "mail_generic", 0, this, 1754 mActionMail = new KAction( i18n( "&Mail" ), "mail_generic", 0, this,
1755 SLOT( sendMail() ), actionCollection(), 1755 SLOT( sendMail() ), actionCollection(),
1756 "kaddressbook_mail" ); 1756 "kaddressbook_mail" );
1757 mActionPrint = new KAction( i18n( "&Print" ), "fileprint", CTRL + Key_P, this, 1757 mActionPrint = new KAction( i18n( "&Print" ), "fileprint", CTRL + Key_P, this,
1758 SLOT( print() ), actionCollection(), "kaddressbook_print" ); 1758 SLOT( print() ), actionCollection(), "kaddressbook_print" );
1759 1759
1760 } else { 1760 } else {
1761 mActionMail = KStdAction::mail( this, SLOT( sendMail() ), actionCollection() ); 1761 mActionMail = KStdAction::mail( this, SLOT( sendMail() ), actionCollection() );
1762 mActionPrint = KStdAction::print( this, SLOT( print() ), actionCollection() ); 1762 mActionPrint = KStdAction::print( this, SLOT( print() ), actionCollection() );
1763 } 1763 }
1764 1764
1765 1765
1766 mActionSave = new KAction( i18n( "&Save" ), "filesave", CTRL+Key_S, this, 1766 mActionSave = new KAction( i18n( "&Save" ), "filesave", CTRL+Key_S, this,
1767 SLOT( save() ), actionCollection(), "file_sync" ); 1767 SLOT( save() ), actionCollection(), "file_sync" );
1768 1768
1769 mActionNewContact = new KAction( i18n( "&New Contact..." ), "filenew", CTRL+Key_N, this, 1769 mActionNewContact = new KAction( i18n( "&New Contact..." ), "filenew", CTRL+Key_N, this,
1770 SLOT( newContact() ), actionCollection(), "file_new_contact" ); 1770 SLOT( newContact() ), actionCollection(), "file_new_contact" );
1771 1771
1772 mActionMailVCard = new KAction(i18n("Mail &vCard..."), "mail_post_to", 0, 1772 mActionMailVCard = new KAction(i18n("Mail &vCard..."), "mail_post_to", 0,
1773 this, SLOT( mailVCard() ), 1773 this, SLOT( mailVCard() ),
1774 actionCollection(), "file_mail_vcard"); 1774 actionCollection(), "file_mail_vcard");
1775 1775
1776 mActionExport2phone = new KAction( i18n( "Selected to phone" ), "ex2phone", 0, this, 1776 mActionExport2phone = new KAction( i18n( "Selected to phone" ), "ex2phone", 0, this,
1777 SLOT( export2phone() ), actionCollection(), 1777 SLOT( export2phone() ), actionCollection(),
1778 "kaddressbook_ex2phone" ); 1778 "kaddressbook_ex2phone" );
1779 1779
1780 mActionBeamVCard = 0; 1780 mActionBeamVCard = 0;
1781 mActionBeam = 0; 1781 mActionBeam = 0;
1782 1782
1783#ifndef DESKTOP_VERSION 1783#ifndef DESKTOP_VERSION
1784 if ( Ir::supported() ) { 1784 if ( Ir::supported() ) {
1785 mActionBeamVCard = new KAction( i18n( "Beam selected v&Card(s)" ), "beam", 0, this, 1785 mActionBeamVCard = new KAction( i18n( "Beam selected v&Card(s)" ), "beam", 0, this,
1786 SLOT( beamVCard() ), actionCollection(), 1786 SLOT( beamVCard() ), actionCollection(),
1787 "kaddressbook_beam_vcard" ); 1787 "kaddressbook_beam_vcard" );
1788 1788
1789 mActionBeam = new KAction( i18n( "&Beam personal vCard" ), "beam", 0, this, 1789 mActionBeam = new KAction( i18n( "&Beam personal vCard" ), "beam", 0, this,
1790 SLOT( beamMySelf() ), actionCollection(), 1790 SLOT( beamMySelf() ), actionCollection(),
1791 "kaddressbook_beam_myself" ); 1791 "kaddressbook_beam_myself" );
1792 } 1792 }
1793#endif 1793#endif
1794 1794
1795 mActionEditAddressee = new KAction( i18n( "&Edit Contact..." ), "edit", 0, 1795 mActionEditAddressee = new KAction( i18n( "&Edit Contact..." ), "edit", 0,
1796 this, SLOT( editContact2() ), 1796 this, SLOT( editContact2() ),
1797 actionCollection(), "file_properties" ); 1797 actionCollection(), "file_properties" );
1798 1798
1799#ifdef KAB_EMBEDDED 1799#ifdef KAB_EMBEDDED
1800 // mActionQuit = KStdAction::quit( mMainWindow, SLOT( exit() ), actionCollection() ); 1800 // mActionQuit = KStdAction::quit( mMainWindow, SLOT( exit() ), actionCollection() );
1801 mActionQuit = new KAction( i18n( "&Exit" ), "exit", 0, 1801 mActionQuit = new KAction( i18n( "&Exit" ), "exit", 0,
1802 mMainWindow, SLOT( exit() ), 1802 mMainWindow, SLOT( exit() ),
1803 actionCollection(), "quit" ); 1803 actionCollection(), "quit" );
1804#endif //KAB_EMBEDDED 1804#endif //KAB_EMBEDDED
1805 1805
1806 // edit menu 1806 // edit menu
1807 if ( mIsPart ) { 1807 if ( mIsPart ) {
1808 mActionCopy = new KAction( i18n( "&Copy" ), "editcopy", CTRL + Key_C, this, 1808 mActionCopy = new KAction( i18n( "&Copy" ), "editcopy", CTRL + Key_C, this,
1809 SLOT( copyContacts() ), actionCollection(), 1809 SLOT( copyContacts() ), actionCollection(),
1810 "kaddressbook_copy" ); 1810 "kaddressbook_copy" );
1811 mActionCut = new KAction( i18n( "Cu&t" ), "editcut", CTRL + Key_X, this, 1811 mActionCut = new KAction( i18n( "Cu&t" ), "editcut", CTRL + Key_X, this,
1812 SLOT( cutContacts() ), actionCollection(), 1812 SLOT( cutContacts() ), actionCollection(),
1813 "kaddressbook_cut" ); 1813 "kaddressbook_cut" );
1814 mActionPaste = new KAction( i18n( "&Paste" ), "editpaste", CTRL + Key_V, this, 1814 mActionPaste = new KAction( i18n( "&Paste" ), "editpaste", CTRL + Key_V, this,
1815 SLOT( pasteContacts() ), actionCollection(), 1815 SLOT( pasteContacts() ), actionCollection(),
1816 "kaddressbook_paste" ); 1816 "kaddressbook_paste" );
1817 mActionSelectAll = new KAction( i18n( "Select &All" ), CTRL + Key_A, this, 1817 mActionSelectAll = new KAction( i18n( "Select &All" ), CTRL + Key_A, this,
1818 SLOT( selectAllContacts() ), actionCollection(), 1818 SLOT( selectAllContacts() ), actionCollection(),
1819 "kaddressbook_select_all" ); 1819 "kaddressbook_select_all" );
1820 mActionUndo = new KAction( i18n( "&Undo" ), "undo", CTRL + Key_Z, this, 1820 mActionUndo = new KAction( i18n( "&Undo" ), "undo", CTRL + Key_Z, this,
1821 SLOT( undo() ), actionCollection(), 1821 SLOT( undo() ), actionCollection(),
1822 "kaddressbook_undo" ); 1822 "kaddressbook_undo" );
1823 mActionRedo = new KAction( i18n( "Re&do" ), "redo", CTRL + SHIFT + Key_Z, 1823 mActionRedo = new KAction( i18n( "Re&do" ), "redo", CTRL + SHIFT + Key_Z,
1824 this, SLOT( redo() ), actionCollection(), 1824 this, SLOT( redo() ), actionCollection(),
1825 "kaddressbook_redo" ); 1825 "kaddressbook_redo" );
1826 } else { 1826 } else {
1827 mActionCopy = KStdAction::copy( this, SLOT( copyContacts() ), actionCollection() ); 1827 mActionCopy = KStdAction::copy( this, SLOT( copyContacts() ), actionCollection() );
1828 mActionCut = KStdAction::cut( this, SLOT( cutContacts() ), actionCollection() ); 1828 mActionCut = KStdAction::cut( this, SLOT( cutContacts() ), actionCollection() );
1829 mActionPaste = KStdAction::paste( this, SLOT( pasteContacts() ), actionCollection() ); 1829 mActionPaste = KStdAction::paste( this, SLOT( pasteContacts() ), actionCollection() );
1830 mActionSelectAll = KStdAction::selectAll( this, SLOT( selectAllContacts() ), actionCollection() ); 1830 mActionSelectAll = KStdAction::selectAll( this, SLOT( selectAllContacts() ), actionCollection() );
1831 mActionUndo = KStdAction::undo( this, SLOT( undo() ), actionCollection() ); 1831 mActionUndo = KStdAction::undo( this, SLOT( undo() ), actionCollection() );
1832 mActionRedo = KStdAction::redo( this, SLOT( redo() ), actionCollection() ); 1832 mActionRedo = KStdAction::redo( this, SLOT( redo() ), actionCollection() );
1833 } 1833 }
1834 1834
1835 mActionDelete = new KAction( i18n( "&Delete Contact" ), "editdelete", 1835 mActionDelete = new KAction( i18n( "&Delete Contact" ), "editdelete",
1836 Key_Delete, this, SLOT( deleteContacts() ), 1836 Key_Delete, this, SLOT( deleteContacts() ),
1837 actionCollection(), "edit_delete" ); 1837 actionCollection(), "edit_delete" );
1838 1838
1839 mActionUndo->setEnabled( false ); 1839 mActionUndo->setEnabled( false );
1840 mActionRedo->setEnabled( false ); 1840 mActionRedo->setEnabled( false );
1841 1841
1842 // settings menu 1842 // settings menu
1843#ifdef KAB_EMBEDDED 1843#ifdef KAB_EMBEDDED
1844//US special menuentry to configure the addressbook resources. On KDE 1844//US special menuentry to configure the addressbook resources. On KDE
1845// you do that through the control center !!! 1845// you do that through the control center !!!
1846 mActionConfigResources = new KAction( i18n( "Configure &Resources..." ), "configure_resources", 0, this, 1846 mActionConfigResources = new KAction( i18n( "Configure &Resources..." ), "configure_resources", 0, this,
1847 SLOT( configureResources() ), actionCollection(), 1847 SLOT( configureResources() ), actionCollection(),
1848 "kaddressbook_configure_resources" ); 1848 "kaddressbook_configure_resources" );
1849#endif //KAB_EMBEDDED 1849#endif //KAB_EMBEDDED
1850 1850
1851 if ( mIsPart ) { 1851 if ( mIsPart ) {
1852 mActionConfigKAddressbook = new KAction( i18n( "&Configure KAddressBook..." ), "configure", 0, this, 1852 mActionConfigKAddressbook = new KAction( i18n( "&Configure KAddressBook..." ), "configure", 0, this,
1853 SLOT( openConfigDialog() ), actionCollection(), 1853 SLOT( openConfigDialog() ), actionCollection(),
1854 "kaddressbook_configure" ); 1854 "kaddressbook_configure" );
1855 1855
1856 mActionConfigShortcuts = new KAction( i18n( "Configure S&hortcuts..." ), "configure_shortcuts", 0, 1856 mActionConfigShortcuts = new KAction( i18n( "Configure S&hortcuts..." ), "configure_shortcuts", 0,
1857 this, SLOT( configureKeyBindings() ), actionCollection(), 1857 this, SLOT( configureKeyBindings() ), actionCollection(),
1858 "kaddressbook_configure_shortcuts" ); 1858 "kaddressbook_configure_shortcuts" );
1859#ifdef KAB_EMBEDDED 1859#ifdef KAB_EMBEDDED
1860 mActionConfigureToolbars = KStdAction::configureToolbars( this, SLOT( mMainWindow->configureToolbars() ), actionCollection() ); 1860 mActionConfigureToolbars = KStdAction::configureToolbars( this, SLOT( mMainWindow->configureToolbars() ), actionCollection() );
1861 mActionConfigureToolbars->setEnabled( false ); 1861 mActionConfigureToolbars->setEnabled( false );
1862#endif //KAB_EMBEDDED 1862#endif //KAB_EMBEDDED
1863 1863
1864 } else { 1864 } else {
1865 mActionConfigKAddressbook = KStdAction::preferences( this, SLOT( openConfigDialog() ), actionCollection() ); 1865 mActionConfigKAddressbook = KStdAction::preferences( this, SLOT( openConfigDialog() ), actionCollection() );
1866 1866
1867 mActionKeyBindings = KStdAction::keyBindings( this, SLOT( configureKeyBindings() ), actionCollection() ); 1867 mActionKeyBindings = KStdAction::keyBindings( this, SLOT( configureKeyBindings() ), actionCollection() );
1868 } 1868 }
1869 1869
1870 mActionJumpBar = new KToggleAction( i18n( "Show Jump Bar" ), 0, 0, 1870 mActionJumpBar = new KToggleAction( i18n( "Show Jump Bar" ), 0, 0,
1871 actionCollection(), "options_show_jump_bar" ); 1871 actionCollection(), "options_show_jump_bar" );
1872 connect( mActionJumpBar, SIGNAL( toggled( bool ) ), SLOT( setJumpButtonBarVisible( bool ) ) ); 1872 connect( mActionJumpBar, SIGNAL( toggled( bool ) ), SLOT( setJumpButtonBarVisible( bool ) ) );
1873 1873
1874 mActionDetails = new KToggleAction( i18n( "Show Details" ), "listview", 0, 1874 mActionDetails = new KToggleAction( i18n( "Show Details" ), "listview", 0,
1875 actionCollection(), "options_show_details" ); 1875 actionCollection(), "options_show_details" );
1876 connect( mActionDetails, SIGNAL( toggled( bool ) ), SLOT( setDetailsVisible( bool ) ) ); 1876 connect( mActionDetails, SIGNAL( toggled( bool ) ), SLOT( setDetailsVisible( bool ) ) );
1877 1877
1878 // misc 1878 // misc
1879 // only enable LDAP lookup if we can handle the protocol 1879 // only enable LDAP lookup if we can handle the protocol
1880#ifndef KAB_EMBEDDED 1880#ifndef KAB_EMBEDDED
1881 if ( KProtocolInfo::isKnownProtocol( KURL( "ldap://localhost" ) ) ) { 1881 if ( KProtocolInfo::isKnownProtocol( KURL( "ldap://localhost" ) ) ) {
1882 new KAction( i18n( "&Lookup Addresses in Directory" ), "find", 0, 1882 new KAction( i18n( "&Lookup Addresses in Directory" ), "find", 0,
1883 this, SLOT( openLDAPDialog() ), actionCollection(), 1883 this, SLOT( openLDAPDialog() ), actionCollection(),
1884 "ldap_lookup" ); 1884 "ldap_lookup" );
1885 } 1885 }
1886#else //KAB_EMBEDDED 1886#else //KAB_EMBEDDED
1887 //qDebug("KABCore::initActions() LDAP has to be implemented"); 1887 //qDebug("KABCore::initActions() LDAP has to be implemented");
1888#endif //KAB_EMBEDDED 1888#endif //KAB_EMBEDDED
1889 1889
1890 1890
1891 mActionWhoAmI = new KAction( i18n( "Set Who Am I" ), "personal", 0, this, 1891 mActionWhoAmI = new KAction( i18n( "Set Who Am I" ), "personal", 0, this,
1892 SLOT( setWhoAmI() ), actionCollection(), 1892 SLOT( setWhoAmI() ), actionCollection(),
1893 "set_personal" ); 1893 "set_personal" );
1894 1894
1895 1895
1896 1896
1897 1897
1898 mActionCategories = new KAction( i18n( "Set Categories" ), 0, this, 1898 mActionCategories = new KAction( i18n( "Set Categories" ), 0, this,
1899 SLOT( setCategories() ), actionCollection(), 1899 SLOT( setCategories() ), actionCollection(),
1900 "edit_set_categories" ); 1900 "edit_set_categories" );
1901 1901
1902 mActionRemoveVoice = new KAction( i18n( "Remove \"voice\"..." ), 0, this, 1902 mActionRemoveVoice = new KAction( i18n( "Remove \"voice\"..." ), 0, this,
1903 SLOT( removeVoice() ), actionCollection(), 1903 SLOT( removeVoice() ), actionCollection(),
1904 "remove_voice" ); 1904 "remove_voice" );
1905 mActionImportOL = new KAction( i18n( "Import from Outlook..." ), 0, this, 1905 mActionImportOL = new KAction( i18n( "Import from Outlook..." ), 0, this,
1906 SLOT( importFromOL() ), actionCollection(), 1906 SLOT( importFromOL() ), actionCollection(),
1907 "import_OL" ); 1907 "import_OL" );
1908#ifdef KAB_EMBEDDED 1908#ifdef KAB_EMBEDDED
1909 mActionLicence = new KAction( i18n( "Licence" ), 0, 1909 mActionLicence = new KAction( i18n( "Licence" ), 0,
1910 this, SLOT( showLicence() ), actionCollection(), 1910 this, SLOT( showLicence() ), actionCollection(),
1911 "licence_about_data" ); 1911 "licence_about_data" );
1912 mActionFaq = new KAction( i18n( "Faq" ), 0, 1912 mActionFaq = new KAction( i18n( "Faq" ), 0,
1913 this, SLOT( faq() ), actionCollection(), 1913 this, SLOT( faq() ), actionCollection(),
1914 "faq_about_data" ); 1914 "faq_about_data" );
1915 1915
1916 mActionAboutKAddressbook = new KAction( i18n( "&About KAddressBook" ), "kaddressbook2", 0, 1916 mActionAboutKAddressbook = new KAction( i18n( "&About KAddressBook" ), "kaddressbook2", 0,
1917 this, SLOT( createAboutData() ), actionCollection(), 1917 this, SLOT( createAboutData() ), actionCollection(),
1918 "kaddressbook_about_data" ); 1918 "kaddressbook_about_data" );
1919#endif //KAB_EMBEDDED 1919#endif //KAB_EMBEDDED
1920 1920
1921 clipboardDataChanged(); 1921 clipboardDataChanged();
1922 connect( UndoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) ); 1922 connect( UndoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) );
1923 connect( RedoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) ); 1923 connect( RedoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) );
1924} 1924}
1925 1925
1926//US we need this function, to plug all actions into the correct menues. 1926//US we need this function, to plug all actions into the correct menues.
1927// KDE uses a XML format to plug the actions, but we work her without this overhead. 1927// KDE uses a XML format to plug the actions, but we work her without this overhead.
1928void KABCore::addActionsManually() 1928void KABCore::addActionsManually()
1929{ 1929{
1930//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart); 1930//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart);
1931 1931
1932#ifdef KAB_EMBEDDED 1932#ifdef KAB_EMBEDDED
1933 QPopupMenu *fileMenu = new QPopupMenu( this ); 1933 QPopupMenu *fileMenu = new QPopupMenu( this );
1934 QPopupMenu *editMenu = new QPopupMenu( this ); 1934 QPopupMenu *editMenu = new QPopupMenu( this );
1935 QPopupMenu *helpMenu = new QPopupMenu( this ); 1935 QPopupMenu *helpMenu = new QPopupMenu( this );
1936 1936
1937 KToolBar* tb = mMainWindow->toolBar(); 1937 KToolBar* tb = mMainWindow->toolBar();
1938 1938
1939#ifdef DESKTOP_VERSION 1939#ifdef DESKTOP_VERSION
1940 QMenuBar* mb = mMainWindow->menuBar(); 1940 QMenuBar* mb = mMainWindow->menuBar();
1941 1941
1942 //US setup menubar. 1942 //US setup menubar.
1943 //Disable the following block if you do not want to have a menubar. 1943 //Disable the following block if you do not want to have a menubar.
1944 mb->insertItem( "&File", fileMenu ); 1944 mb->insertItem( "&File", fileMenu );
1945 mb->insertItem( "&Edit", editMenu ); 1945 mb->insertItem( "&Edit", editMenu );
1946 mb->insertItem( "&View", viewMenu ); 1946 mb->insertItem( "&View", viewMenu );
1947 mb->insertItem( "&Settings", settingsMenu ); 1947 mb->insertItem( "&Settings", settingsMenu );
1948 mb->insertItem( i18n("Synchronize"), syncMenu ); 1948 mb->insertItem( i18n("Synchronize"), syncMenu );
1949 mb->insertItem( "&Change selected", changeMenu ); 1949 mb->insertItem( "&Change selected", changeMenu );
1950 mb->insertItem( "&Help", helpMenu ); 1950 mb->insertItem( "&Help", helpMenu );
1951 mIncSearchWidget = new IncSearchWidget( tb ); 1951 mIncSearchWidget = new IncSearchWidget( tb );
1952 // tb->insertWidget(-1, 0, mIncSearchWidget); 1952 // tb->insertWidget(-1, 0, mIncSearchWidget);
1953 1953
1954#else 1954#else
1955 //US setup toolbar 1955 //US setup toolbar
1956 QPEMenuBar *menuBarTB = new QPEMenuBar( tb ); 1956 QPEMenuBar *menuBarTB = new QPEMenuBar( tb );
1957 QPopupMenu *popupBarTB = new QPopupMenu( this ); 1957 QPopupMenu *popupBarTB = new QPopupMenu( this );
1958 menuBarTB->insertItem( "ME", popupBarTB); 1958 menuBarTB->insertItem( "ME", popupBarTB);
1959 tb->insertWidget(-1, 0, menuBarTB); 1959 tb->insertWidget(-1, 0, menuBarTB);
1960 mIncSearchWidget = new IncSearchWidget( tb ); 1960 mIncSearchWidget = new IncSearchWidget( tb );
1961 1961
1962 tb->enableMoving(false); 1962 tb->enableMoving(false);
1963 popupBarTB->insertItem( "&File", fileMenu ); 1963 popupBarTB->insertItem( "&File", fileMenu );
1964 popupBarTB->insertItem( "&Edit", editMenu ); 1964 popupBarTB->insertItem( "&Edit", editMenu );
1965 popupBarTB->insertItem( "&View", viewMenu ); 1965 popupBarTB->insertItem( "&View", viewMenu );
1966 popupBarTB->insertItem( "&Settings", settingsMenu ); 1966 popupBarTB->insertItem( "&Settings", settingsMenu );
1967 popupBarTB->insertItem( i18n("Synchronize"), syncMenu ); 1967 popupBarTB->insertItem( i18n("Synchronize"), syncMenu );
1968 mViewManager->getFilterAction()->plug ( popupBarTB); 1968 mViewManager->getFilterAction()->plug ( popupBarTB);
1969 popupBarTB->insertItem( "&Change selected", changeMenu ); 1969 popupBarTB->insertItem( "&Change selected", changeMenu );
1970 popupBarTB->insertItem( "&Help", helpMenu ); 1970 popupBarTB->insertItem( "&Help", helpMenu );
1971 if (QApplication::desktop()->width() > 320 ) { 1971 if (QApplication::desktop()->width() > 320 ) {
1972 // mViewManager->getFilterAction()->plug ( tb); 1972 // mViewManager->getFilterAction()->plug ( tb);
1973 } 1973 }
1974#endif 1974#endif
1975 // mActionQuit->plug ( mMainWindow->toolBar()); 1975 // mActionQuit->plug ( mMainWindow->toolBar());
1976 1976
1977 1977
1978 1978
1979 //US Now connect the actions with the menue entries. 1979 //US Now connect the actions with the menue entries.
1980 mActionPrint->plug( fileMenu ); 1980 mActionPrint->plug( fileMenu );
1981 mActionMail->plug( fileMenu ); 1981 mActionMail->plug( fileMenu );
1982 fileMenu->insertSeparator(); 1982 fileMenu->insertSeparator();
1983 1983
1984 mActionNewContact->plug( fileMenu ); 1984 mActionNewContact->plug( fileMenu );
1985 mActionNewContact->plug( tb ); 1985 mActionNewContact->plug( tb );
1986 1986
1987 mActionEditAddressee->plug( fileMenu ); 1987 mActionEditAddressee->plug( fileMenu );
1988 if ((KGlobal::getDesktopSize() > KGlobal::Small ) || 1988 if ((KGlobal::getDesktopSize() > KGlobal::Small ) ||
1989 (!KABPrefs::instance()->mMultipleViewsAtOnce )) 1989 (!KABPrefs::instance()->mMultipleViewsAtOnce ))
1990 mActionEditAddressee->plug( tb ); 1990 mActionEditAddressee->plug( tb );
1991 1991
1992 fileMenu->insertSeparator(); 1992 fileMenu->insertSeparator();
1993 mActionSave->plug( fileMenu ); 1993 mActionSave->plug( fileMenu );
1994 fileMenu->insertItem( "&Import", ImportMenu ); 1994 fileMenu->insertItem( "&Import", ImportMenu );
1995 fileMenu->insertItem( "&Export", ExportMenu ); 1995 fileMenu->insertItem( "&Export", ExportMenu );
1996 fileMenu->insertSeparator(); 1996 fileMenu->insertSeparator();
1997 mActionMailVCard->plug( fileMenu ); 1997 mActionMailVCard->plug( fileMenu );
1998#ifndef DESKTOP_VERSION 1998#ifndef DESKTOP_VERSION
1999 if ( Ir::supported() ) mActionBeamVCard->plug( fileMenu ); 1999 if ( Ir::supported() ) mActionBeamVCard->plug( fileMenu );
2000 if ( Ir::supported() ) mActionBeam->plug(fileMenu ); 2000 if ( Ir::supported() ) mActionBeam->plug(fileMenu );
2001#endif 2001#endif
2002 fileMenu->insertSeparator(); 2002 fileMenu->insertSeparator();
2003 mActionQuit->plug( fileMenu ); 2003 mActionQuit->plug( fileMenu );
2004#ifdef _WIN32_ 2004#ifdef _WIN32_
2005 mActionImportOL->plug( ImportMenu ); 2005 mActionImportOL->plug( ImportMenu );
2006#endif 2006#endif
2007 // edit menu 2007 // edit menu
2008 mActionUndo->plug( editMenu ); 2008 mActionUndo->plug( editMenu );
2009 mActionRedo->plug( editMenu ); 2009 mActionRedo->plug( editMenu );
2010 editMenu->insertSeparator(); 2010 editMenu->insertSeparator();
2011 mActionCut->plug( editMenu ); 2011 mActionCut->plug( editMenu );
2012 mActionCopy->plug( editMenu ); 2012 mActionCopy->plug( editMenu );
2013 mActionPaste->plug( editMenu ); 2013 mActionPaste->plug( editMenu );
2014 mActionDelete->plug( editMenu ); 2014 mActionDelete->plug( editMenu );
2015 editMenu->insertSeparator(); 2015 editMenu->insertSeparator();
2016 mActionSelectAll->plug( editMenu ); 2016 mActionSelectAll->plug( editMenu );
2017 2017
2018 mActionRemoveVoice->plug( changeMenu ); 2018 mActionRemoveVoice->plug( changeMenu );
2019 // settings menu 2019 // settings menu
2020//US special menuentry to configure the addressbook resources. On KDE 2020//US special menuentry to configure the addressbook resources. On KDE
2021// you do that through the control center !!! 2021// you do that through the control center !!!
2022 mActionConfigResources->plug( settingsMenu ); 2022 mActionConfigResources->plug( settingsMenu );
2023 settingsMenu->insertSeparator(); 2023 settingsMenu->insertSeparator();
2024 2024
2025 mActionConfigKAddressbook->plug( settingsMenu ); 2025 mActionConfigKAddressbook->plug( settingsMenu );
2026 2026
2027 if ( mIsPart ) { 2027 if ( mIsPart ) {
2028 mActionConfigShortcuts->plug( settingsMenu ); 2028 mActionConfigShortcuts->plug( settingsMenu );
2029 mActionConfigureToolbars->plug( settingsMenu ); 2029 mActionConfigureToolbars->plug( settingsMenu );
2030 2030
2031 } else { 2031 } else {
2032 mActionKeyBindings->plug( settingsMenu ); 2032 mActionKeyBindings->plug( settingsMenu );
2033 } 2033 }
2034 2034
2035 settingsMenu->insertSeparator(); 2035 settingsMenu->insertSeparator();
2036 2036
2037 mActionJumpBar->plug( settingsMenu ); 2037 mActionJumpBar->plug( settingsMenu );
2038 mActionDetails->plug( settingsMenu ); 2038 mActionDetails->plug( settingsMenu );
2039 if (!KABPrefs::instance()->mMultipleViewsAtOnce || KGlobal::getDesktopSize() == KGlobal::Desktop ) 2039 if (!KABPrefs::instance()->mMultipleViewsAtOnce || KGlobal::getDesktopSize() == KGlobal::Desktop )
2040 mActionDetails->plug( tb ); 2040 mActionDetails->plug( tb );
2041 settingsMenu->insertSeparator(); 2041 settingsMenu->insertSeparator();
2042 2042
2043 mActionWhoAmI->plug( settingsMenu ); 2043 mActionWhoAmI->plug( settingsMenu );
2044 mActionCategories->plug( settingsMenu ); 2044 mActionCategories->plug( settingsMenu );
2045 2045
2046 mActionLicence->plug( helpMenu ); 2046 mActionLicence->plug( helpMenu );
2047 mActionFaq->plug( helpMenu ); 2047 mActionFaq->plug( helpMenu );
2048 mActionAboutKAddressbook->plug( helpMenu ); 2048 mActionAboutKAddressbook->plug( helpMenu );
2049 2049
2050 if (KGlobal::getDesktopSize() > KGlobal::Small ) { 2050 if (KGlobal::getDesktopSize() > KGlobal::Small ) {
2051 2051
2052 mActionSave->plug( tb ); 2052 mActionSave->plug( tb );
2053 mViewManager->getFilterAction()->plug ( tb); 2053 mViewManager->getFilterAction()->plug ( tb);
2054 if (KGlobal::getDesktopSize() == KGlobal::Desktop ) { 2054 if (KGlobal::getDesktopSize() == KGlobal::Desktop ) {
2055 mActionUndo->plug( tb ); 2055 mActionUndo->plug( tb );
2056 mActionDelete->plug( tb ); 2056 mActionDelete->plug( tb );
2057 mActionRedo->plug( tb ); 2057 mActionRedo->plug( tb );
2058 } 2058 }
2059 } 2059 }
2060 //mActionQuit->plug ( tb ); 2060 //mActionQuit->plug ( tb );
2061 // tb->insertWidget(-1, 0, mIncSearchWidget, 6); 2061 // tb->insertWidget(-1, 0, mIncSearchWidget, 6);
2062 2062
2063 //US link the searchwidget first to this. 2063 //US link the searchwidget first to this.
2064 // The real linkage to the toolbar happens later. 2064 // The real linkage to the toolbar happens later.
2065//US mIncSearchWidget->reparent(tb, 0, QPoint(50,0), TRUE); 2065//US mIncSearchWidget->reparent(tb, 0, QPoint(50,0), TRUE);
2066//US tb->insertItem( mIncSearchWidget ); 2066//US tb->insertItem( mIncSearchWidget );
2067/*US 2067/*US
2068 mIncSearchWidget = new IncSearchWidget( tb ); 2068 mIncSearchWidget = new IncSearchWidget( tb );
2069 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 2069 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
2070 SLOT( incrementalSearch( const QString& ) ) ); 2070 SLOT( incrementalSearch( const QString& ) ) );
2071 2071
2072 mJumpButtonBar = new JumpButtonBar( this, this ); 2072 mJumpButtonBar = new JumpButtonBar( this, this );
2073 2073
2074//US topLayout->addWidget( mJumpButtonBar ); 2074//US topLayout->addWidget( mJumpButtonBar );
2075 this->layout()->add( mJumpButtonBar ); 2075 this->layout()->add( mJumpButtonBar );
2076*/ 2076*/
2077 2077
2078#endif //KAB_EMBEDDED 2078#endif //KAB_EMBEDDED
2079 2079
2080 mActionExport2phone->plug( ExportMenu ); 2080 mActionExport2phone->plug( ExportMenu );
2081 connect ( syncMenu, SIGNAL( activated ( int ) ), syncManager, SLOT (slotSyncMenu( int ) ) ); 2081 connect ( syncMenu, SIGNAL( activated ( int ) ), syncManager, SLOT (slotSyncMenu( int ) ) );
2082 syncManager->fillSyncMenu(); 2082 syncManager->fillSyncMenu();
2083 2083
2084} 2084}
2085void KABCore::showLicence() 2085void KABCore::showLicence()
2086{ 2086{
2087 KApplication::showLicence(); 2087 KApplication::showLicence();
2088} 2088}
2089void KABCore::removeVoice() 2089void KABCore::removeVoice()
2090{ 2090{
2091 if ( KMessageBox::questionYesNo( this, i18n("After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as \"other\".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?") ) == KMessageBox::No ) 2091 if ( KMessageBox::questionYesNo( this, i18n("After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as \"other\".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?") ) == KMessageBox::No )
2092 return; 2092 return;
2093 KABC::Addressee::List list = mViewManager->selectedAddressees(); 2093 KABC::Addressee::List list = mViewManager->selectedAddressees();
2094 KABC::Addressee::List::Iterator it; 2094 KABC::Addressee::List::Iterator it;
2095 for ( it = list.begin(); it != list.end(); ++it ) { 2095 for ( it = list.begin(); it != list.end(); ++it ) {
2096 2096
2097 if ( (*it).removeVoice() ) 2097 if ( (*it).removeVoice() )
2098 contactModified((*it) ); 2098 contactModified((*it) );
2099 } 2099 }
2100} 2100}
2101 2101
2102 2102
2103 2103
2104void KABCore::clipboardDataChanged() 2104void KABCore::clipboardDataChanged()
2105{ 2105{
2106 2106
2107 if ( mReadWrite ) 2107 if ( mReadWrite )
2108 mActionPaste->setEnabled( !QApplication::clipboard()->text().isEmpty() ); 2108 mActionPaste->setEnabled( !QApplication::clipboard()->text().isEmpty() );
2109 2109
2110} 2110}
2111 2111
2112void KABCore::updateActionMenu() 2112void KABCore::updateActionMenu()
2113{ 2113{
2114 UndoStack *undo = UndoStack::instance(); 2114 UndoStack *undo = UndoStack::instance();
2115 RedoStack *redo = RedoStack::instance(); 2115 RedoStack *redo = RedoStack::instance();
2116 2116
2117 if ( undo->isEmpty() ) 2117 if ( undo->isEmpty() )
2118 mActionUndo->setText( i18n( "Undo" ) ); 2118 mActionUndo->setText( i18n( "Undo" ) );
2119 else 2119 else
2120 mActionUndo->setText( i18n( "Undo %1" ).arg( undo->top()->name() ) ); 2120 mActionUndo->setText( i18n( "Undo %1" ).arg( undo->top()->name() ) );
2121 2121
2122 mActionUndo->setEnabled( !undo->isEmpty() ); 2122 mActionUndo->setEnabled( !undo->isEmpty() );
2123 2123
2124 if ( !redo->top() ) 2124 if ( !redo->top() )
2125 mActionRedo->setText( i18n( "Redo" ) ); 2125 mActionRedo->setText( i18n( "Redo" ) );
2126 else 2126 else
2127 mActionRedo->setText( i18n( "Redo %1" ).arg( redo->top()->name() ) ); 2127 mActionRedo->setText( i18n( "Redo %1" ).arg( redo->top()->name() ) );
2128 2128
2129 mActionRedo->setEnabled( !redo->isEmpty() ); 2129 mActionRedo->setEnabled( !redo->isEmpty() );
2130} 2130}
2131 2131
2132void KABCore::configureKeyBindings() 2132void KABCore::configureKeyBindings()
2133{ 2133{
2134#ifndef KAB_EMBEDDED 2134#ifndef KAB_EMBEDDED
2135 KKeyDialog::configure( actionCollection(), true ); 2135 KKeyDialog::configure( actionCollection(), true );
2136#else //KAB_EMBEDDED 2136#else //KAB_EMBEDDED
2137 qDebug("KABCore::configureKeyBindings() not implemented"); 2137 qDebug("KABCore::configureKeyBindings() not implemented");
2138#endif //KAB_EMBEDDED 2138#endif //KAB_EMBEDDED
2139} 2139}
2140 2140
2141#ifdef KAB_EMBEDDED 2141#ifdef KAB_EMBEDDED
2142void KABCore::configureResources() 2142void KABCore::configureResources()
2143{ 2143{
2144 KRES::KCMKResources dlg( this, "" , 0 ); 2144 KRES::KCMKResources dlg( this, "" , 0 );
2145 2145
2146 if ( !dlg.exec() ) 2146 if ( !dlg.exec() )
2147 return; 2147 return;
2148 KMessageBox::information( this, i18n("Please restart to get the \nchanged resources (re)loaded!\n") ); 2148 KMessageBox::information( this, i18n("Please restart to get the \nchanged resources (re)loaded!\n") );
2149} 2149}
2150#endif //KAB_EMBEDDED 2150#endif //KAB_EMBEDDED
2151 2151
2152 2152
2153/* this method will be called through the QCop interface from Ko/Pi to select addresses 2153/* this method will be called through the QCop interface from Ko/Pi to select addresses
2154 * for the attendees list of an event. 2154 * for the attendees list of an event.
2155 */ 2155 */
2156void KABCore::requestForNameEmailUidList(const QString& sourceChannel, const QString& uid) 2156void KABCore::requestForNameEmailUidList(const QString& sourceChannel, const QString& uid)
2157{ 2157{
2158 QStringList nameList; 2158 QStringList nameList;
2159 QStringList emailList; 2159 QStringList emailList;
2160 QStringList uidList; 2160 QStringList uidList;
2161 2161
2162 KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this); 2162 KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this);
2163 uint i=0; 2163 uint i=0;
2164 for (i=0; i < list.count(); i++) 2164 for (i=0; i < list.count(); i++)
2165 { 2165 {
2166 nameList.append(list[i].realName()); 2166 nameList.append(list[i].realName());
2167 emailList.append(list[i].preferredEmail()); 2167 emailList.append(list[i].preferredEmail());
2168 uidList.append(list[i].uid()); 2168 uidList.append(list[i].uid());
2169 } 2169 }
2170 2170
2171 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI(sourceChannel, uid, nameList, emailList, uidList); 2171 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI(sourceChannel, uid, nameList, emailList, uidList);
2172 2172
2173} 2173}
2174 2174
2175/* this method will be called through the QCop interface from Ko/Pi to select birthdays 2175/* this method will be called through the QCop interface from Ko/Pi to select birthdays
2176 * to put them into the calendar. 2176 * to put them into the calendar.
2177 */ 2177 */
2178void KABCore::requestForBirthdayList(const QString& sourceChannel, const QString& uid) 2178void KABCore::requestForBirthdayList(const QString& sourceChannel, const QString& uid)
2179{ 2179{
2180 // qDebug("KABCore::requestForBirthdayList"); 2180 // qDebug("KABCore::requestForBirthdayList");
2181 QStringList birthdayList; 2181 QStringList birthdayList;
2182 QStringList anniversaryList; 2182 QStringList anniversaryList;
2183 QStringList realNameList; 2183 QStringList realNameList;
2184 QStringList preferredEmailList; 2184 QStringList preferredEmailList;
2185 QStringList assembledNameList; 2185 QStringList assembledNameList;
2186 QStringList uidList; 2186 QStringList uidList;
2187 2187
2188 KABC::AddressBook::Iterator it; 2188 KABC::AddressBook::Iterator it;
2189 2189
2190 int count = 0; 2190 int count = 0;
2191 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { 2191 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) {
2192 ++count; 2192 ++count;
2193 } 2193 }
2194 QProgressBar bar(count,0 ); 2194 QProgressBar bar(count,0 );
2195 int w = 300; 2195 int w = 300;
2196 if ( QApplication::desktop()->width() < 320 ) 2196 if ( QApplication::desktop()->width() < 320 )
2197 w = 220; 2197 w = 220;
2198 int h = bar.sizeHint().height() ; 2198 int h = bar.sizeHint().height() ;
2199 int dw = QApplication::desktop()->width(); 2199 int dw = QApplication::desktop()->width();
2200 int dh = QApplication::desktop()->height(); 2200 int dh = QApplication::desktop()->height();
2201 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2201 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2202 bar.show(); 2202 bar.show();
2203 bar.setCaption (i18n("collecting birthdays - close to abort!") ); 2203 bar.setCaption (i18n("collecting birthdays - close to abort!") );
2204 qApp->processEvents(); 2204 qApp->processEvents();
2205 2205
2206 QDate bday; 2206 QDate bday;
2207 QString anni; 2207 QString anni;
2208 QString formattedbday; 2208 QString formattedbday;
2209 2209
2210 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) 2210 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it )
2211 { 2211 {
2212 if ( ! bar.isVisible() ) 2212 if ( ! bar.isVisible() )
2213 return; 2213 return;
2214 bar.setProgress( count++ ); 2214 bar.setProgress( count++ );
2215 qApp->processEvents(); 2215 qApp->processEvents();
2216 bday = (*it).birthday().date(); 2216 bday = (*it).birthday().date();
2217 anni = (*it).custom("KADDRESSBOOK", "X-Anniversary" ); 2217 anni = (*it).custom("KADDRESSBOOK", "X-Anniversary" );
2218 2218
2219 if ( bday.isValid() || !anni.isEmpty()) 2219 if ( bday.isValid() || !anni.isEmpty())
2220 { 2220 {
2221 if (bday.isValid()) 2221 if (bday.isValid())
2222 formattedbday = KGlobal::locale()->formatDate(bday, true, KLocale::ISODate); 2222 formattedbday = KGlobal::locale()->formatDate(bday, true, KLocale::ISODate);
2223 else 2223 else
2224 formattedbday = "NOTVALID"; 2224 formattedbday = "NOTVALID";
2225 if (anni.isEmpty()) 2225 if (anni.isEmpty())
2226 anni = "INVALID"; 2226 anni = "INVALID";
2227 2227
2228 birthdayList.append(formattedbday); 2228 birthdayList.append(formattedbday);
2229 anniversaryList.append(anni); //should be ISODate 2229 anniversaryList.append(anni); //should be ISODate
2230 realNameList.append((*it).realName()); 2230 realNameList.append((*it).realName());
2231 preferredEmailList.append((*it).preferredEmail()); 2231 preferredEmailList.append((*it).preferredEmail());
2232 assembledNameList.append((*it).assembledName()); 2232 assembledNameList.append((*it).assembledName());
2233 uidList.append((*it).uid()); 2233 uidList.append((*it).uid());
2234 2234
2235 qDebug("found birthday in KA/Pi: %s,%s,%s,%s: %s, %s", (*it).realName().latin1(), (*it).preferredEmail().latin1(), (*it).assembledName().latin1(), (*it).uid().latin1(), formattedbday.latin1(), anni.latin1() ); 2235 qDebug("found birthday in KA/Pi: %s,%s,%s,%s: %s, %s", (*it).realName().latin1(), (*it).preferredEmail().latin1(), (*it).assembledName().latin1(), (*it).uid().latin1(), formattedbday.latin1(), anni.latin1() );
2236 } 2236 }
2237 } 2237 }
2238 2238
2239 bool res = ExternalAppHandler::instance()->returnBirthdayListFromKAPI(sourceChannel, uid, birthdayList, anniversaryList, realNameList, preferredEmailList, assembledNameList, uidList); 2239 bool res = ExternalAppHandler::instance()->returnBirthdayListFromKAPI(sourceChannel, uid, birthdayList, anniversaryList, realNameList, preferredEmailList, assembledNameList, uidList);
2240 2240
2241} 2241}
2242 2242
2243/* this method will be called through the QCop interface from other apps to show details of a contact. 2243/* this method will be called through the QCop interface from other apps to show details of a contact.
2244 */ 2244 */
2245void KABCore::requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid) 2245void KABCore::requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid)
2246{ 2246{
2247 qDebug("KABCore::requestForDetails %s %s %s %s %s", sourceChannel.latin1(), sessionuid.latin1(), name.latin1(), email.latin1(), uid.latin1()); 2247 qDebug("KABCore::requestForDetails %s %s %s %s %s", sourceChannel.latin1(), sessionuid.latin1(), name.latin1(), email.latin1(), uid.latin1());
2248 2248
2249 QString foundUid = QString::null; 2249 QString foundUid = QString::null;
2250 if ( ! uid.isEmpty() ) { 2250 if ( ! uid.isEmpty() ) {
2251 Addressee adrr = mAddressBook->findByUid( uid ); 2251 Addressee adrr = mAddressBook->findByUid( uid );
2252 if ( !adrr.isEmpty() ) { 2252 if ( !adrr.isEmpty() ) {
2253 foundUid = uid; 2253 foundUid = uid;
2254 } 2254 }
2255 if ( email == "sendbacklist" ) { 2255 if ( email == "sendbacklist" ) {
2256 //qDebug("ssssssssssssssssssssssend "); 2256 //qDebug("ssssssssssssssssssssssend ");
2257 QStringList nameList; 2257 QStringList nameList;
2258 QStringList emailList; 2258 QStringList emailList;
2259 QStringList uidList; 2259 QStringList uidList;
2260 nameList.append(adrr.realName()); 2260 nameList.append(adrr.realName());
2261 emailList = adrr.emails(); 2261 emailList = adrr.emails();
2262 uidList.append( adrr.preferredEmail()); 2262 uidList.append( adrr.preferredEmail());
2263 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList); 2263 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList);
2264 return; 2264 return;
2265 } 2265 }
2266 2266
2267 } 2267 }
2268 2268
2269 if ( email == "sendbacklist" ) 2269 if ( email == "sendbacklist" )
2270 return; 2270 return;
2271 if (foundUid.isEmpty()) 2271 if (foundUid.isEmpty())
2272 { 2272 {
2273 //find the uid of the person first 2273 //find the uid of the person first
2274 Addressee::List namelist; 2274 Addressee::List namelist;
2275 Addressee::List emaillist; 2275 Addressee::List emaillist;
2276 2276
2277 if (!name.isEmpty()) 2277 if (!name.isEmpty())
2278 namelist = mAddressBook->findByName( name ); 2278 namelist = mAddressBook->findByName( name );
2279 2279
2280 if (!email.isEmpty()) 2280 if (!email.isEmpty())
2281 emaillist = mAddressBook->findByEmail( email ); 2281 emaillist = mAddressBook->findByEmail( email );
2282 qDebug("count %d %d ", namelist.count(),emaillist.count() ); 2282 qDebug("count %d %d ", namelist.count(),emaillist.count() );
2283 //check if we have a match in Namelist and Emaillist 2283 //check if we have a match in Namelist and Emaillist
2284 if ((namelist.count() == 0) && (emaillist.count() > 0)) { 2284 if ((namelist.count() == 0) && (emaillist.count() > 0)) {
2285 foundUid = emaillist[0].uid(); 2285 foundUid = emaillist[0].uid();
2286 } 2286 }
2287 else if ((namelist.count() > 0) && (emaillist.count() == 0)) 2287 else if ((namelist.count() > 0) && (emaillist.count() == 0))
2288 foundUid = namelist[0].uid(); 2288 foundUid = namelist[0].uid();
2289 else 2289 else
2290 { 2290 {
2291 for (int i = 0; i < namelist.count(); i++) 2291 for (int i = 0; i < namelist.count(); i++)
2292 { 2292 {
2293 for (int j = 0; j < emaillist.count(); j++) 2293 for (int j = 0; j < emaillist.count(); j++)
2294 { 2294 {
2295 if (namelist[i] == emaillist[j]) 2295 if (namelist[i] == emaillist[j])
2296 { 2296 {
2297 foundUid = namelist[i].uid(); 2297 foundUid = namelist[i].uid();
2298 } 2298 }
2299 } 2299 }
2300 } 2300 }
2301 } 2301 }
2302 } 2302 }
2303 else 2303 else
2304 { 2304 {
2305 foundUid = uid; 2305 foundUid = uid;
2306 } 2306 }
2307 2307
2308 if (!foundUid.isEmpty()) 2308 if (!foundUid.isEmpty())
2309 { 2309 {
2310 2310
2311 // raise Ka/Pi if it is in the background 2311 // raise Ka/Pi if it is in the background
2312#ifndef DESKTOP_VERSION 2312#ifndef DESKTOP_VERSION
2313#ifndef KORG_NODCOP 2313#ifndef KORG_NODCOP
2314 //QCopEnvelope e("QPE/Application/kapi", "raise()"); 2314 //QCopEnvelope e("QPE/Application/kapi", "raise()");
2315#endif 2315#endif
2316#endif 2316#endif
2317 2317
2318 mMainWindow->showMaximized(); 2318 mMainWindow->showMaximized();
2319 mMainWindow-> raise(); 2319 mMainWindow-> raise();
2320 2320
2321 mViewManager->setSelected( "", false); 2321 mViewManager->setSelected( "", false);
2322 mViewManager->refreshView( "" ); 2322 mViewManager->refreshView( "" );
2323 mViewManager->setSelected( foundUid, true ); 2323 mViewManager->setSelected( foundUid, true );
2324 mViewManager->refreshView( foundUid ); 2324 mViewManager->refreshView( foundUid );
2325 2325
2326 if ( !mMultipleViewsAtOnce ) 2326 if ( !mMultipleViewsAtOnce )
2327 { 2327 {
2328 setDetailsVisible( true ); 2328 setDetailsVisible( true );
2329 mActionDetails->setChecked(true); 2329 mActionDetails->setChecked(true);
2330 } 2330 }
2331 } 2331 }
2332} 2332}
2333 2333
2334 2334
2335void KABCore::faq() 2335void KABCore::faq()
2336{ 2336{
2337 KApplication::showFile( "KA/Pi FAQ", "kdepim/kaddressbook/kapiFAQ.txt" ); 2337 KApplication::showFile( "KA/Pi FAQ", "kdepim/kaddressbook/kapiFAQ.txt" );
2338} 2338}
2339 2339
2340#include <libkcal/syncdefines.h> 2340#include <libkcal/syncdefines.h>
2341 2341
2342KABC::Addressee KABCore::getLastSyncAddressee() 2342KABC::Addressee KABCore::getLastSyncAddressee()
2343{ 2343{
2344 Addressee lse; 2344 Addressee lse;
2345 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); 2345 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
2346 2346
2347 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 2347 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
2348 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2348 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
2349 if (lse.isEmpty()) { 2349 if (lse.isEmpty()) {
2350 qDebug("Creating new last-syncAddressee "); 2350 qDebug("Creating new last-syncAddressee ");
2351 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2351 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice );
2352 QString sum = ""; 2352 QString sum = "";
2353 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 2353 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
2354 sum = "E: "; 2354 sum = "E: ";
2355 lse.setFamilyName("!"+sum+mCurrentSyncDevice + i18n(" - sync event")); 2355 lse.setFamilyName("!"+sum+mCurrentSyncDevice + i18n(" - sync event"));
2356 lse.setRevision( mLastAddressbookSync ); 2356 lse.setRevision( mLastAddressbookSync );
2357 lse.setCategories( i18n("SyncEvent") ); 2357 lse.setCategories( i18n("SyncEvent") );
2358 mAddressBook->insertAddressee( lse ); 2358 mAddressBook->insertAddressee( lse );
2359 } 2359 }
2360 return lse; 2360 return lse;
2361} 2361}
2362int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full ) 2362int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full )
2363{ 2363{
2364 2364
2365 //void setZaurusId(int id); 2365 //void setZaurusId(int id);
2366 // int zaurusId() const; 2366 // int zaurusId() const;
2367 // void setZaurusUid(int id); 2367 // void setZaurusUid(int id);
2368 // int zaurusUid() const; 2368 // int zaurusUid() const;
2369 // void setZaurusStat(int id); 2369 // void setZaurusStat(int id);
2370 // int zaurusStat() const; 2370 // int zaurusStat() const;
2371 // 0 equal 2371 // 0 equal
2372 // 1 take local 2372 // 1 take local
2373 // 2 take remote 2373 // 2 take remote
2374 // 3 cancel 2374 // 3 cancel
2375 QDateTime lastSync = mLastAddressbookSync; 2375 QDateTime lastSync = mLastAddressbookSync;
2376 QDateTime localMod = local->revision(); 2376 QDateTime localMod = local->revision();
2377 QDateTime remoteMod = remote->revision(); 2377 QDateTime remoteMod = remote->revision();
2378 2378
2379 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); 2379 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
2380 2380
2381 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2381 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2382 bool remCh, locCh; 2382 bool remCh, locCh;
2383 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 2383 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
2384 2384
2385 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 2385 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
2386 locCh = ( localMod > mLastAddressbookSync ); 2386 locCh = ( localMod > mLastAddressbookSync );
2387 if ( !remCh && ! locCh ) { 2387 if ( !remCh && ! locCh ) {
2388 //qDebug("both not changed "); 2388 //qDebug("both not changed ");
2389 lastSync = localMod.addDays(1); 2389 lastSync = localMod.addDays(1);
2390 if ( mode <= SYNC_PREF_ASK ) 2390 if ( mode <= SYNC_PREF_ASK )
2391 return 0; 2391 return 0;
2392 } else { 2392 } else {
2393 if ( locCh ) { 2393 if ( locCh ) {
2394 //qDebug("loc changed %s %s", localMod.toString().latin1(), mLastAddressbookSync.toString().latin1()); 2394 //qDebug("loc changed %s %s", localMod.toString().latin1(), mLastAddressbookSync.toString().latin1());
2395 lastSync = localMod.addDays( -1 ); 2395 lastSync = localMod.addDays( -1 );
2396 if ( !remCh ) 2396 if ( !remCh )
2397 remoteMod =( lastSync.addDays( -1 ) ); 2397 remoteMod =( lastSync.addDays( -1 ) );
2398 } else { 2398 } else {
2399 //qDebug(" not loc changed "); 2399 //qDebug(" not loc changed ");
2400 lastSync = localMod.addDays( 1 ); 2400 lastSync = localMod.addDays( 1 );
2401 if ( remCh ) 2401 if ( remCh )
2402 remoteMod =( lastSync.addDays( 1 ) ); 2402 remoteMod =( lastSync.addDays( 1 ) );
2403 2403
2404 } 2404 }
2405 } 2405 }
2406 full = true; 2406 full = true;
2407 if ( mode < SYNC_PREF_ASK ) 2407 if ( mode < SYNC_PREF_ASK )
2408 mode = SYNC_PREF_ASK; 2408 mode = SYNC_PREF_ASK;
2409 } else { 2409 } else {
2410 if ( localMod == remoteMod ) 2410 if ( localMod == remoteMod )
2411 return 0; 2411 return 0;
2412 2412
2413 } 2413 }
2414 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 2414 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
2415 2415
2416 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , localMod, remote->lastModified().toString().latin1(), remoteMod); 2416 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , localMod, remote->lastModified().toString().latin1(), remoteMod);
2417 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() ); 2417 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() );
2418 //full = true; //debug only 2418 //full = true; //debug only
2419 if ( full ) { 2419 if ( full ) {
2420 bool equ = ( (*local) == (*remote) ); 2420 bool equ = ( (*local) == (*remote) );
2421 if ( equ ) { 2421 if ( equ ) {
2422 //qDebug("equal "); 2422 //qDebug("equal ");
2423 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2423 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2424 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 2424 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
2425 } 2425 }
2426 if ( mode < SYNC_PREF_FORCE_LOCAL ) 2426 if ( mode < SYNC_PREF_FORCE_LOCAL )
2427 return 0; 2427 return 0;
2428 2428
2429 }//else //debug only 2429 }//else //debug only
2430 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 2430 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
2431 } 2431 }
2432 int result; 2432 int result;
2433 bool localIsNew; 2433 bool localIsNew;
2434 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , local->lastModified().toString().latin1() , remote->lastModified().toString().latin1() ); 2434 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , local->lastModified().toString().latin1() , remote->lastModified().toString().latin1() );
2435 2435
2436 if ( full && mode < SYNC_PREF_NEWEST ) 2436 if ( full && mode < SYNC_PREF_NEWEST )
2437 mode = SYNC_PREF_ASK; 2437 mode = SYNC_PREF_ASK;
2438 2438
2439 switch( mode ) { 2439 switch( mode ) {
2440 case SYNC_PREF_LOCAL: 2440 case SYNC_PREF_LOCAL:
2441 if ( lastSync > remoteMod ) 2441 if ( lastSync > remoteMod )
2442 return 1; 2442 return 1;
2443 if ( lastSync > localMod ) 2443 if ( lastSync > localMod )
2444 return 2; 2444 return 2;
2445 return 1; 2445 return 1;
2446 break; 2446 break;
2447 case SYNC_PREF_REMOTE: 2447 case SYNC_PREF_REMOTE:
2448 if ( lastSync > remoteMod ) 2448 if ( lastSync > remoteMod )
2449 return 1; 2449 return 1;
2450 if ( lastSync > localMod ) 2450 if ( lastSync > localMod )
2451 return 2; 2451 return 2;
2452 return 2; 2452 return 2;
2453 break; 2453 break;
2454 case SYNC_PREF_NEWEST: 2454 case SYNC_PREF_NEWEST:
2455 if ( localMod > remoteMod ) 2455 if ( localMod > remoteMod )
2456 return 1; 2456 return 1;
2457 else 2457 else
2458 return 2; 2458 return 2;
2459 break; 2459 break;
2460 case SYNC_PREF_ASK: 2460 case SYNC_PREF_ASK:
2461 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 2461 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
2462 if ( lastSync > remoteMod ) 2462 if ( lastSync > remoteMod )
2463 return 1; 2463 return 1;
2464 if ( lastSync > localMod ) 2464 if ( lastSync > localMod )
2465 return 2; 2465 return 2;
2466 localIsNew = localMod >= remoteMod; 2466 localIsNew = localMod >= remoteMod;
2467 //qDebug("conflict! ************************************** "); 2467 //qDebug("conflict! ************************************** ");
2468 { 2468 {
2469 KPIM::AddresseeChooser acd ( *local,*remote, localIsNew , this ); 2469 KPIM::AddresseeChooser acd ( *local,*remote, localIsNew , this );
2470 result = acd.executeD(localIsNew); 2470 result = acd.executeD(localIsNew);
2471 return result; 2471 return result;
2472 } 2472 }
2473 break; 2473 break;
2474 case SYNC_PREF_FORCE_LOCAL: 2474 case SYNC_PREF_FORCE_LOCAL:
2475 return 1; 2475 return 1;
2476 break; 2476 break;
2477 case SYNC_PREF_FORCE_REMOTE: 2477 case SYNC_PREF_FORCE_REMOTE:
2478 return 2; 2478 return 2;
2479 break; 2479 break;
2480 2480
2481 default: 2481 default:
2482 // SYNC_PREF_TAKE_BOTH not implemented 2482 // SYNC_PREF_TAKE_BOTH not implemented
2483 break; 2483 break;
2484 } 2484 }
2485 return 0; 2485 return 0;
2486} 2486}
2487 2487
2488 2488
2489bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode) 2489bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode)
2490{ 2490{
2491 bool syncOK = true; 2491 bool syncOK = true;
2492 int addedAddressee = 0; 2492 int addedAddressee = 0;
2493 int addedAddresseeR = 0; 2493 int addedAddresseeR = 0;
2494 int deletedAddresseeR = 0; 2494 int deletedAddresseeR = 0;
2495 int deletedAddresseeL = 0; 2495 int deletedAddresseeL = 0;
2496 int changedLocal = 0; 2496 int changedLocal = 0;
2497 int changedRemote = 0; 2497 int changedRemote = 0;
2498 2498
2499 QString mCurrentSyncName = syncManager->getCurrentSyncName(); 2499 QString mCurrentSyncName = syncManager->getCurrentSyncName();
2500 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); 2500 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
2501 2501
2502 //QPtrList<Addressee> el = local->rawAddressees(); 2502 //QPtrList<Addressee> el = local->rawAddressees();
2503 Addressee addresseeR; 2503 Addressee addresseeR;
2504 QString uid; 2504 QString uid;
2505 int take; 2505 int take;
2506 Addressee addresseeL; 2506 Addressee addresseeL;
2507 Addressee addresseeRSync; 2507 Addressee addresseeRSync;
2508 Addressee addresseeLSync; 2508 Addressee addresseeLSync;
2509 // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees(); 2509 // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees();
2510 //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees(); 2510 //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees();
2511 bool fullDateRange = false; 2511 bool fullDateRange = false;
2512 local->resetTempSyncStat(); 2512 local->resetTempSyncStat();
2513 mLastAddressbookSync = QDateTime::currentDateTime(); 2513 mLastAddressbookSync = QDateTime::currentDateTime();
2514 QDateTime modifiedCalendar = mLastAddressbookSync;; 2514 QDateTime modifiedCalendar = mLastAddressbookSync;;
2515 addresseeLSync = getLastSyncAddressee(); 2515 addresseeLSync = getLastSyncAddressee();
2516 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1()); 2516 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1());
2517 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName ); 2517 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName );
2518 if ( !addresseeR.isEmpty() ) { 2518 if ( !addresseeR.isEmpty() ) {
2519 addresseeRSync = addresseeR; 2519 addresseeRSync = addresseeR;
2520 remote->removeAddressee(addresseeR ); 2520 remote->removeAddressee(addresseeR );
2521 2521
2522 } else { 2522 } else {
2523 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2523 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2524 addresseeRSync = addresseeLSync ; 2524 addresseeRSync = addresseeLSync ;
2525 } else { 2525 } else {
2526 qDebug("FULLDATE 1"); 2526 qDebug("FULLDATE 1");
2527 fullDateRange = true; 2527 fullDateRange = true;
2528 Addressee newAdd; 2528 Addressee newAdd;
2529 addresseeRSync = newAdd; 2529 addresseeRSync = newAdd;
2530 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee")); 2530 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee"));
2531 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName ); 2531 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName );
2532 addresseeRSync.setRevision( mLastAddressbookSync ); 2532 addresseeRSync.setRevision( mLastAddressbookSync );
2533 addresseeRSync.setCategories( i18n("SyncAddressee") ); 2533 addresseeRSync.setCategories( i18n("SyncAddressee") );
2534 } 2534 }
2535 } 2535 }
2536 if ( addresseeLSync.revision() == mLastAddressbookSync ) { 2536 if ( addresseeLSync.revision() == mLastAddressbookSync ) {
2537 qDebug("FULLDATE 2"); 2537 qDebug("FULLDATE 2");
2538 fullDateRange = true; 2538 fullDateRange = true;
2539 } 2539 }
2540 if ( ! fullDateRange ) { 2540 if ( ! fullDateRange ) {
2541 if ( addresseeLSync.revision() != addresseeRSync.revision() ) { 2541 if ( addresseeLSync.revision() != addresseeRSync.revision() ) {
2542 2542
2543 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() ); 2543 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() );
2544 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec()); 2544 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec());
2545 fullDateRange = true; 2545 fullDateRange = true;
2546 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() ); 2546 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() );
2547 } 2547 }
2548 } 2548 }
2549 // fullDateRange = true; // debug only! 2549 // fullDateRange = true; // debug only!
2550 if ( fullDateRange ) 2550 if ( fullDateRange )
2551 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365); 2551 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365);
2552 else 2552 else
2553 mLastAddressbookSync = addresseeLSync.revision(); 2553 mLastAddressbookSync = addresseeLSync.revision();
2554 // for resyncing if own file has changed 2554 // for resyncing if own file has changed
2555 // PENDING fixme later when implemented 2555 // PENDING fixme later when implemented
2556#if 0 2556#if 0
2557 if ( mCurrentSyncDevice == "deleteaftersync" ) { 2557 if ( mCurrentSyncDevice == "deleteaftersync" ) {
2558 mLastAddressbookSync = loadedFileVersion; 2558 mLastAddressbookSync = loadedFileVersion;
2559 qDebug("setting mLastAddressbookSync "); 2559 qDebug("setting mLastAddressbookSync ");
2560 } 2560 }
2561#endif 2561#endif
2562 2562
2563 //qDebug("*************************** "); 2563 //qDebug("*************************** ");
2564 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() ); 2564 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() );
2565 QStringList er = remote->uidList(); 2565 QStringList er = remote->uidList();
2566 Addressee inR ;//= er.first(); 2566 Addressee inR ;//= er.first();
2567 Addressee inL; 2567 Addressee inL;
2568 2568
2569 syncManager->showProgressBar(0, i18n("Syncing - close to abort!"), er.count()); 2569 syncManager->showProgressBar(0, i18n("Syncing - close to abort!"), er.count());
2570 2570
2571 int modulo = (er.count()/10)+1; 2571 int modulo = (er.count()/10)+1;
2572 int incCounter = 0; 2572 int incCounter = 0;
2573 while ( incCounter < er.count()) { 2573 while ( incCounter < er.count()) {
2574 if (syncManager->isProgressBarCanceled()) 2574 if (syncManager->isProgressBarCanceled())
2575 return false; 2575 return false;
2576 if ( incCounter % modulo == 0 ) 2576 if ( incCounter % modulo == 0 )
2577 syncManager->showProgressBar(incCounter); 2577 syncManager->showProgressBar(incCounter);
2578 2578
2579 uid = er[ incCounter ]; 2579 uid = er[ incCounter ];
2580 bool skipIncidence = false; 2580 bool skipIncidence = false;
2581 if ( uid.left(19) == QString("last-syncAddressee-") ) 2581 if ( uid.left(19) == QString("last-syncAddressee-") )
2582 skipIncidence = true; 2582 skipIncidence = true;
2583 QString idS,OidS; 2583 QString idS,OidS;
2584 qApp->processEvents(); 2584 qApp->processEvents();
2585 if ( !skipIncidence ) { 2585 if ( !skipIncidence ) {
2586 inL = local->findByUid( uid ); 2586 inL = local->findByUid( uid );
2587 inR = remote->findByUid( uid ); 2587 inR = remote->findByUid( uid );
2588 //inL.setResource( 0 ); 2588 //inL.setResource( 0 );
2589 //inR.setResource( 0 ); 2589 //inR.setResource( 0 );
2590 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars 2590 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars
2591 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) { 2591 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) {
2592 //qDebug("take %d %s ", take, inL.summary().latin1()); 2592 //qDebug("take %d %s ", take, inL.summary().latin1());
2593 if ( take == 3 ) 2593 if ( take == 3 )
2594 return false; 2594 return false;
2595 if ( take == 1 ) {// take local 2595 if ( take == 1 ) {// take local
2596 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2596 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2597 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2597 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2598 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2598 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2599 local->insertAddressee( inL, false ); 2599 local->insertAddressee( inL, false );
2600 idS = inR.externalUID(); 2600 idS = inR.externalUID();
2601 OidS = inR.originalExternalUID(); 2601 OidS = inR.originalExternalUID();
2602 } 2602 }
2603 else 2603 else
2604 idS = inR.IDStr(); 2604 idS = inR.IDStr();
2605 remote->removeAddressee( inR ); 2605 remote->removeAddressee( inR );
2606 inR = inL; 2606 inR = inL;
2607 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 2607 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
2608 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2608 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2609 inR.setOriginalExternalUID( OidS ); 2609 inR.setOriginalExternalUID( OidS );
2610 inR.setExternalUID( idS ); 2610 inR.setExternalUID( idS );
2611 } else { 2611 } else {
2612 inR.setIDStr( idS ); 2612 inR.setIDStr( idS );
2613 } 2613 }
2614 inR.setResource( 0 ); 2614 inR.setResource( 0 );
2615 remote->insertAddressee( inR , false); 2615 remote->insertAddressee( inR , false);
2616 ++changedRemote; 2616 ++changedRemote;
2617 } else { // take == 2 take remote 2617 } else { // take == 2 take remote
2618 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2618 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2619 if ( inR.revision().date().year() < 2004 ) 2619 if ( inR.revision().date().year() < 2004 )
2620 inR.setRevision( modifiedCalendar ); 2620 inR.setRevision( modifiedCalendar );
2621 } 2621 }
2622 idS = inL.IDStr(); 2622 idS = inL.IDStr();
2623 local->removeAddressee( inL ); 2623 local->removeAddressee( inL );
2624 inL = inR; 2624 inL = inR;
2625 inL.setIDStr( idS ); 2625 inL.setIDStr( idS );
2626 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2626 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2627 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2627 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2628 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2628 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2629 } 2629 }
2630 inL.setResource( 0 ); 2630 inL.setResource( 0 );
2631 local->insertAddressee( inL , false ); 2631 local->insertAddressee( inL , false );
2632 ++changedLocal; 2632 ++changedLocal;
2633 } 2633 }
2634 } 2634 }
2635 } else { // no conflict 2635 } else { // no conflict
2636 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2636 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2637 QString des = addresseeLSync.note(); 2637 QString des = addresseeLSync.note();
2638 if ( des.find( inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 2638 if ( des.find( inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
2639 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 2639 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE );
2640 remote->insertAddressee( inR, false ); 2640 remote->insertAddressee( inR, false );
2641 ++deletedAddresseeR; 2641 ++deletedAddresseeR;
2642 } else { 2642 } else {
2643 inR.setRevision( modifiedCalendar ); 2643 inR.setRevision( modifiedCalendar );
2644 remote->insertAddressee( inR, false ); 2644 remote->insertAddressee( inR, false );
2645 inL = inR; 2645 inL = inR;
2646 inL.setResource( 0 ); 2646 inL.setResource( 0 );
2647 local->insertAddressee( inL , false); 2647 local->insertAddressee( inL , false);
2648 ++addedAddressee; 2648 ++addedAddressee;
2649 } 2649 }
2650 } else { 2650 } else {
2651 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) { 2651 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) {
2652 inR.setRevision( modifiedCalendar ); 2652 inR.setRevision( modifiedCalendar );
2653 remote->insertAddressee( inR, false ); 2653 remote->insertAddressee( inR, false );
2654 inR.setResource( 0 ); 2654 inR.setResource( 0 );
2655 local->insertAddressee( inR, false ); 2655 local->insertAddressee( inR, false );
2656 ++addedAddressee; 2656 ++addedAddressee;
2657 } else { 2657 } else {
2658 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR); 2658 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR);
2659 remote->removeAddressee( inR ); 2659 remote->removeAddressee( inR );
2660 ++deletedAddresseeR; 2660 ++deletedAddresseeR;
2661 } 2661 }
2662 } 2662 }
2663 } 2663 }
2664 } 2664 }
2665 ++incCounter; 2665 ++incCounter;
2666 } 2666 }
2667 er.clear(); 2667 er.clear();
2668 QStringList el = local->uidList(); 2668 QStringList el = local->uidList();
2669 modulo = (el.count()/10)+1; 2669 modulo = (el.count()/10)+1;
2670 2670
2671 syncManager->showProgressBar(0, i18n("Add / remove addressees"), el.count()); 2671 syncManager->showProgressBar(0, i18n("Add / remove addressees"), el.count());
2672 incCounter = 0; 2672 incCounter = 0;
2673 while ( incCounter < el.count()) { 2673 while ( incCounter < el.count()) {
2674 qApp->processEvents(); 2674 qApp->processEvents();
2675 if (syncManager->isProgressBarCanceled()) 2675 if (syncManager->isProgressBarCanceled())
2676 return false; 2676 return false;
2677 if ( incCounter % modulo == 0 ) 2677 if ( incCounter % modulo == 0 )
2678 syncManager->showProgressBar(incCounter); 2678 syncManager->showProgressBar(incCounter);
2679 uid = el[ incCounter ]; 2679 uid = el[ incCounter ];
2680 bool skipIncidence = false; 2680 bool skipIncidence = false;
2681 if ( uid.left(19) == QString("last-syncAddressee-") ) 2681 if ( uid.left(19) == QString("last-syncAddressee-") )
2682 skipIncidence = true; 2682 skipIncidence = true;
2683 if ( !skipIncidence ) { 2683 if ( !skipIncidence ) {
2684 inL = local->findByUid( uid ); 2684 inL = local->findByUid( uid );
2685 inR = remote->findByUid( uid ); 2685 inR = remote->findByUid( uid );
2686 if ( inR.isEmpty() ) { 2686 if ( inR.isEmpty() ) {
2687 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2687 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2688 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 2688 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
2689 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 2689 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2690 local->removeAddressee( inL ); 2690 local->removeAddressee( inL );
2691 ++deletedAddresseeL; 2691 ++deletedAddresseeL;
2692 } else { 2692 } else {
2693 if ( ! syncManager->mWriteBackExistingOnly ) { 2693 if ( ! syncManager->mWriteBackExistingOnly ) {
2694 inL.removeID(mCurrentSyncDevice ); 2694 inL.removeID(mCurrentSyncDevice );
2695 ++addedAddresseeR; 2695 ++addedAddresseeR;
2696 inL.setRevision( modifiedCalendar ); 2696 inL.setRevision( modifiedCalendar );
2697 local->insertAddressee( inL, false ); 2697 local->insertAddressee( inL, false );
2698 inR = inL; 2698 inR = inL;
2699 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL ); 2699 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL );
2700 inR.setResource( 0 ); 2700 inR.setResource( 0 );
2701 remote->insertAddressee( inR, false ); 2701 remote->insertAddressee( inR, false );
2702 } 2702 }
2703 } 2703 }
2704 } else { 2704 } else {
2705 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) { 2705 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) {
2706 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 2706 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2707 local->removeAddressee( inL ); 2707 local->removeAddressee( inL );
2708 ++deletedAddresseeL; 2708 ++deletedAddresseeL;
2709 } else { 2709 } else {
2710 if ( ! syncManager->mWriteBackExistingOnly ) { 2710 if ( ! syncManager->mWriteBackExistingOnly ) {
2711 ++addedAddresseeR; 2711 ++addedAddresseeR;
2712 inL.setRevision( modifiedCalendar ); 2712 inL.setRevision( modifiedCalendar );
2713 local->insertAddressee( inL, false ); 2713 local->insertAddressee( inL, false );
2714 inR = inL; 2714 inR = inL;
2715 inR.setResource( 0 ); 2715 inR.setResource( 0 );
2716 remote->insertAddressee( inR, false ); 2716 remote->insertAddressee( inR, false );
2717 } 2717 }
2718 } 2718 }
2719 } 2719 }
2720 } 2720 }
2721 } 2721 }
2722 ++incCounter; 2722 ++incCounter;
2723 } 2723 }
2724 el.clear(); 2724 el.clear();
2725 syncManager->hideProgressBar(); 2725 syncManager->hideProgressBar();
2726 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 ); 2726 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 );
2727 // get rid of micro seconds 2727 // get rid of micro seconds
2728 QTime t = mLastAddressbookSync.time(); 2728 QTime t = mLastAddressbookSync.time();
2729 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 2729 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) );
2730 addresseeLSync.setRevision( mLastAddressbookSync ); 2730 addresseeLSync.setRevision( mLastAddressbookSync );
2731 addresseeRSync.setRevision( mLastAddressbookSync ); 2731 addresseeRSync.setRevision( mLastAddressbookSync );
2732 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ; 2732 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ;
2733 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName ); 2733 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName );
2734 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ; 2734 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ;
2735 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") ); 2735 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") );
2736 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ; 2736 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ;
2737 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() ); 2737 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() );
2738 addresseeRSync.setNote( "" ) ; 2738 addresseeRSync.setNote( "" ) ;
2739 addresseeLSync.setNote( "" ); 2739 addresseeLSync.setNote( "" );
2740 2740
2741 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 2741 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
2742 remote->insertAddressee( addresseeRSync, false ); 2742 remote->insertAddressee( addresseeRSync, false );
2743 local->insertAddressee( addresseeLSync, false ); 2743 local->insertAddressee( addresseeLSync, false );
2744 QString mes; 2744 QString mes;
2745 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR ); 2745 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR );
2746 if ( syncManager->mShowSyncSummary ) { 2746 if ( syncManager->mShowSyncSummary ) {
2747 KMessageBox::information(this, mes, i18n("KA/Pi Synchronization") ); 2747 KMessageBox::information(this, mes, i18n("KA/Pi Synchronization") );
2748 } 2748 }
2749 qDebug( mes ); 2749 qDebug( mes );
2750 return syncOK; 2750 return syncOK;
2751} 2751}
2752 2752
2753 2753
2754//this is a overwritten callbackmethods from the syncinterface 2754//this is a overwritten callbackmethods from the syncinterface
2755bool KABCore::sync(KSyncManager* manager, QString filename, int mode) 2755bool KABCore::sync(KSyncManager* manager, QString filename, int mode)
2756{ 2756{
2757 2757
2758 //pending prepare addresseeview for output 2758 //pending prepare addresseeview for output
2759 //pending detect, if remote file has REV field. if not switch to external sync 2759 //pending detect, if remote file has REV field. if not switch to external sync
2760 mGlobalSyncMode = SYNC_MODE_NORMAL; 2760 mGlobalSyncMode = SYNC_MODE_NORMAL;
2761 QString mCurrentSyncDevice = manager->getCurrentSyncDevice(); 2761 QString mCurrentSyncDevice = manager->getCurrentSyncDevice();
2762 2762
2763 AddressBook abLocal(filename,"syncContact"); 2763 AddressBook abLocal(filename,"syncContact");
2764 bool syncOK = false; 2764 bool syncOK = false;
2765 if ( abLocal.load() ) { 2765 if ( abLocal.load() ) {
2766 qDebug("AB loaded %s,sync mode %d",filename.latin1(), mode ); 2766 qDebug("AB loaded %s,sync mode %d",filename.latin1(), mode );
2767 bool external = false; 2767 bool external = false;
2768 bool isXML = false; 2768 bool isXML = false;
2769 if ( filename.right(4) == ".xml") { 2769 if ( filename.right(4) == ".xml") {
2770 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2770 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2771 isXML = true; 2771 isXML = true;
2772 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice ); 2772 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice );
2773 } else { 2773 } else {
2774 Addressee lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2774 Addressee lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
2775 if ( ! lse.isEmpty() ) { 2775 if ( ! lse.isEmpty() ) {
2776 if ( lse.familyName().left(4) == "!E: " ) 2776 if ( lse.familyName().left(4) == "!E: " )
2777 external = true; 2777 external = true;
2778 } else { 2778 } else {
2779 bool found = false; 2779 bool found = false;
2780 AddressBook::Iterator it; 2780 AddressBook::Iterator it;
2781 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2781 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2782 if ( (*it).revision().date().year() > 2003 ) { 2782 if ( (*it).revision().date().year() > 2003 ) {
2783 found = true; 2783 found = true;
2784 break; 2784 break;
2785 } 2785 }
2786 } 2786 }
2787 external = ! found; 2787 external = ! found;
2788 } 2788 }
2789 2789
2790 if ( external ) { 2790 if ( external ) {
2791 qDebug("Setting vcf mode to external "); 2791 qDebug("Setting vcf mode to external ");
2792 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2792 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2793 AddressBook::Iterator it; 2793 AddressBook::Iterator it;
2794 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2794 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2795 (*it).setID( mCurrentSyncDevice, (*it).uid() ); 2795 (*it).setID( mCurrentSyncDevice, (*it).uid() );
2796 (*it).computeCsum( mCurrentSyncDevice ); 2796 (*it).computeCsum( mCurrentSyncDevice );
2797 } 2797 }
2798 } 2798 }
2799 } 2799 }
2800 //AddressBook::Iterator it; 2800 //AddressBook::Iterator it;
2801 //QStringList vcards; 2801 //QStringList vcards;
2802 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2802 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2803 // qDebug("Name %s ", (*it).familyName().latin1()); 2803 // qDebug("Name %s ", (*it).familyName().latin1());
2804 //} 2804 //}
2805 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode ); 2805 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode );
2806 if ( syncOK ) { 2806 if ( syncOK ) {
2807 if ( syncManager->mWriteBackFile ) 2807 if ( syncManager->mWriteBackFile )
2808 { 2808 {
2809 if ( external ) 2809 if ( external )
2810 abLocal.removeSyncAddressees( !isXML); 2810 abLocal.removeSyncAddressees( !isXML);
2811 qDebug("Saving remote AB "); 2811 qDebug("Saving remote AB ");
2812 abLocal.saveAB(); 2812 if ( ! abLocal.saveAB())
2813 qDebug("Error writing back AB to file ");
2813 if ( isXML ) { 2814 if ( isXML ) {
2814 // afterwrite processing 2815 // afterwrite processing
2815 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice ); 2816 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice );
2816 } 2817 }
2817 } 2818 }
2818 } 2819 }
2819 setModified(); 2820 setModified();
2820 2821
2821 } 2822 }
2822 if ( syncOK ) 2823 if ( syncOK )
2823 mViewManager->refreshView(); 2824 mViewManager->refreshView();
2824 return syncOK; 2825 return syncOK;
2825#if 0 2826#if 0
2826 2827
2827 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) { 2828 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) {
2828 getEventViewerDialog()->setSyncMode( true ); 2829 getEventViewerDialog()->setSyncMode( true );
2829 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 2830 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
2830 getEventViewerDialog()->setSyncMode( false ); 2831 getEventViewerDialog()->setSyncMode( false );
2831 if ( syncOK ) { 2832 if ( syncOK ) {
2832 if ( KOPrefs::instance()->mWriteBackFile ) 2833 if ( KOPrefs::instance()->mWriteBackFile )
2833 { 2834 {
2834 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 2835 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
2835 storage->save(); 2836 storage->save();
2836 } 2837 }
2837 } 2838 }
2838 setModified(); 2839 setModified();
2839 } 2840 }
2840 2841
2841#endif 2842#endif
2842} 2843}
2843 2844
2844 2845
2845//this is a overwritten callbackmethods from the syncinterface 2846//this is a overwritten callbackmethods from the syncinterface
2846bool KABCore::syncExternal(KSyncManager* manager, QString resource) 2847bool KABCore::syncExternal(KSyncManager* manager, QString resource)
2847{ 2848{
2848 QString mCurrentSyncDevice = manager->getCurrentSyncDevice(); 2849 QString mCurrentSyncDevice = manager->getCurrentSyncDevice();
2849 2850
2850 AddressBook abLocal( resource,"syncContact"); 2851 AddressBook abLocal( resource,"syncContact");
2851 bool syncOK = false; 2852 bool syncOK = false;
2852 if ( abLocal.load() ) { 2853 if ( abLocal.load() ) {
2853 qDebug("AB sharp loaded ,sync device %s",mCurrentSyncDevice.latin1()); 2854 qDebug("AB sharp loaded ,sync device %s",mCurrentSyncDevice.latin1());
2854 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2855 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2855 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice ); 2856 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice );
2856 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, syncManager->mSyncAlgoPrefs ); 2857 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, syncManager->mSyncAlgoPrefs );
2857 if ( syncOK ) { 2858 if ( syncOK ) {
2858 if ( syncManager->mWriteBackFile ) { 2859 if ( syncManager->mWriteBackFile ) {
2859 abLocal.saveAB(); 2860 abLocal.saveAB();
2860 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice ); 2861 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice );
2861 } 2862 }
2862 } 2863 }
2863 setModified(); 2864 setModified();
2864 } 2865 }
2865 if ( syncOK ) 2866 if ( syncOK )
2866 mViewManager->refreshView(); 2867 mViewManager->refreshView();
2867 return syncOK; 2868 return syncOK;
2868 2869
2869} 2870}
2870 2871
2871void KABCore::getFile( bool success ) 2872void KABCore::getFile( bool success )
2872{ 2873{
2873 QTimer::singleShot( 15000, this , SLOT ( setCaptionBack())); 2874 QTimer::singleShot( 15000, this , SLOT ( setCaptionBack()));
2874 if ( ! success ) { 2875 if ( ! success ) {
2875 setCaption( i18n("Error receiving file. Nothing changed!") ); 2876 setCaption( i18n("Error receiving file. Nothing changed!") );
2876 return; 2877 return;
2877 } 2878 }
2878 mAddressBook->importFromFile( sentSyncFile() ); 2879 mAddressBook->importFromFile( sentSyncFile() );
2879 topLevelWidget()->setCaption( i18n("Pi-Sync successful!") ); 2880 topLevelWidget()->setCaption( i18n("Pi-Sync successful!") );
2880 mViewManager->refreshView(); 2881 mViewManager->refreshView();
2881} 2882}
2882void KABCore::syncFileRequest() 2883void KABCore::syncFileRequest()
2883{ 2884{
2884 mAddressBook->export2File( sentSyncFile() ); 2885 mAddressBook->export2File( sentSyncFile() );
2885} 2886}
2886QString KABCore::sentSyncFile() 2887QString KABCore::sentSyncFile()
2887{ 2888{
2888#ifdef _WIN32_ 2889#ifdef _WIN32_
2889 return locateLocal( "tmp", "copysyncab.vcf" ); 2890 return locateLocal( "tmp", "copysyncab.vcf" );
2890#else 2891#else
2891 return QString( "/tmp/copysyncab.vcf" ); 2892 return QString( "/tmp/copysyncab.vcf" );
2892#endif 2893#endif
2893} 2894}
2894 2895
2895void KABCore::setCaptionBack() 2896void KABCore::setCaptionBack()
2896{ 2897{
2897 topLevelWidget()->setCaption( i18n("KAddressbook/Pi") ); 2898 topLevelWidget()->setCaption( i18n("KAddressbook/Pi") );
2898} 2899}
diff --git a/libkdepim/phoneaccess.cpp b/libkdepim/phoneaccess.cpp
index 357cd39..fe914dd 100644
--- a/libkdepim/phoneaccess.cpp
+++ b/libkdepim/phoneaccess.cpp
@@ -1,147 +1,151 @@
1/* 1/*
2 This file is part of libkdepim. 2 This file is part of libkdepim.
3 3
4 Copyright (c) 2004 Lutz Rogowski <rogowski@kde.org> 4 Copyright (c) 2004 Lutz Rogowski <rogowski@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
23#include <qstring.h> 23#include <qstring.h>
24#include <qapplication.h> 24#include <qapplication.h>
25#include <qptrlist.h> 25#include <qptrlist.h>
26#include <qregexp.h> 26#include <qregexp.h>
27#include <qfile.h> 27#include <qfile.h>
28#include <qtextstream.h> 28#include <qtextstream.h>
29#include <qtextcodec.h> 29#include <qtextcodec.h>
30#include <qdir.h> 30#include <qdir.h>
31#include <kmessagebox.h> 31#include <kmessagebox.h>
32#include <stdlib.h> 32#include <stdlib.h>
33#include "phoneaccess.h" 33#include "phoneaccess.h"
34 34
35void PhoneAccess::writeConfig( QString device, QString connection, QString model ) 35void PhoneAccess::writeConfig( QString device, QString connection, QString model )
36{ 36{
37#ifdef _WIN32_ 37#ifdef _WIN32_
38 QString fileName = qApp->applicationDirPath () +"\\gammurc"; 38 QString fileName = qApp->applicationDirPath () +"\\gammurc";
39#else 39#else
40 QString fileName = QDir::homeDirPath() +"/.gammurc"; 40 QString fileName = QDir::homeDirPath() +"/.gammurc";
41#endif 41#endif
42 //qDebug("save %d ", load ); 42 //qDebug("save %d ", load );
43 QString content = "[gammu]\n";; 43 QString content = "[gammu]\n";;
44 bool write = false; 44 bool write = false;
45 bool addPort = true, addConnection = true, addModel = true; 45 bool addPort = true, addConnection = true, addModel = true;
46 QFile file( fileName ); 46 QFile file( fileName );
47 if ( QFile::exists( fileName) ) { 47 if ( QFile::exists( fileName) ) {
48 if (!file.open( IO_ReadOnly ) ) { 48 if (!file.open( IO_ReadOnly ) ) {
49 qDebug("Error: cannot open %s ", fileName.latin1() ); 49 qDebug("Error: cannot open %s ", fileName.latin1() );
50 return; 50 return;
51 } 51 }
52 QString line; 52 QString line;
53 while ( file.readLine( line, 1024 ) > 0 ) { 53 while ( file.readLine( line, 1024 ) > 0 ) {
54 //qDebug("*%s* ", line.latin1() ); 54 //qDebug("*%s* ", line.latin1() );
55 if ( line.left(7 ) == "[gammu]" ) { 55 if ( line.left(7 ) == "[gammu]" ) {
56 ; 56 ;
57 } else 57 } else
58 if ( line.left(4 ) == "port" ) { 58 if ( line.left(4 ) == "port" ) {
59 if ( line == "port = " + device+"\n" ) { 59 if ( line == "port = " + device+"\n" ) {
60 content += line ; 60 content += line ;
61 addPort = false; 61 addPort = false;
62 //qDebug("port found" ); 62 //qDebug("port found" );
63 } 63 }
64 64
65 } else if ( line.left(5 ) == "model" ) { 65 } else if ( line.left(5 ) == "model" ) {
66 if ( line == "model = " + model +"\n") { 66 if ( line == "model = " + model +"\n") {
67 content += line ; 67 content += line ;
68 addModel = false; 68 addModel = false;
69 //qDebug("model found" ); 69 //qDebug("model found" );
70 } 70 }
71 71
72 } else if ( line.left( 10 ) == "connection" ) { 72 } else if ( line.left( 10 ) == "connection" ) {
73 if ( line == "connection = " + connection +"\n") { 73 if ( line == "connection = " + connection +"\n") {
74 addConnection = false; 74 addConnection = false;
75 content += line ; 75 content += line ;
76 //qDebug("con found" ); 76 //qDebug("con found" );
77 } 77 }
78 78
79 } else { 79 } else {
80 content += line ; 80 content += line ;
81 } 81 }
82 } 82 }
83 file.close(); 83 file.close();
84 } else { 84 } else {
85 if ( ! connection.isEmpty() ) { 85 if ( ! connection.isEmpty() ) {
86 addConnection = true; 86 addConnection = true;
87 } 87 }
88 if ( ! device.isEmpty() ) { 88 if ( ! device.isEmpty() ) {
89 addPort = true; 89 addPort = true;
90 90
91 } 91 }
92 if ( ! model.isEmpty() ) { 92 if ( ! model.isEmpty() ) {
93 addModel = true; 93 addModel = true;
94 } 94 }
95 } 95 }
96 96
97 if ( addConnection ) { 97 if ( addConnection ) {
98 write = true; 98 write = true;
99 content += "connection = "; 99 content += "connection = ";
100 content += connection; 100 content += connection;
101 content += "\n"; 101 content += "\n";
102 } 102 }
103 if ( addPort ) { 103 if ( addPort ) {
104 write = true; 104 write = true;
105 content += "port = "; 105 content += "port = ";
106 content += device; 106 content += device;
107 content += "\n"; 107 content += "\n";
108 108
109 } 109 }
110 if ( addModel ) { 110 if ( addModel ) {
111 write = true; 111 write = true;
112 content += "model = "; 112 content += "model = ";
113 content += model; 113 content += model;
114 content += "\n"; 114 content += "\n";
115 } 115 }
116 if ( write ) { 116 if ( write ) {
117 if (!file.open( IO_WriteOnly ) ) { 117 if (!file.open( IO_WriteOnly ) ) {
118 qDebug("Error: cannot write file %s ", fileName.latin1() ); 118 qDebug("Error: cannot write file %s ", fileName.latin1() );
119 return; 119 return;
120 } 120 }
121 qDebug("Writing file %s ", fileName.latin1() ); 121 qDebug("Writing file %s ", fileName.latin1() );
122 QTextStream ts( &file ); 122 QTextStream ts( &file );
123 ts << content ; 123 ts << content ;
124 file.close(); 124 file.close();
125 } 125 }
126 126
127} 127}
128 128
129 129
130bool PhoneAccess::writeToPhone( QString fileName) 130bool PhoneAccess::writeToPhone( QString fileName)
131{ 131{
132 132
133#ifdef DESKTOP_VERSION 133#ifdef DESKTOP_VERSION
134#ifdef _WIN32_
135 QString command ="kammu --restore " + fileName ;
136#else
134 QString command ="./kammu --restore " + fileName ; 137 QString command ="./kammu --restore " + fileName ;
138#endif
135#else 139#else
136 QString command ="kammu --restore " + fileName ; 140 QString command ="kammu --restore " + fileName ;
137#endif 141#endif
138 int ret; 142 int ret;
139 while ( (ret = system ( command.latin1())) != 0 ) { 143 while ( (ret = system ( command.latin1())) != 0 ) {
140 qDebug("Error S::command returned %d. asking users", ret); 144 qDebug("Error S::command returned %d.", ret);
141 int retval = KMessageBox::warningContinueCancel(0, 145 int retval = KMessageBox::warningContinueCancel(0,
142 i18n("Error accessing device!\nPlease turn on connection\nand retry!"),i18n("KO/Pi phone access"),i18n("Retry"),i18n("Cancel")); 146 i18n("Error accessing device!\nPlease turn on connection\nand retry!"),i18n("KO/Pi phone access"),i18n("Retry"),i18n("Cancel"));
143 if ( retval != KMessageBox::Continue ) 147 if ( retval != KMessageBox::Continue )
144 return false; 148 return false;
145 } 149 }
146 return true; 150 return true;
147} 151}