summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/plugins/file/resourcefile.cpp3
-rw-r--r--kabc/plugins/sharpdtm/resourcesharpdtm.cpp48
-rw-r--r--kabc/plugins/sharpdtm/sharpdtmconverter.cpp17
-rw-r--r--kaddressbook/kabcore.cpp5
-rw-r--r--korganizer/calendarview.cpp4
5 files changed, 70 insertions, 7 deletions
diff --git a/kabc/plugins/file/resourcefile.cpp b/kabc/plugins/file/resourcefile.cpp
index b8c32d5..6cd63fd 100644
--- a/kabc/plugins/file/resourcefile.cpp
+++ b/kabc/plugins/file/resourcefile.cpp
@@ -1,408 +1,409 @@
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#include <sys/types.h> 28#include <sys/types.h>
29#include <sys/stat.h> 29#include <sys/stat.h>
30#ifndef _WIN32_ 30#ifndef _WIN32_
31#include <unistd.h> 31#include <unistd.h>
32#endif 32#endif
33 33
34#include <qfile.h> 34#include <qfile.h>
35#include <qfileinfo.h> 35#include <qfileinfo.h>
36#include <qregexp.h> 36#include <qregexp.h>
37#include <qtimer.h> 37#include <qtimer.h>
38 38
39#include <kapplication.h> 39#include <kapplication.h>
40#include <kconfig.h> 40#include <kconfig.h>
41#include <kdebug.h> 41#include <kdebug.h>
42#include <klocale.h> 42#include <klocale.h>
43//US #include <ksavefile.h> 43//US #include <ksavefile.h>
44#include <kstandarddirs.h> 44#include <kstandarddirs.h>
45#include <kmessagebox.h> 45#include <kmessagebox.h>
46 46
47#include "formatfactory.h" 47#include "formatfactory.h"
48 48
49#include "resource.h" 49#include "resource.h"
50#include "resourcefileconfig.h" 50#include "resourcefileconfig.h"
51#include "stdaddressbook.h" 51#include "stdaddressbook.h"
52#define NO_DIRWATCH 52#define NO_DIRWATCH
53#include "resourcefile.h" 53#include "resourcefile.h"
54#include "syncprefwidget.h" 54#include "syncprefwidget.h"
55 55
56//#define ALLOW_LOCKING 56//#define ALLOW_LOCKING
57 57
58 58
59 59
60using namespace KABC; 60using namespace KABC;
61 61
62extern "C" 62extern "C"
63#ifdef _WIN32_ 63#ifdef _WIN32_
64__declspec(dllexport) 64__declspec(dllexport)
65#else 65#else
66{ 66{
67#endif 67#endif
68 68
69//US void *init_kabc_file() 69//US void *init_kabc_file()
70 void *init_microkabc_file() 70 void *init_microkabc_file()
71 { 71 {
72 return new KRES::PluginFactory<ResourceFile,ResourceFileConfig, SyncPrefWidgetContainer>(); 72 return new KRES::PluginFactory<ResourceFile,ResourceFileConfig, SyncPrefWidgetContainer>();
73 } 73 }
74#ifndef _WIN32_ 74#ifndef _WIN32_
75} 75}
76#endif 76#endif
77 77
78ResourceFile::ResourceFile( const KConfig *config, bool syncable ) 78ResourceFile::ResourceFile( const KConfig *config, bool syncable )
79 : Resource( config, syncable ) , mFormat( 0 ) 79 : Resource( config, syncable ) , mFormat( 0 )
80{ 80{
81 QString fileName, formatName, default_fileName; 81 QString fileName, formatName, default_fileName;
82 82
83 if (syncable == true) 83 if (syncable == true)
84 default_fileName = "/home/polo/kdepim/apps/kabc/localfile.vcf"; 84 default_fileName = "/home/polo/kdepim/apps/kabc/localfile.vcf";
85 else 85 else
86 default_fileName = StdAddressBook::fileName(); 86 default_fileName = StdAddressBook::fileName();
87 87
88 KConfig *cfg = (KConfig *)config; 88 KConfig *cfg = (KConfig *)config;
89 if ( cfg ) { 89 if ( cfg ) {
90 fileName = cfg->readEntry( "FileName", default_fileName ); 90 fileName = cfg->readEntry( "FileName", default_fileName );
91 formatName = cfg->readEntry( "FileFormat", "vcard" ); 91 formatName = cfg->readEntry( "FileFormat", "vcard" );
92 } else { 92 } else {
93 fileName = default_fileName; 93 fileName = default_fileName;
94 formatName = "vcard"; 94 formatName = "vcard";
95 } 95 }
96 96
97 init( fileName, formatName ); 97 init( fileName, formatName );
98} 98}
99 99
100ResourceFile::ResourceFile( const QString &fileName, bool syncable , 100ResourceFile::ResourceFile( const QString &fileName, bool syncable ,
101 const QString &formatName ) 101 const QString &formatName )
102 : Resource( 0, syncable ) 102 : Resource( 0, syncable )
103{ 103{
104// qDebug("ResourceFile::ResourceFile : 3 %s, %s", fileName.latin1(), formatName.latin1()); 104// qDebug("ResourceFile::ResourceFile : 3 %s, %s", fileName.latin1(), formatName.latin1());
105 init( fileName, formatName ); 105 init( fileName, formatName );
106} 106}
107 107
108void ResourceFile::init( const QString &fileName, const QString &formatName ) 108void ResourceFile::init( const QString &fileName, const QString &formatName )
109{ 109{
110 mFormatName = formatName; 110 mFormatName = formatName;
111 111
112 FormatFactory *factory = FormatFactory::self(); 112 FormatFactory *factory = FormatFactory::self();
113 mFormat = factory->format( mFormatName ); 113 mFormat = factory->format( mFormatName );
114 114
115 if ( !mFormat ) { 115 if ( !mFormat ) {
116 mFormatName = "vcard"; 116 mFormatName = "vcard";
117 mFormat = factory->format( mFormatName ); 117 mFormat = factory->format( mFormatName );
118 } 118 }
119 119
120#ifndef NO_DIRWATCH 120#ifndef NO_DIRWATCH
121 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) ); 121 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) );
122 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) ); 122 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) );
123 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) ); 123 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) );
124#endif 124#endif
125 setFileName( fileName ); 125 setFileName( fileName );
126} 126}
127 127
128ResourceFile::~ResourceFile() 128ResourceFile::~ResourceFile()
129{ 129{
130 delete mFormat; 130 delete mFormat;
131 mFormat = 0; 131 mFormat = 0;
132} 132}
133 133
134void ResourceFile::writeConfig( KConfig *config ) 134void ResourceFile::writeConfig( KConfig *config )
135{ 135{
136 136
137 config->setGroup( "Resource_" + identifier() ); 137 config->setGroup( "Resource_" + identifier() );
138 Resource::writeConfig( config ); 138 Resource::writeConfig( config );
139 139
140 config->writeEntry( "FileName", mFileName ); 140 config->writeEntry( "FileName", mFileName );
141 config->writeEntry( "FileFormat", mFormatName ); 141 config->writeEntry( "FileFormat", mFormatName );
142 142
143// qDebug("ResourceFile::writeConfig format %s, %s", mFileName.latin1(), mFormatName.latin1()); 143// qDebug("ResourceFile::writeConfig format %s, %s", mFileName.latin1(), mFormatName.latin1());
144 144
145} 145}
146 146
147Ticket *ResourceFile::requestSaveTicket() 147Ticket *ResourceFile::requestSaveTicket()
148{ 148{
149 kdDebug(5700) << "ResourceFile::requestSaveTicket()" << endl; 149 kdDebug(5700) << "ResourceFile::requestSaveTicket()" << endl;
150 150
151 if ( !addressBook() ) return 0; 151 if ( !addressBook() ) return 0;
152 152
153#ifdef ALLOW_LOCKING 153#ifdef ALLOW_LOCKING
154 if ( !lock( mFileName ) ) { 154 if ( !lock( mFileName ) ) {
155 qDebug("unablt to lock file "); 155 qDebug("unablt to lock file ");
156 return 0; 156 return 0;
157 } 157 }
158#endif 158#endif
159 return createTicket( this ); 159 return createTicket( this );
160} 160}
161 161
162 162
163bool ResourceFile::doOpen() 163bool ResourceFile::doOpen()
164{ 164{
165 QFile file( mFileName ); 165 QFile file( mFileName );
166 qDebug("ResourceFile::openfile %s ", mFileName.latin1());
166 167
167 if ( !file.exists() ) { 168 if ( !file.exists() ) {
168 // try to create the file 169 // try to create the file
169 bool ok = file.open( IO_WriteOnly ); 170 bool ok = file.open( IO_WriteOnly );
170 if ( ok ) 171 if ( ok )
171 file.close(); 172 file.close();
172 173
173 return ok; 174 return ok;
174 } else { 175 } else {
175 if ( !file.open( IO_ReadWrite ) ) 176 if ( !file.open( IO_ReadWrite ) )
176 return false; 177 return false;
177 178
178 if ( file.size() == 0 ) { 179 if ( file.size() == 0 ) {
179 file.close(); 180 file.close();
180 return true; 181 return true;
181 } 182 }
182 183
183 bool ok = mFormat->checkFormat( &file ); 184 bool ok = mFormat->checkFormat( &file );
184 file.close(); 185 file.close();
185 186
186 return ok; 187 return ok;
187 } 188 }
188} 189}
189 190
190void ResourceFile::doClose() 191void ResourceFile::doClose()
191{ 192{
192} 193}
193 194
194bool ResourceFile::load() 195bool ResourceFile::load()
195{ 196{
196 197
197 198 qDebug("ResourceFile::loadfile %s ", mFileName.latin1());
198 QFile file( mFileName ); 199 QFile file( mFileName );
199 if ( !file.open( IO_ReadOnly ) ) { 200 if ( !file.open( IO_ReadOnly ) ) {
200 addressBook()->error( i18n( "Unable to open file '%1'." ).arg( mFileName ) ); 201 addressBook()->error( i18n( "Unable to open file '%1'." ).arg( mFileName ) );
201 return false; 202 return false;
202 } 203 }
203 204
204// qDebug("ResourceFile::load format %s, %s", mFileName.latin1(), mFormatName.latin1()); 205// qDebug("ResourceFile::load format %s, %s", mFileName.latin1(), mFormatName.latin1());
205 206
206 return mFormat->loadAll( addressBook(), this, &file ); 207 return mFormat->loadAll( addressBook(), this, &file );
207} 208}
208 209
209bool ResourceFile::save( Ticket *ticket ) 210bool ResourceFile::save( Ticket *ticket )
210{ 211{
211// qDebug("ResourceFile::save format %s, %s", mFileName.latin1(), mFormatName.latin1()); 212// qDebug("ResourceFile::save format %s, %s", mFileName.latin1(), mFormatName.latin1());
212 213
213 214
214 // create backup file 215 // create backup file
215 QString extension = "_" + QString::number( QDate::currentDate().dayOfWeek() ); 216 QString extension = "_" + QString::number( QDate::currentDate().dayOfWeek() );
216 217
217/*US we use a simpler method to create a backupfile 218/*US we use a simpler method to create a backupfile
218 219
219 (void) KSaveFile::backupFile( mFileName, QString::null 220 (void) KSaveFile::backupFile( mFileName, QString::null
220 ,extension ); 221 ,extension );
221 222
222 KSaveFile saveFile( mFileName ); 223 KSaveFile saveFile( mFileName );
223 bool ok = false; 224 bool ok = false;
224 if ( saveFile.status() == 0 && saveFile.file() ) 225 if ( saveFile.status() == 0 && saveFile.file() )
225 { 226 {
226 mFormat->saveAll( addressBook(), this, saveFile.file() ); 227 mFormat->saveAll( addressBook(), this, saveFile.file() );
227 ok = saveFile.close(); 228 ok = saveFile.close();
228 } 229 }
229*/ 230*/
230 231
231//US ToDo: write backupfile 232//US ToDo: write backupfile
232#ifndef NO_DIRWATCH 233#ifndef NO_DIRWATCH
233 mDirWatch.stopScan(); 234 mDirWatch.stopScan();
234#endif 235#endif
235 QFile info; 236 QFile info;
236 info.setName( mFileName ); 237 info.setName( mFileName );
237 bool ok = info.open( IO_WriteOnly ); 238 bool ok = info.open( IO_WriteOnly );
238 if ( ok ) { 239 if ( ok ) {
239 mFormat->saveAll( addressBook(), this, &info ); 240 mFormat->saveAll( addressBook(), this, &info );
240 241
241 info.close(); 242 info.close();
242 ok = true; 243 ok = true;
243 } 244 }
244 else { 245 else {
245 246
246 } 247 }
247 248
248 if ( !ok ) 249 if ( !ok )
249 addressBook()->error( i18n( "Unable to save file '%1'." ).arg( mFileName ) ); 250 addressBook()->error( i18n( "Unable to save file '%1'." ).arg( mFileName ) );
250#ifndef NO_DIRWATCH 251#ifndef NO_DIRWATCH
251 mDirWatch.startScan(); 252 mDirWatch.startScan();
252#endif 253#endif
253 delete ticket; 254 delete ticket;
254#ifdef ALLOW_LOCKING 255#ifdef ALLOW_LOCKING
255 unlock( mFileName ); 256 unlock( mFileName );
256#endif 257#endif
257 258
258 return ok; 259 return ok;
259} 260}
260 261
261bool ResourceFile::lock( const QString &fileName ) 262bool ResourceFile::lock( const QString &fileName )
262{ 263{
263#ifdef ALLOW_LOCKING 264#ifdef ALLOW_LOCKING
264 265
265 266
266 QString fn = fileName; 267 QString fn = fileName;
267 268
268//US change the implementation how the lockfilename is getting created 269//US change the implementation how the lockfilename is getting created
269//US fn.replace( QRegExp("/"), "_" ); 270//US fn.replace( QRegExp("/"), "_" );
270//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" ); 271//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" );
271 272
272 KURL url(fn); 273 KURL url(fn);
273 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); 274 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
274 275
275 276
276 277
277 if (QFile::exists( lockName )) return false; 278 if (QFile::exists( lockName )) return false;
278 279
279 QString lockUniqueName; 280 QString lockUniqueName;
280 lockUniqueName = fn + KApplication::randomString( 8 ); 281 lockUniqueName = fn + KApplication::randomString( 8 );
281 282
282 url = lockUniqueName; 283 url = lockUniqueName;
283//US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName ); 284//US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName );
284 mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() ); 285 mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() );
285 kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl; 286 kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl;
286 287
287 // Create unique file 288 // Create unique file
288 QFile file( mLockUniqueName ); 289 QFile file( mLockUniqueName );
289 file.open( IO_WriteOnly ); 290 file.open( IO_WriteOnly );
290 file.close(); 291 file.close();
291 292
292 // Create lock file 293 // Create lock file
293 int result = 0; 294 int result = 0;
294#ifndef _WIN32_ 295#ifndef _WIN32_
295 result = ::link( QFile::encodeName( mLockUniqueName ), 296 result = ::link( QFile::encodeName( mLockUniqueName ),
296 QFile::encodeName( lockName ) ); 297 QFile::encodeName( lockName ) );
297#endif 298#endif
298 if ( result == 0 ) { 299 if ( result == 0 ) {
299 addressBook()->emitAddressBookLocked(); 300 addressBook()->emitAddressBookLocked();
300 return true; 301 return true;
301 } 302 }
302 303
303 // TODO: check stat 304 // TODO: check stat
304 305
305 return false; 306 return false;
306#else 307#else
307 return true; 308 return true;
308#endif 309#endif
309} 310}
310 311
311void ResourceFile::unlock( const QString &fileName ) 312void ResourceFile::unlock( const QString &fileName )
312{ 313{
313#ifdef ALLOW_LOCKING 314#ifdef ALLOW_LOCKING
314 QString fn = fileName; 315 QString fn = fileName;
315//US change the implementation how the lockfilename is getting created 316//US change the implementation how the lockfilename is getting created
316//US fn.replace( QRegExp( "/" ), "_" ); 317//US fn.replace( QRegExp( "/" ), "_" );
317//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" ); 318//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" );
318//US QString lockName = fn + ".lock"; 319//US QString lockName = fn + ".lock";
319 KURL url(fn); 320 KURL url(fn);
320 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); 321 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
321 322
322 QFile::remove( lockName ); 323 QFile::remove( lockName );
323 QFile::remove( mLockUniqueName ); 324 QFile::remove( mLockUniqueName );
324 addressBook()->emitAddressBookUnlocked(); 325 addressBook()->emitAddressBookUnlocked();
325#else 326#else
326 return; 327 return;
327#endif 328#endif
328} 329}
329 330
330void ResourceFile::setFileName( const QString &fileName ) 331void ResourceFile::setFileName( const QString &fileName )
331{ 332{
332#ifndef NO_DIRWATCH 333#ifndef NO_DIRWATCH
333 mDirWatch.stopScan(); 334 mDirWatch.stopScan();
334 mDirWatch.removeFile( mFileName ); 335 mDirWatch.removeFile( mFileName );
335 mFileName = fileName; 336 mFileName = fileName;
336 337
337 338
338 mDirWatch.addFile( mFileName ); 339 mDirWatch.addFile( mFileName );
339 mDirWatch.startScan(); 340 mDirWatch.startScan();
340#else 341#else
341 mFileName = fileName; 342 mFileName = fileName;
342#endif 343#endif
343 344
344//US simulate KDirWatch event 345//US simulate KDirWatch event
345//US fileChanged(); 346//US fileChanged();
346} 347}
347 348
348QString ResourceFile::fileName() const 349QString ResourceFile::fileName() const
349{ 350{
350 return mFileName; 351 return mFileName;
351} 352}
352 353
353void ResourceFile::setFormat( const QString &format ) 354void ResourceFile::setFormat( const QString &format )
354{ 355{
355 mFormatName = format; 356 mFormatName = format;
356 delete mFormat; 357 delete mFormat;
357 358
358 FormatFactory *factory = FormatFactory::self(); 359 FormatFactory *factory = FormatFactory::self();
359 mFormat = factory->format( mFormatName ); 360 mFormat = factory->format( mFormatName );
360/*US 361/*US
361//qDebug("ResourceFile::setFormat initialized with format %s ", format.latin1()); 362//qDebug("ResourceFile::setFormat initialized with format %s ", format.latin1());
362 if (mFormatName == "vcard") { 363 if (mFormatName == "vcard") {
363 mFormat = new VCardFormatPlugin2(); 364 mFormat = new VCardFormatPlugin2();
364// qDebug("ResourceFile::setFormat format %s", mFormatName.latin1()); 365// qDebug("ResourceFile::setFormat format %s", mFormatName.latin1());
365 } 366 }
366 else if (mFormatName == "binary") { 367 else if (mFormatName == "binary") {
367 mFormat = new BinaryFormat(); 368 mFormat = new BinaryFormat();
368// qDebug("ResourceFile::setFormat format %s", mFormatName.latin1()); 369// qDebug("ResourceFile::setFormat format %s", mFormatName.latin1());
369 } 370 }
370 else 371 else
371 qDebug("ResourceFile::setFormat format unknown !!! %s ", format.latin1()); 372 qDebug("ResourceFile::setFormat format unknown !!! %s ", format.latin1());
372*/ 373*/
373 374
374} 375}
375 376
376QString ResourceFile::format() const 377QString ResourceFile::format() const
377{ 378{
378 return mFormatName; 379 return mFormatName;
379} 380}
380 381
381void ResourceFile::fileChanged() 382void ResourceFile::fileChanged()
382{ 383{
383 // There is a small theoretical chance that KDirWatch calls us before 384 // There is a small theoretical chance that KDirWatch calls us before
384 // we are fully constructed 385 // we are fully constructed
385 if (!addressBook()) 386 if (!addressBook())
386 return; 387 return;
387 388
388 389
389 QString text( i18n( "File resource '%1'<br> has been changed by third party.<br>Do you want to reload?").arg( mFileName ) ); 390 QString text( i18n( "File resource '%1'<br> has been changed by third party.<br>Do you want to reload?").arg( mFileName ) );
390 if ( readOnly() || KMessageBox::questionYesNo( 0, text ) == KMessageBox::Yes ) { 391 if ( readOnly() || KMessageBox::questionYesNo( 0, text ) == KMessageBox::Yes ) {
391 load(); 392 load();
392 addressBook()->emitAddressBookChanged(); 393 addressBook()->emitAddressBookChanged();
393 } 394 }
394} 395}
395 396
396void ResourceFile::removeAddressee( const Addressee &addr ) 397void ResourceFile::removeAddressee( const Addressee &addr )
397{ 398{
398 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/photos/" ) + addr.uid() ) ); 399 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/photos/" ) + addr.uid() ) );
399 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/logos/" ) + addr.uid() ) ); 400 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/logos/" ) + addr.uid() ) );
400 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/sounds/" ) + addr.uid() ) ); 401 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/sounds/" ) + addr.uid() ) );
401} 402}
402 403
403void ResourceFile::cleanUp() 404void ResourceFile::cleanUp()
404{ 405{
405 unlock( mFileName ); 406 unlock( mFileName );
406} 407}
407 408
408//US #include "resourcefile.moc" 409//US #include "resourcefile.moc"
diff --git a/kabc/plugins/sharpdtm/resourcesharpdtm.cpp b/kabc/plugins/sharpdtm/resourcesharpdtm.cpp
index 48d3985..437bda8 100644
--- a/kabc/plugins/sharpdtm/resourcesharpdtm.cpp
+++ b/kabc/plugins/sharpdtm/resourcesharpdtm.cpp
@@ -1,400 +1,442 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2004 Ulf Schenk 3 Copyright (c) 2004 Ulf Schenk
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#include <sys/types.h> 28#include <sys/types.h>
29#include <sys/stat.h> 29#include <sys/stat.h>
30#include <unistd.h> 30#include <unistd.h>
31 31
32#include <qdir.h> 32#include <qdir.h>
33#include <qfile.h> 33#include <qfile.h>
34#include <qfileinfo.h> 34#include <qfileinfo.h>
35#include <qregexp.h> 35#include <qregexp.h>
36//US #include <qtimer.h> 36//US #include <qtimer.h>
37 37
38#include <kapplication.h> 38#include <kapplication.h>
39#include <kconfig.h> 39#include <kconfig.h>
40#include <kdebug.h> 40#include <kdebug.h>
41#include <klocale.h> 41#include <klocale.h>
42//US #include <ksavefile.h> 42//US #include <ksavefile.h>
43#include <kstandarddirs.h> 43#include <kstandarddirs.h>
44#include <kmessagebox.h> 44#include <kmessagebox.h>
45 45
46#include <sl/slzdb.h> 46#include <sl/slzdb.h>
47 47
48#include <libkdepim/ksyncprofile.h> 48#include <libkdepim/ksyncprofile.h>
49 49
50#include "resourcesharpdtmconfig.h" 50#include "resourcesharpdtmconfig.h"
51#include "resourcesharpdtm.h" 51#include "resourcesharpdtm.h"
52 52
53#include "syncprefwidget.h" 53#include "syncprefwidget.h"
54 54
55#include "stdaddressbook.h" 55#include "stdaddressbook.h"
56 56
57#include "sharpdtmconverter.h" 57#include "sharpdtmconverter.h"
58//#define ALLOW_LOCKING 58//#define ALLOW_LOCKING
59using namespace KABC; 59using namespace KABC;
60extern "C" 60extern "C"
61{ 61{
62 void *init_microkabc_sharpdtm() 62 void *init_microkabc_sharpdtm()
63 { 63 {
64 return new KRES::PluginFactory<ResourceSharpDTM,ResourceSharpDTMConfig,SyncPrefWidgetContainer>(); 64 return new KRES::PluginFactory<ResourceSharpDTM,ResourceSharpDTMConfig,SyncPrefWidgetContainer>();
65 } 65 }
66} 66}
67 67
68ResourceSharpDTM::ResourceSharpDTM( const KConfig *config, bool syncable ) 68ResourceSharpDTM::ResourceSharpDTM( const KConfig *config, bool syncable )
69 : Resource( config, syncable ), mConverter (0) 69 : Resource( config, syncable ), mConverter (0)
70{ 70{
71 // we can not choose the filename. Therefore use the default to display 71 // we can not choose the filename. Therefore use the default to display
72 72
73 QString fileName = SlZDataBase::addressbookFileName(); 73 QString fileName = SlZDataBase::addressbookFileName();
74 init( fileName ); 74 init( fileName );
75} 75}
76 76
77ResourceSharpDTM::ResourceSharpDTM( const QString &fileName, bool syncable ) 77ResourceSharpDTM::ResourceSharpDTM( const QString &fileName, bool syncable )
78 : Resource( 0, syncable ) 78 : Resource( 0, syncable )
79{ 79{
80 init( fileName ); 80 init( fileName );
81} 81}
82 82
83void ResourceSharpDTM::init( const QString &fileName ) 83void ResourceSharpDTM::init( const QString &fileName )
84{ 84{
85 85
86 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) ); 86 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) );
87 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) ); 87 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) );
88 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) ); 88 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) );
89 89
90 setFileName( fileName ); 90 setFileName( fileName );
91} 91}
92 92
93ResourceSharpDTM::~ResourceSharpDTM() 93ResourceSharpDTM::~ResourceSharpDTM()
94{ 94{
95 if (mConverter != 0) 95 if (mConverter != 0)
96 delete mConverter; 96 delete mConverter;
97 97
98 if(mAccess != 0) 98 if(mAccess != 0)
99 delete mAccess; 99 delete mAccess;
100} 100}
101 101
102void ResourceSharpDTM::writeConfig( KConfig *config ) 102void ResourceSharpDTM::writeConfig( KConfig *config )
103{ 103{
104 Resource::writeConfig( config ); 104 Resource::writeConfig( config );
105} 105}
106 106
107Ticket *ResourceSharpDTM::requestSaveTicket() 107Ticket *ResourceSharpDTM::requestSaveTicket()
108{ 108{
109 109
110 110
111 qDebug("ResourceSharpDTM::requestSaveTicket: %s", fileName().latin1()); 111 qDebug("ResourceSharpDTM::requestSaveTicket: %s", fileName().latin1());
112 112
113 if ( !addressBook() ) return 0; 113 if ( !addressBook() ) return 0;
114 114
115#ifdef ALLOW_LOCKING 115#ifdef ALLOW_LOCKING
116 if ( !lock( fileName() ) ) { 116 if ( !lock( fileName() ) ) {
117 qDebug("ResourceSharpDTM::requestSaveTicket(): Unable to lock file "); 117 qDebug("ResourceSharpDTM::requestSaveTicket(): Unable to lock file ");
118 return 0; 118 return 0;
119 } 119 }
120#endif 120#endif
121 return createTicket( this ); 121 return createTicket( this );
122} 122}
123 123
124 124
125bool ResourceSharpDTM::doOpen() 125bool ResourceSharpDTM::doOpen()
126{ 126{
127 qDebug("ResourceSharpDTM::doOpen: %s", fileName().latin1()); 127 qDebug("ResourceSharpDTM::doOpen: %s", fileName().latin1());
128 128
129 // the last parameter in the SlZDataBase constructor means "readonly" 129 // the last parameter in the SlZDataBase constructor means "readonly"
130 mAccess = new SlZDataBase(fileName(), 130 mAccess = new SlZDataBase(fileName(),
131 SlZDataBase::addressbookItems(), 131 SlZDataBase::addressbookItems(),
132 NULL, false); 132 NULL, false);
133 133
134 if ( !mAccess ) { 134 if ( !mAccess ) {
135 qDebug("Unable to load file() %s", fileName().latin1()); 135 qDebug("Unable to load file() %s", fileName().latin1());
136 return false; 136 return false;
137 } 137 }
138 138
139 if (mConverter == 0) 139 if (mConverter == 0)
140 { 140 {
141 mConverter = new SharpDTMConverter(); 141 mConverter = new SharpDTMConverter();
142 bool res = mConverter->init(); 142 bool res = mConverter->init();
143 if ( !res ) 143 if ( !res )
144 { 144 {
145 QString msg("Unable to initialize sharp converter. Most likely a problem with the category file"); 145 QString msg("Unable to initialize sharp converter. Most likely a problem with the category file");
146 146
147 qDebug(msg); 147 qDebug(msg);
148 delete mAccess; 148 delete mAccess;
149 mAccess = 0; 149 mAccess = 0;
150 return false; 150 return false;
151 } 151 }
152 } 152 }
153 153
154 return true; 154 return true;
155} 155}
156 156
157void ResourceSharpDTM::doClose() 157void ResourceSharpDTM::doClose()
158{ 158{
159 qDebug("ResourceSharpDTM::doClose: %s", fileName().latin1()); 159 qDebug("ResourceSharpDTM::doClose: %s", fileName().latin1());
160 160
161 if(mAccess) 161 if(mAccess)
162 { 162 {
163 delete mAccess; 163 delete mAccess;
164 mAccess = 0; 164 mAccess = 0;
165 } 165 }
166 // it seems so, that deletion of access deletes backend as well 166 // it seems so, that deletion of access deletes backend as well
167 //delete backend; 167 //delete backend;
168 168
169 return; 169 return;
170} 170}
171 171
172bool ResourceSharpDTM::load() 172bool ResourceSharpDTM::load()
173{ 173{
174 qDebug("ResourceSharpDTM::load: %s", fileName().latin1()); 174 qDebug("ResourceSharpDTM::load: %s", fileName().latin1());
175 175
176 bool res = false; 176 bool res = false;
177 177
178 CardId id; 178 CardId id;
179 179
180 for (bool res=mAccess->first(); res == true; res=mAccess->next()) 180 for (bool res=mAccess->first(); res == true; res=mAccess->next())
181 { 181 {
182 id = mAccess->cardId(); 182 id = mAccess->cardId();
183 183
184 KABC::Addressee addressee; 184 KABC::Addressee addressee;
185 185
186 res = mConverter->sharpToAddressee( id, mAccess, addressee ); 186 res = mConverter->sharpToAddressee( id, mAccess, addressee );
187 187
188 if ( !addressee.isEmpty() && res ) 188 if ( !addressee.isEmpty() && res )
189 { 189 {
190 addressee.setResource( this ); 190 addressee.setResource( this );
191 addressBook()->insertAddressee( addressee ); 191 addressBook()->insertAddressee( addressee );
192 } 192 }
193 } 193 }
194 194
195 return true; 195 return true;
196} 196}
197 197
198bool ResourceSharpDTM::save( Ticket *ticket ) 198bool ResourceSharpDTM::save( Ticket *ticket )
199{ 199{
200 qDebug("ResourceSharpDTM::save: %s", fileName().latin1()); 200 qDebug("ResourceSharpDTM::save: %s", fileName().latin1());
201 201
202 mDirWatch.stopScan(); 202 mDirWatch.stopScan();
203 203
204 KABC::AddressBook::Iterator it; 204 KABC::AddressBook::Iterator it;
205 bool res; 205 bool res;
206 KABC::Addressee::List changedAddressees; 206 KABC::Addressee::List changedAddressees;
207 typedef QMap<int,QString> AddresseeMap;
208 AddresseeMap map;
209 CardId id ;
207 210
208 for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) { 211 for ( it = addressBook()->begin(); it != addressBook()->end(); ++it ) {
209 212
210 if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { 213 if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
211 QString uid = (*it).originalExternalUID(); 214 QString uid = (*it).originalExternalUID();
212 CardId id ;
213 bool res; 215 bool res;
214 if ( uid.isEmpty() ) 216 if ( uid.isEmpty() )
215 id = 0; 217 id = 0;
216 else 218 else
217 id = uid.toUInt(); 219 id = uid.toUInt();
218 KABC::Addressee addressee = (*it); 220 KABC::Addressee addressee = (*it);
219 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_ADDED_EXTERNAL ) { 221 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_ADDED_EXTERNAL ) {
220 res = mAccess->startEditCard(id); 222 res = mAccess->startEditCard(id);
221 if (res == true) 223 if (res == true)
222 { 224 {
223 res = mConverter->addresseeToSharp( (*it), mAccess, id ); 225 res = mConverter->addresseeToSharp( (*it), mAccess, id );
224 if (res == true) 226 if (res == true)
225 { 227 {
228 res = mAccess->finishEditCard(&id);
229 //(*it).setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
230 //(*it).setExternalUID( QString::number( id ) );
231 //(*it).setOriginalExternalUID( QString::number( id ) );
232 map.insert(id,(*it).uid());
233
234#if 0
226 KABC::Addressee addressee; 235 KABC::Addressee addressee;
227 res = mConverter->sharpToAddressee( id, mAccess, addressee ); 236 res = mConverter->sharpToAddressee( id, mAccess, addressee );
228 addressee.setUid((*it).uid() ); 237 addressee.setUid((*it).uid() );
229 addressee.setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); 238 (it*).setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
230 res = mAccess->finishEditCard(&id); 239 res = mAccess->finishEditCard(&id);
231 //qDebug("2NEW id is %d", id); 240 //qDebug("2NEW id is %d", id);
232 addressee.setExternalUID( QString::number( id ) ); 241 addressee.setExternalUID( QString::number( id ) );
233 addressee.setOriginalExternalUID( QString::number( id ) ); 242 addressee.setOriginalExternalUID( QString::number( id ) );
234 changedAddressees.append( addressee ); 243 changedAddressees.append( addressee );
244#endif
235 245
236 if (res == false) 246 if (res == false)
237 qDebug("Unable to append Contact: %s", addressee.formattedName().latin1()); 247 qDebug("Unable to append Contact: %s", addressee.formattedName().latin1());
238 248
239 } 249 }
240 else 250 else
241 { 251 {
242 qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1()); 252 qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1());
243 mAccess->cancelEditCard(); 253 mAccess->cancelEditCard();
244 } 254 }
245 } 255 }
246 256
247 } else if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { 257 } else if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE ) {
248 res = mAccess->deleteCard(&id); 258 res = mAccess->deleteCard(&id);
249 if ( res ) 259 if ( res )
250 qDebug("delete success "); 260 qDebug("delete success ");
251 else 261 else
252 qDebug("delete error "); 262 qDebug("delete error ");
253 263
254 264
255 } else if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { 265 } else if ( (*it).tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
256 //changed 266 //changed
257 qDebug("changed ****"); 267 qDebug("changed ****");
258 res = mAccess->startEditCard(id); 268 res = mAccess->startEditCard(id);
259 if (res == true) 269 if (res == true)
260 { 270 {
261 res = mConverter->addresseeToSharp( (*it), mAccess, id ); 271 res = mConverter->addresseeToSharp( (*it), mAccess, id );
262 if (res == true) 272 if (res == true)
263 { 273 {
274 res = mAccess->finishEditCard(&id);
275 //(*it).setTempSyncStat( SYNC_TEMPSTATE_NEW_CSUM );
276 map.insert(id,(*it).uid());
277
278#if 0
264 KABC::Addressee addressee; 279 KABC::Addressee addressee;
265 res = mConverter->sharpToAddressee( id, mAccess, addressee ); 280 res = mConverter->sharpToAddressee( id, mAccess, addressee );
266 addressee.setUid((*it).uid() ); 281 addressee.setUid((*it).uid() );
267 addressee.setTempSyncStat( SYNC_TEMPSTATE_NEW_CSUM ); 282 addressee.setTempSyncStat( SYNC_TEMPSTATE_NEW_CSUM );
268 changedAddressees.append( addressee ); 283 changedAddressees.append( addressee );
269 res = mAccess->finishEditCard(&id); 284 res = mAccess->finishEditCard(&id);
285#endif
270 if (res == false) 286 if (res == false)
271 qDebug("Unable to append Contact: %s", addressee.formattedName().latin1()); 287 qDebug("Unable to append Contact: %s", addressee.formattedName().latin1());
272 288
273 } 289 }
274 else 290 else
275 { 291 {
276 qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1()); 292 qDebug("Unable to convert Addressee: %s", addressee.formattedName().latin1());
277 mAccess->cancelEditCard(); 293 mAccess->cancelEditCard();
278 } 294 }
279 } 295 }
280 } 296 }
281 } 297 }
282 298
283 } 299 }
300 AddresseeMap::Iterator itam;
301 res;
302 for ( res=mAccess->first(); res == true; res=mAccess->next())
303 {
304 id = mAccess->cardId();
305 int idint = id;
306 itam = map.find( idint );
307 if ( itam != map.end() ) {
308 KABC::Addressee addressee;
309 qDebug("found change %d %s ", idint, itam.data().latin1());
310 res = mConverter->sharpToAddressee( id, mAccess, addressee );
311
312 if ( !addressee.isEmpty() && res )
313 {
314 addressee.setResource( this );
315 addressee.setUid( itam.data() );
316 addressee.setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
317 addressBook()->insertAddressee( addressee , false );
318 }
319 }
320 }
321#if 0
284 KABC::Addressee::List::Iterator it2; 322 KABC::Addressee::List::Iterator it2;
285 for ( it2 = changedAddressees.begin(); it2 != changedAddressees.end(); ++it2 ) 323 for ( it2 = changedAddressees.begin(); it2 != changedAddressees.end(); ++it2 ) {
324 (*it2).computeCsum( "Sharp_DTM" );
325 qDebug("CSUM: %s ",(*it2).getCsum( "Sharp_DTM" ).latin1() );
286 addressBook()->insertAddressee((*it2)); 326 addressBook()->insertAddressee((*it2));
327 }
328#endif
287 //US mAccess->save(); 329 //US mAccess->save();
288 330
289 mDirWatch.startScan(); 331 mDirWatch.startScan();
290 delete ticket; 332 delete ticket;
291 unlock( fileName() ); 333 unlock( fileName() );
292 334
293 return true; 335 return true;
294} 336}
295 337
296bool ResourceSharpDTM::lock( const QString &lockfileName ) 338bool ResourceSharpDTM::lock( const QString &lockfileName )
297{ 339{
298#ifdef ALLOW_LOCKING 340#ifdef ALLOW_LOCKING
299 qDebug("ResourceSharpDTM::lock: %s", fileName().latin1()); 341 qDebug("ResourceSharpDTM::lock: %s", fileName().latin1());
300 342
301 kdDebug(5700) << "ResourceSharpDTM::lock()" << endl; 343 kdDebug(5700) << "ResourceSharpDTM::lock()" << endl;
302 344
303 QString fn = lockfileName; 345 QString fn = lockfileName;
304 346
305 KURL url(fn); 347 KURL url(fn);
306 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); 348 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
307 349
308 kdDebug(5700) << "-- lock name: " << lockName << endl; 350 kdDebug(5700) << "-- lock name: " << lockName << endl;
309 351
310 if (QFile::exists( lockName )) 352 if (QFile::exists( lockName ))
311 { 353 {
312 qDebug("ResourceSharpDTM::lock: lockfile %s already exists. (Delete it before continuing if nobody else is accessing the resourcefile %s)", lockName.latin1(), fileName()); 354 qDebug("ResourceSharpDTM::lock: lockfile %s already exists. (Delete it before continuing if nobody else is accessing the resourcefile %s)", lockName.latin1(), fileName());
313 return false; 355 return false;
314 } 356 }
315 357
316 358
317 QString lockUniqueName; 359 QString lockUniqueName;
318 lockUniqueName = fn + KApplication::randomString( 8 ); 360 lockUniqueName = fn + KApplication::randomString( 8 );
319 361
320 url = lockUniqueName; 362 url = lockUniqueName;
321//US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName ); 363//US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName );
322 mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() ); 364 mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() );
323 kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl; 365 kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl;
324 366
325 // Create unique file 367 // Create unique file
326 QFile file( mLockUniqueName ); 368 QFile file( mLockUniqueName );
327 file.open( IO_WriteOnly ); 369 file.open( IO_WriteOnly );
328 file.close(); 370 file.close();
329 371
330 // Create lock file 372 // Create lock file
331 int result = 0; 373 int result = 0;
332#ifndef _WIN32_ 374#ifndef _WIN32_
333 result = ::link( QFile::encodeName( mLockUniqueName ), 375 result = ::link( QFile::encodeName( mLockUniqueName ),
334 QFile::encodeName( lockName ) ); 376 QFile::encodeName( lockName ) );
335#endif 377#endif
336 if ( result == 0 ) { 378 if ( result == 0 ) {
337 addressBook()->emitAddressBookLocked(); 379 addressBook()->emitAddressBookLocked();
338 return true; 380 return true;
339 } 381 }
340 382
341 // TODO: check stat 383 // TODO: check stat
342 384
343 return false; 385 return false;
344#else 386#else
345 return true; 387 return true;
346#endif 388#endif
347} 389}
348 390
349void ResourceSharpDTM::unlock( const QString &fileName ) 391void ResourceSharpDTM::unlock( const QString &fileName )
350{ 392{
351#ifdef ALLOW_LOCKING 393#ifdef ALLOW_LOCKING
352 qDebug("ResourceSharpDTM::unlock() %s", fileName.latin1()); 394 qDebug("ResourceSharpDTM::unlock() %s", fileName.latin1());
353 395
354 QString fn = fileName; 396 QString fn = fileName;
355 KURL url(fn); 397 KURL url(fn);
356 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); 398 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
357 399
358 QFile::remove( lockName ); 400 QFile::remove( lockName );
359 QFile::remove( mLockUniqueName ); 401 QFile::remove( mLockUniqueName );
360 addressBook()->emitAddressBookUnlocked(); 402 addressBook()->emitAddressBookUnlocked();
361#endif 403#endif
362} 404}
363 405
364void ResourceSharpDTM::setFileName( const QString &newFileName ) 406void ResourceSharpDTM::setFileName( const QString &newFileName )
365{ 407{
366 mDirWatch.stopScan(); 408 mDirWatch.stopScan();
367 mDirWatch.removeFile( fileName() ); 409 mDirWatch.removeFile( fileName() );
368 410
369 Resource::setFileName( newFileName ); 411 Resource::setFileName( newFileName );
370 412
371 mDirWatch.addFile( fileName() ); 413 mDirWatch.addFile( fileName() );
372 mDirWatch.startScan(); 414 mDirWatch.startScan();
373 415
374} 416}
375 417
376void ResourceSharpDTM::fileChanged() 418void ResourceSharpDTM::fileChanged()
377{ 419{
378 // There is a small theoretical chance that KDirWatch calls us before 420 // There is a small theoretical chance that KDirWatch calls us before
379 // we are fully constructed 421 // we are fully constructed
380 if (!addressBook()) 422 if (!addressBook())
381 return; 423 return;
382 424
383 QString text( i18n( "Sharp DTM resource '%1'<br> has been changed by third party.<br>Do you want to reload?").arg( fileName() ) ); 425 QString text( i18n( "Sharp DTM resource '%1'<br> has been changed by third party.<br>Do you want to reload?").arg( fileName() ) );
384 if ( readOnly() || KMessageBox::questionYesNo( 0, text ) == KMessageBox::Yes ) { 426 if ( readOnly() || KMessageBox::questionYesNo( 0, text ) == KMessageBox::Yes ) {
385 load(); 427 load();
386 addressBook()->emitAddressBookChanged(); 428 addressBook()->emitAddressBookChanged();
387 } 429 }
388} 430}
389 431
390void ResourceSharpDTM::removeAddressee( const Addressee &addr ) 432void ResourceSharpDTM::removeAddressee( const Addressee &addr )
391{ 433{
392} 434}
393 435
394void ResourceSharpDTM::cleanUp() 436void ResourceSharpDTM::cleanUp()
395{ 437{
396 unlock( fileName() ); 438 unlock( fileName() );
397} 439}
398 440
399 441
400 442
diff --git a/kabc/plugins/sharpdtm/sharpdtmconverter.cpp b/kabc/plugins/sharpdtm/sharpdtmconverter.cpp
index f3bf2c5..fccf625 100644
--- a/kabc/plugins/sharpdtm/sharpdtmconverter.cpp
+++ b/kabc/plugins/sharpdtm/sharpdtmconverter.cpp
@@ -1,431 +1,442 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> 3 Copyright (c) 2002 Tobias Koenig <tokoe@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#include "kglobal.h" 28#include "kglobal.h"
29#include <qregexp.h> 29#include <qregexp.h>
30 30
31 31
32#include "sharpdtmconverter.h" 32#include "sharpdtmconverter.h"
33 33
34#include <sl/slcategories.h> 34#include <sl/slcategories.h>
35#include <libkdepim/ksyncprofile.h> 35#include <libkdepim/ksyncprofile.h>
36//US #include <qpe/categoryselect.h> 36//US #include <qpe/categoryselect.h>
37 37
38 38
39using namespace KABC; 39using namespace KABC;
40using namespace SlCategory; 40using namespace SlCategory;
41 41
42SharpDTMConverter::SharpDTMConverter() : catDB(0) 42SharpDTMConverter::SharpDTMConverter() : catDB(0)
43{ 43{
44} 44}
45 45
46SharpDTMConverter::~SharpDTMConverter() 46SharpDTMConverter::~SharpDTMConverter()
47{ 47{
48 deinit(); 48 deinit();
49} 49}
50 50
51bool SharpDTMConverter::init() 51bool SharpDTMConverter::init()
52{ 52{
53 catDB = new SlCategory::SlCategories(); 53 catDB = new SlCategory::SlCategories();
54 54
55 if (!catDB) 55 if (!catDB)
56 return false; 56 return false;
57 57
58// catDB->load( categoryFileName() ); 58// catDB->load( categoryFileName() );
59 return true; 59 return true;
60} 60}
61 61
62void SharpDTMConverter::deinit() 62void SharpDTMConverter::deinit()
63{ 63{
64 if (catDB) 64 if (catDB)
65 { 65 {
66 delete catDB; 66 delete catDB;
67 catDB = 0; 67 catDB = 0;
68 } 68 }
69} 69}
70 70
71bool SharpDTMConverter::sharpToAddressee( const CardId &contact, const SlZDataBase* database, Addressee &addr ) 71bool SharpDTMConverter::sharpToAddressee( const CardId &contact, const SlZDataBase* database, Addressee &addr )
72{ 72{
73 SlZDataBase* db = (SlZDataBase*)database; 73 SlZDataBase* db = (SlZDataBase*)database;
74 74
75 // for syncing: we need setting of the two fields 75 // for syncing: we need setting of the two fields
76 addr.setExternalUID( QString::number( contact ) ); 76 addr.setExternalUID( QString::number( contact ) );
77 addr.setOriginalExternalUID( QString::number( contact ) ); 77 addr.setOriginalExternalUID( QString::number( contact ) );
78 addr.setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); 78 addr.setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
79 79
80 80
81 // name 81 // name
82 //qDebug("SharpDTMConverter::sharpToAddressee check if the fileAs transformation works!!"); 82 //qDebug("SharpDTMConverter::sharpToAddressee check if the fileAs transformation works!!");
83 addr.setFormattedName(db->readField(ZdbAdrs::FileAs)); // needs fix 83 addr.setFormattedName(db->readField(ZdbAdrs::FileAs)); // needs fix
84 84
85 addr.setFamilyName( db->readField(ZdbAdrs::LastName) ); 85 addr.setFamilyName( db->readField(ZdbAdrs::LastName) );
86 addr.setGivenName( db->readField(ZdbAdrs::FirstName) ); 86 addr.setGivenName( db->readField(ZdbAdrs::FirstName) );
87 addr.setAdditionalName( db->readField(ZdbAdrs::MiddleName) ); 87 addr.setAdditionalName( db->readField(ZdbAdrs::MiddleName) );
88 addr.setPrefix( db->readField(ZdbAdrs::Title) ); 88 addr.setPrefix( db->readField(ZdbAdrs::Title) );
89 addr.setSuffix( db->readField(ZdbAdrs::Suffix) ); 89 addr.setSuffix( db->readField(ZdbAdrs::Suffix) );
90 90
91 91
92 QString emailstr = db->readField(ZdbAdrs::Emails); 92 QString emailstr = db->readField(ZdbAdrs::Emails);
93 emailstr.replace( QRegExp(","), " " ); 93 emailstr.replace( QRegExp(","), " " );
94 emailstr.replace( QRegExp(";"), " " ); 94 emailstr.replace( QRegExp(";"), " " );
95 emailstr.replace( QRegExp(":"), " " ); 95 emailstr.replace( QRegExp(":"), " " );
96 //qDebug("SharpDTMConverter::sharpToAddressee whats the character to seperate the emailadresses? %s ", emailstr.latin1()); 96 //qDebug("SharpDTMConverter::sharpToAddressee whats the character to seperate the emailadresses? %s ", emailstr.latin1());
97 QStringList emails = QStringList::split(" ", emailstr.simplifyWhiteSpace()); 97 QStringList emails = QStringList::split(" ", emailstr.simplifyWhiteSpace());
98 bool defE = false; 98 bool defE = false;
99 bool found = false; 99 bool found = false;
100 for ( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) { 100 for ( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) {
101 if (found ) 101 if (found )
102 defE = false; 102 defE = false;
103 else 103 else
104 found = defE = ((*it).lower() == db->readField(ZdbAdrs::DefaultEmail).lower()); 104 found = defE = ((*it).lower() == db->readField(ZdbAdrs::DefaultEmail).lower());
105 addr.insertEmail( *it, defE ); 105 addr.insertEmail( *it, defE );
106 } 106 }
107 if ( ! found ) 107 if ( ! found )
108 if (!db->readField(ZdbAdrs::DefaultEmail).isEmpty()) 108 if (!db->readField(ZdbAdrs::DefaultEmail).isEmpty())
109 addr.insertEmail(db->readField(ZdbAdrs::DefaultEmail), true); 109 addr.insertEmail(db->readField(ZdbAdrs::DefaultEmail), true);
110 110
111 // home 111 // home
112 if ((!db->readField(ZdbAdrs::HomeStreet).isEmpty()) || 112 if ((!db->readField(ZdbAdrs::HomeStreet).isEmpty()) ||
113 (!db->readField(ZdbAdrs::HomeCity).isEmpty()) || 113 (!db->readField(ZdbAdrs::HomeCity).isEmpty()) ||
114 (!db->readField(ZdbAdrs::HomeState).isEmpty()) || 114 (!db->readField(ZdbAdrs::HomeState).isEmpty()) ||
115 (!db->readField(ZdbAdrs::HomeZip).isEmpty()) || 115 (!db->readField(ZdbAdrs::HomeZip).isEmpty()) ||
116 (!db->readField(ZdbAdrs::HomeCountry).isEmpty())) 116 (!db->readField(ZdbAdrs::HomeCountry).isEmpty()))
117 { 117 {
118 Address homeaddress; 118 Address homeaddress;
119 homeaddress.setType(Address::Home); 119 homeaddress.setType(Address::Home);
120//US homeaddress.setPostOfficeBox( "" ); 120//US homeaddress.setPostOfficeBox( "" );
121//US homeaddress.setExtended( "" ); 121//US homeaddress.setExtended( "" );
122 homeaddress.setStreet( db->readField(ZdbAdrs::HomeStreet) ); 122 homeaddress.setStreet( db->readField(ZdbAdrs::HomeStreet) );
123 homeaddress.setLocality( db->readField(ZdbAdrs::HomeCity) ); 123 homeaddress.setLocality( db->readField(ZdbAdrs::HomeCity) );
124 homeaddress.setRegion( db->readField(ZdbAdrs::HomeState) ); 124 homeaddress.setRegion( db->readField(ZdbAdrs::HomeState) );
125 homeaddress.setPostalCode( db->readField(ZdbAdrs::HomeZip) ); 125 homeaddress.setPostalCode( db->readField(ZdbAdrs::HomeZip) );
126 homeaddress.setCountry( db->readField(ZdbAdrs::HomeCountry) ); 126 homeaddress.setCountry( db->readField(ZdbAdrs::HomeCountry) );
127 127
128 addr.insertAddress( homeaddress ); 128 addr.insertAddress( homeaddress );
129 } 129 }
130 130
131 if (!db->readField(ZdbAdrs::HomePhone).isEmpty()) 131 if (!db->readField(ZdbAdrs::HomePhone).isEmpty())
132 { 132 {
133 PhoneNumber homephone; 133 PhoneNumber homephone;
134 homephone.setType( PhoneNumber::Home ); 134 homephone.setType( PhoneNumber::Home );
135 homephone.setNumber( db->readField(ZdbAdrs::HomePhone) ); 135 homephone.setNumber( db->readField(ZdbAdrs::HomePhone) );
136 addr.insertPhoneNumber( homephone ); 136 addr.insertPhoneNumber( homephone );
137 } 137 }
138 138
139 if (!db->readField(ZdbAdrs::HomeFax).isEmpty()) 139 if (!db->readField(ZdbAdrs::HomeFax).isEmpty())
140 { 140 {
141 PhoneNumber homefax; 141 PhoneNumber homefax;
142 homefax.setType( PhoneNumber::Home | PhoneNumber::Fax ); 142 homefax.setType( PhoneNumber::Home | PhoneNumber::Fax );
143 homefax.setNumber( db->readField(ZdbAdrs::HomeFax) ); 143 homefax.setNumber( db->readField(ZdbAdrs::HomeFax) );
144 addr.insertPhoneNumber( homefax ); 144 addr.insertPhoneNumber( homefax );
145 } 145 }
146 146
147 if (!db->readField(ZdbAdrs::HomeMobile).isEmpty()) 147 if (!db->readField(ZdbAdrs::HomeMobile).isEmpty())
148 { 148 {
149 PhoneNumber homemobile; 149 PhoneNumber homemobile;
150 homemobile.setType( PhoneNumber::Home | PhoneNumber::Cell ); 150 homemobile.setType( PhoneNumber::Home | PhoneNumber::Cell );
151 homemobile.setNumber( db->readField(ZdbAdrs::HomeMobile) ); 151 homemobile.setNumber( db->readField(ZdbAdrs::HomeMobile) );
152 addr.insertPhoneNumber( homemobile ); 152 addr.insertPhoneNumber( homemobile );
153 } 153 }
154 154
155 addr.setUrl( db->readField(ZdbAdrs::HomeWebPage) ); 155 addr.setUrl( db->readField(ZdbAdrs::HomeWebPage) );
156 156
157 157
158 // business 158 // business
159 if ((!db->readField(ZdbAdrs::BusinessStreet).isEmpty()) || 159 if ((!db->readField(ZdbAdrs::BusinessStreet).isEmpty()) ||
160 (!db->readField(ZdbAdrs::BusinessCity).isEmpty()) || 160 (!db->readField(ZdbAdrs::BusinessCity).isEmpty()) ||
161 (!db->readField(ZdbAdrs::BusinessState).isEmpty()) || 161 (!db->readField(ZdbAdrs::BusinessState).isEmpty()) ||
162 (!db->readField(ZdbAdrs::BusinessZip).isEmpty()) || 162 (!db->readField(ZdbAdrs::BusinessZip).isEmpty()) ||
163 (!db->readField(ZdbAdrs::BusinessCountry).isEmpty())) 163 (!db->readField(ZdbAdrs::BusinessCountry).isEmpty()))
164 { 164 {
165 Address businessaddress; 165 Address businessaddress;
166 businessaddress.setType(Address::Work); 166 businessaddress.setType(Address::Work);
167//US businessaddress.setPostOfficeBox( "" ); 167//US businessaddress.setPostOfficeBox( "" );
168//US businessaddress.setExtended( "" ); 168//US businessaddress.setExtended( "" );
169 businessaddress.setStreet( db->readField(ZdbAdrs::BusinessStreet) ); 169 businessaddress.setStreet( db->readField(ZdbAdrs::BusinessStreet) );
170 businessaddress.setLocality( db->readField(ZdbAdrs::BusinessCity) ); 170 businessaddress.setLocality( db->readField(ZdbAdrs::BusinessCity) );
171 businessaddress.setRegion( db->readField(ZdbAdrs::BusinessState) ); 171 businessaddress.setRegion( db->readField(ZdbAdrs::BusinessState) );
172 businessaddress.setPostalCode( db->readField(ZdbAdrs::BusinessZip) ); 172 businessaddress.setPostalCode( db->readField(ZdbAdrs::BusinessZip) );
173 businessaddress.setCountry( db->readField(ZdbAdrs::BusinessCountry) ); 173 businessaddress.setCountry( db->readField(ZdbAdrs::BusinessCountry) );
174 174
175 addr.insertAddress( businessaddress ); 175 addr.insertAddress( businessaddress );
176 } 176 }
177 177
178 178
179 if (!db->readField(ZdbAdrs::BusinessPhone).isEmpty()) 179 if (!db->readField(ZdbAdrs::BusinessPhone).isEmpty())
180 { 180 {
181 PhoneNumber businessphone; 181 PhoneNumber businessphone;
182 businessphone.setType( PhoneNumber::Work ); 182 businessphone.setType( PhoneNumber::Work );
183 businessphone.setNumber( db->readField(ZdbAdrs::BusinessPhone) ); 183 businessphone.setNumber( db->readField(ZdbAdrs::BusinessPhone) );
184 addr.insertPhoneNumber( businessphone ); 184 addr.insertPhoneNumber( businessphone );
185 } 185 }
186 186
187 if (!db->readField(ZdbAdrs::BusinessFax).isEmpty()) 187 if (!db->readField(ZdbAdrs::BusinessFax).isEmpty())
188 { 188 {
189 PhoneNumber businessfax; 189 PhoneNumber businessfax;
190 businessfax.setType( PhoneNumber::Work | PhoneNumber::Fax ); 190 businessfax.setType( PhoneNumber::Work | PhoneNumber::Fax );
191 businessfax.setNumber( db->readField(ZdbAdrs::BusinessFax) ); 191 businessfax.setNumber( db->readField(ZdbAdrs::BusinessFax) );
192 addr.insertPhoneNumber( businessfax ); 192 addr.insertPhoneNumber( businessfax );
193 } 193 }
194 194
195 if (!db->readField(ZdbAdrs::BusinessMobile).isEmpty()) 195 if (!db->readField(ZdbAdrs::BusinessMobile).isEmpty())
196 { 196 {
197 PhoneNumber businessmobile; 197 PhoneNumber businessmobile;
198 businessmobile.setType( PhoneNumber::Work | PhoneNumber::Cell ); 198 businessmobile.setType( PhoneNumber::Work | PhoneNumber::Cell );
199 businessmobile.setNumber( db->readField(ZdbAdrs::BusinessMobile) ); 199 businessmobile.setNumber( db->readField(ZdbAdrs::BusinessMobile) );
200 addr.insertPhoneNumber( businessmobile ); 200 addr.insertPhoneNumber( businessmobile );
201 } 201 }
202 202
203 if (!db->readField(ZdbAdrs::BusinessPager).isEmpty()) 203 if (!db->readField(ZdbAdrs::BusinessPager).isEmpty())
204 { 204 {
205 PhoneNumber businesspager; 205 PhoneNumber businesspager;
206 businesspager.setType( PhoneNumber::Work | PhoneNumber::Pager ); 206 businesspager.setType( PhoneNumber::Work | PhoneNumber::Pager );
207 businesspager.setNumber( db->readField(ZdbAdrs::BusinessPager) ); 207 businesspager.setNumber( db->readField(ZdbAdrs::BusinessPager) );
208 addr.insertPhoneNumber( businesspager ); 208 addr.insertPhoneNumber( businesspager );
209 } 209 }
210 210
211 addr.setRole( db->readField(ZdbAdrs::JobTitle) ); 211 addr.setRole( db->readField(ZdbAdrs::JobTitle) );
212 addr.setOrganization( db->readField(ZdbAdrs::Company) ); 212 addr.setOrganization( db->readField(ZdbAdrs::Company) );
213 addr.insertCustom( "KADDRESSBOOK", "X-Profession", db->readField(ZdbAdrs::Profession) ); 213 addr.insertCustom( "KADDRESSBOOK", "X-Profession", db->readField(ZdbAdrs::Profession) );
214 addr.insertCustom( "KADDRESSBOOK", "X-AssistantsName", db->readField(ZdbAdrs::Assistant) ); 214 addr.insertCustom( "KADDRESSBOOK", "X-AssistantsName", db->readField(ZdbAdrs::Assistant) );
215 addr.insertCustom( "KADDRESSBOOK", "X-Department", db->readField(ZdbAdrs::Department) ); 215 addr.insertCustom( "KADDRESSBOOK", "X-Department", db->readField(ZdbAdrs::Department) );
216 addr.insertCustom( "KADDRESSBOOK", "X-ManagersName", db->readField(ZdbAdrs::Manager) ); 216 addr.insertCustom( "KADDRESSBOOK", "X-ManagersName", db->readField(ZdbAdrs::Manager) );
217 addr.insertCustom( "KADDRESSBOOK", "X-Office", db->readField(ZdbAdrs::Office) ); 217 addr.insertCustom( "KADDRESSBOOK", "X-Office", db->readField(ZdbAdrs::Office) );
218 218
219 //personal 219 //personal
220 addr.insertCustom( "KADDRESSBOOK", "X-SpousesName", db->readField(ZdbAdrs::Spouse) ); 220 addr.insertCustom( "KADDRESSBOOK", "X-SpousesName", db->readField(ZdbAdrs::Spouse) );
221 221
222 QString gen = db->readField(ZdbAdrs::Gender); 222 QString gen = db->readField(ZdbAdrs::Gender);
223 //qDebug("SharpDTMConverter::sharpToAddressee pleas check that gender works!! : Gender: %s", gen.latin1()); 223 //qDebug("SharpDTMConverter::sharpToAddressee pleas check that gender works!! : Gender: %s", gen.latin1());
224 //qDebug("SharpDTMConverter::sharpToAddressee: may be int db->readUshortField(\"ZdbAdrs::Gender\") is here better suited"); 224 //qDebug("SharpDTMConverter::sharpToAddressee: may be int db->readUshortField(\"ZdbAdrs::Gender\") is here better suited");
225 225
226 if (gen == "male") 226 if (gen == "male")
227 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "male"); 227 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "male");
228 else if (gen == "female") 228 else if (gen == "female")
229 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "female"); 229 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "female");
230 230
231 231
232 QDate ann = KGlobal::locale()->readDate( db->readField(ZdbAdrs::Anniversary) ); 232 QDate ann = KGlobal::locale()->readDate( db->readField(ZdbAdrs::Anniversary) );
233 if (ann.isValid()) { 233 if (ann.isValid()) {
234 QString dt = KGlobal::locale()->formatDate(ann, true, KLocale::ISODate); 234 QString dt = KGlobal::locale()->formatDate(ann, true, KLocale::ISODate);
235 //qDebug("qtopiaToAddressee annyversary found:%s", dt.latin1()); 235 //qDebug("qtopiaToAddressee annyversary found:%s", dt.latin1());
236 addr.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt); 236 addr.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt);
237 } 237 }
238 238
239 239
240 addr.insertCustom( "KADDRESSBOOK", "X-Children", db->readField(ZdbAdrs::Children) ); 240 addr.insertCustom( "KADDRESSBOOK", "X-Children", db->readField(ZdbAdrs::Children) );
241 241
242 242
243 QDate birthd = KGlobal::locale()->readDate( db->readField(ZdbAdrs::Birthday) ); 243 QDate birthd = KGlobal::locale()->readDate( db->readField(ZdbAdrs::Birthday) );
244 //qDebug("birtd %s ", birthd.toString().latin1()); 244 //qDebug("birtd %s ", birthd.toString().latin1());
245 if (birthd.isValid()) 245 if (birthd.isValid())
246 addr.setBirthday( birthd ); 246 addr.setBirthday( birthd );
247 247
248 addr.setNickName( db->readField(ZdbAdrs::Nickname) ); 248 addr.setNickName( db->readField(ZdbAdrs::Nickname) );
249 249
250 // others 250 // others
251 //US I put opies BusinessWebPage into Ka/Pi's notes block, because no other native field is available. 251 //US I put opies BusinessWebPage into Ka/Pi's notes block, because no other native field is available.
252 QString notes = db->readField(ZdbAdrs::Notes); 252 QString notes = db->readField(ZdbAdrs::Notes);
253 //notes += "\nBusinessWebPage: " + db->readField(ZdbAdrs::BusinessWebPage) + "\n"; 253 //notes += "\nBusinessWebPage: " + db->readField(ZdbAdrs::BusinessWebPage) + "\n";
254 if ( addr.url().isEmpty() ) 254 if ( addr.url().isEmpty() )
255 addr.setUrl( db->readField(ZdbAdrs::BusinessWebPage) ); 255 addr.setUrl( db->readField(ZdbAdrs::BusinessWebPage) );
256 addr.setNote( db->readField(ZdbAdrs::Notes) ); 256 addr.setNote( db->readField(ZdbAdrs::Notes) );
257 257
258 258
259 259
260//US QString groups() const { return find( Qtopia::Groups ); } 260//US QString groups() const { return find( Qtopia::Groups ); }
261//US QStringList groupList() const; 261//US QStringList groupList() const;
262 262
263 //qDebug("SharpDTMConverter::sharpToAddressee please check that the categories will be converted" ); 263 //qDebug("SharpDTMConverter::sharpToAddressee please check that the categories will be converted" );
264 QArray<int> catArray = db->readCategories(); 264 QArray<int> catArray = db->readCategories();
265 QString cat; 265 QString cat;
266 266
267 for ( unsigned int i=0; i < catArray.size(); i++ ) { 267 for ( unsigned int i=0; i < catArray.size(); i++ ) {
268 cat = catDB->label(catArray[i]); 268 cat = catDB->label(catArray[i]);
269 if ( cat.isEmpty() ) 269 if ( cat.isEmpty() )
270 addr.insertCategory(QString::number(catArray[i])); 270 addr.insertCategory(QString::number(catArray[i]));
271 else 271 else
272 addr.insertCategory( cat ); 272 addr.insertCategory( cat );
273 } 273 }
274 274
275 return true; 275 return true;
276} 276}
277 277
278bool SharpDTMConverter::addresseeToSharp( const Addressee &addr, SlZDataBase* database , const CardId &contact ) 278bool SharpDTMConverter::addresseeToSharp( const Addressee &addr, SlZDataBase* database , const CardId &contact )
279{ 279{
280 bool cellHome = false, cellWork = false; 280 bool cellHome = false, cellWork = false;
281 // name 281 // name
282 database->writeField(ZdbAdrs::LastName, addr.familyName()); 282 database->writeField(ZdbAdrs::LastName, addr.familyName());
283 database->writeField(ZdbAdrs::FirstName, addr.givenName()); 283 database->writeField(ZdbAdrs::FirstName, addr.givenName());
284 database->writeField(ZdbAdrs::MiddleName, addr.additionalName()); 284 database->writeField(ZdbAdrs::MiddleName, addr.additionalName());
285 database->writeField(ZdbAdrs::Title, addr.prefix()); 285 database->writeField(ZdbAdrs::Title, addr.prefix());
286 database->writeField(ZdbAdrs::Suffix, addr.suffix()); 286 database->writeField(ZdbAdrs::Suffix, addr.suffix());
287 287
288 //qDebug("SharpDTMConverter::addresseeToSharp check if the fileAs transformation works!!\n%s",addr.formattedName().latin1() ); 288 //qDebug("SharpDTMConverter::addresseeToSharp check if the fileAs transformation works!!\n%s",addr.formattedName().latin1() );
289 database->writeField(ZdbAdrs::FileAs, addr.formattedName()); 289 QString formattedName = addr.formattedName();
290 database->writeField(ZdbAdrs::FullName, addr.formattedName()); 290 if ( formattedName.isEmpty() ) {
291 if ( !addr.familyName().isEmpty() ) {
292 formattedName = addr.familyName();
293 if ( !addr.givenName().isEmpty() ) {
294 formattedName += ", ";
295 formattedName += addr.givenName();
296 }
297 } else
298 formattedName = addr.givenName();
299 }
300 database->writeField(ZdbAdrs::FileAs, formattedName);
301 database->writeField(ZdbAdrs::FullName, formattedName);
291 302
292 // email 303 // email
293 //qDebug("SharpDTMConverter::addresseeToSharp check which seperator we need here for the emails!!"); 304 //qDebug("SharpDTMConverter::addresseeToSharp check which seperator we need here for the emails!!");
294 //qDebug("SharpDTMConverter::addresseeToSharp its probably the same from sharpToAddressee"); 305 //qDebug("SharpDTMConverter::addresseeToSharp its probably the same from sharpToAddressee");
295 QString emails = addr.emails().join(" "); 306 QString emails = addr.emails().join(" ");
296 database->writeField(ZdbAdrs::Emails, emails ); 307 database->writeField(ZdbAdrs::Emails, emails );
297 308
298 database->writeField(ZdbAdrs::DefaultEmail, addr.preferredEmail() ); 309 database->writeField(ZdbAdrs::DefaultEmail, addr.preferredEmail() );
299 310
300 311
301 // home 312 // home
302 const Address homeaddress = addr.address(Address::Home); 313 const Address homeaddress = addr.address(Address::Home);
303 if (!homeaddress.isEmpty()) { 314 if (!homeaddress.isEmpty()) {
304 database->writeField(ZdbAdrs::HomeStreet, homeaddress.street()); 315 database->writeField(ZdbAdrs::HomeStreet, homeaddress.street());
305 database->writeField(ZdbAdrs::HomeCity, homeaddress.locality()); 316 database->writeField(ZdbAdrs::HomeCity, homeaddress.locality());
306 database->writeField(ZdbAdrs::HomeState, homeaddress.region()); 317 database->writeField(ZdbAdrs::HomeState, homeaddress.region());
307 database->writeField(ZdbAdrs::HomeZip, homeaddress.postalCode()); 318 database->writeField(ZdbAdrs::HomeZip, homeaddress.postalCode());
308 database->writeField(ZdbAdrs::HomeCountry, homeaddress.country()); 319 database->writeField(ZdbAdrs::HomeCountry, homeaddress.country());
309 } 320 }
310 321
311 PhoneNumber homephone = addr.phoneNumber( PhoneNumber::Home ); 322 PhoneNumber homephone = addr.phoneNumber( PhoneNumber::Home );
312 if (!homephone.number().isEmpty()) 323 if (!homephone.number().isEmpty())
313 database->writeField(ZdbAdrs::HomePhone, homephone.number()); 324 database->writeField(ZdbAdrs::HomePhone, homephone.number());
314 325
315 PhoneNumber homefax = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ); 326 PhoneNumber homefax = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax );
316 if (!homefax.number().isEmpty()) 327 if (!homefax.number().isEmpty())
317 database->writeField(ZdbAdrs::HomeFax, homefax.number()); 328 database->writeField(ZdbAdrs::HomeFax, homefax.number());
318 329
319 PhoneNumber homemobile = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Cell ); 330 PhoneNumber homemobile = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Cell );
320 if (!homemobile.number().isEmpty()) { 331 if (!homemobile.number().isEmpty()) {
321 database->writeField(ZdbAdrs::HomeMobile, homemobile.number()); 332 database->writeField(ZdbAdrs::HomeMobile, homemobile.number());
322 cellHome = true; 333 cellHome = true;
323 } 334 }
324 335
325 database->writeField(ZdbAdrs::HomeWebPage, addr.url().url()); 336 database->writeField(ZdbAdrs::HomeWebPage, addr.url().url());
326 337
327 338
328 // business 339 // business
329 const Address businessaddress = addr.address(Address::Work); 340 const Address businessaddress = addr.address(Address::Work);
330 if (!businessaddress.isEmpty()) { 341 if (!businessaddress.isEmpty()) {
331 database->writeField(ZdbAdrs::BusinessStreet, businessaddress.street()); 342 database->writeField(ZdbAdrs::BusinessStreet, businessaddress.street());
332 database->writeField(ZdbAdrs::BusinessCity, businessaddress.locality()); 343 database->writeField(ZdbAdrs::BusinessCity, businessaddress.locality());
333 database->writeField(ZdbAdrs::BusinessState, businessaddress.region()); 344 database->writeField(ZdbAdrs::BusinessState, businessaddress.region());
334 database->writeField(ZdbAdrs::BusinessZip, businessaddress.postalCode()); 345 database->writeField(ZdbAdrs::BusinessZip, businessaddress.postalCode());
335 database->writeField(ZdbAdrs::BusinessCountry, businessaddress.country()); 346 database->writeField(ZdbAdrs::BusinessCountry, businessaddress.country());
336 } 347 }
337 348
338 PhoneNumber businessphone = addr.phoneNumber( PhoneNumber::Work ); 349 PhoneNumber businessphone = addr.phoneNumber( PhoneNumber::Work );
339 if (!businessphone.number().isEmpty()) 350 if (!businessphone.number().isEmpty())
340 database->writeField(ZdbAdrs::BusinessPhone, businessphone.number()); 351 database->writeField(ZdbAdrs::BusinessPhone, businessphone.number());
341 352
342 PhoneNumber businessfax = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ); 353 PhoneNumber businessfax = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax );
343 if (!businessfax.number().isEmpty()) 354 if (!businessfax.number().isEmpty())
344 database->writeField(ZdbAdrs::BusinessFax, businessfax.number()); 355 database->writeField(ZdbAdrs::BusinessFax, businessfax.number());
345 356
346 PhoneNumber businessmobile = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Cell ); 357 PhoneNumber businessmobile = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Cell );
347 if (!businessmobile.number().isEmpty()) { 358 if (!businessmobile.number().isEmpty()) {
348 cellWork = true; 359 cellWork = true;
349 database->writeField(ZdbAdrs::BusinessMobile, businessmobile.number()); 360 database->writeField(ZdbAdrs::BusinessMobile, businessmobile.number());
350 } 361 }
351 PhoneNumber mobile = addr.phoneNumber( PhoneNumber::Cell ); 362 PhoneNumber mobile = addr.phoneNumber( PhoneNumber::Cell );
352 if (!businessmobile.number().isEmpty()) { 363 if (! mobile.number().isEmpty()) {
353 if ( ! cellHome ) 364 if ( ! cellHome )
354 database->writeField(ZdbAdrs::HomeMobile, mobile.number()); 365 database->writeField(ZdbAdrs::HomeMobile, mobile.number());
355 else if (! cellWork ) 366 else if (! cellWork )
356 database->writeField(ZdbAdrs::BusinessMobile, mobile.number()); 367 database->writeField(ZdbAdrs::BusinessMobile, mobile.number());
357 } 368 }
358 369
359 PhoneNumber businesspager = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Pager ); 370 PhoneNumber businesspager = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Pager );
360 if (!businesspager.number().isEmpty()) 371 if (!businesspager.number().isEmpty())
361 database->writeField(ZdbAdrs::BusinessPager, businesspager.number()); 372 database->writeField(ZdbAdrs::BusinessPager, businesspager.number());
362 373
363 database->writeField(ZdbAdrs::JobTitle, addr.role()); 374 database->writeField(ZdbAdrs::JobTitle, addr.role());
364 database->writeField(ZdbAdrs::Company, addr.organization()); 375 database->writeField(ZdbAdrs::Company, addr.organization());
365 376
366 database->writeField(ZdbAdrs::Profession, addr.custom( "KADDRESSBOOK", "X-Profession" )); 377 database->writeField(ZdbAdrs::Profession, addr.custom( "KADDRESSBOOK", "X-Profession" ));
367 database->writeField(ZdbAdrs::Assistant, addr.custom( "KADDRESSBOOK", "X-AssistantsName" )); 378 database->writeField(ZdbAdrs::Assistant, addr.custom( "KADDRESSBOOK", "X-AssistantsName" ));
368 database->writeField(ZdbAdrs::Department, addr.custom( "KADDRESSBOOK", "X-Department" )); 379 database->writeField(ZdbAdrs::Department, addr.custom( "KADDRESSBOOK", "X-Department" ));
369 database->writeField(ZdbAdrs::Manager, addr.custom( "KADDRESSBOOK", "X-ManagersName" )); 380 database->writeField(ZdbAdrs::Manager, addr.custom( "KADDRESSBOOK", "X-ManagersName" ));
370 database->writeField(ZdbAdrs::Office, addr.custom( "KADDRESSBOOK", "X-Office" )); 381 database->writeField(ZdbAdrs::Office, addr.custom( "KADDRESSBOOK", "X-Office" ));
371 382
372 //personal 383 //personal
373 database->writeField(ZdbAdrs::Spouse, addr.custom( "KADDRESSBOOK", "X-Spouse" )); 384 database->writeField(ZdbAdrs::Spouse, addr.custom( "KADDRESSBOOK", "X-Spouse" ));
374 385
375 QString gt = addr.custom( "KADDRESSBOOK", "X-Gender" ); 386 QString gt = addr.custom( "KADDRESSBOOK", "X-Gender" );
376 //qDebug("SharpDTMConverter::addresseeToSharp please check that gender works!! : Gender: %s", gt.latin1()); 387 //qDebug("SharpDTMConverter::addresseeToSharp please check that gender works!! : Gender: %s", gt.latin1());
377 //qDebug("SharpDTMConverter::addresseeToSharp: may be writeField(\"ZdbAdrs::Gender\", ushort) is here better suited?"); 388 //qDebug("SharpDTMConverter::addresseeToSharp: may be writeField(\"ZdbAdrs::Gender\", ushort) is here better suited?");
378 //qDebug("SharpDTMConverter::addresseeToSharp: check also the reverse functionality in sharpToAddressee"); 389 //qDebug("SharpDTMConverter::addresseeToSharp: check also the reverse functionality in sharpToAddressee");
379 if (gt == "male") 390 if (gt == "male")
380 database->writeField(ZdbAdrs::Gender, "male"); 391 database->writeField(ZdbAdrs::Gender, "male");
381 else if (gt == "female") 392 else if (gt == "female")
382 database->writeField(ZdbAdrs::Gender, "female"); 393 database->writeField(ZdbAdrs::Gender, "female");
383 else 394 else
384 database->writeField(ZdbAdrs::Gender, ""); 395 database->writeField(ZdbAdrs::Gender, "");
385 396
386 397
387 QDate dt = KGlobal::locale()->readDate( 398 QDate dt = KGlobal::locale()->readDate(
388 addr.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); // = Qt::ISODate 399 addr.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); // = Qt::ISODate
389 if ( dt.isValid() ) { 400 if ( dt.isValid() ) {
390 QString dateS = KGlobal::locale()->formatDate(dt, true ); 401 QString dateS = KGlobal::locale()->formatDate(dt, true );
391 database->writeField(ZdbAdrs::Anniversary, dateS ); 402 database->writeField(ZdbAdrs::Anniversary, dateS );
392 } 403 }
393 database->writeField(ZdbAdrs::Children, addr.custom( "KADDRESSBOOK", "X-Children" )); 404 database->writeField(ZdbAdrs::Children, addr.custom( "KADDRESSBOOK", "X-Children" ));
394 dt = addr.birthday().date(); 405 dt = addr.birthday().date();
395 if ( dt.isValid() ) { 406 if ( dt.isValid() ) {
396 QString dateS = KGlobal::locale()->formatDate(dt, true ); 407 QString dateS = KGlobal::locale()->formatDate(dt, true );
397 database->writeField(ZdbAdrs::Birthday, dateS); 408 database->writeField(ZdbAdrs::Birthday, dateS);
398 } 409 }
399 database->writeField(ZdbAdrs::Nickname, addr.nickName()); 410 database->writeField(ZdbAdrs::Nickname, addr.nickName());
400 411
401 // other 412 // other
402 database->writeField(ZdbAdrs::Notes, addr.note()); 413 database->writeField(ZdbAdrs::Notes, addr.note());
403 414
404//US QString groups() const { return find( Qtopia::Groups ); } 415//US QString groups() const { return find( Qtopia::Groups ); }
405//US QStringList groupList() const; 416//US QStringList groupList() const;
406 417
407 418
408 //qDebug("SharpDTMConverter::addresseeToSharp please check if category transformation works"); 419 //qDebug("SharpDTMConverter::addresseeToSharp please check if category transformation works");
409 420
410 QStringList cats = addr.categories(); 421 QStringList cats = addr.categories();
411 int ii; 422 int ii;
412 for ( ii = 0; ii < cats.count() ;++ii ) { 423 for ( ii = 0; ii < cats.count() ;++ii ) {
413 if ( !catDB->exists( cats[ii] )) 424 if ( !catDB->exists( cats[ii] ))
414 catDB->addCategory(cats[ii]); 425 catDB->addCategory(cats[ii]);
415 } 426 }
416 QArray<int> iar; 427 QArray<int> iar;
417 if ( !cats.isEmpty() ) { 428 if ( !cats.isEmpty() ) {
418 QArray<int> iar = catDB->ids(cats); 429 QArray<int> iar = catDB->ids(cats);
419 qDebug("***cat count is %d ", iar.count()); 430 qDebug("***cat count is %d ", iar.count());
420 database->updateCategories(contact, iar); 431 database->updateCategories(contact, iar);
421 } 432 }
422 433
423 return true; 434 return true;
424} 435}
425 436
426QDate SharpDTMConverter::convertDate( QString s) 437QDate SharpDTMConverter::convertDate( QString s)
427{ 438{
428 QDate dt = KGlobal::locale()->readDate( s ); 439 QDate dt = KGlobal::locale()->readDate( s );
429 return dt; 440 return dt;
430 return QDate (); 441 return QDate ();
431} 442}
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index c1ead9d..c2f031a 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -1,3067 +1,3072 @@
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/* 24/*
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 <qprogressbar.h> 36#include <qprogressbar.h>
37 37
38#ifndef KAB_EMBEDDED 38#ifndef KAB_EMBEDDED
39#include <qclipboard.h> 39#include <qclipboard.h>
40#include <qdir.h> 40#include <qdir.h>
41#include <qfile.h> 41#include <qfile.h>
42#include <qapplicaton.h> 42#include <qapplicaton.h>
43#include <qprogressbar.h> 43#include <qprogressbar.h>
44#include <qlayout.h> 44#include <qlayout.h>
45#include <qregexp.h> 45#include <qregexp.h>
46#include <qvbox.h> 46#include <qvbox.h>
47#include <kabc/addresseelist.h> 47#include <kabc/addresseelist.h>
48#include <kabc/errorhandler.h> 48#include <kabc/errorhandler.h>
49#include <kabc/resource.h> 49#include <kabc/resource.h>
50#include <kabc/vcardconverter.h> 50#include <kabc/vcardconverter.h>
51#include <kapplication.h> 51#include <kapplication.h>
52#include <kactionclasses.h> 52#include <kactionclasses.h>
53#include <kcmultidialog.h> 53#include <kcmultidialog.h>
54#include <kdebug.h> 54#include <kdebug.h>
55#include <kdeversion.h> 55#include <kdeversion.h>
56#include <kkeydialog.h> 56#include <kkeydialog.h>
57#include <kmessagebox.h> 57#include <kmessagebox.h>
58#include <kprinter.h> 58#include <kprinter.h>
59#include <kprotocolinfo.h> 59#include <kprotocolinfo.h>
60#include <kresources/selectdialog.h> 60#include <kresources/selectdialog.h>
61#include <kstandarddirs.h> 61#include <kstandarddirs.h>
62#include <ktempfile.h> 62#include <ktempfile.h>
63#include <kxmlguiclient.h> 63#include <kxmlguiclient.h>
64#include <kaboutdata.h> 64#include <kaboutdata.h>
65#include <libkdepim/categoryselectdialog.h> 65#include <libkdepim/categoryselectdialog.h>
66 66
67#include "addresseeutil.h" 67#include "addresseeutil.h"
68#include "addresseeeditordialog.h" 68#include "addresseeeditordialog.h"
69#include "extensionmanager.h" 69#include "extensionmanager.h"
70#include "kstdaction.h" 70#include "kstdaction.h"
71#include "kaddressbookservice.h" 71#include "kaddressbookservice.h"
72#include "ldapsearchdialog.h" 72#include "ldapsearchdialog.h"
73#include "printing/printingwizard.h" 73#include "printing/printingwizard.h"
74#else // KAB_EMBEDDED 74#else // KAB_EMBEDDED
75 75
76#include <kapplication.h> 76#include <kapplication.h>
77#include "KDGanttMinimizeSplitter.h" 77#include "KDGanttMinimizeSplitter.h"
78#include "kaddressbookmain.h" 78#include "kaddressbookmain.h"
79#include "kactioncollection.h" 79#include "kactioncollection.h"
80#include "addresseedialog.h" 80#include "addresseedialog.h"
81//US 81//US
82#include <addresseeview.h> 82#include <addresseeview.h>
83 83
84#include <qapp.h> 84#include <qapp.h>
85#include <qmenubar.h> 85#include <qmenubar.h>
86//#include <qtoolbar.h> 86//#include <qtoolbar.h>
87#include <qmessagebox.h> 87#include <qmessagebox.h>
88#include <kdebug.h> 88#include <kdebug.h>
89#include <kiconloader.h> // needed for SmallIcon 89#include <kiconloader.h> // needed for SmallIcon
90#include <kresources/kcmkresources.h> 90#include <kresources/kcmkresources.h>
91#include <ktoolbar.h> 91#include <ktoolbar.h>
92 92
93 93
94//#include <qlabel.h> 94//#include <qlabel.h>
95 95
96 96
97#ifndef DESKTOP_VERSION 97#ifndef DESKTOP_VERSION
98#include <qpe/ir.h> 98#include <qpe/ir.h>
99#include <qpe/qpemenubar.h> 99#include <qpe/qpemenubar.h>
100#include <qtopia/qcopenvelope_qws.h> 100#include <qtopia/qcopenvelope_qws.h>
101#else 101#else
102 102
103#include <qmenubar.h> 103#include <qmenubar.h>
104#endif 104#endif
105 105
106#endif // KAB_EMBEDDED 106#endif // KAB_EMBEDDED
107#include "kcmconfigs/kcmkabconfig.h" 107#include "kcmconfigs/kcmkabconfig.h"
108#include "kcmconfigs/kcmkdepimconfig.h" 108#include "kcmconfigs/kcmkdepimconfig.h"
109#include "kpimglobalprefs.h" 109#include "kpimglobalprefs.h"
110#include "externalapphandler.h" 110#include "externalapphandler.h"
111 111
112 112
113#include <kresources/selectdialog.h> 113#include <kresources/selectdialog.h>
114#include <kmessagebox.h> 114#include <kmessagebox.h>
115 115
116#include <picture.h> 116#include <picture.h>
117#include <resource.h> 117#include <resource.h>
118 118
119//US#include <qsplitter.h> 119//US#include <qsplitter.h>
120#include <qmap.h> 120#include <qmap.h>
121#include <qdir.h> 121#include <qdir.h>
122#include <qfile.h> 122#include <qfile.h>
123#include <qvbox.h> 123#include <qvbox.h>
124#include <qlayout.h> 124#include <qlayout.h>
125#include <qclipboard.h> 125#include <qclipboard.h>
126#include <qtextstream.h> 126#include <qtextstream.h>
127 127
128#include <libkdepim/categoryselectdialog.h> 128#include <libkdepim/categoryselectdialog.h>
129#include <kabc/vcardconverter.h> 129#include <kabc/vcardconverter.h>
130 130
131 131
132#include "addresseeutil.h" 132#include "addresseeutil.h"
133#include "undocmds.h" 133#include "undocmds.h"
134#include "addresseeeditordialog.h" 134#include "addresseeeditordialog.h"
135#include "viewmanager.h" 135#include "viewmanager.h"
136#include "details/detailsviewcontainer.h" 136#include "details/detailsviewcontainer.h"
137#include "kabprefs.h" 137#include "kabprefs.h"
138#include "xxportmanager.h" 138#include "xxportmanager.h"
139#include "incsearchwidget.h" 139#include "incsearchwidget.h"
140#include "jumpbuttonbar.h" 140#include "jumpbuttonbar.h"
141#include "extensionmanager.h" 141#include "extensionmanager.h"
142#include "addresseeconfig.h" 142#include "addresseeconfig.h"
143#include <kcmultidialog.h> 143#include <kcmultidialog.h>
144 144
145#ifdef _WIN32_ 145#ifdef _WIN32_
146 146
147#include "kaimportoldialog.h" 147#include "kaimportoldialog.h"
148#else 148#else
149#include <unistd.h> 149#include <unistd.h>
150#endif 150#endif
151// sync includes 151// sync includes
152#include <libkdepim/ksyncprofile.h> 152#include <libkdepim/ksyncprofile.h>
153#include <libkdepim/ksyncprefsdialog.h> 153#include <libkdepim/ksyncprefsdialog.h>
154 154
155 155
156bool pasteWithNewUid = true; 156bool pasteWithNewUid = true;
157 157
158#ifdef KAB_EMBEDDED 158#ifdef KAB_EMBEDDED
159KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name ) 159KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name )
160 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ), 160 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ),
161 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/ 161 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/
162 mReadWrite( readWrite ), mModified( false ), mMainWindow(client) 162 mReadWrite( readWrite ), mModified( false ), mMainWindow(client)
163#else //KAB_EMBEDDED 163#else //KAB_EMBEDDED
164KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name ) 164KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name )
165 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ), 165 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ),
166 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ), 166 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ),
167 mReadWrite( readWrite ), mModified( false ) 167 mReadWrite( readWrite ), mModified( false )
168#endif //KAB_EMBEDDED 168#endif //KAB_EMBEDDED
169{ 169{
170 170
171 mBlockSaveFlag = false; 171 mBlockSaveFlag = false;
172 mExtensionBarSplitter = 0; 172 mExtensionBarSplitter = 0;
173 mIsPart = !parent->inherits( "KAddressBookMain" ); 173 mIsPart = !parent->inherits( "KAddressBookMain" );
174 174
175 mAddressBook = KABC::StdAddressBook::self(); 175 mAddressBook = KABC::StdAddressBook::self();
176 KABC::StdAddressBook::setAutomaticSave( false ); 176 KABC::StdAddressBook::setAutomaticSave( false );
177 177
178#ifndef KAB_EMBEDDED 178#ifndef KAB_EMBEDDED
179 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler ); 179 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler );
180#endif //KAB_EMBEDDED 180#endif //KAB_EMBEDDED
181 181
182 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ), 182 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ),
183 SLOT( addressBookChanged() ) ); 183 SLOT( addressBookChanged() ) );
184 184
185#if 0 185#if 0
186 // LP moved to addressbook init method 186 // LP moved to addressbook init method
187 mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization, 187 mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization,
188 "X-Department", "KADDRESSBOOK" ); 188 "X-Department", "KADDRESSBOOK" );
189 mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization, 189 mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization,
190 "X-Profession", "KADDRESSBOOK" ); 190 "X-Profession", "KADDRESSBOOK" );
191 mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization, 191 mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization,
192 "X-AssistantsName", "KADDRESSBOOK" ); 192 "X-AssistantsName", "KADDRESSBOOK" );
193 mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization, 193 mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization,
194 "X-ManagersName", "KADDRESSBOOK" ); 194 "X-ManagersName", "KADDRESSBOOK" );
195 mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal, 195 mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal,
196 "X-SpousesName", "KADDRESSBOOK" ); 196 "X-SpousesName", "KADDRESSBOOK" );
197 mAddressBook->addCustomField( i18n( "Office" ), KABC::Field::Personal, 197 mAddressBook->addCustomField( i18n( "Office" ), KABC::Field::Personal,
198 "X-Office", "KADDRESSBOOK" ); 198 "X-Office", "KADDRESSBOOK" );
199 mAddressBook->addCustomField( i18n( "IM Address" ), KABC::Field::Personal, 199 mAddressBook->addCustomField( i18n( "IM Address" ), KABC::Field::Personal,
200 "X-IMAddress", "KADDRESSBOOK" ); 200 "X-IMAddress", "KADDRESSBOOK" );
201 mAddressBook->addCustomField( i18n( "Anniversary" ), KABC::Field::Personal, 201 mAddressBook->addCustomField( i18n( "Anniversary" ), KABC::Field::Personal,
202 "X-Anniversary", "KADDRESSBOOK" ); 202 "X-Anniversary", "KADDRESSBOOK" );
203 203
204 //US added this field to become compatible with Opie/qtopia addressbook 204 //US added this field to become compatible with Opie/qtopia addressbook
205 // values can be "female" or "male" or "". An empty field represents undefined. 205 // values can be "female" or "male" or "". An empty field represents undefined.
206 mAddressBook->addCustomField( i18n( "Gender" ), KABC::Field::Personal, 206 mAddressBook->addCustomField( i18n( "Gender" ), KABC::Field::Personal,
207 "X-Gender", "KADDRESSBOOK" ); 207 "X-Gender", "KADDRESSBOOK" );
208 mAddressBook->addCustomField( i18n( "Children" ), KABC::Field::Personal, 208 mAddressBook->addCustomField( i18n( "Children" ), KABC::Field::Personal,
209 "X-Children", "KADDRESSBOOK" ); 209 "X-Children", "KADDRESSBOOK" );
210 mAddressBook->addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal, 210 mAddressBook->addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal,
211 "X-FreeBusyUrl", "KADDRESSBOOK" ); 211 "X-FreeBusyUrl", "KADDRESSBOOK" );
212#endif 212#endif
213 initGUI(); 213 initGUI();
214 214
215 mIncSearchWidget->setFocus(); 215 mIncSearchWidget->setFocus();
216 216
217 217
218 connect( mViewManager, SIGNAL( selected( const QString& ) ), 218 connect( mViewManager, SIGNAL( selected( const QString& ) ),
219 SLOT( setContactSelected( const QString& ) ) ); 219 SLOT( setContactSelected( const QString& ) ) );
220 connect( mViewManager, SIGNAL( executed( const QString& ) ), 220 connect( mViewManager, SIGNAL( executed( const QString& ) ),
221 SLOT( executeContact( const QString& ) ) ); 221 SLOT( executeContact( const QString& ) ) );
222 222
223 connect( mViewManager, SIGNAL( deleteRequest( ) ), 223 connect( mViewManager, SIGNAL( deleteRequest( ) ),
224 SLOT( deleteContacts( ) ) ); 224 SLOT( deleteContacts( ) ) );
225 connect( mViewManager, SIGNAL( modified() ), 225 connect( mViewManager, SIGNAL( modified() ),
226 SLOT( setModified() ) ); 226 SLOT( setModified() ) );
227 227
228 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) ); 228 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) );
229 connect( mExtensionManager, SIGNAL( changedActiveExtension( int ) ), this, SLOT( extensionChanged( int ) ) ); 229 connect( mExtensionManager, SIGNAL( changedActiveExtension( int ) ), this, SLOT( extensionChanged( int ) ) );
230 230
231 connect( mXXPortManager, SIGNAL( modified() ), 231 connect( mXXPortManager, SIGNAL( modified() ),
232 SLOT( setModified() ) ); 232 SLOT( setModified() ) );
233 233
234 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ), 234 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ),
235 SLOT( incrementalSearch( const QString& ) ) ); 235 SLOT( incrementalSearch( const QString& ) ) );
236 connect( mIncSearchWidget, SIGNAL( fieldChanged() ), 236 connect( mIncSearchWidget, SIGNAL( fieldChanged() ),
237 mJumpButtonBar, SLOT( recreateButtons() ) ); 237 mJumpButtonBar, SLOT( recreateButtons() ) );
238 238
239 connect( mDetails, SIGNAL( sendEmail( const QString& ) ), 239 connect( mDetails, SIGNAL( sendEmail( const QString& ) ),
240 SLOT( sendMail( const QString& ) ) ); 240 SLOT( sendMail( const QString& ) ) );
241 241
242 242
243 connect( ExternalAppHandler::instance(), SIGNAL (requestForNameEmailUidList(const QString&, const QString&)),this, SLOT(requestForNameEmailUidList(const QString&, const QString&))); 243 connect( ExternalAppHandler::instance(), SIGNAL (requestForNameEmailUidList(const QString&, const QString&)),this, SLOT(requestForNameEmailUidList(const QString&, const QString&)));
244 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&))); 244 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&)));
245 245
246 246
247#ifndef KAB_EMBEDDED 247#ifndef KAB_EMBEDDED
248 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ), 248 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ),
249 mXXPortManager, SLOT( importVCard( const KURL& ) ) ); 249 mXXPortManager, SLOT( importVCard( const KURL& ) ) );
250 250
251 connect( mDetails, SIGNAL( browse( const QString& ) ), 251 connect( mDetails, SIGNAL( browse( const QString& ) ),
252 SLOT( browse( const QString& ) ) ); 252 SLOT( browse( const QString& ) ) );
253 253
254 254
255 mAddressBookService = new KAddressBookService( this ); 255 mAddressBookService = new KAddressBookService( this );
256 256
257#endif //KAB_EMBEDDED 257#endif //KAB_EMBEDDED
258 mEditorDialog = 0; 258 mEditorDialog = 0;
259 createAddresseeEditorDialog( this ); 259 createAddresseeEditorDialog( this );
260 setModified( false ); 260 setModified( false );
261} 261}
262 262
263KABCore::~KABCore() 263KABCore::~KABCore()
264{ 264{
265 // save(); 265 // save();
266 //saveSettings(); 266 //saveSettings();
267 //KABPrefs::instance()->writeConfig(); 267 //KABPrefs::instance()->writeConfig();
268 delete AddresseeConfig::instance(); 268 delete AddresseeConfig::instance();
269 mAddressBook = 0; 269 mAddressBook = 0;
270 KABC::StdAddressBook::close(); 270 KABC::StdAddressBook::close();
271} 271}
272 272
273void KABCore::restoreSettings() 273void KABCore::restoreSettings()
274{ 274{
275 mMultipleViewsAtOnce = KABPrefs::instance()->mMultipleViewsAtOnce; 275 mMultipleViewsAtOnce = KABPrefs::instance()->mMultipleViewsAtOnce;
276 276
277 bool state; 277 bool state;
278 278
279 if (mMultipleViewsAtOnce) 279 if (mMultipleViewsAtOnce)
280 state = KABPrefs::instance()->mDetailsPageVisible; 280 state = KABPrefs::instance()->mDetailsPageVisible;
281 else 281 else
282 state = false; 282 state = false;
283 283
284 mActionDetails->setChecked( state ); 284 mActionDetails->setChecked( state );
285 setDetailsVisible( state ); 285 setDetailsVisible( state );
286 286
287 state = KABPrefs::instance()->mJumpButtonBarVisible; 287 state = KABPrefs::instance()->mJumpButtonBarVisible;
288 288
289 mActionJumpBar->setChecked( state ); 289 mActionJumpBar->setChecked( state );
290 setJumpButtonBarVisible( state ); 290 setJumpButtonBarVisible( state );
291/*US 291/*US
292 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter; 292 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter;
293 if ( splitterSize.count() == 0 ) { 293 if ( splitterSize.count() == 0 ) {
294 splitterSize.append( width() / 2 ); 294 splitterSize.append( width() / 2 );
295 splitterSize.append( width() / 2 ); 295 splitterSize.append( width() / 2 );
296 } 296 }
297 mMiniSplitter->setSizes( splitterSize ); 297 mMiniSplitter->setSizes( splitterSize );
298 if ( mExtensionBarSplitter ) { 298 if ( mExtensionBarSplitter ) {
299 splitterSize = KABPrefs::instance()->mExtensionsSplitter; 299 splitterSize = KABPrefs::instance()->mExtensionsSplitter;
300 if ( splitterSize.count() == 0 ) { 300 if ( splitterSize.count() == 0 ) {
301 splitterSize.append( width() / 2 ); 301 splitterSize.append( width() / 2 );
302 splitterSize.append( width() / 2 ); 302 splitterSize.append( width() / 2 );
303 } 303 }
304 mExtensionBarSplitter->setSizes( splitterSize ); 304 mExtensionBarSplitter->setSizes( splitterSize );
305 305
306 } 306 }
307*/ 307*/
308 mViewManager->restoreSettings(); 308 mViewManager->restoreSettings();
309 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField ); 309 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField );
310 mExtensionManager->restoreSettings(); 310 mExtensionManager->restoreSettings();
311#ifdef DESKTOP_VERSION 311#ifdef DESKTOP_VERSION
312 int wid = width(); 312 int wid = width();
313 if ( wid < 10 ) 313 if ( wid < 10 )
314 wid = 400; 314 wid = 400;
315#else 315#else
316 int wid = QApplication::desktop()->width(); 316 int wid = QApplication::desktop()->width();
317 if ( wid < 640 ) 317 if ( wid < 640 )
318 wid = QApplication::desktop()->height(); 318 wid = QApplication::desktop()->height();
319#endif 319#endif
320 QValueList<int> splitterSize;// = KABPrefs::instance()->mDetailsSplitter; 320 QValueList<int> splitterSize;// = KABPrefs::instance()->mDetailsSplitter;
321 if ( true /*splitterSize.count() == 0*/ ) { 321 if ( true /*splitterSize.count() == 0*/ ) {
322 splitterSize.append( wid / 2 ); 322 splitterSize.append( wid / 2 );
323 splitterSize.append( wid / 2 ); 323 splitterSize.append( wid / 2 );
324 } 324 }
325 mMiniSplitter->setSizes( splitterSize ); 325 mMiniSplitter->setSizes( splitterSize );
326 if ( mExtensionBarSplitter ) { 326 if ( mExtensionBarSplitter ) {
327 //splitterSize = KABPrefs::instance()->mExtensionsSplitter; 327 //splitterSize = KABPrefs::instance()->mExtensionsSplitter;
328 if ( true /*splitterSize.count() == 0*/ ) { 328 if ( true /*splitterSize.count() == 0*/ ) {
329 splitterSize.append( wid / 2 ); 329 splitterSize.append( wid / 2 );
330 splitterSize.append( wid / 2 ); 330 splitterSize.append( wid / 2 );
331 } 331 }
332 mExtensionBarSplitter->setSizes( splitterSize ); 332 mExtensionBarSplitter->setSizes( splitterSize );
333 333
334 } 334 }
335 335
336 336
337} 337}
338 338
339void KABCore::saveSettings() 339void KABCore::saveSettings()
340{ 340{
341 KABPrefs::instance()->mJumpButtonBarVisible = mActionJumpBar->isChecked(); 341 KABPrefs::instance()->mJumpButtonBarVisible = mActionJumpBar->isChecked();
342 if ( mExtensionBarSplitter ) 342 if ( mExtensionBarSplitter )
343 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); 343 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes();
344 KABPrefs::instance()->mDetailsPageVisible = mActionDetails->isChecked(); 344 KABPrefs::instance()->mDetailsPageVisible = mActionDetails->isChecked();
345 KABPrefs::instance()->mDetailsSplitter = mMiniSplitter->sizes(); 345 KABPrefs::instance()->mDetailsSplitter = mMiniSplitter->sizes();
346#ifndef KAB_EMBEDDED 346#ifndef KAB_EMBEDDED
347 347
348 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); 348 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes();
349 KABPrefs::instance()->mDetailsSplitter = mDetailsSplitter->sizes(); 349 KABPrefs::instance()->mDetailsSplitter = mDetailsSplitter->sizes();
350#endif //KAB_EMBEDDED 350#endif //KAB_EMBEDDED
351 mExtensionManager->saveSettings(); 351 mExtensionManager->saveSettings();
352 mViewManager->saveSettings(); 352 mViewManager->saveSettings();
353 353
354 KABPrefs::instance()->mCurrentIncSearchField = mIncSearchWidget->currentItem(); 354 KABPrefs::instance()->mCurrentIncSearchField = mIncSearchWidget->currentItem();
355} 355}
356 356
357KABC::AddressBook *KABCore::addressBook() const 357KABC::AddressBook *KABCore::addressBook() const
358{ 358{
359 return mAddressBook; 359 return mAddressBook;
360} 360}
361 361
362KConfig *KABCore::config() 362KConfig *KABCore::config()
363{ 363{
364#ifndef KAB_EMBEDDED 364#ifndef KAB_EMBEDDED
365 return KABPrefs::instance()->config(); 365 return KABPrefs::instance()->config();
366#else //KAB_EMBEDDED 366#else //KAB_EMBEDDED
367 return KABPrefs::instance()->getConfig(); 367 return KABPrefs::instance()->getConfig();
368#endif //KAB_EMBEDDED 368#endif //KAB_EMBEDDED
369} 369}
370 370
371KActionCollection *KABCore::actionCollection() const 371KActionCollection *KABCore::actionCollection() const
372{ 372{
373 return mGUIClient->actionCollection(); 373 return mGUIClient->actionCollection();
374} 374}
375 375
376KABC::Field *KABCore::currentSearchField() const 376KABC::Field *KABCore::currentSearchField() const
377{ 377{
378 if (mIncSearchWidget) 378 if (mIncSearchWidget)
379 return mIncSearchWidget->currentField(); 379 return mIncSearchWidget->currentField();
380 else 380 else
381 return 0; 381 return 0;
382} 382}
383 383
384QStringList KABCore::selectedUIDs() const 384QStringList KABCore::selectedUIDs() const
385{ 385{
386 return mViewManager->selectedUids(); 386 return mViewManager->selectedUids();
387} 387}
388 388
389KABC::Resource *KABCore::requestResource( QWidget *parent ) 389KABC::Resource *KABCore::requestResource( QWidget *parent )
390{ 390{
391 QPtrList<KABC::Resource> kabcResources = addressBook()->resources(); 391 QPtrList<KABC::Resource> kabcResources = addressBook()->resources();
392 392
393 QPtrList<KRES::Resource> kresResources; 393 QPtrList<KRES::Resource> kresResources;
394 QPtrListIterator<KABC::Resource> resIt( kabcResources ); 394 QPtrListIterator<KABC::Resource> resIt( kabcResources );
395 KABC::Resource *resource; 395 KABC::Resource *resource;
396 while ( ( resource = resIt.current() ) != 0 ) { 396 while ( ( resource = resIt.current() ) != 0 ) {
397 ++resIt; 397 ++resIt;
398 if ( !resource->readOnly() ) { 398 if ( !resource->readOnly() ) {
399 KRES::Resource *res = static_cast<KRES::Resource*>( resource ); 399 KRES::Resource *res = static_cast<KRES::Resource*>( resource );
400 if ( res ) 400 if ( res )
401 kresResources.append( res ); 401 kresResources.append( res );
402 } 402 }
403 } 403 }
404 404
405 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent ); 405 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent );
406 return static_cast<KABC::Resource*>( res ); 406 return static_cast<KABC::Resource*>( res );
407} 407}
408 408
409#ifndef KAB_EMBEDDED 409#ifndef KAB_EMBEDDED
410KAboutData *KABCore::createAboutData() 410KAboutData *KABCore::createAboutData()
411#else //KAB_EMBEDDED 411#else //KAB_EMBEDDED
412void KABCore::createAboutData() 412void KABCore::createAboutData()
413#endif //KAB_EMBEDDED 413#endif //KAB_EMBEDDED
414{ 414{
415#ifndef KAB_EMBEDDED 415#ifndef KAB_EMBEDDED
416 KAboutData *about = new KAboutData( "kaddressbook", I18N_NOOP( "KAddressBook" ), 416 KAboutData *about = new KAboutData( "kaddressbook", I18N_NOOP( "KAddressBook" ),
417 "3.1", I18N_NOOP( "The KDE Address Book" ), 417 "3.1", I18N_NOOP( "The KDE Address Book" ),
418 KAboutData::License_GPL_V2, 418 KAboutData::License_GPL_V2,
419 I18N_NOOP( "(c) 1997-2003, The KDE PIM Team" ) ); 419 I18N_NOOP( "(c) 1997-2003, The KDE PIM Team" ) );
420 about->addAuthor( "Tobias Koenig", I18N_NOOP( "Current maintainer " ), "tokoe@kde.org" ); 420 about->addAuthor( "Tobias Koenig", I18N_NOOP( "Current maintainer " ), "tokoe@kde.org" );
421 about->addAuthor( "Don Sanders", I18N_NOOP( "Original author " ) ); 421 about->addAuthor( "Don Sanders", I18N_NOOP( "Original author " ) );
422 about->addAuthor( "Cornelius Schumacher", 422 about->addAuthor( "Cornelius Schumacher",
423 I18N_NOOP( "Co-maintainer, libkabc port, CSV import/export " ), 423 I18N_NOOP( "Co-maintainer, libkabc port, CSV import/export " ),
424 "schumacher@kde.org" ); 424 "schumacher@kde.org" );
425 about->addAuthor( "Mike Pilone", I18N_NOOP( "GUI and framework redesign " ), 425 about->addAuthor( "Mike Pilone", I18N_NOOP( "GUI and framework redesign " ),
426 "mpilone@slac.com" ); 426 "mpilone@slac.com" );
427 about->addAuthor( "Greg Stern", I18N_NOOP( "DCOP interface" ) ); 427 about->addAuthor( "Greg Stern", I18N_NOOP( "DCOP interface" ) );
428 about->addAuthor( "Mark Westcott", I18N_NOOP( "Contact pinning" ) ); 428 about->addAuthor( "Mark Westcott", I18N_NOOP( "Contact pinning" ) );
429 about->addAuthor( "Michel Boyer de la Giroday", I18N_NOOP( "LDAP Lookup\n" ), 429 about->addAuthor( "Michel Boyer de la Giroday", I18N_NOOP( "LDAP Lookup\n" ),
430 "michel@klaralvdalens-datakonsult.se" ); 430 "michel@klaralvdalens-datakonsult.se" );
431 about->addAuthor( "Steffen Hansen", I18N_NOOP( "LDAP Lookup " ), 431 about->addAuthor( "Steffen Hansen", I18N_NOOP( "LDAP Lookup " ),
432 "hansen@kde.org" ); 432 "hansen@kde.org" );
433 433
434 return about; 434 return about;
435#endif //KAB_EMBEDDED 435#endif //KAB_EMBEDDED
436 436
437 QString version; 437 QString version;
438#include <../version> 438#include <../version>
439 QMessageBox::about( this, "About KAddressbook/Pi", 439 QMessageBox::about( this, "About KAddressbook/Pi",
440 "KAddressbook/Platform-independent\n" 440 "KAddressbook/Platform-independent\n"
441 "(KA/Pi) " +version + " - " + 441 "(KA/Pi) " +version + " - " +
442#ifdef DESKTOP_VERSION 442#ifdef DESKTOP_VERSION
443 "Desktop Edition\n" 443 "Desktop Edition\n"
444#else 444#else
445 "PDA-Edition\n" 445 "PDA-Edition\n"
446 "for: Zaurus 5500 / 7x0 / 8x0\n" 446 "for: Zaurus 5500 / 7x0 / 8x0\n"
447#endif 447#endif
448 448
449 "(c) 2004 Ulf Schenk\n" 449 "(c) 2004 Ulf Schenk\n"
450 "(c) 2004 Lutz Rogowski\n" 450 "(c) 2004 Lutz Rogowski\n"
451 "(c) 1997-2003, The KDE PIM Team\n" 451 "(c) 1997-2003, The KDE PIM Team\n"
452 "Tobias Koenig Current maintainer\ntokoe@kde.org\n" 452 "Tobias Koenig Current maintainer\ntokoe@kde.org\n"
453 "Don Sanders Original author\n" 453 "Don Sanders Original author\n"
454 "Cornelius Schumacher Co-maintainer\nschumacher@kde.org\n" 454 "Cornelius Schumacher Co-maintainer\nschumacher@kde.org\n"
455 "Mike Pilone GUI and framework redesign\nmpilone@slac.com\n" 455 "Mike Pilone GUI and framework redesign\nmpilone@slac.com\n"
456 "Greg Stern DCOP interface\n" 456 "Greg Stern DCOP interface\n"
457 "Mark Westcot Contact pinning\n" 457 "Mark Westcot Contact pinning\n"
458 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n" 458 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n"
459 "Steffen Hansen LDAP Lookup\nhansen@kde.org\n" 459 "Steffen Hansen LDAP Lookup\nhansen@kde.org\n"
460#ifdef _WIN32_ 460#ifdef _WIN32_
461 "(c) 2004 Lutz Rogowski Import from OL\nrogowski@kde.org\n" 461 "(c) 2004 Lutz Rogowski Import from OL\nrogowski@kde.org\n"
462#endif 462#endif
463 ); 463 );
464} 464}
465 465
466void KABCore::setContactSelected( const QString &uid ) 466void KABCore::setContactSelected( const QString &uid )
467{ 467{
468 KABC::Addressee addr = mAddressBook->findByUid( uid ); 468 KABC::Addressee addr = mAddressBook->findByUid( uid );
469 if ( !mDetails->isHidden() ) 469 if ( !mDetails->isHidden() )
470 mDetails->setAddressee( addr ); 470 mDetails->setAddressee( addr );
471 471
472 if ( !addr.isEmpty() ) { 472 if ( !addr.isEmpty() ) {
473 emit contactSelected( addr.formattedName() ); 473 emit contactSelected( addr.formattedName() );
474 KABC::Picture pic = addr.photo(); 474 KABC::Picture pic = addr.photo();
475 if ( pic.isIntern() ) { 475 if ( pic.isIntern() ) {
476//US emit contactSelected( pic.data() ); 476//US emit contactSelected( pic.data() );
477//US instead use: 477//US instead use:
478 QPixmap px; 478 QPixmap px;
479 if (pic.data().isNull() != true) 479 if (pic.data().isNull() != true)
480 { 480 {
481 px.convertFromImage(pic.data()); 481 px.convertFromImage(pic.data());
482 } 482 }
483 483
484 emit contactSelected( px ); 484 emit contactSelected( px );
485 } 485 }
486 } 486 }
487 487
488 488
489 mExtensionManager->setSelectionChanged(); 489 mExtensionManager->setSelectionChanged();
490 490
491 // update the actions 491 // update the actions
492 bool selected = !uid.isEmpty(); 492 bool selected = !uid.isEmpty();
493 493
494 if ( mReadWrite ) { 494 if ( mReadWrite ) {
495 mActionCut->setEnabled( selected ); 495 mActionCut->setEnabled( selected );
496 mActionPaste->setEnabled( selected ); 496 mActionPaste->setEnabled( selected );
497 } 497 }
498 498
499 mActionCopy->setEnabled( selected ); 499 mActionCopy->setEnabled( selected );
500 mActionDelete->setEnabled( selected ); 500 mActionDelete->setEnabled( selected );
501 mActionEditAddressee->setEnabled( selected ); 501 mActionEditAddressee->setEnabled( selected );
502 mActionMail->setEnabled( selected ); 502 mActionMail->setEnabled( selected );
503 mActionMailVCard->setEnabled( selected ); 503 mActionMailVCard->setEnabled( selected );
504 //if (mActionBeam) 504 //if (mActionBeam)
505 //mActionBeam->setEnabled( selected ); 505 //mActionBeam->setEnabled( selected );
506 506
507 if (mActionBeamVCard) 507 if (mActionBeamVCard)
508 mActionBeamVCard->setEnabled( selected ); 508 mActionBeamVCard->setEnabled( selected );
509 509
510 mActionWhoAmI->setEnabled( selected ); 510 mActionWhoAmI->setEnabled( selected );
511 mActionCategories->setEnabled( selected ); 511 mActionCategories->setEnabled( selected );
512} 512}
513 513
514void KABCore::sendMail() 514void KABCore::sendMail()
515{ 515{
516 sendMail( mViewManager->selectedEmails().join( ", " ) ); 516 sendMail( mViewManager->selectedEmails().join( ", " ) );
517} 517}
518 518
519void KABCore::sendMail( const QString& emaillist ) 519void KABCore::sendMail( const QString& emaillist )
520{ 520{
521 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... " 521 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... "
522 if (emaillist.contains(",") > 0) 522 if (emaillist.contains(",") > 0)
523 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null ); 523 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null );
524 else 524 else
525 ExternalAppHandler::instance()->mailToOneContact( emaillist ); 525 ExternalAppHandler::instance()->mailToOneContact( emaillist );
526} 526}
527 527
528 528
529 529
530void KABCore::mailVCard() 530void KABCore::mailVCard()
531{ 531{
532 QStringList uids = mViewManager->selectedUids(); 532 QStringList uids = mViewManager->selectedUids();
533 if ( !uids.isEmpty() ) 533 if ( !uids.isEmpty() )
534 mailVCard( uids ); 534 mailVCard( uids );
535} 535}
536 536
537void KABCore::mailVCard( const QStringList& uids ) 537void KABCore::mailVCard( const QStringList& uids )
538{ 538{
539 QStringList urls; 539 QStringList urls;
540 540
541// QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); 541// QString tmpdir = locateLocal("tmp", KGlobal::getAppName());
542 542
543 QString dirName = "/tmp/" + KApplication::randomString( 8 ); 543 QString dirName = "/tmp/" + KApplication::randomString( 8 );
544 544
545 545
546 546
547 QDir().mkdir( dirName, true ); 547 QDir().mkdir( dirName, true );
548 548
549 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 549 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
550 KABC::Addressee a = mAddressBook->findByUid( *it ); 550 KABC::Addressee a = mAddressBook->findByUid( *it );
551 551
552 if ( a.isEmpty() ) 552 if ( a.isEmpty() )
553 continue; 553 continue;
554 554
555 QString name = a.givenName() + "_" + a.familyName() + ".vcf"; 555 QString name = a.givenName() + "_" + a.familyName() + ".vcf";
556 556
557 QString fileName = dirName + "/" + name; 557 QString fileName = dirName + "/" + name;
558 558
559 QFile outFile(fileName); 559 QFile outFile(fileName);
560 560
561 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully 561 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully
562 KABC::VCardConverter converter; 562 KABC::VCardConverter converter;
563 QString vcard; 563 QString vcard;
564 564
565 converter.addresseeToVCard( a, vcard ); 565 converter.addresseeToVCard( a, vcard );
566 566
567 QTextStream t( &outFile ); // use a text stream 567 QTextStream t( &outFile ); // use a text stream
568 t.setEncoding( QTextStream::UnicodeUTF8 ); 568 t.setEncoding( QTextStream::UnicodeUTF8 );
569 t << vcard; 569 t << vcard;
570 570
571 outFile.close(); 571 outFile.close();
572 572
573 urls.append( fileName ); 573 urls.append( fileName );
574 } 574 }
575 } 575 }
576 576
577 bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") ); 577 bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") );
578 578
579 579
580/*US 580/*US
581 kapp->invokeMailer( QString::null, QString::null, QString::null, 581 kapp->invokeMailer( QString::null, QString::null, QString::null,
582 QString::null, // subject 582 QString::null, // subject
583 QString::null, // body 583 QString::null, // body
584 QString::null, 584 QString::null,
585 urls ); // attachments 585 urls ); // attachments
586*/ 586*/
587 587
588} 588}
589 589
590/** 590/**
591 Beams the "WhoAmI contact. 591 Beams the "WhoAmI contact.
592*/ 592*/
593void KABCore::beamMySelf() 593void KABCore::beamMySelf()
594{ 594{
595 KABC::Addressee a = KABC::StdAddressBook::self()->whoAmI(); 595 KABC::Addressee a = KABC::StdAddressBook::self()->whoAmI();
596 if (!a.isEmpty()) 596 if (!a.isEmpty())
597 { 597 {
598 QStringList uids; 598 QStringList uids;
599 uids << a.uid(); 599 uids << a.uid();
600 600
601 beamVCard(uids); 601 beamVCard(uids);
602 } else { 602 } else {
603 KMessageBox::information( this, i18n( "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n" ) ); 603 KMessageBox::information( this, i18n( "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n" ) );
604 604
605 605
606 } 606 }
607} 607}
608 608
609void KABCore::beamVCard() 609void KABCore::beamVCard()
610{ 610{
611 QStringList uids = mViewManager->selectedUids(); 611 QStringList uids = mViewManager->selectedUids();
612 if ( !uids.isEmpty() ) 612 if ( !uids.isEmpty() )
613 beamVCard( uids ); 613 beamVCard( uids );
614} 614}
615 615
616 616
617void KABCore::beamVCard(const QStringList& uids) 617void KABCore::beamVCard(const QStringList& uids)
618{ 618{
619/*US 619/*US
620 QString beamFilename; 620 QString beamFilename;
621 Opie::OPimContact c; 621 Opie::OPimContact c;
622 if ( actionPersonal->isOn() ) { 622 if ( actionPersonal->isOn() ) {
623 beamFilename = addressbookPersonalVCardName(); 623 beamFilename = addressbookPersonalVCardName();
624 if ( !QFile::exists( beamFilename ) ) 624 if ( !QFile::exists( beamFilename ) )
625 return; // can't beam a non-existent file 625 return; // can't beam a non-existent file
626 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null, 626 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null,
627 beamFilename ); 627 beamFilename );
628 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true ); 628 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true );
629 Opie::OPimContactAccess::List allList = access->allRecords(); 629 Opie::OPimContactAccess::List allList = access->allRecords();
630 Opie::OPimContactAccess::List::Iterator it = allList.begin(); // Just take first 630 Opie::OPimContactAccess::List::Iterator it = allList.begin(); // Just take first
631 c = *it; 631 c = *it;
632 632
633 delete access; 633 delete access;
634 } else { 634 } else {
635 unlink( beamfile ); // delete if exists 635 unlink( beamfile ); // delete if exists
636 mkdir("/tmp/obex/", 0755); 636 mkdir("/tmp/obex/", 0755);
637 c = m_abView -> currentEntry(); 637 c = m_abView -> currentEntry();
638 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null, 638 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null,
639 beamfile ); 639 beamfile );
640 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true ); 640 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true );
641 access->add( c ); 641 access->add( c );
642 access->save(); 642 access->save();
643 delete access; 643 delete access;
644 644
645 beamFilename = beamfile; 645 beamFilename = beamfile;
646 } 646 }
647 647
648 owarn << "Beaming: " << beamFilename << oendl; 648 owarn << "Beaming: " << beamFilename << oendl;
649*/ 649*/
650 650
651#if 0 651#if 0
652 QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); 652 QString tmpdir = locateLocal("tmp", KGlobal::getAppName());
653 653
654 QString dirName = tmpdir + "/" + KApplication::randomString( 8 ); 654 QString dirName = tmpdir + "/" + KApplication::randomString( 8 );
655 655
656 QString name = "contact.vcf"; 656 QString name = "contact.vcf";
657 657
658 QString fileName = dirName + "/" + name; 658 QString fileName = dirName + "/" + name;
659#endif 659#endif
660 // LR: we should use the /tmp dir, because: /tmp = RAM, (HOME)/kdepim = flash memory 660 // LR: we should use the /tmp dir, because: /tmp = RAM, (HOME)/kdepim = flash memory
661 // 661 //
662 QString fileName = "/tmp/kapibeamfile.vcf"; 662 QString fileName = "/tmp/kapibeamfile.vcf";
663 663
664 664
665 //QDir().mkdir( dirName, true ); 665 //QDir().mkdir( dirName, true );
666 666
667 667
668 KABC::VCardConverter converter; 668 KABC::VCardConverter converter;
669 QString description; 669 QString description;
670 QString datastream; 670 QString datastream;
671 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 671 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
672 KABC::Addressee a = mAddressBook->findByUid( *it ); 672 KABC::Addressee a = mAddressBook->findByUid( *it );
673 673
674 if ( a.isEmpty() ) 674 if ( a.isEmpty() )
675 continue; 675 continue;
676 676
677 if (description.isEmpty()) 677 if (description.isEmpty())
678 description = a.formattedName(); 678 description = a.formattedName();
679 679
680 QString vcard; 680 QString vcard;
681 converter.addresseeToVCard( a, vcard ); 681 converter.addresseeToVCard( a, vcard );
682 int start = 0; 682 int start = 0;
683 int next; 683 int next;
684 while ( (next = vcard.find("TYPE=", start) )>= 0 ) { 684 while ( (next = vcard.find("TYPE=", start) )>= 0 ) {
685 int semi = vcard.find(";", next); 685 int semi = vcard.find(";", next);
686 int dopp = vcard.find(":", next); 686 int dopp = vcard.find(":", next);
687 int sep; 687 int sep;
688 if ( semi < dopp && semi >= 0 ) 688 if ( semi < dopp && semi >= 0 )
689 sep = semi ; 689 sep = semi ;
690 else 690 else
691 sep = dopp; 691 sep = dopp;
692 datastream +=vcard.mid( start, next - start); 692 datastream +=vcard.mid( start, next - start);
693 datastream +=vcard.mid( next+5,sep -next -5 ).upper(); 693 datastream +=vcard.mid( next+5,sep -next -5 ).upper();
694 start = sep; 694 start = sep;
695 } 695 }
696 datastream += vcard.mid( start,vcard.length() ); 696 datastream += vcard.mid( start,vcard.length() );
697 } 697 }
698#ifndef DESKTOP_VERSION 698#ifndef DESKTOP_VERSION
699 QFile outFile(fileName); 699 QFile outFile(fileName);
700 if ( outFile.open(IO_WriteOnly) ) { 700 if ( outFile.open(IO_WriteOnly) ) {
701 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" ); 701 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" );
702 QTextStream t( &outFile ); // use a text stream 702 QTextStream t( &outFile ); // use a text stream
703 t.setEncoding( QTextStream::UnicodeUTF8 ); 703 t.setEncoding( QTextStream::UnicodeUTF8 );
704 t <<datastream; 704 t <<datastream;
705 outFile.close(); 705 outFile.close();
706 Ir *ir = new Ir( this ); 706 Ir *ir = new Ir( this );
707 connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) ); 707 connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) );
708 ir->send( fileName, description, "text/x-vCard" ); 708 ir->send( fileName, description, "text/x-vCard" );
709 } else { 709 } else {
710 qDebug("Error open temp beam file "); 710 qDebug("Error open temp beam file ");
711 return; 711 return;
712 } 712 }
713#endif 713#endif
714 714
715} 715}
716 716
717void KABCore::beamDone( Ir *ir ) 717void KABCore::beamDone( Ir *ir )
718{ 718{
719#ifndef DESKTOP_VERSION 719#ifndef DESKTOP_VERSION
720 delete ir; 720 delete ir;
721#endif 721#endif
722} 722}
723 723
724 724
725void KABCore::browse( const QString& url ) 725void KABCore::browse( const QString& url )
726{ 726{
727#ifndef KAB_EMBEDDED 727#ifndef KAB_EMBEDDED
728 kapp->invokeBrowser( url ); 728 kapp->invokeBrowser( url );
729#else //KAB_EMBEDDED 729#else //KAB_EMBEDDED
730 qDebug("KABCore::browse must be fixed"); 730 qDebug("KABCore::browse must be fixed");
731#endif //KAB_EMBEDDED 731#endif //KAB_EMBEDDED
732} 732}
733 733
734void KABCore::selectAllContacts() 734void KABCore::selectAllContacts()
735{ 735{
736 mViewManager->setSelected( QString::null, true ); 736 mViewManager->setSelected( QString::null, true );
737} 737}
738 738
739void KABCore::deleteContacts() 739void KABCore::deleteContacts()
740{ 740{
741 QStringList uidList = mViewManager->selectedUids(); 741 QStringList uidList = mViewManager->selectedUids();
742 deleteContacts( uidList ); 742 deleteContacts( uidList );
743} 743}
744 744
745void KABCore::deleteContacts( const QStringList &uids ) 745void KABCore::deleteContacts( const QStringList &uids )
746{ 746{
747 if ( uids.count() > 0 ) { 747 if ( uids.count() > 0 ) {
748 PwDeleteCommand *command = new PwDeleteCommand( mAddressBook, uids ); 748 PwDeleteCommand *command = new PwDeleteCommand( mAddressBook, uids );
749 UndoStack::instance()->push( command ); 749 UndoStack::instance()->push( command );
750 RedoStack::instance()->clear(); 750 RedoStack::instance()->clear();
751 751
752 // now if we deleted anything, refresh 752 // now if we deleted anything, refresh
753 setContactSelected( QString::null ); 753 setContactSelected( QString::null );
754 setModified( true ); 754 setModified( true );
755 } 755 }
756} 756}
757 757
758void KABCore::copyContacts() 758void KABCore::copyContacts()
759{ 759{
760 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 760 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
761 761
762 QString clipText = AddresseeUtil::addresseesToClipboard( addrList ); 762 QString clipText = AddresseeUtil::addresseesToClipboard( addrList );
763 763
764 kdDebug(5720) << "KABCore::copyContacts: " << clipText << endl; 764 kdDebug(5720) << "KABCore::copyContacts: " << clipText << endl;
765 765
766 QClipboard *cb = QApplication::clipboard(); 766 QClipboard *cb = QApplication::clipboard();
767 cb->setText( clipText ); 767 cb->setText( clipText );
768} 768}
769 769
770void KABCore::cutContacts() 770void KABCore::cutContacts()
771{ 771{
772 QStringList uidList = mViewManager->selectedUids(); 772 QStringList uidList = mViewManager->selectedUids();
773 773
774//US if ( uidList.size() > 0 ) { 774//US if ( uidList.size() > 0 ) {
775 if ( uidList.count() > 0 ) { 775 if ( uidList.count() > 0 ) {
776 PwCutCommand *command = new PwCutCommand( mAddressBook, uidList ); 776 PwCutCommand *command = new PwCutCommand( mAddressBook, uidList );
777 UndoStack::instance()->push( command ); 777 UndoStack::instance()->push( command );
778 RedoStack::instance()->clear(); 778 RedoStack::instance()->clear();
779 779
780 setModified( true ); 780 setModified( true );
781 } 781 }
782} 782}
783 783
784void KABCore::pasteContacts() 784void KABCore::pasteContacts()
785{ 785{
786 QClipboard *cb = QApplication::clipboard(); 786 QClipboard *cb = QApplication::clipboard();
787 787
788 KABC::Addressee::List list = AddresseeUtil::clipboardToAddressees( cb->text() ); 788 KABC::Addressee::List list = AddresseeUtil::clipboardToAddressees( cb->text() );
789 789
790 pasteContacts( list ); 790 pasteContacts( list );
791} 791}
792 792
793void KABCore::pasteContacts( KABC::Addressee::List &list ) 793void KABCore::pasteContacts( KABC::Addressee::List &list )
794{ 794{
795 KABC::Resource *resource = requestResource( this ); 795 KABC::Resource *resource = requestResource( this );
796 KABC::Addressee::List::Iterator it; 796 KABC::Addressee::List::Iterator it;
797 for ( it = list.begin(); it != list.end(); ++it ) 797 for ( it = list.begin(); it != list.end(); ++it )
798 (*it).setResource( resource ); 798 (*it).setResource( resource );
799 799
800 PwPasteCommand *command = new PwPasteCommand( this, list ); 800 PwPasteCommand *command = new PwPasteCommand( this, list );
801 UndoStack::instance()->push( command ); 801 UndoStack::instance()->push( command );
802 RedoStack::instance()->clear(); 802 RedoStack::instance()->clear();
803 803
804 setModified( true ); 804 setModified( true );
805} 805}
806 806
807void KABCore::setWhoAmI() 807void KABCore::setWhoAmI()
808{ 808{
809 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 809 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
810 810
811 if ( addrList.count() > 1 ) { 811 if ( addrList.count() > 1 ) {
812 KMessageBox::sorry( this, i18n( "Please select only one contact." ) ); 812 KMessageBox::sorry( this, i18n( "Please select only one contact." ) );
813 return; 813 return;
814 } 814 }
815 815
816 QString text( i18n( "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>" ) ); 816 QString text( i18n( "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>" ) );
817 if ( KMessageBox::questionYesNo( this, text.arg( addrList[ 0 ].assembledName() ) ) == KMessageBox::Yes ) 817 if ( KMessageBox::questionYesNo( this, text.arg( addrList[ 0 ].assembledName() ) ) == KMessageBox::Yes )
818 static_cast<KABC::StdAddressBook*>( KABC::StdAddressBook::self() )->setWhoAmI( addrList[ 0 ] ); 818 static_cast<KABC::StdAddressBook*>( KABC::StdAddressBook::self() )->setWhoAmI( addrList[ 0 ] );
819} 819}
820 820
821void KABCore::setCategories() 821void KABCore::setCategories()
822{ 822{
823 KPIM::CategorySelectDialog dlg( KABPrefs::instance(), this, "", true ); 823 KPIM::CategorySelectDialog dlg( KABPrefs::instance(), this, "", true );
824 if ( !dlg.exec() ) 824 if ( !dlg.exec() )
825 return; 825 return;
826 826
827 bool merge = false; 827 bool merge = false;
828 QString msg = i18n( "Merge with existing categories?" ); 828 QString msg = i18n( "Merge with existing categories?" );
829 if ( KMessageBox::questionYesNo( this, msg ) == KMessageBox::Yes ) 829 if ( KMessageBox::questionYesNo( this, msg ) == KMessageBox::Yes )
830 merge = true; 830 merge = true;
831 831
832 QStringList categories = dlg.selectedCategories(); 832 QStringList categories = dlg.selectedCategories();
833 833
834 QStringList uids = mViewManager->selectedUids(); 834 QStringList uids = mViewManager->selectedUids();
835 QStringList::Iterator it; 835 QStringList::Iterator it;
836 for ( it = uids.begin(); it != uids.end(); ++it ) { 836 for ( it = uids.begin(); it != uids.end(); ++it ) {
837 KABC::Addressee addr = mAddressBook->findByUid( *it ); 837 KABC::Addressee addr = mAddressBook->findByUid( *it );
838 if ( !addr.isEmpty() ) { 838 if ( !addr.isEmpty() ) {
839 if ( !merge ) 839 if ( !merge )
840 addr.setCategories( categories ); 840 addr.setCategories( categories );
841 else { 841 else {
842 QStringList addrCategories = addr.categories(); 842 QStringList addrCategories = addr.categories();
843 QStringList::Iterator catIt; 843 QStringList::Iterator catIt;
844 for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) { 844 for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) {
845 if ( !addrCategories.contains( *catIt ) ) 845 if ( !addrCategories.contains( *catIt ) )
846 addrCategories.append( *catIt ); 846 addrCategories.append( *catIt );
847 } 847 }
848 addr.setCategories( addrCategories ); 848 addr.setCategories( addrCategories );
849 } 849 }
850 850
851 mAddressBook->insertAddressee( addr ); 851 mAddressBook->insertAddressee( addr );
852 } 852 }
853 } 853 }
854 854
855 if ( uids.count() > 0 ) 855 if ( uids.count() > 0 )
856 setModified( true ); 856 setModified( true );
857} 857}
858 858
859void KABCore::setSearchFields( const KABC::Field::List &fields ) 859void KABCore::setSearchFields( const KABC::Field::List &fields )
860{ 860{
861 mIncSearchWidget->setFields( fields ); 861 mIncSearchWidget->setFields( fields );
862} 862}
863 863
864void KABCore::incrementalSearch( const QString& text ) 864void KABCore::incrementalSearch( const QString& text )
865{ 865{
866 mViewManager->doSearch( text, mIncSearchWidget->currentField() ); 866 mViewManager->doSearch( text, mIncSearchWidget->currentField() );
867} 867}
868 868
869void KABCore::setModified() 869void KABCore::setModified()
870{ 870{
871 setModified( true ); 871 setModified( true );
872} 872}
873 873
874void KABCore::setModifiedWOrefresh() 874void KABCore::setModifiedWOrefresh()
875{ 875{
876 // qDebug("KABCore::setModifiedWOrefresh() "); 876 // qDebug("KABCore::setModifiedWOrefresh() ");
877 mModified = true; 877 mModified = true;
878 mActionSave->setEnabled( mModified ); 878 mActionSave->setEnabled( mModified );
879#ifdef DESKTOP_VERSION 879#ifdef DESKTOP_VERSION
880 mDetails->refreshView(); 880 mDetails->refreshView();
881#endif 881#endif
882 882
883} 883}
884void KABCore::setModified( bool modified ) 884void KABCore::setModified( bool modified )
885{ 885{
886 mModified = modified; 886 mModified = modified;
887 mActionSave->setEnabled( mModified ); 887 mActionSave->setEnabled( mModified );
888 888
889 if ( modified ) 889 if ( modified )
890 mJumpButtonBar->recreateButtons(); 890 mJumpButtonBar->recreateButtons();
891 891
892 mViewManager->refreshView(); 892 mViewManager->refreshView();
893 mDetails->refreshView(); 893 mDetails->refreshView();
894 894
895} 895}
896 896
897bool KABCore::modified() const 897bool KABCore::modified() const
898{ 898{
899 return mModified; 899 return mModified;
900} 900}
901 901
902void KABCore::contactModified( const KABC::Addressee &addr ) 902void KABCore::contactModified( const KABC::Addressee &addr )
903{ 903{
904 904
905 Command *command = 0; 905 Command *command = 0;
906 QString uid; 906 QString uid;
907 907
908 // check if it exists already 908 // check if it exists already
909 KABC::Addressee origAddr = mAddressBook->findByUid( addr.uid() ); 909 KABC::Addressee origAddr = mAddressBook->findByUid( addr.uid() );
910 if ( origAddr.isEmpty() ) 910 if ( origAddr.isEmpty() )
911 command = new PwNewCommand( mAddressBook, addr ); 911 command = new PwNewCommand( mAddressBook, addr );
912 else { 912 else {
913 command = new PwEditCommand( mAddressBook, origAddr, addr ); 913 command = new PwEditCommand( mAddressBook, origAddr, addr );
914 uid = addr.uid(); 914 uid = addr.uid();
915 } 915 }
916 916
917 UndoStack::instance()->push( command ); 917 UndoStack::instance()->push( command );
918 RedoStack::instance()->clear(); 918 RedoStack::instance()->clear();
919 919
920 setModified( true ); 920 setModified( true );
921} 921}
922 922
923void KABCore::newContact() 923void KABCore::newContact()
924{ 924{
925 925
926 926
927 QPtrList<KABC::Resource> kabcResources = mAddressBook->resources(); 927 QPtrList<KABC::Resource> kabcResources = mAddressBook->resources();
928 928
929 QPtrList<KRES::Resource> kresResources; 929 QPtrList<KRES::Resource> kresResources;
930 QPtrListIterator<KABC::Resource> it( kabcResources ); 930 QPtrListIterator<KABC::Resource> it( kabcResources );
931 KABC::Resource *resource; 931 KABC::Resource *resource;
932 while ( ( resource = it.current() ) != 0 ) { 932 while ( ( resource = it.current() ) != 0 ) {
933 ++it; 933 ++it;
934 if ( !resource->readOnly() ) { 934 if ( !resource->readOnly() ) {
935 KRES::Resource *res = static_cast<KRES::Resource*>( resource ); 935 KRES::Resource *res = static_cast<KRES::Resource*>( resource );
936 if ( res ) 936 if ( res )
937 kresResources.append( res ); 937 kresResources.append( res );
938 } 938 }
939 } 939 }
940 940
941 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, this ); 941 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, this );
942 resource = static_cast<KABC::Resource*>( res ); 942 resource = static_cast<KABC::Resource*>( res );
943 943
944 if ( resource ) { 944 if ( resource ) {
945 KABC::Addressee addr; 945 KABC::Addressee addr;
946 addr.setResource( resource ); 946 addr.setResource( resource );
947 mEditorDialog->setAddressee( addr ); 947 mEditorDialog->setAddressee( addr );
948 KApplication::execDialog ( mEditorDialog ); 948 KApplication::execDialog ( mEditorDialog );
949 949
950 } else 950 } else
951 return; 951 return;
952 952
953 // mEditorDict.insert( dialog->addressee().uid(), dialog ); 953 // mEditorDict.insert( dialog->addressee().uid(), dialog );
954 954
955 955
956} 956}
957 957
958void KABCore::addEmail( QString aStr ) 958void KABCore::addEmail( QString aStr )
959{ 959{
960#ifndef KAB_EMBEDDED 960#ifndef KAB_EMBEDDED
961 QString fullName, email; 961 QString fullName, email;
962 962
963 KABC::Addressee::parseEmailAddress( aStr, fullName, email ); 963 KABC::Addressee::parseEmailAddress( aStr, fullName, email );
964 964
965 // Try to lookup the addressee matching the email address 965 // Try to lookup the addressee matching the email address
966 bool found = false; 966 bool found = false;
967 QStringList emailList; 967 QStringList emailList;
968 KABC::AddressBook::Iterator it; 968 KABC::AddressBook::Iterator it;
969 for ( it = mAddressBook->begin(); !found && (it != mAddressBook->end()); ++it ) { 969 for ( it = mAddressBook->begin(); !found && (it != mAddressBook->end()); ++it ) {
970 emailList = (*it).emails(); 970 emailList = (*it).emails();
971 if ( emailList.contains( email ) > 0 ) { 971 if ( emailList.contains( email ) > 0 ) {
972 found = true; 972 found = true;
973 (*it).setNameFromString( fullName ); 973 (*it).setNameFromString( fullName );
974 editContact( (*it).uid() ); 974 editContact( (*it).uid() );
975 } 975 }
976 } 976 }
977 977
978 if ( !found ) { 978 if ( !found ) {
979 KABC::Addressee addr; 979 KABC::Addressee addr;
980 addr.setNameFromString( fullName ); 980 addr.setNameFromString( fullName );
981 addr.insertEmail( email, true ); 981 addr.insertEmail( email, true );
982 982
983 mAddressBook->insertAddressee( addr ); 983 mAddressBook->insertAddressee( addr );
984 mViewManager->refreshView( addr.uid() ); 984 mViewManager->refreshView( addr.uid() );
985 editContact( addr.uid() ); 985 editContact( addr.uid() );
986 } 986 }
987#else //KAB_EMBEDDED 987#else //KAB_EMBEDDED
988 qDebug("KABCore::addEmail finsih method"); 988 qDebug("KABCore::addEmail finsih method");
989#endif //KAB_EMBEDDED 989#endif //KAB_EMBEDDED
990} 990}
991 991
992void KABCore::importVCard( const KURL &url, bool showPreview ) 992void KABCore::importVCard( const KURL &url, bool showPreview )
993{ 993{
994 mXXPortManager->importVCard( url, showPreview ); 994 mXXPortManager->importVCard( url, showPreview );
995} 995}
996void KABCore::importFromOL() 996void KABCore::importFromOL()
997{ 997{
998#ifdef _WIN32_ 998#ifdef _WIN32_
999 KAImportOLdialog* idgl = new KAImportOLdialog( i18n("Import Contacts from OL"), mAddressBook, this ); 999 KAImportOLdialog* idgl = new KAImportOLdialog( i18n("Import Contacts from OL"), mAddressBook, this );
1000 idgl->exec(); 1000 idgl->exec();
1001 KABC::Addressee::List list = idgl->getAddressList(); 1001 KABC::Addressee::List list = idgl->getAddressList();
1002 if ( list.count() > 0 ) { 1002 if ( list.count() > 0 ) {
1003 KABC::Addressee::List listNew; 1003 KABC::Addressee::List listNew;
1004 KABC::Addressee::List listExisting; 1004 KABC::Addressee::List listExisting;
1005 KABC::Addressee::List::Iterator it; 1005 KABC::Addressee::List::Iterator it;
1006 KABC::AddressBook::Iterator iter; 1006 KABC::AddressBook::Iterator iter;
1007 for ( it = list.begin(); it != list.end(); ++it ) { 1007 for ( it = list.begin(); it != list.end(); ++it ) {
1008 if ( mAddressBook->findByUid((*it).uid() ).isEmpty()) 1008 if ( mAddressBook->findByUid((*it).uid() ).isEmpty())
1009 listNew.append( (*it) ); 1009 listNew.append( (*it) );
1010 else 1010 else
1011 listExisting.append( (*it) ); 1011 listExisting.append( (*it) );
1012 } 1012 }
1013 if ( listExisting.count() > 0 ) 1013 if ( listExisting.count() > 0 )
1014 KMessageBox::information( this, i18n("%1 contacts not added to addressbook\nbecause they were already in the addressbook!").arg( listExisting.count() )); 1014 KMessageBox::information( this, i18n("%1 contacts not added to addressbook\nbecause they were already in the addressbook!").arg( listExisting.count() ));
1015 if ( listNew.count() > 0 ) { 1015 if ( listNew.count() > 0 ) {
1016 pasteWithNewUid = false; 1016 pasteWithNewUid = false;
1017 pasteContacts( listNew ); 1017 pasteContacts( listNew );
1018 pasteWithNewUid = true; 1018 pasteWithNewUid = true;
1019 } 1019 }
1020 } 1020 }
1021 delete idgl; 1021 delete idgl;
1022#endif 1022#endif
1023} 1023}
1024 1024
1025void KABCore::importVCard( const QString &vCard, bool showPreview ) 1025void KABCore::importVCard( const QString &vCard, bool showPreview )
1026{ 1026{
1027 mXXPortManager->importVCard( vCard, showPreview ); 1027 mXXPortManager->importVCard( vCard, showPreview );
1028} 1028}
1029 1029
1030//US added a second method without defaultparameter 1030//US added a second method without defaultparameter
1031void KABCore::editContact2() { 1031void KABCore::editContact2() {
1032 editContact( QString::null ); 1032 editContact( QString::null );
1033} 1033}
1034 1034
1035void KABCore::editContact( const QString &uid ) 1035void KABCore::editContact( const QString &uid )
1036{ 1036{
1037 1037
1038 if ( mExtensionManager->isQuickEditVisible() ) 1038 if ( mExtensionManager->isQuickEditVisible() )
1039 return; 1039 return;
1040 1040
1041 // First, locate the contact entry 1041 // First, locate the contact entry
1042 QString localUID = uid; 1042 QString localUID = uid;
1043 if ( localUID.isNull() ) { 1043 if ( localUID.isNull() ) {
1044 QStringList uidList = mViewManager->selectedUids(); 1044 QStringList uidList = mViewManager->selectedUids();
1045 if ( uidList.count() > 0 ) 1045 if ( uidList.count() > 0 )
1046 localUID = *( uidList.at( 0 ) ); 1046 localUID = *( uidList.at( 0 ) );
1047 } 1047 }
1048 1048
1049 KABC::Addressee addr = mAddressBook->findByUid( localUID ); 1049 KABC::Addressee addr = mAddressBook->findByUid( localUID );
1050 if ( !addr.isEmpty() ) { 1050 if ( !addr.isEmpty() ) {
1051 mEditorDialog->setAddressee( addr ); 1051 mEditorDialog->setAddressee( addr );
1052 KApplication::execDialog ( mEditorDialog ); 1052 KApplication::execDialog ( mEditorDialog );
1053 } 1053 }
1054} 1054}
1055 1055
1056/** 1056/**
1057 Shows or edits the detail view for the given uid. If the uid is QString::null, 1057 Shows or edits the detail view for the given uid. If the uid is QString::null,
1058 the method will try to find a selected addressee in the view. 1058 the method will try to find a selected addressee in the view.
1059 */ 1059 */
1060void KABCore::executeContact( const QString &uid /*US = QString::null*/ ) 1060void KABCore::executeContact( const QString &uid /*US = QString::null*/ )
1061{ 1061{
1062 if ( mMultipleViewsAtOnce ) 1062 if ( mMultipleViewsAtOnce )
1063 { 1063 {
1064 editContact( uid ); 1064 editContact( uid );
1065 } 1065 }
1066 else 1066 else
1067 { 1067 {
1068 setDetailsVisible( true ); 1068 setDetailsVisible( true );
1069 mActionDetails->setChecked(true); 1069 mActionDetails->setChecked(true);
1070 } 1070 }
1071 1071
1072} 1072}
1073 1073
1074void KABCore::save() 1074void KABCore::save()
1075{ 1075{
1076 if (mBlockSaveFlag) 1076 if (mBlockSaveFlag)
1077 return; 1077 return;
1078 mBlockSaveFlag = true; 1078 mBlockSaveFlag = true;
1079 if ( !mModified ) 1079 if ( !mModified )
1080 return; 1080 return;
1081 QString text = i18n( "There was an error while attempting to save\n the " 1081 QString text = i18n( "There was an error while attempting to save\n the "
1082 "address book. Please check that some \nother application is " 1082 "address book. Please check that some \nother application is "
1083 "not using it. " ); 1083 "not using it. " );
1084 statusMessage(i18n("Saving addressbook ... ")); 1084 statusMessage(i18n("Saving addressbook ... "));
1085#ifndef KAB_EMBEDDED 1085#ifndef KAB_EMBEDDED
1086 KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook ); 1086 KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook );
1087 if ( !b || !b->save() ) { 1087 if ( !b || !b->save() ) {
1088 KMessageBox::error( this, text, i18n( "Unable to Save" ) ); 1088 KMessageBox::error( this, text, i18n( "Unable to Save" ) );
1089 } 1089 }
1090#else //KAB_EMBEDDED 1090#else //KAB_EMBEDDED
1091 KABC::StdAddressBook *b = (KABC::StdAddressBook*)( mAddressBook ); 1091 KABC::StdAddressBook *b = (KABC::StdAddressBook*)( mAddressBook );
1092 if ( !b || !b->save() ) { 1092 if ( !b || !b->save() ) {
1093 QMessageBox::critical( this, i18n( "Unable to Save" ), text, i18n("Ok")); 1093 QMessageBox::critical( this, i18n( "Unable to Save" ), text, i18n("Ok"));
1094 } 1094 }
1095#endif //KAB_EMBEDDED 1095#endif //KAB_EMBEDDED
1096 1096
1097 statusMessage(i18n("Addressbook saved!")); 1097 statusMessage(i18n("Addressbook saved!"));
1098 setModified( false ); 1098 setModified( false );
1099 mBlockSaveFlag = false; 1099 mBlockSaveFlag = false;
1100} 1100}
1101 1101
1102void KABCore::statusMessage(QString mess , int time ) 1102void KABCore::statusMessage(QString mess , int time )
1103{ 1103{
1104 //topLevelWidget()->setCaption( mess ); 1104 //topLevelWidget()->setCaption( mess );
1105 // pending setting timer to revome message 1105 // pending setting timer to revome message
1106} 1106}
1107void KABCore::undo() 1107void KABCore::undo()
1108{ 1108{
1109 UndoStack::instance()->undo(); 1109 UndoStack::instance()->undo();
1110 1110
1111 // Refresh the view 1111 // Refresh the view
1112 mViewManager->refreshView(); 1112 mViewManager->refreshView();
1113} 1113}
1114 1114
1115void KABCore::redo() 1115void KABCore::redo()
1116{ 1116{
1117 RedoStack::instance()->redo(); 1117 RedoStack::instance()->redo();
1118 1118
1119 // Refresh the view 1119 // Refresh the view
1120 mViewManager->refreshView(); 1120 mViewManager->refreshView();
1121} 1121}
1122 1122
1123void KABCore::setJumpButtonBarVisible( bool visible ) 1123void KABCore::setJumpButtonBarVisible( bool visible )
1124{ 1124{
1125 if (mMultipleViewsAtOnce) 1125 if (mMultipleViewsAtOnce)
1126 { 1126 {
1127 if ( visible ) 1127 if ( visible )
1128 mJumpButtonBar->show(); 1128 mJumpButtonBar->show();
1129 else 1129 else
1130 mJumpButtonBar->hide(); 1130 mJumpButtonBar->hide();
1131 } 1131 }
1132 else 1132 else
1133 { 1133 {
1134 // show the jumpbar only if "the details are hidden" == "viewmanager are shown" 1134 // show the jumpbar only if "the details are hidden" == "viewmanager are shown"
1135 if (mViewManager->isVisible()) 1135 if (mViewManager->isVisible())
1136 { 1136 {
1137 if ( visible ) 1137 if ( visible )
1138 mJumpButtonBar->show(); 1138 mJumpButtonBar->show();
1139 else 1139 else
1140 mJumpButtonBar->hide(); 1140 mJumpButtonBar->hide();
1141 } 1141 }
1142 else 1142 else
1143 { 1143 {
1144 mJumpButtonBar->hide(); 1144 mJumpButtonBar->hide();
1145 } 1145 }
1146 } 1146 }
1147} 1147}
1148 1148
1149 1149
1150void KABCore::setDetailsToState() 1150void KABCore::setDetailsToState()
1151{ 1151{
1152 setDetailsVisible( mActionDetails->isChecked() ); 1152 setDetailsVisible( mActionDetails->isChecked() );
1153} 1153}
1154 1154
1155 1155
1156 1156
1157void KABCore::setDetailsVisible( bool visible ) 1157void KABCore::setDetailsVisible( bool visible )
1158{ 1158{
1159 if (visible && mDetails->isHidden()) 1159 if (visible && mDetails->isHidden())
1160 { 1160 {
1161 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 1161 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
1162 if ( addrList.count() > 0 ) 1162 if ( addrList.count() > 0 )
1163 mDetails->setAddressee( addrList[ 0 ] ); 1163 mDetails->setAddressee( addrList[ 0 ] );
1164 } 1164 }
1165 1165
1166 // mMultipleViewsAtOnce=false: mDetails is always visible. But we switch between 1166 // mMultipleViewsAtOnce=false: mDetails is always visible. But we switch between
1167 // the listview and the detailview. We do that by changing the splitbar size. 1167 // the listview and the detailview. We do that by changing the splitbar size.
1168 if (mMultipleViewsAtOnce) 1168 if (mMultipleViewsAtOnce)
1169 { 1169 {
1170 if ( visible ) 1170 if ( visible )
1171 mDetails->show(); 1171 mDetails->show();
1172 else 1172 else
1173 mDetails->hide(); 1173 mDetails->hide();
1174 } 1174 }
1175 else 1175 else
1176 { 1176 {
1177 if ( visible ) { 1177 if ( visible ) {
1178 mViewManager->hide(); 1178 mViewManager->hide();
1179 mDetails->show(); 1179 mDetails->show();
1180 } 1180 }
1181 else { 1181 else {
1182 mViewManager->show(); 1182 mViewManager->show();
1183 mDetails->hide(); 1183 mDetails->hide();
1184 } 1184 }
1185 setJumpButtonBarVisible( !visible ); 1185 setJumpButtonBarVisible( !visible );
1186 } 1186 }
1187 1187
1188} 1188}
1189 1189
1190void KABCore::extensionChanged( int id ) 1190void KABCore::extensionChanged( int id )
1191{ 1191{
1192 //change the details view only for non desktop systems 1192 //change the details view only for non desktop systems
1193#ifndef DESKTOP_VERSION 1193#ifndef DESKTOP_VERSION
1194 1194
1195 if (id == 0) 1195 if (id == 0)
1196 { 1196 {
1197 //the user disabled the extension. 1197 //the user disabled the extension.
1198 1198
1199 if (mMultipleViewsAtOnce) 1199 if (mMultipleViewsAtOnce)
1200 { // enable detailsview again 1200 { // enable detailsview again
1201 setDetailsVisible( true ); 1201 setDetailsVisible( true );
1202 mActionDetails->setChecked( true ); 1202 mActionDetails->setChecked( true );
1203 } 1203 }
1204 else 1204 else
1205 { //go back to the listview 1205 { //go back to the listview
1206 setDetailsVisible( false ); 1206 setDetailsVisible( false );
1207 mActionDetails->setChecked( false ); 1207 mActionDetails->setChecked( false );
1208 mActionDetails->setEnabled(true); 1208 mActionDetails->setEnabled(true);
1209 } 1209 }
1210 1210
1211 } 1211 }
1212 else 1212 else
1213 { 1213 {
1214 //the user enabled the extension. 1214 //the user enabled the extension.
1215 setDetailsVisible( false ); 1215 setDetailsVisible( false );
1216 mActionDetails->setChecked( false ); 1216 mActionDetails->setChecked( false );
1217 1217
1218 if (!mMultipleViewsAtOnce) 1218 if (!mMultipleViewsAtOnce)
1219 { 1219 {
1220 mActionDetails->setEnabled(false); 1220 mActionDetails->setEnabled(false);
1221 } 1221 }
1222 1222
1223 mExtensionManager->setSelectionChanged(); 1223 mExtensionManager->setSelectionChanged();
1224 1224
1225 } 1225 }
1226 1226
1227#endif// DESKTOP_VERSION 1227#endif// DESKTOP_VERSION
1228 1228
1229} 1229}
1230 1230
1231 1231
1232void KABCore::extensionModified( const KABC::Addressee::List &list ) 1232void KABCore::extensionModified( const KABC::Addressee::List &list )
1233{ 1233{
1234 1234
1235 if ( list.count() != 0 ) { 1235 if ( list.count() != 0 ) {
1236 KABC::Addressee::List::ConstIterator it; 1236 KABC::Addressee::List::ConstIterator it;
1237 for ( it = list.begin(); it != list.end(); ++it ) 1237 for ( it = list.begin(); it != list.end(); ++it )
1238 mAddressBook->insertAddressee( *it ); 1238 mAddressBook->insertAddressee( *it );
1239 if ( list.count() > 1 ) 1239 if ( list.count() > 1 )
1240 setModified(); 1240 setModified();
1241 else 1241 else
1242 setModifiedWOrefresh(); 1242 setModifiedWOrefresh();
1243 } 1243 }
1244 if ( list.count() == 0 ) 1244 if ( list.count() == 0 )
1245 mViewManager->refreshView(); 1245 mViewManager->refreshView();
1246 else 1246 else
1247 mViewManager->refreshView( list[ 0 ].uid() ); 1247 mViewManager->refreshView( list[ 0 ].uid() );
1248 1248
1249 1249
1250 1250
1251} 1251}
1252 1252
1253QString KABCore::getNameByPhone( const QString &phone ) 1253QString KABCore::getNameByPhone( const QString &phone )
1254{ 1254{
1255#ifndef KAB_EMBEDDED 1255#ifndef KAB_EMBEDDED
1256 QRegExp r( "[/*/-/ ]" ); 1256 QRegExp r( "[/*/-/ ]" );
1257 QString localPhone( phone ); 1257 QString localPhone( phone );
1258 1258
1259 bool found = false; 1259 bool found = false;
1260 QString ownerName = ""; 1260 QString ownerName = "";
1261 KABC::AddressBook::Iterator iter; 1261 KABC::AddressBook::Iterator iter;
1262 KABC::PhoneNumber::List::Iterator phoneIter; 1262 KABC::PhoneNumber::List::Iterator phoneIter;
1263 KABC::PhoneNumber::List phoneList; 1263 KABC::PhoneNumber::List phoneList;
1264 for ( iter = mAddressBook->begin(); !found && ( iter != mAddressBook->end() ); ++iter ) { 1264 for ( iter = mAddressBook->begin(); !found && ( iter != mAddressBook->end() ); ++iter ) {
1265 phoneList = (*iter).phoneNumbers(); 1265 phoneList = (*iter).phoneNumbers();
1266 for ( phoneIter = phoneList.begin(); !found && ( phoneIter != phoneList.end() ); 1266 for ( phoneIter = phoneList.begin(); !found && ( phoneIter != phoneList.end() );
1267 ++phoneIter) { 1267 ++phoneIter) {
1268 // Get rid of separator chars so just the numbers are compared. 1268 // Get rid of separator chars so just the numbers are compared.
1269 if ( (*phoneIter).number().replace( r, "" ) == localPhone.replace( r, "" ) ) { 1269 if ( (*phoneIter).number().replace( r, "" ) == localPhone.replace( r, "" ) ) {
1270 ownerName = (*iter).formattedName(); 1270 ownerName = (*iter).formattedName();
1271 found = true; 1271 found = true;
1272 } 1272 }
1273 } 1273 }
1274 } 1274 }
1275 1275
1276 return ownerName; 1276 return ownerName;
1277#else //KAB_EMBEDDED 1277#else //KAB_EMBEDDED
1278 qDebug("KABCore::getNameByPhone finsih method"); 1278 qDebug("KABCore::getNameByPhone finsih method");
1279 return ""; 1279 return "";
1280#endif //KAB_EMBEDDED 1280#endif //KAB_EMBEDDED
1281 1281
1282} 1282}
1283 1283
1284void KABCore::openConfigDialog() 1284void KABCore::openConfigDialog()
1285{ 1285{
1286 KABPrefs* kab_prefs = KABPrefs::instance(); 1286 KABPrefs* kab_prefs = KABPrefs::instance();
1287 KPimGlobalPrefs* kpim_prefs = KPimGlobalPrefs::instance(); 1287 KPimGlobalPrefs* kpim_prefs = KPimGlobalPrefs::instance();
1288 1288
1289 KCMultiDialog* ConfigureDialog = new KCMultiDialog( "PIM", this ,"kabconfigdialog", true ); 1289 KCMultiDialog* ConfigureDialog = new KCMultiDialog( "PIM", this ,"kabconfigdialog", true );
1290 KCMKabConfig* kabcfg = new KCMKabConfig( kab_prefs, ConfigureDialog->getNewVBoxPage(i18n( "Addressbook")) , "KCMKabConfig" ); 1290 KCMKabConfig* kabcfg = new KCMKabConfig( kab_prefs, ConfigureDialog->getNewVBoxPage(i18n( "Addressbook")) , "KCMKabConfig" );
1291 ConfigureDialog->addModule(kabcfg ); 1291 ConfigureDialog->addModule(kabcfg );
1292 KCMKdePimConfig* kdelibcfg = new KCMKdePimConfig( kpim_prefs, ConfigureDialog->getNewVBoxPage(i18n( "Global")) , "KCMKdeLibConfig" ); 1292 KCMKdePimConfig* kdelibcfg = new KCMKdePimConfig( kpim_prefs, ConfigureDialog->getNewVBoxPage(i18n( "Global")) , "KCMKdeLibConfig" );
1293 ConfigureDialog->addModule(kdelibcfg ); 1293 ConfigureDialog->addModule(kdelibcfg );
1294 1294
1295 1295
1296 1296
1297 connect( ConfigureDialog, SIGNAL( applyClicked() ), 1297 connect( ConfigureDialog, SIGNAL( applyClicked() ),
1298 this, SLOT( configurationChanged() ) ); 1298 this, SLOT( configurationChanged() ) );
1299 connect( ConfigureDialog, SIGNAL( okClicked() ), 1299 connect( ConfigureDialog, SIGNAL( okClicked() ),
1300 this, SLOT( configurationChanged() ) ); 1300 this, SLOT( configurationChanged() ) );
1301 saveSettings(); 1301 saveSettings();
1302#ifndef DESKTOP_VERSION 1302#ifndef DESKTOP_VERSION
1303 ConfigureDialog->showMaximized(); 1303 ConfigureDialog->showMaximized();
1304#endif 1304#endif
1305 if ( ConfigureDialog->exec() ) 1305 if ( ConfigureDialog->exec() )
1306 KMessageBox::information( this, i18n("Some changes are only\neffective after a restart!\n") ); 1306 KMessageBox::information( this, i18n("Some changes are only\neffective after a restart!\n") );
1307 delete ConfigureDialog; 1307 delete ConfigureDialog;
1308} 1308}
1309 1309
1310void KABCore::openLDAPDialog() 1310void KABCore::openLDAPDialog()
1311{ 1311{
1312#ifndef KAB_EMBEDDED 1312#ifndef KAB_EMBEDDED
1313 if ( !mLdapSearchDialog ) { 1313 if ( !mLdapSearchDialog ) {
1314 mLdapSearchDialog = new LDAPSearchDialog( mAddressBook, this ); 1314 mLdapSearchDialog = new LDAPSearchDialog( mAddressBook, this );
1315 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), mViewManager, 1315 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), mViewManager,
1316 SLOT( refreshView() ) ); 1316 SLOT( refreshView() ) );
1317 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), this, 1317 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), this,
1318 SLOT( setModified() ) ); 1318 SLOT( setModified() ) );
1319 } else 1319 } else
1320 mLdapSearchDialog->restoreSettings(); 1320 mLdapSearchDialog->restoreSettings();
1321 1321
1322 if ( mLdapSearchDialog->isOK() ) 1322 if ( mLdapSearchDialog->isOK() )
1323 mLdapSearchDialog->exec(); 1323 mLdapSearchDialog->exec();
1324#else //KAB_EMBEDDED 1324#else //KAB_EMBEDDED
1325 qDebug("KABCore::openLDAPDialog() finsih method"); 1325 qDebug("KABCore::openLDAPDialog() finsih method");
1326#endif //KAB_EMBEDDED 1326#endif //KAB_EMBEDDED
1327} 1327}
1328 1328
1329void KABCore::print() 1329void KABCore::print()
1330{ 1330{
1331#ifndef KAB_EMBEDDED 1331#ifndef KAB_EMBEDDED
1332 KPrinter printer; 1332 KPrinter printer;
1333 if ( !printer.setup( this ) ) 1333 if ( !printer.setup( this ) )
1334 return; 1334 return;
1335 1335
1336 KABPrinting::PrintingWizard wizard( &printer, mAddressBook, 1336 KABPrinting::PrintingWizard wizard( &printer, mAddressBook,
1337 mViewManager->selectedUids(), this ); 1337 mViewManager->selectedUids(), this );
1338 1338
1339 wizard.exec(); 1339 wizard.exec();
1340#else //KAB_EMBEDDED 1340#else //KAB_EMBEDDED
1341 qDebug("KABCore::print() finsih method"); 1341 qDebug("KABCore::print() finsih method");
1342#endif //KAB_EMBEDDED 1342#endif //KAB_EMBEDDED
1343 1343
1344} 1344}
1345 1345
1346 1346
1347void KABCore::addGUIClient( KXMLGUIClient *client ) 1347void KABCore::addGUIClient( KXMLGUIClient *client )
1348{ 1348{
1349 if ( mGUIClient ) 1349 if ( mGUIClient )
1350 mGUIClient->insertChildClient( client ); 1350 mGUIClient->insertChildClient( client );
1351 else 1351 else
1352 KMessageBox::error( this, "no KXMLGUICLient"); 1352 KMessageBox::error( this, "no KXMLGUICLient");
1353} 1353}
1354 1354
1355 1355
1356void KABCore::configurationChanged() 1356void KABCore::configurationChanged()
1357{ 1357{
1358 mExtensionManager->reconfigure(); 1358 mExtensionManager->reconfigure();
1359} 1359}
1360 1360
1361void KABCore::addressBookChanged() 1361void KABCore::addressBookChanged()
1362{ 1362{
1363/*US 1363/*US
1364 QDictIterator<AddresseeEditorDialog> it( mEditorDict ); 1364 QDictIterator<AddresseeEditorDialog> it( mEditorDict );
1365 while ( it.current() ) { 1365 while ( it.current() ) {
1366 if ( it.current()->dirty() ) { 1366 if ( it.current()->dirty() ) {
1367 QString text = i18n( "Data has been changed externally. Unsaved " 1367 QString text = i18n( "Data has been changed externally. Unsaved "
1368 "changes will be lost." ); 1368 "changes will be lost." );
1369 KMessageBox::information( this, text ); 1369 KMessageBox::information( this, text );
1370 } 1370 }
1371 it.current()->setAddressee( mAddressBook->findByUid( it.currentKey() ) ); 1371 it.current()->setAddressee( mAddressBook->findByUid( it.currentKey() ) );
1372 ++it; 1372 ++it;
1373 } 1373 }
1374*/ 1374*/
1375 if (mEditorDialog) 1375 if (mEditorDialog)
1376 { 1376 {
1377 if (mEditorDialog->dirty()) 1377 if (mEditorDialog->dirty())
1378 { 1378 {
1379 QString text = i18n( "Data has been changed externally. Unsaved " 1379 QString text = i18n( "Data has been changed externally. Unsaved "
1380 "changes will be lost." ); 1380 "changes will be lost." );
1381 KMessageBox::information( this, text ); 1381 KMessageBox::information( this, text );
1382 } 1382 }
1383 QString currentuid = mEditorDialog->addressee().uid(); 1383 QString currentuid = mEditorDialog->addressee().uid();
1384 mEditorDialog->setAddressee( mAddressBook->findByUid( currentuid ) ); 1384 mEditorDialog->setAddressee( mAddressBook->findByUid( currentuid ) );
1385 } 1385 }
1386 mViewManager->refreshView(); 1386 mViewManager->refreshView();
1387// mDetails->refreshView(); 1387// mDetails->refreshView();
1388 1388
1389 1389
1390} 1390}
1391 1391
1392AddresseeEditorDialog *KABCore::createAddresseeEditorDialog( QWidget *parent, 1392AddresseeEditorDialog *KABCore::createAddresseeEditorDialog( QWidget *parent,
1393 const char *name ) 1393 const char *name )
1394{ 1394{
1395 1395
1396 if ( mEditorDialog == 0 ) { 1396 if ( mEditorDialog == 0 ) {
1397 mEditorDialog = new AddresseeEditorDialog( this, parent, 1397 mEditorDialog = new AddresseeEditorDialog( this, parent,
1398 name ? name : "editorDialog" ); 1398 name ? name : "editorDialog" );
1399 1399
1400 1400
1401 connect( mEditorDialog, SIGNAL( contactModified( const KABC::Addressee& ) ), 1401 connect( mEditorDialog, SIGNAL( contactModified( const KABC::Addressee& ) ),
1402 SLOT( contactModified( const KABC::Addressee& ) ) ); 1402 SLOT( contactModified( const KABC::Addressee& ) ) );
1403 //connect( mEditorDialog, SIGNAL( editorDestroyed( const QString& ) ), 1403 //connect( mEditorDialog, SIGNAL( editorDestroyed( const QString& ) ),
1404 // SLOT( slotEditorDestroyed( const QString& ) ) ; 1404 // SLOT( slotEditorDestroyed( const QString& ) ) ;
1405 } 1405 }
1406 1406
1407 return mEditorDialog; 1407 return mEditorDialog;
1408} 1408}
1409 1409
1410void KABCore::slotEditorDestroyed( const QString &uid ) 1410void KABCore::slotEditorDestroyed( const QString &uid )
1411{ 1411{
1412 //mEditorDict.remove( uid ); 1412 //mEditorDict.remove( uid );
1413} 1413}
1414 1414
1415void KABCore::initGUI() 1415void KABCore::initGUI()
1416{ 1416{
1417#ifndef KAB_EMBEDDED 1417#ifndef KAB_EMBEDDED
1418 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1418 QHBoxLayout *topLayout = new QHBoxLayout( this );
1419 topLayout->setSpacing( KDialogBase::spacingHint() ); 1419 topLayout->setSpacing( KDialogBase::spacingHint() );
1420 1420
1421 mExtensionBarSplitter = new QSplitter( this ); 1421 mExtensionBarSplitter = new QSplitter( this );
1422 mExtensionBarSplitter->setOrientation( Qt::Vertical ); 1422 mExtensionBarSplitter->setOrientation( Qt::Vertical );
1423 1423
1424 mDetailsSplitter = new QSplitter( mExtensionBarSplitter ); 1424 mDetailsSplitter = new QSplitter( mExtensionBarSplitter );
1425 1425
1426 QVBox *viewSpace = new QVBox( mDetailsSplitter ); 1426 QVBox *viewSpace = new QVBox( mDetailsSplitter );
1427 mIncSearchWidget = new IncSearchWidget( viewSpace ); 1427 mIncSearchWidget = new IncSearchWidget( viewSpace );
1428 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 1428 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
1429 SLOT( incrementalSearch( const QString& ) ) ); 1429 SLOT( incrementalSearch( const QString& ) ) );
1430 1430
1431 mViewManager = new ViewManager( this, viewSpace ); 1431 mViewManager = new ViewManager( this, viewSpace );
1432 viewSpace->setStretchFactor( mViewManager, 1 ); 1432 viewSpace->setStretchFactor( mViewManager, 1 );
1433 1433
1434 mDetails = new ViewContainer( mDetailsSplitter ); 1434 mDetails = new ViewContainer( mDetailsSplitter );
1435 1435
1436 mJumpButtonBar = new JumpButtonBar( this, this ); 1436 mJumpButtonBar = new JumpButtonBar( this, this );
1437 1437
1438 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter ); 1438 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter );
1439 1439
1440 topLayout->addWidget( mExtensionBarSplitter ); 1440 topLayout->addWidget( mExtensionBarSplitter );
1441 topLayout->setStretchFactor( mExtensionBarSplitter, 100 ); 1441 topLayout->setStretchFactor( mExtensionBarSplitter, 100 );
1442 topLayout->addWidget( mJumpButtonBar ); 1442 topLayout->addWidget( mJumpButtonBar );
1443 topLayout->setStretchFactor( mJumpButtonBar, 1 ); 1443 topLayout->setStretchFactor( mJumpButtonBar, 1 );
1444 1444
1445 mXXPortManager = new XXPortManager( this, this ); 1445 mXXPortManager = new XXPortManager( this, this );
1446 1446
1447#else //KAB_EMBEDDED 1447#else //KAB_EMBEDDED
1448 //US initialize viewMenu before settingup viewmanager. 1448 //US initialize viewMenu before settingup viewmanager.
1449 // Viewmanager needs this menu to plugin submenues. 1449 // Viewmanager needs this menu to plugin submenues.
1450 viewMenu = new QPopupMenu( this ); 1450 viewMenu = new QPopupMenu( this );
1451 settingsMenu = new QPopupMenu( this ); 1451 settingsMenu = new QPopupMenu( this );
1452 //filterMenu = new QPopupMenu( this ); 1452 //filterMenu = new QPopupMenu( this );
1453 ImportMenu = new QPopupMenu( this ); 1453 ImportMenu = new QPopupMenu( this );
1454 ExportMenu = new QPopupMenu( this ); 1454 ExportMenu = new QPopupMenu( this );
1455 syncMenu = new QPopupMenu( this ); 1455 syncMenu = new QPopupMenu( this );
1456 changeMenu= new QPopupMenu( this ); 1456 changeMenu= new QPopupMenu( this );
1457 1457
1458//US since we have no splitter for the embedded system, setup 1458//US since we have no splitter for the embedded system, setup
1459// a layout with two frames. One left and one right. 1459// a layout with two frames. One left and one right.
1460 1460
1461 QBoxLayout *topLayout; 1461 QBoxLayout *topLayout;
1462 1462
1463 // = new QHBoxLayout( this ); 1463 // = new QHBoxLayout( this );
1464// QBoxLayout *topLayout = (QBoxLayout*)layout(); 1464// QBoxLayout *topLayout = (QBoxLayout*)layout();
1465 1465
1466// QWidget *mainBox = new QWidget( this ); 1466// QWidget *mainBox = new QWidget( this );
1467// QBoxLayout * mainBoxLayout = new QHBoxLayout(mainBox); 1467// QBoxLayout * mainBoxLayout = new QHBoxLayout(mainBox);
1468 1468
1469#ifdef DESKTOP_VERSION 1469#ifdef DESKTOP_VERSION
1470 topLayout = new QHBoxLayout( this ); 1470 topLayout = new QHBoxLayout( this );
1471 1471
1472 1472
1473 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 1473 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
1474 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 1474 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
1475 1475
1476 topLayout->addWidget(mMiniSplitter ); 1476 topLayout->addWidget(mMiniSplitter );
1477 1477
1478 mExtensionBarSplitter = new KDGanttMinimizeSplitter( Qt::Vertical,mMiniSplitter ); 1478 mExtensionBarSplitter = new KDGanttMinimizeSplitter( Qt::Vertical,mMiniSplitter );
1479 mExtensionBarSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down ); 1479 mExtensionBarSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down );
1480 mViewManager = new ViewManager( this, mExtensionBarSplitter ); 1480 mViewManager = new ViewManager( this, mExtensionBarSplitter );
1481 mDetails = new ViewContainer( mMiniSplitter ); 1481 mDetails = new ViewContainer( mMiniSplitter );
1482 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter ); 1482 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter );
1483#else 1483#else
1484 if ( QApplication::desktop()->width() > 480 ) { 1484 if ( QApplication::desktop()->width() > 480 ) {
1485 topLayout = new QHBoxLayout( this ); 1485 topLayout = new QHBoxLayout( this );
1486 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 1486 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
1487 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 1487 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
1488 } else { 1488 } else {
1489 1489
1490 topLayout = new QHBoxLayout( this ); 1490 topLayout = new QHBoxLayout( this );
1491 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Vertical, this); 1491 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Vertical, this);
1492 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down ); 1492 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down );
1493 } 1493 }
1494 1494
1495 topLayout->addWidget(mMiniSplitter ); 1495 topLayout->addWidget(mMiniSplitter );
1496 mViewManager = new ViewManager( this, mMiniSplitter ); 1496 mViewManager = new ViewManager( this, mMiniSplitter );
1497 mDetails = new ViewContainer( mMiniSplitter ); 1497 mDetails = new ViewContainer( mMiniSplitter );
1498 1498
1499 1499
1500 mExtensionManager = new ExtensionManager( this, mMiniSplitter ); 1500 mExtensionManager = new ExtensionManager( this, mMiniSplitter );
1501#endif 1501#endif
1502 //eh->hide(); 1502 //eh->hide();
1503 // topLayout->addWidget(mExtensionManager ); 1503 // topLayout->addWidget(mExtensionManager );
1504 1504
1505 1505
1506/*US 1506/*US
1507#ifndef KAB_NOSPLITTER 1507#ifndef KAB_NOSPLITTER
1508 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1508 QHBoxLayout *topLayout = new QHBoxLayout( this );
1509//US topLayout->setSpacing( KDialogBase::spacingHint() ); 1509//US topLayout->setSpacing( KDialogBase::spacingHint() );
1510 topLayout->setSpacing( 10 ); 1510 topLayout->setSpacing( 10 );
1511 1511
1512 mDetailsSplitter = new QSplitter( this ); 1512 mDetailsSplitter = new QSplitter( this );
1513 1513
1514 QVBox *viewSpace = new QVBox( mDetailsSplitter ); 1514 QVBox *viewSpace = new QVBox( mDetailsSplitter );
1515 1515
1516 mViewManager = new ViewManager( this, viewSpace ); 1516 mViewManager = new ViewManager( this, viewSpace );
1517 viewSpace->setStretchFactor( mViewManager, 1 ); 1517 viewSpace->setStretchFactor( mViewManager, 1 );
1518 1518
1519 mDetails = new ViewContainer( mDetailsSplitter ); 1519 mDetails = new ViewContainer( mDetailsSplitter );
1520 1520
1521 topLayout->addWidget( mDetailsSplitter ); 1521 topLayout->addWidget( mDetailsSplitter );
1522 topLayout->setStretchFactor( mDetailsSplitter, 100 ); 1522 topLayout->setStretchFactor( mDetailsSplitter, 100 );
1523#else //KAB_NOSPLITTER 1523#else //KAB_NOSPLITTER
1524 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1524 QHBoxLayout *topLayout = new QHBoxLayout( this );
1525//US topLayout->setSpacing( KDialogBase::spacingHint() ); 1525//US topLayout->setSpacing( KDialogBase::spacingHint() );
1526 topLayout->setSpacing( 10 ); 1526 topLayout->setSpacing( 10 );
1527 1527
1528// mDetailsSplitter = new QSplitter( this ); 1528// mDetailsSplitter = new QSplitter( this );
1529 1529
1530 QVBox *viewSpace = new QVBox( this ); 1530 QVBox *viewSpace = new QVBox( this );
1531 1531
1532 mViewManager = new ViewManager( this, viewSpace ); 1532 mViewManager = new ViewManager( this, viewSpace );
1533 viewSpace->setStretchFactor( mViewManager, 1 ); 1533 viewSpace->setStretchFactor( mViewManager, 1 );
1534 1534
1535 mDetails = new ViewContainer( this ); 1535 mDetails = new ViewContainer( this );
1536 1536
1537 topLayout->addWidget( viewSpace ); 1537 topLayout->addWidget( viewSpace );
1538// topLayout->setStretchFactor( mDetailsSplitter, 100 ); 1538// topLayout->setStretchFactor( mDetailsSplitter, 100 );
1539 topLayout->addWidget( mDetails ); 1539 topLayout->addWidget( mDetails );
1540#endif //KAB_NOSPLITTER 1540#endif //KAB_NOSPLITTER
1541*/ 1541*/
1542 1542
1543 1543
1544#endif //KAB_EMBEDDED 1544#endif //KAB_EMBEDDED
1545 initActions(); 1545 initActions();
1546 1546
1547#ifdef KAB_EMBEDDED 1547#ifdef KAB_EMBEDDED
1548 addActionsManually(); 1548 addActionsManually();
1549 //US make sure the export and import menues are initialized before creating the xxPortManager. 1549 //US make sure the export and import menues are initialized before creating the xxPortManager.
1550 mXXPortManager = new XXPortManager( this, this ); 1550 mXXPortManager = new XXPortManager( this, this );
1551 1551
1552 // LR mIncSearchWidget = new IncSearchWidget( mMainWindow->getIconToolBar() ); 1552 // LR mIncSearchWidget = new IncSearchWidget( mMainWindow->getIconToolBar() );
1553 //mMainWindow->toolBar()->insertWidget(-1, 4, mIncSearchWidget); 1553 //mMainWindow->toolBar()->insertWidget(-1, 4, mIncSearchWidget);
1554 // mActionQuit->plug ( mMainWindow->toolBar()); 1554 // mActionQuit->plug ( mMainWindow->toolBar());
1555 //mIncSearchWidget = new IncSearchWidget( mMainWindow->toolBar() ); 1555 //mIncSearchWidget = new IncSearchWidget( mMainWindow->toolBar() );
1556 //mMainWindow->toolBar()->insertWidget(-1, 0, mIncSearchWidget); 1556 //mMainWindow->toolBar()->insertWidget(-1, 0, mIncSearchWidget);
1557 // mIncSearchWidget->hide(); 1557 // mIncSearchWidget->hide();
1558 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 1558 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
1559 SLOT( incrementalSearch( const QString& ) ) ); 1559 SLOT( incrementalSearch( const QString& ) ) );
1560 1560
1561 1561
1562 mJumpButtonBar = new JumpButtonBar( this, this ); 1562 mJumpButtonBar = new JumpButtonBar( this, this );
1563 1563
1564 topLayout->addWidget( mJumpButtonBar ); 1564 topLayout->addWidget( mJumpButtonBar );
1565//US topLayout->setStretchFactor( mJumpButtonBar, 10 ); 1565//US topLayout->setStretchFactor( mJumpButtonBar, 10 );
1566 1566
1567// mMainWindow->getIconToolBar()->raise(); 1567// mMainWindow->getIconToolBar()->raise();
1568 1568
1569#endif //KAB_EMBEDDED 1569#endif //KAB_EMBEDDED
1570 1570
1571} 1571}
1572void KABCore::initActions() 1572void KABCore::initActions()
1573{ 1573{
1574//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart); 1574//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart);
1575 1575
1576#ifndef KAB_EMBEDDED 1576#ifndef KAB_EMBEDDED
1577 connect( QApplication::clipboard(), SIGNAL( dataChanged() ), 1577 connect( QApplication::clipboard(), SIGNAL( dataChanged() ),
1578 SLOT( clipboardDataChanged() ) ); 1578 SLOT( clipboardDataChanged() ) );
1579#endif //KAB_EMBEDDED 1579#endif //KAB_EMBEDDED
1580 1580
1581 // file menu 1581 // file menu
1582 if ( mIsPart ) { 1582 if ( mIsPart ) {
1583 mActionMail = new KAction( i18n( "&Mail" ), "mail_generic", 0, this, 1583 mActionMail = new KAction( i18n( "&Mail" ), "mail_generic", 0, this,
1584 SLOT( sendMail() ), actionCollection(), 1584 SLOT( sendMail() ), actionCollection(),
1585 "kaddressbook_mail" ); 1585 "kaddressbook_mail" );
1586 mActionPrint = new KAction( i18n( "&Print" ), "fileprint", CTRL + Key_P, this, 1586 mActionPrint = new KAction( i18n( "&Print" ), "fileprint", CTRL + Key_P, this,
1587 SLOT( print() ), actionCollection(), "kaddressbook_print" ); 1587 SLOT( print() ), actionCollection(), "kaddressbook_print" );
1588 1588
1589 } else { 1589 } else {
1590 mActionMail = KStdAction::mail( this, SLOT( sendMail() ), actionCollection() ); 1590 mActionMail = KStdAction::mail( this, SLOT( sendMail() ), actionCollection() );
1591 mActionPrint = KStdAction::print( this, SLOT( print() ), actionCollection() ); 1591 mActionPrint = KStdAction::print( this, SLOT( print() ), actionCollection() );
1592 } 1592 }
1593 1593
1594 1594
1595 mActionSave = new KAction( i18n( "&Save" ), "filesave", CTRL+Key_S, this, 1595 mActionSave = new KAction( i18n( "&Save" ), "filesave", CTRL+Key_S, this,
1596 SLOT( save() ), actionCollection(), "file_sync" ); 1596 SLOT( save() ), actionCollection(), "file_sync" );
1597 1597
1598 mActionNewContact = new KAction( i18n( "&New Contact..." ), "filenew", CTRL+Key_N, this, 1598 mActionNewContact = new KAction( i18n( "&New Contact..." ), "filenew", CTRL+Key_N, this,
1599 SLOT( newContact() ), actionCollection(), "file_new_contact" ); 1599 SLOT( newContact() ), actionCollection(), "file_new_contact" );
1600 1600
1601 mActionMailVCard = new KAction(i18n("Mail &vCard..."), "mail_post_to", 0, 1601 mActionMailVCard = new KAction(i18n("Mail &vCard..."), "mail_post_to", 0,
1602 this, SLOT( mailVCard() ), 1602 this, SLOT( mailVCard() ),
1603 actionCollection(), "file_mail_vcard"); 1603 actionCollection(), "file_mail_vcard");
1604 1604
1605 mActionBeamVCard = 0; 1605 mActionBeamVCard = 0;
1606 mActionBeam = 0; 1606 mActionBeam = 0;
1607 1607
1608#ifndef DESKTOP_VERSION 1608#ifndef DESKTOP_VERSION
1609 if ( Ir::supported() ) { 1609 if ( Ir::supported() ) {
1610 mActionBeamVCard = new KAction( i18n( "Beam selected v&Card(s)" ), "beam", 0, this, 1610 mActionBeamVCard = new KAction( i18n( "Beam selected v&Card(s)" ), "beam", 0, this,
1611 SLOT( beamVCard() ), actionCollection(), 1611 SLOT( beamVCard() ), actionCollection(),
1612 "kaddressbook_beam_vcard" ); 1612 "kaddressbook_beam_vcard" );
1613 1613
1614 mActionBeam = new KAction( i18n( "&Beam personal vCard" ), "beam", 0, this, 1614 mActionBeam = new KAction( i18n( "&Beam personal vCard" ), "beam", 0, this,
1615 SLOT( beamMySelf() ), actionCollection(), 1615 SLOT( beamMySelf() ), actionCollection(),
1616 "kaddressbook_beam_myself" ); 1616 "kaddressbook_beam_myself" );
1617 } 1617 }
1618#endif 1618#endif
1619 1619
1620 mActionEditAddressee = new KAction( i18n( "&Edit Contact..." ), "edit", 0, 1620 mActionEditAddressee = new KAction( i18n( "&Edit Contact..." ), "edit", 0,
1621 this, SLOT( editContact2() ), 1621 this, SLOT( editContact2() ),
1622 actionCollection(), "file_properties" ); 1622 actionCollection(), "file_properties" );
1623 1623
1624#ifdef KAB_EMBEDDED 1624#ifdef KAB_EMBEDDED
1625 // mActionQuit = KStdAction::quit( mMainWindow, SLOT( exit() ), actionCollection() ); 1625 // mActionQuit = KStdAction::quit( mMainWindow, SLOT( exit() ), actionCollection() );
1626 mActionQuit = new KAction( i18n( "&Exit" ), "exit", 0, 1626 mActionQuit = new KAction( i18n( "&Exit" ), "exit", 0,
1627 mMainWindow, SLOT( exit() ), 1627 mMainWindow, SLOT( exit() ),
1628 actionCollection(), "quit" ); 1628 actionCollection(), "quit" );
1629#endif //KAB_EMBEDDED 1629#endif //KAB_EMBEDDED
1630 1630
1631 // edit menu 1631 // edit menu
1632 if ( mIsPart ) { 1632 if ( mIsPart ) {
1633 mActionCopy = new KAction( i18n( "&Copy" ), "editcopy", CTRL + Key_C, this, 1633 mActionCopy = new KAction( i18n( "&Copy" ), "editcopy", CTRL + Key_C, this,
1634 SLOT( copyContacts() ), actionCollection(), 1634 SLOT( copyContacts() ), actionCollection(),
1635 "kaddressbook_copy" ); 1635 "kaddressbook_copy" );
1636 mActionCut = new KAction( i18n( "Cu&t" ), "editcut", CTRL + Key_X, this, 1636 mActionCut = new KAction( i18n( "Cu&t" ), "editcut", CTRL + Key_X, this,
1637 SLOT( cutContacts() ), actionCollection(), 1637 SLOT( cutContacts() ), actionCollection(),
1638 "kaddressbook_cut" ); 1638 "kaddressbook_cut" );
1639 mActionPaste = new KAction( i18n( "&Paste" ), "editpaste", CTRL + Key_V, this, 1639 mActionPaste = new KAction( i18n( "&Paste" ), "editpaste", CTRL + Key_V, this,
1640 SLOT( pasteContacts() ), actionCollection(), 1640 SLOT( pasteContacts() ), actionCollection(),
1641 "kaddressbook_paste" ); 1641 "kaddressbook_paste" );
1642 mActionSelectAll = new KAction( i18n( "Select &All" ), CTRL + Key_A, this, 1642 mActionSelectAll = new KAction( i18n( "Select &All" ), CTRL + Key_A, this,
1643 SLOT( selectAllContacts() ), actionCollection(), 1643 SLOT( selectAllContacts() ), actionCollection(),
1644 "kaddressbook_select_all" ); 1644 "kaddressbook_select_all" );
1645 mActionUndo = new KAction( i18n( "&Undo" ), "undo", CTRL + Key_Z, this, 1645 mActionUndo = new KAction( i18n( "&Undo" ), "undo", CTRL + Key_Z, this,
1646 SLOT( undo() ), actionCollection(), 1646 SLOT( undo() ), actionCollection(),
1647 "kaddressbook_undo" ); 1647 "kaddressbook_undo" );
1648 mActionRedo = new KAction( i18n( "Re&do" ), "redo", CTRL + SHIFT + Key_Z, 1648 mActionRedo = new KAction( i18n( "Re&do" ), "redo", CTRL + SHIFT + Key_Z,
1649 this, SLOT( redo() ), actionCollection(), 1649 this, SLOT( redo() ), actionCollection(),
1650 "kaddressbook_redo" ); 1650 "kaddressbook_redo" );
1651 } else { 1651 } else {
1652 mActionCopy = KStdAction::copy( this, SLOT( copyContacts() ), actionCollection() ); 1652 mActionCopy = KStdAction::copy( this, SLOT( copyContacts() ), actionCollection() );
1653 mActionCut = KStdAction::cut( this, SLOT( cutContacts() ), actionCollection() ); 1653 mActionCut = KStdAction::cut( this, SLOT( cutContacts() ), actionCollection() );
1654 mActionPaste = KStdAction::paste( this, SLOT( pasteContacts() ), actionCollection() ); 1654 mActionPaste = KStdAction::paste( this, SLOT( pasteContacts() ), actionCollection() );
1655 mActionSelectAll = KStdAction::selectAll( this, SLOT( selectAllContacts() ), actionCollection() ); 1655 mActionSelectAll = KStdAction::selectAll( this, SLOT( selectAllContacts() ), actionCollection() );
1656 mActionUndo = KStdAction::undo( this, SLOT( undo() ), actionCollection() ); 1656 mActionUndo = KStdAction::undo( this, SLOT( undo() ), actionCollection() );
1657 mActionRedo = KStdAction::redo( this, SLOT( redo() ), actionCollection() ); 1657 mActionRedo = KStdAction::redo( this, SLOT( redo() ), actionCollection() );
1658 } 1658 }
1659 1659
1660 mActionDelete = new KAction( i18n( "&Delete Contact" ), "editdelete", 1660 mActionDelete = new KAction( i18n( "&Delete Contact" ), "editdelete",
1661 Key_Delete, this, SLOT( deleteContacts() ), 1661 Key_Delete, this, SLOT( deleteContacts() ),
1662 actionCollection(), "edit_delete" ); 1662 actionCollection(), "edit_delete" );
1663 1663
1664 mActionUndo->setEnabled( false ); 1664 mActionUndo->setEnabled( false );
1665 mActionRedo->setEnabled( false ); 1665 mActionRedo->setEnabled( false );
1666 1666
1667 // settings menu 1667 // settings menu
1668#ifdef KAB_EMBEDDED 1668#ifdef KAB_EMBEDDED
1669//US special menuentry to configure the addressbook resources. On KDE 1669//US special menuentry to configure the addressbook resources. On KDE
1670// you do that through the control center !!! 1670// you do that through the control center !!!
1671 mActionConfigResources = new KAction( i18n( "Configure &Resources..." ), "configure_resources", 0, this, 1671 mActionConfigResources = new KAction( i18n( "Configure &Resources..." ), "configure_resources", 0, this,
1672 SLOT( configureResources() ), actionCollection(), 1672 SLOT( configureResources() ), actionCollection(),
1673 "kaddressbook_configure_resources" ); 1673 "kaddressbook_configure_resources" );
1674#endif //KAB_EMBEDDED 1674#endif //KAB_EMBEDDED
1675 1675
1676 if ( mIsPart ) { 1676 if ( mIsPart ) {
1677 mActionConfigKAddressbook = new KAction( i18n( "&Configure KAddressBook..." ), "configure", 0, this, 1677 mActionConfigKAddressbook = new KAction( i18n( "&Configure KAddressBook..." ), "configure", 0, this,
1678 SLOT( openConfigDialog() ), actionCollection(), 1678 SLOT( openConfigDialog() ), actionCollection(),
1679 "kaddressbook_configure" ); 1679 "kaddressbook_configure" );
1680 1680
1681 mActionConfigShortcuts = new KAction( i18n( "Configure S&hortcuts..." ), "configure_shortcuts", 0, 1681 mActionConfigShortcuts = new KAction( i18n( "Configure S&hortcuts..." ), "configure_shortcuts", 0,
1682 this, SLOT( configureKeyBindings() ), actionCollection(), 1682 this, SLOT( configureKeyBindings() ), actionCollection(),
1683 "kaddressbook_configure_shortcuts" ); 1683 "kaddressbook_configure_shortcuts" );
1684#ifdef KAB_EMBEDDED 1684#ifdef KAB_EMBEDDED
1685 mActionConfigureToolbars = KStdAction::configureToolbars( this, SLOT( mMainWindow->configureToolbars() ), actionCollection() ); 1685 mActionConfigureToolbars = KStdAction::configureToolbars( this, SLOT( mMainWindow->configureToolbars() ), actionCollection() );
1686 mActionConfigureToolbars->setEnabled( false ); 1686 mActionConfigureToolbars->setEnabled( false );
1687#endif //KAB_EMBEDDED 1687#endif //KAB_EMBEDDED
1688 1688
1689 } else { 1689 } else {
1690 mActionConfigKAddressbook = KStdAction::preferences( this, SLOT( openConfigDialog() ), actionCollection() ); 1690 mActionConfigKAddressbook = KStdAction::preferences( this, SLOT( openConfigDialog() ), actionCollection() );
1691 1691
1692 mActionKeyBindings = KStdAction::keyBindings( this, SLOT( configureKeyBindings() ), actionCollection() ); 1692 mActionKeyBindings = KStdAction::keyBindings( this, SLOT( configureKeyBindings() ), actionCollection() );
1693 } 1693 }
1694 1694
1695 mActionJumpBar = new KToggleAction( i18n( "Show Jump Bar" ), 0, 0, 1695 mActionJumpBar = new KToggleAction( i18n( "Show Jump Bar" ), 0, 0,
1696 actionCollection(), "options_show_jump_bar" ); 1696 actionCollection(), "options_show_jump_bar" );
1697 connect( mActionJumpBar, SIGNAL( toggled( bool ) ), SLOT( setJumpButtonBarVisible( bool ) ) ); 1697 connect( mActionJumpBar, SIGNAL( toggled( bool ) ), SLOT( setJumpButtonBarVisible( bool ) ) );
1698 1698
1699 mActionDetails = new KToggleAction( i18n( "Show Details" ), "listview", 0, 1699 mActionDetails = new KToggleAction( i18n( "Show Details" ), "listview", 0,
1700 actionCollection(), "options_show_details" ); 1700 actionCollection(), "options_show_details" );
1701 connect( mActionDetails, SIGNAL( toggled( bool ) ), SLOT( setDetailsVisible( bool ) ) ); 1701 connect( mActionDetails, SIGNAL( toggled( bool ) ), SLOT( setDetailsVisible( bool ) ) );
1702 1702
1703 // misc 1703 // misc
1704 // only enable LDAP lookup if we can handle the protocol 1704 // only enable LDAP lookup if we can handle the protocol
1705#ifndef KAB_EMBEDDED 1705#ifndef KAB_EMBEDDED
1706 if ( KProtocolInfo::isKnownProtocol( KURL( "ldap://localhost" ) ) ) { 1706 if ( KProtocolInfo::isKnownProtocol( KURL( "ldap://localhost" ) ) ) {
1707 new KAction( i18n( "&Lookup Addresses in Directory" ), "find", 0, 1707 new KAction( i18n( "&Lookup Addresses in Directory" ), "find", 0,
1708 this, SLOT( openLDAPDialog() ), actionCollection(), 1708 this, SLOT( openLDAPDialog() ), actionCollection(),
1709 "ldap_lookup" ); 1709 "ldap_lookup" );
1710 } 1710 }
1711#else //KAB_EMBEDDED 1711#else //KAB_EMBEDDED
1712 //qDebug("KABCore::initActions() LDAP has to be implemented"); 1712 //qDebug("KABCore::initActions() LDAP has to be implemented");
1713#endif //KAB_EMBEDDED 1713#endif //KAB_EMBEDDED
1714 1714
1715 1715
1716 mActionWhoAmI = new KAction( i18n( "Set Who Am I" ), "personal", 0, this, 1716 mActionWhoAmI = new KAction( i18n( "Set Who Am I" ), "personal", 0, this,
1717 SLOT( setWhoAmI() ), actionCollection(), 1717 SLOT( setWhoAmI() ), actionCollection(),
1718 "set_personal" ); 1718 "set_personal" );
1719 1719
1720 1720
1721 1721
1722 1722
1723 mActionCategories = new KAction( i18n( "Set Categories" ), 0, this, 1723 mActionCategories = new KAction( i18n( "Set Categories" ), 0, this,
1724 SLOT( setCategories() ), actionCollection(), 1724 SLOT( setCategories() ), actionCollection(),
1725 "edit_set_categories" ); 1725 "edit_set_categories" );
1726 1726
1727 mActionRemoveVoice = new KAction( i18n( "Remove \"voice\"..." ), 0, this, 1727 mActionRemoveVoice = new KAction( i18n( "Remove \"voice\"..." ), 0, this,
1728 SLOT( removeVoice() ), actionCollection(), 1728 SLOT( removeVoice() ), actionCollection(),
1729 "remove_voice" ); 1729 "remove_voice" );
1730 mActionImportOL = new KAction( i18n( "Import from Outlook..." ), 0, this, 1730 mActionImportOL = new KAction( i18n( "Import from Outlook..." ), 0, this,
1731 SLOT( importFromOL() ), actionCollection(), 1731 SLOT( importFromOL() ), actionCollection(),
1732 "import_OL" ); 1732 "import_OL" );
1733#ifdef KAB_EMBEDDED 1733#ifdef KAB_EMBEDDED
1734 mActionLicence = new KAction( i18n( "Licence" ), 0, 1734 mActionLicence = new KAction( i18n( "Licence" ), 0,
1735 this, SLOT( showLicence() ), actionCollection(), 1735 this, SLOT( showLicence() ), actionCollection(),
1736 "licence_about_data" ); 1736 "licence_about_data" );
1737 mActionFaq = new KAction( i18n( "Faq" ), 0, 1737 mActionFaq = new KAction( i18n( "Faq" ), 0,
1738 this, SLOT( faq() ), actionCollection(), 1738 this, SLOT( faq() ), actionCollection(),
1739 "faq_about_data" ); 1739 "faq_about_data" );
1740 1740
1741 mActionAboutKAddressbook = new KAction( i18n( "&About KAddressBook" ), "kaddressbook2", 0, 1741 mActionAboutKAddressbook = new KAction( i18n( "&About KAddressBook" ), "kaddressbook2", 0,
1742 this, SLOT( createAboutData() ), actionCollection(), 1742 this, SLOT( createAboutData() ), actionCollection(),
1743 "kaddressbook_about_data" ); 1743 "kaddressbook_about_data" );
1744#endif //KAB_EMBEDDED 1744#endif //KAB_EMBEDDED
1745 1745
1746 clipboardDataChanged(); 1746 clipboardDataChanged();
1747 connect( UndoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) ); 1747 connect( UndoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) );
1748 connect( RedoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) ); 1748 connect( RedoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) );
1749} 1749}
1750 1750
1751//US we need this function, to plug all actions into the correct menues. 1751//US we need this function, to plug all actions into the correct menues.
1752// KDE uses a XML format to plug the actions, but we work her without this overhead. 1752// KDE uses a XML format to plug the actions, but we work her without this overhead.
1753void KABCore::addActionsManually() 1753void KABCore::addActionsManually()
1754{ 1754{
1755//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart); 1755//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart);
1756 1756
1757#ifdef KAB_EMBEDDED 1757#ifdef KAB_EMBEDDED
1758 QPopupMenu *fileMenu = new QPopupMenu( this ); 1758 QPopupMenu *fileMenu = new QPopupMenu( this );
1759 QPopupMenu *editMenu = new QPopupMenu( this ); 1759 QPopupMenu *editMenu = new QPopupMenu( this );
1760 QPopupMenu *helpMenu = new QPopupMenu( this ); 1760 QPopupMenu *helpMenu = new QPopupMenu( this );
1761 1761
1762 KToolBar* tb = mMainWindow->toolBar(); 1762 KToolBar* tb = mMainWindow->toolBar();
1763 1763
1764#ifdef DESKTOP_VERSION 1764#ifdef DESKTOP_VERSION
1765 QMenuBar* mb = mMainWindow->menuBar(); 1765 QMenuBar* mb = mMainWindow->menuBar();
1766 1766
1767 //US setup menubar. 1767 //US setup menubar.
1768 //Disable the following block if you do not want to have a menubar. 1768 //Disable the following block if you do not want to have a menubar.
1769 mb->insertItem( "&File", fileMenu ); 1769 mb->insertItem( "&File", fileMenu );
1770 mb->insertItem( "&Edit", editMenu ); 1770 mb->insertItem( "&Edit", editMenu );
1771 mb->insertItem( "&View", viewMenu ); 1771 mb->insertItem( "&View", viewMenu );
1772 mb->insertItem( "&Settings", settingsMenu ); 1772 mb->insertItem( "&Settings", settingsMenu );
1773 mb->insertItem( i18n("Synchronize"), syncMenu ); 1773 mb->insertItem( i18n("Synchronize"), syncMenu );
1774 mb->insertItem( "&Change selected", changeMenu ); 1774 mb->insertItem( "&Change selected", changeMenu );
1775 mb->insertItem( "&Help", helpMenu ); 1775 mb->insertItem( "&Help", helpMenu );
1776 mIncSearchWidget = new IncSearchWidget( tb ); 1776 mIncSearchWidget = new IncSearchWidget( tb );
1777 // tb->insertWidget(-1, 0, mIncSearchWidget); 1777 // tb->insertWidget(-1, 0, mIncSearchWidget);
1778 1778
1779#else 1779#else
1780 //US setup toolbar 1780 //US setup toolbar
1781 QPEMenuBar *menuBarTB = new QPEMenuBar( tb ); 1781 QPEMenuBar *menuBarTB = new QPEMenuBar( tb );
1782 QPopupMenu *popupBarTB = new QPopupMenu( this ); 1782 QPopupMenu *popupBarTB = new QPopupMenu( this );
1783 menuBarTB->insertItem( "ME", popupBarTB); 1783 menuBarTB->insertItem( "ME", popupBarTB);
1784 tb->insertWidget(-1, 0, menuBarTB); 1784 tb->insertWidget(-1, 0, menuBarTB);
1785 mIncSearchWidget = new IncSearchWidget( tb ); 1785 mIncSearchWidget = new IncSearchWidget( tb );
1786 1786
1787 tb->enableMoving(false); 1787 tb->enableMoving(false);
1788 popupBarTB->insertItem( "&File", fileMenu ); 1788 popupBarTB->insertItem( "&File", fileMenu );
1789 popupBarTB->insertItem( "&Edit", editMenu ); 1789 popupBarTB->insertItem( "&Edit", editMenu );
1790 popupBarTB->insertItem( "&View", viewMenu ); 1790 popupBarTB->insertItem( "&View", viewMenu );
1791 popupBarTB->insertItem( "&Settings", settingsMenu ); 1791 popupBarTB->insertItem( "&Settings", settingsMenu );
1792 popupBarTB->insertItem( i18n("Synchronize"), syncMenu ); 1792 popupBarTB->insertItem( i18n("Synchronize"), syncMenu );
1793 mViewManager->getFilterAction()->plug ( popupBarTB); 1793 mViewManager->getFilterAction()->plug ( popupBarTB);
1794 popupBarTB->insertItem( "&Change selected", changeMenu ); 1794 popupBarTB->insertItem( "&Change selected", changeMenu );
1795 popupBarTB->insertItem( "&Help", helpMenu ); 1795 popupBarTB->insertItem( "&Help", helpMenu );
1796 if (QApplication::desktop()->width() > 320 ) { 1796 if (QApplication::desktop()->width() > 320 ) {
1797 // mViewManager->getFilterAction()->plug ( tb); 1797 // mViewManager->getFilterAction()->plug ( tb);
1798 } 1798 }
1799#endif 1799#endif
1800 // mActionQuit->plug ( mMainWindow->toolBar()); 1800 // mActionQuit->plug ( mMainWindow->toolBar());
1801 1801
1802 1802
1803 1803
1804 //US Now connect the actions with the menue entries. 1804 //US Now connect the actions with the menue entries.
1805 mActionPrint->plug( fileMenu ); 1805 mActionPrint->plug( fileMenu );
1806 mActionMail->plug( fileMenu ); 1806 mActionMail->plug( fileMenu );
1807 fileMenu->insertSeparator(); 1807 fileMenu->insertSeparator();
1808 1808
1809 mActionNewContact->plug( fileMenu ); 1809 mActionNewContact->plug( fileMenu );
1810 mActionNewContact->plug( tb ); 1810 mActionNewContact->plug( tb );
1811 1811
1812 mActionEditAddressee->plug( fileMenu ); 1812 mActionEditAddressee->plug( fileMenu );
1813 if ((KGlobal::getDesktopSize() > KGlobal::Small ) || 1813 if ((KGlobal::getDesktopSize() > KGlobal::Small ) ||
1814 (!KABPrefs::instance()->mMultipleViewsAtOnce )) 1814 (!KABPrefs::instance()->mMultipleViewsAtOnce ))
1815 mActionEditAddressee->plug( tb ); 1815 mActionEditAddressee->plug( tb );
1816 1816
1817 fileMenu->insertSeparator(); 1817 fileMenu->insertSeparator();
1818 mActionSave->plug( fileMenu ); 1818 mActionSave->plug( fileMenu );
1819 fileMenu->insertItem( "&Import", ImportMenu ); 1819 fileMenu->insertItem( "&Import", ImportMenu );
1820 fileMenu->insertItem( "&Export", ExportMenu ); 1820 fileMenu->insertItem( "&Export", ExportMenu );
1821 fileMenu->insertSeparator(); 1821 fileMenu->insertSeparator();
1822 mActionMailVCard->plug( fileMenu ); 1822 mActionMailVCard->plug( fileMenu );
1823#ifndef DESKTOP_VERSION 1823#ifndef DESKTOP_VERSION
1824 if ( Ir::supported() ) mActionBeamVCard->plug( fileMenu ); 1824 if ( Ir::supported() ) mActionBeamVCard->plug( fileMenu );
1825 if ( Ir::supported() ) mActionBeam->plug(fileMenu ); 1825 if ( Ir::supported() ) mActionBeam->plug(fileMenu );
1826#endif 1826#endif
1827 fileMenu->insertSeparator(); 1827 fileMenu->insertSeparator();
1828 mActionQuit->plug( fileMenu ); 1828 mActionQuit->plug( fileMenu );
1829#ifdef _WIN32_ 1829#ifdef _WIN32_
1830 mActionImportOL->plug( ImportMenu ); 1830 mActionImportOL->plug( ImportMenu );
1831#endif 1831#endif
1832 // edit menu 1832 // edit menu
1833 mActionUndo->plug( editMenu ); 1833 mActionUndo->plug( editMenu );
1834 mActionRedo->plug( editMenu ); 1834 mActionRedo->plug( editMenu );
1835 editMenu->insertSeparator(); 1835 editMenu->insertSeparator();
1836 mActionCut->plug( editMenu ); 1836 mActionCut->plug( editMenu );
1837 mActionCopy->plug( editMenu ); 1837 mActionCopy->plug( editMenu );
1838 mActionPaste->plug( editMenu ); 1838 mActionPaste->plug( editMenu );
1839 mActionDelete->plug( editMenu ); 1839 mActionDelete->plug( editMenu );
1840 editMenu->insertSeparator(); 1840 editMenu->insertSeparator();
1841 mActionSelectAll->plug( editMenu ); 1841 mActionSelectAll->plug( editMenu );
1842 1842
1843 mActionRemoveVoice->plug( changeMenu ); 1843 mActionRemoveVoice->plug( changeMenu );
1844 // settings menu 1844 // settings menu
1845//US special menuentry to configure the addressbook resources. On KDE 1845//US special menuentry to configure the addressbook resources. On KDE
1846// you do that through the control center !!! 1846// you do that through the control center !!!
1847 mActionConfigResources->plug( settingsMenu ); 1847 mActionConfigResources->plug( settingsMenu );
1848 settingsMenu->insertSeparator(); 1848 settingsMenu->insertSeparator();
1849 1849
1850 mActionConfigKAddressbook->plug( settingsMenu ); 1850 mActionConfigKAddressbook->plug( settingsMenu );
1851 1851
1852 if ( mIsPart ) { 1852 if ( mIsPart ) {
1853 mActionConfigShortcuts->plug( settingsMenu ); 1853 mActionConfigShortcuts->plug( settingsMenu );
1854 mActionConfigureToolbars->plug( settingsMenu ); 1854 mActionConfigureToolbars->plug( settingsMenu );
1855 1855
1856 } else { 1856 } else {
1857 mActionKeyBindings->plug( settingsMenu ); 1857 mActionKeyBindings->plug( settingsMenu );
1858 } 1858 }
1859 1859
1860 settingsMenu->insertSeparator(); 1860 settingsMenu->insertSeparator();
1861 1861
1862 mActionJumpBar->plug( settingsMenu ); 1862 mActionJumpBar->plug( settingsMenu );
1863 mActionDetails->plug( settingsMenu ); 1863 mActionDetails->plug( settingsMenu );
1864 if (!KABPrefs::instance()->mMultipleViewsAtOnce || KGlobal::getDesktopSize() == KGlobal::Desktop ) 1864 if (!KABPrefs::instance()->mMultipleViewsAtOnce || KGlobal::getDesktopSize() == KGlobal::Desktop )
1865 mActionDetails->plug( tb ); 1865 mActionDetails->plug( tb );
1866 settingsMenu->insertSeparator(); 1866 settingsMenu->insertSeparator();
1867 1867
1868 mActionWhoAmI->plug( settingsMenu ); 1868 mActionWhoAmI->plug( settingsMenu );
1869 mActionCategories->plug( settingsMenu ); 1869 mActionCategories->plug( settingsMenu );
1870 1870
1871 mActionLicence->plug( helpMenu ); 1871 mActionLicence->plug( helpMenu );
1872 mActionFaq->plug( helpMenu ); 1872 mActionFaq->plug( helpMenu );
1873 mActionAboutKAddressbook->plug( helpMenu ); 1873 mActionAboutKAddressbook->plug( helpMenu );
1874 1874
1875 if (KGlobal::getDesktopSize() > KGlobal::Small ) { 1875 if (KGlobal::getDesktopSize() > KGlobal::Small ) {
1876 1876
1877 mActionSave->plug( tb ); 1877 mActionSave->plug( tb );
1878 mViewManager->getFilterAction()->plug ( tb); 1878 mViewManager->getFilterAction()->plug ( tb);
1879 if (KGlobal::getDesktopSize() == KGlobal::Desktop ) { 1879 if (KGlobal::getDesktopSize() == KGlobal::Desktop ) {
1880 mActionUndo->plug( tb ); 1880 mActionUndo->plug( tb );
1881 mActionDelete->plug( tb ); 1881 mActionDelete->plug( tb );
1882 mActionRedo->plug( tb ); 1882 mActionRedo->plug( tb );
1883 } 1883 }
1884 } 1884 }
1885 //mActionQuit->plug ( tb ); 1885 //mActionQuit->plug ( tb );
1886 // tb->insertWidget(-1, 0, mIncSearchWidget, 6); 1886 // tb->insertWidget(-1, 0, mIncSearchWidget, 6);
1887 1887
1888 //US link the searchwidget first to this. 1888 //US link the searchwidget first to this.
1889 // The real linkage to the toolbar happens later. 1889 // The real linkage to the toolbar happens later.
1890//US mIncSearchWidget->reparent(tb, 0, QPoint(50,0), TRUE); 1890//US mIncSearchWidget->reparent(tb, 0, QPoint(50,0), TRUE);
1891//US tb->insertItem( mIncSearchWidget ); 1891//US tb->insertItem( mIncSearchWidget );
1892/*US 1892/*US
1893 mIncSearchWidget = new IncSearchWidget( tb ); 1893 mIncSearchWidget = new IncSearchWidget( tb );
1894 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 1894 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
1895 SLOT( incrementalSearch( const QString& ) ) ); 1895 SLOT( incrementalSearch( const QString& ) ) );
1896 1896
1897 mJumpButtonBar = new JumpButtonBar( this, this ); 1897 mJumpButtonBar = new JumpButtonBar( this, this );
1898 1898
1899//US topLayout->addWidget( mJumpButtonBar ); 1899//US topLayout->addWidget( mJumpButtonBar );
1900 this->layout()->add( mJumpButtonBar ); 1900 this->layout()->add( mJumpButtonBar );
1901*/ 1901*/
1902 1902
1903#endif //KAB_EMBEDDED 1903#endif //KAB_EMBEDDED
1904 1904
1905 connect ( syncMenu, SIGNAL( activated ( int ) ), this, SLOT (slotSyncMenu( int ) ) ); 1905 connect ( syncMenu, SIGNAL( activated ( int ) ), this, SLOT (slotSyncMenu( int ) ) );
1906 fillSyncMenu(); 1906 fillSyncMenu();
1907 1907
1908} 1908}
1909void KABCore::showLicence() 1909void KABCore::showLicence()
1910{ 1910{
1911 KApplication::showLicence(); 1911 KApplication::showLicence();
1912} 1912}
1913void KABCore::removeVoice() 1913void KABCore::removeVoice()
1914{ 1914{
1915 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 ) 1915 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 )
1916 return; 1916 return;
1917 KABC::Addressee::List list = mViewManager->selectedAddressees(); 1917 KABC::Addressee::List list = mViewManager->selectedAddressees();
1918 KABC::Addressee::List::Iterator it; 1918 KABC::Addressee::List::Iterator it;
1919 for ( it = list.begin(); it != list.end(); ++it ) { 1919 for ( it = list.begin(); it != list.end(); ++it ) {
1920 PhoneNumber::List phoneNumbers = (*it).phoneNumbers(); 1920 PhoneNumber::List phoneNumbers = (*it).phoneNumbers();
1921 PhoneNumber::List::Iterator phoneIt; 1921 PhoneNumber::List::Iterator phoneIt;
1922 bool found = false; 1922 bool found = false;
1923 for ( phoneIt = phoneNumbers.begin(); phoneIt != phoneNumbers.end(); ++phoneIt ) { 1923 for ( phoneIt = phoneNumbers.begin(); phoneIt != phoneNumbers.end(); ++phoneIt ) {
1924 if ( (*phoneIt).type() & PhoneNumber::Voice) { // voice found 1924 if ( (*phoneIt).type() & PhoneNumber::Voice) { // voice found
1925 if ((*phoneIt).type() - PhoneNumber::Voice ) { 1925 if ((*phoneIt).type() - PhoneNumber::Voice ) {
1926 (*phoneIt).setType((*phoneIt).type() - PhoneNumber::Voice ); 1926 (*phoneIt).setType((*phoneIt).type() - PhoneNumber::Voice );
1927 (*it).insertPhoneNumber( (*phoneIt) ); 1927 (*it).insertPhoneNumber( (*phoneIt) );
1928 found = true; 1928 found = true;
1929 } 1929 }
1930 } 1930 }
1931 1931
1932 } 1932 }
1933 if ( found ) 1933 if ( found )
1934 contactModified((*it) ); 1934 contactModified((*it) );
1935 } 1935 }
1936} 1936}
1937 1937
1938 1938
1939 1939
1940void KABCore::clipboardDataChanged() 1940void KABCore::clipboardDataChanged()
1941{ 1941{
1942 1942
1943 if ( mReadWrite ) 1943 if ( mReadWrite )
1944 mActionPaste->setEnabled( !QApplication::clipboard()->text().isEmpty() ); 1944 mActionPaste->setEnabled( !QApplication::clipboard()->text().isEmpty() );
1945 1945
1946} 1946}
1947 1947
1948void KABCore::updateActionMenu() 1948void KABCore::updateActionMenu()
1949{ 1949{
1950 UndoStack *undo = UndoStack::instance(); 1950 UndoStack *undo = UndoStack::instance();
1951 RedoStack *redo = RedoStack::instance(); 1951 RedoStack *redo = RedoStack::instance();
1952 1952
1953 if ( undo->isEmpty() ) 1953 if ( undo->isEmpty() )
1954 mActionUndo->setText( i18n( "Undo" ) ); 1954 mActionUndo->setText( i18n( "Undo" ) );
1955 else 1955 else
1956 mActionUndo->setText( i18n( "Undo %1" ).arg( undo->top()->name() ) ); 1956 mActionUndo->setText( i18n( "Undo %1" ).arg( undo->top()->name() ) );
1957 1957
1958 mActionUndo->setEnabled( !undo->isEmpty() ); 1958 mActionUndo->setEnabled( !undo->isEmpty() );
1959 1959
1960 if ( !redo->top() ) 1960 if ( !redo->top() )
1961 mActionRedo->setText( i18n( "Redo" ) ); 1961 mActionRedo->setText( i18n( "Redo" ) );
1962 else 1962 else
1963 mActionRedo->setText( i18n( "Redo %1" ).arg( redo->top()->name() ) ); 1963 mActionRedo->setText( i18n( "Redo %1" ).arg( redo->top()->name() ) );
1964 1964
1965 mActionRedo->setEnabled( !redo->isEmpty() ); 1965 mActionRedo->setEnabled( !redo->isEmpty() );
1966} 1966}
1967 1967
1968void KABCore::configureKeyBindings() 1968void KABCore::configureKeyBindings()
1969{ 1969{
1970#ifndef KAB_EMBEDDED 1970#ifndef KAB_EMBEDDED
1971 KKeyDialog::configure( actionCollection(), true ); 1971 KKeyDialog::configure( actionCollection(), true );
1972#else //KAB_EMBEDDED 1972#else //KAB_EMBEDDED
1973 qDebug("KABCore::configureKeyBindings() not implemented"); 1973 qDebug("KABCore::configureKeyBindings() not implemented");
1974#endif //KAB_EMBEDDED 1974#endif //KAB_EMBEDDED
1975} 1975}
1976 1976
1977#ifdef KAB_EMBEDDED 1977#ifdef KAB_EMBEDDED
1978void KABCore::configureResources() 1978void KABCore::configureResources()
1979{ 1979{
1980 KRES::KCMKResources dlg( this, "" , 0 ); 1980 KRES::KCMKResources dlg( this, "" , 0 );
1981 1981
1982 if ( !dlg.exec() ) 1982 if ( !dlg.exec() )
1983 return; 1983 return;
1984 KMessageBox::information( this, i18n("Please restart to get the \nchanged resources (re)loaded!\n") ); 1984 KMessageBox::information( this, i18n("Please restart to get the \nchanged resources (re)loaded!\n") );
1985} 1985}
1986#endif //KAB_EMBEDDED 1986#endif //KAB_EMBEDDED
1987 1987
1988 1988
1989/* this method will be called through the QCop interface from Ko/Pi to select addresses 1989/* this method will be called through the QCop interface from Ko/Pi to select addresses
1990 * for the attendees list of an event. 1990 * for the attendees list of an event.
1991 */ 1991 */
1992void KABCore::requestForNameEmailUidList(const QString& sourceChannel, const QString& uid) 1992void KABCore::requestForNameEmailUidList(const QString& sourceChannel, const QString& uid)
1993{ 1993{
1994 QStringList nameList; 1994 QStringList nameList;
1995 QStringList emailList; 1995 QStringList emailList;
1996 QStringList uidList; 1996 QStringList uidList;
1997 1997
1998 KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this); 1998 KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this);
1999 uint i=0; 1999 uint i=0;
2000 for (i=0; i < list.count(); i++) 2000 for (i=0; i < list.count(); i++)
2001 { 2001 {
2002 nameList.append(list[i].realName()); 2002 nameList.append(list[i].realName());
2003 emailList.append(list[i].preferredEmail()); 2003 emailList.append(list[i].preferredEmail());
2004 uidList.append(list[i].uid()); 2004 uidList.append(list[i].uid());
2005 } 2005 }
2006 2006
2007 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI(sourceChannel, uid, nameList, emailList, uidList); 2007 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI(sourceChannel, uid, nameList, emailList, uidList);
2008 2008
2009} 2009}
2010 2010
2011/* this method will be called through the QCop interface from other apps to show details of a contact. 2011/* this method will be called through the QCop interface from other apps to show details of a contact.
2012 */ 2012 */
2013void KABCore::requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid) 2013void KABCore::requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid)
2014{ 2014{
2015 qDebug("KABCore::requestForDetails %s %s %s %s %s", sourceChannel.latin1(), sessionuid.latin1(), name.latin1(), email.latin1(), uid.latin1()); 2015 qDebug("KABCore::requestForDetails %s %s %s %s %s", sourceChannel.latin1(), sessionuid.latin1(), name.latin1(), email.latin1(), uid.latin1());
2016 2016
2017 QString foundUid = QString::null; 2017 QString foundUid = QString::null;
2018 if ( ! uid.isEmpty() ) { 2018 if ( ! uid.isEmpty() ) {
2019 Addressee adrr = mAddressBook->findByUid( uid ); 2019 Addressee adrr = mAddressBook->findByUid( uid );
2020 if ( !adrr.isEmpty() ) { 2020 if ( !adrr.isEmpty() ) {
2021 foundUid = uid; 2021 foundUid = uid;
2022 } 2022 }
2023 if ( email == "sendbacklist" ) { 2023 if ( email == "sendbacklist" ) {
2024 //qDebug("ssssssssssssssssssssssend "); 2024 //qDebug("ssssssssssssssssssssssend ");
2025 QStringList nameList; 2025 QStringList nameList;
2026 QStringList emailList; 2026 QStringList emailList;
2027 QStringList uidList; 2027 QStringList uidList;
2028 nameList.append(adrr.realName()); 2028 nameList.append(adrr.realName());
2029 emailList = adrr.emails(); 2029 emailList = adrr.emails();
2030 uidList.append( adrr.preferredEmail()); 2030 uidList.append( adrr.preferredEmail());
2031 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList); 2031 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList);
2032 return; 2032 return;
2033 } 2033 }
2034 2034
2035 } 2035 }
2036 2036
2037 if ( email == "sendbacklist" ) 2037 if ( email == "sendbacklist" )
2038 return; 2038 return;
2039 if (foundUid.isEmpty()) 2039 if (foundUid.isEmpty())
2040 { 2040 {
2041 //find the uid of the person first 2041 //find the uid of the person first
2042 Addressee::List namelist; 2042 Addressee::List namelist;
2043 Addressee::List emaillist; 2043 Addressee::List emaillist;
2044 2044
2045 if (!name.isEmpty()) 2045 if (!name.isEmpty())
2046 namelist = mAddressBook->findByName( name ); 2046 namelist = mAddressBook->findByName( name );
2047 2047
2048 if (!email.isEmpty()) 2048 if (!email.isEmpty())
2049 emaillist = mAddressBook->findByEmail( email ); 2049 emaillist = mAddressBook->findByEmail( email );
2050 qDebug("count %d %d ", namelist.count(),emaillist.count() ); 2050 qDebug("count %d %d ", namelist.count(),emaillist.count() );
2051 //check if we have a match in Namelist and Emaillist 2051 //check if we have a match in Namelist and Emaillist
2052 if ((namelist.count() == 0) && (emaillist.count() > 0)) { 2052 if ((namelist.count() == 0) && (emaillist.count() > 0)) {
2053 foundUid = emaillist[0].uid(); 2053 foundUid = emaillist[0].uid();
2054 } 2054 }
2055 else if ((namelist.count() > 0) && (emaillist.count() == 0)) 2055 else if ((namelist.count() > 0) && (emaillist.count() == 0))
2056 foundUid = namelist[0].uid(); 2056 foundUid = namelist[0].uid();
2057 else 2057 else
2058 { 2058 {
2059 for (int i = 0; i < namelist.count(); i++) 2059 for (int i = 0; i < namelist.count(); i++)
2060 { 2060 {
2061 for (int j = 0; j < emaillist.count(); j++) 2061 for (int j = 0; j < emaillist.count(); j++)
2062 { 2062 {
2063 if (namelist[i] == emaillist[j]) 2063 if (namelist[i] == emaillist[j])
2064 { 2064 {
2065 foundUid = namelist[i].uid(); 2065 foundUid = namelist[i].uid();
2066 } 2066 }
2067 } 2067 }
2068 } 2068 }
2069 } 2069 }
2070 } 2070 }
2071 else 2071 else
2072 { 2072 {
2073 foundUid = uid; 2073 foundUid = uid;
2074 } 2074 }
2075 2075
2076 if (!foundUid.isEmpty()) 2076 if (!foundUid.isEmpty())
2077 { 2077 {
2078 2078
2079 // raise Ka/Pi if it is in the background 2079 // raise Ka/Pi if it is in the background
2080#ifndef DESKTOP_VERSION 2080#ifndef DESKTOP_VERSION
2081#ifndef KORG_NODCOP 2081#ifndef KORG_NODCOP
2082 //QCopEnvelope e("QPE/Application/kapi", "raise()"); 2082 //QCopEnvelope e("QPE/Application/kapi", "raise()");
2083#endif 2083#endif
2084#endif 2084#endif
2085 2085
2086 mMainWindow->showMaximized(); 2086 mMainWindow->showMaximized();
2087 mMainWindow-> raise(); 2087 mMainWindow-> raise();
2088 2088
2089 mViewManager->setSelected( "", false); 2089 mViewManager->setSelected( "", false);
2090 mViewManager->refreshView( "" ); 2090 mViewManager->refreshView( "" );
2091 mViewManager->setSelected( foundUid, true ); 2091 mViewManager->setSelected( foundUid, true );
2092 mViewManager->refreshView( foundUid ); 2092 mViewManager->refreshView( foundUid );
2093 2093
2094 if ( !mMultipleViewsAtOnce ) 2094 if ( !mMultipleViewsAtOnce )
2095 { 2095 {
2096 setDetailsVisible( true ); 2096 setDetailsVisible( true );
2097 mActionDetails->setChecked(true); 2097 mActionDetails->setChecked(true);
2098 } 2098 }
2099 } 2099 }
2100} 2100}
2101 2101
2102 2102
2103void KABCore::faq() 2103void KABCore::faq()
2104{ 2104{
2105 KApplication::showFile( "KA/Pi FAQ", "kdepim/kaddressbook/kapiFAQ.txt" ); 2105 KApplication::showFile( "KA/Pi FAQ", "kdepim/kaddressbook/kapiFAQ.txt" );
2106} 2106}
2107 2107
2108 2108
2109void KABCore::fillSyncMenu() 2109void KABCore::fillSyncMenu()
2110{ 2110{
2111 if ( syncMenu->count() ) 2111 if ( syncMenu->count() )
2112 syncMenu->clear(); 2112 syncMenu->clear();
2113 syncMenu->insertItem( i18n("Configure..."), 0 ); 2113 syncMenu->insertItem( i18n("Configure..."), 0 );
2114 syncMenu->insertSeparator(); 2114 syncMenu->insertSeparator();
2115 syncMenu->insertItem( i18n("Multiple sync"), 1 ); 2115 syncMenu->insertItem( i18n("Multiple sync"), 1 );
2116 syncMenu->insertSeparator(); 2116 syncMenu->insertSeparator();
2117 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 2117 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
2118 config.setGroup("General"); 2118 config.setGroup("General");
2119 QStringList prof = config.readListEntry("SyncProfileNames"); 2119 QStringList prof = config.readListEntry("SyncProfileNames");
2120 KABPrefs::instance()->mLocalMachineName = config.readEntry("LocalMachineName","undefined"); 2120 KABPrefs::instance()->mLocalMachineName = config.readEntry("LocalMachineName","undefined");
2121 if ( prof.count() < 3 ) { 2121 if ( prof.count() < 3 ) {
2122 prof.clear(); 2122 prof.clear();
2123 prof << i18n("Sharp_DTM"); 2123 prof << i18n("Sharp_DTM");
2124 prof << i18n("Local_file"); 2124 prof << i18n("Local_file");
2125 prof << i18n("Last_file"); 2125 prof << i18n("Last_file");
2126 KSyncProfile* temp = new KSyncProfile (); 2126 KSyncProfile* temp = new KSyncProfile ();
2127 temp->setName( prof[0] ); 2127 temp->setName( prof[0] );
2128 temp->writeConfig(&config); 2128 temp->writeConfig(&config);
2129 temp->setName( prof[1] ); 2129 temp->setName( prof[1] );
2130 temp->writeConfig(&config); 2130 temp->writeConfig(&config);
2131 temp->setName( prof[2] ); 2131 temp->setName( prof[2] );
2132 temp->writeConfig(&config); 2132 temp->writeConfig(&config);
2133 config.setGroup("General"); 2133 config.setGroup("General");
2134 config.writeEntry("SyncProfileNames",prof); 2134 config.writeEntry("SyncProfileNames",prof);
2135 config.writeEntry("ExternSyncProfiles","Sharp_DTM"); 2135 config.writeEntry("ExternSyncProfiles","Sharp_DTM");
2136 config.sync(); 2136 config.sync();
2137 delete temp; 2137 delete temp;
2138 } 2138 }
2139 KABPrefs::instance()->mExternSyncProfiles = config.readListEntry("ExternSyncProfiles"); 2139 KABPrefs::instance()->mExternSyncProfiles = config.readListEntry("ExternSyncProfiles");
2140 KABPrefs::instance()->mSyncProfileNames = prof; 2140 KABPrefs::instance()->mSyncProfileNames = prof;
2141 int i; 2141 int i;
2142 for ( i = 0; i < prof.count(); ++i ) { 2142 for ( i = 0; i < prof.count(); ++i ) {
2143 2143
2144 syncMenu->insertItem( prof[i], 1000+i ); 2144 syncMenu->insertItem( prof[i], 1000+i );
2145 if ( i == 2 ) 2145 if ( i == 2 )
2146 syncMenu->insertSeparator(); 2146 syncMenu->insertSeparator();
2147 } 2147 }
2148 QDir app_dir; 2148 QDir app_dir;
2149 if ( !app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) { 2149 if ( !app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) {
2150 syncMenu->setItemEnabled( false , 1000 ); 2150 syncMenu->setItemEnabled( false , 1000 );
2151 } 2151 }
2152 //probaly useless 2152 //probaly useless
2153 //mView->setupExternSyncProfiles(); 2153 //mView->setupExternSyncProfiles();
2154} 2154}
2155void KABCore::slotSyncMenu( int action ) 2155void KABCore::slotSyncMenu( int action )
2156{ 2156{
2157 //qDebug("syncaction %d ", action); 2157 //qDebug("syncaction %d ", action);
2158 if ( action == 0 ) { 2158 if ( action == 0 ) {
2159 2159
2160 // seems to be a Qt2 event handling bug 2160 // seems to be a Qt2 event handling bug
2161 // syncmenu.clear causes a segfault at first time 2161 // syncmenu.clear causes a segfault at first time
2162 // when we call it after the main event loop, it is ok 2162 // when we call it after the main event loop, it is ok
2163 // same behaviour when calling OM/Pi via QCOP for the first time 2163 // same behaviour when calling OM/Pi via QCOP for the first time
2164 QTimer::singleShot ( 1, this, SLOT ( confSync() ) ); 2164 QTimer::singleShot ( 1, this, SLOT ( confSync() ) );
2165 //confSync(); 2165 //confSync();
2166 2166
2167 return; 2167 return;
2168 } 2168 }
2169 if ( action == 1 ) { 2169 if ( action == 1 ) {
2170 multiSync( true ); 2170 multiSync( true );
2171 return; 2171 return;
2172 } 2172 }
2173 2173
2174 if (mBlockSaveFlag) 2174 if (mBlockSaveFlag)
2175 return; 2175 return;
2176 mBlockSaveFlag = true; 2176 mBlockSaveFlag = true;
2177 mCurrentSyncProfile = action - 1000 ; 2177 mCurrentSyncProfile = action - 1000 ;
2178 mCurrentSyncDevice = KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] ; 2178 mCurrentSyncDevice = KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] ;
2179 mCurrentSyncName = KABPrefs::instance()->mLocalMachineName ; 2179 mCurrentSyncName = KABPrefs::instance()->mLocalMachineName ;
2180 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 2180 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
2181 KSyncProfile* temp = new KSyncProfile (); 2181 KSyncProfile* temp = new KSyncProfile ();
2182 temp->setName(KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]); 2182 temp->setName(KABPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
2183 temp->readConfig(&config); 2183 temp->readConfig(&config);
2184 KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences(); 2184 KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences();
2185 KABPrefs::instance()->mSyncAlgoPrefs = temp->getSyncPrefs(); 2185 KABPrefs::instance()->mSyncAlgoPrefs = temp->getSyncPrefs();
2186 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile(); 2186 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile();
2187 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting(); 2187 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting();
2188 KABPrefs::instance()->mWriteBackInFuture = 0; 2188 KABPrefs::instance()->mWriteBackInFuture = 0;
2189 if ( temp->getWriteBackFuture() ) 2189 if ( temp->getWriteBackFuture() )
2190 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 2190 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
2191 KABPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync(); 2191 KABPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync();
2192 if ( action == 1000 ) { 2192 if ( action == 1000 ) {
2193 syncSharp(); 2193 syncSharp();
2194 2194
2195 } else if ( action == 1001 ) { 2195 } else if ( action == 1001 ) {
2196 syncLocalFile(); 2196 syncLocalFile();
2197 2197
2198 } else if ( action == 1002 ) { 2198 } else if ( action == 1002 ) {
2199 quickSyncLocalFile(); 2199 quickSyncLocalFile();
2200 2200
2201 } else if ( action >= 1003 ) { 2201 } else if ( action >= 1003 ) {
2202 if ( temp->getIsLocalFileSync() ) { 2202 if ( temp->getIsLocalFileSync() ) {
2203 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) ) 2203 if ( syncWithFile( temp->getRemoteFileNameAB( ), false ) )
2204 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 2204 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
2205 } else { 2205 } else {
2206 if ( temp->getIsPhoneSync() ) { 2206 if ( temp->getIsPhoneSync() ) {
2207 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ; 2207 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ;
2208 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( ); 2208 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( );
2209 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( ); 2209 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( );
2210 syncPhone(); 2210 syncPhone();
2211 } else 2211 } else
2212 syncRemote( temp ); 2212 syncRemote( temp );
2213 2213
2214 } 2214 }
2215 } 2215 }
2216 delete temp; 2216 delete temp;
2217 mBlockSaveFlag = false; 2217 mBlockSaveFlag = false;
2218} 2218}
2219 2219
2220void KABCore::syncLocalFile() 2220void KABCore::syncLocalFile()
2221{ 2221{
2222 2222
2223 QString fn =KABPrefs::instance()->mLastSyncedLocalFile; 2223 QString fn =KABPrefs::instance()->mLastSyncedLocalFile;
2224 2224
2225 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), this ); 2225 fn =KFileDialog:: getOpenFileName( fn, i18n("Sync filename(*.ics/*.vcs)"), this );
2226 if ( fn == "" ) 2226 if ( fn == "" )
2227 return; 2227 return;
2228 if ( syncWithFile( fn, false ) ) { 2228 if ( syncWithFile( fn, false ) ) {
2229 qDebug("syncLocalFile() successful "); 2229 qDebug("syncLocalFile() successful ");
2230 } 2230 }
2231 2231
2232} 2232}
2233bool KABCore::syncWithFile( QString fn , bool quick ) 2233bool KABCore::syncWithFile( QString fn , bool quick )
2234{ 2234{
2235 bool ret = false; 2235 bool ret = false;
2236 QFileInfo info; 2236 QFileInfo info;
2237 info.setFile( fn ); 2237 info.setFile( fn );
2238 QString mess; 2238 QString mess;
2239 bool loadbup = true; 2239 bool loadbup = true;
2240 if ( !info. exists() ) { 2240 if ( !info. exists() ) {
2241 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) ); 2241 mess = i18n( "Sync file \n...%1\ndoes not exist!\nNothing synced!\n").arg(fn.right( 30) );
2242 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 2242 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
2243 mess ); 2243 mess );
2244 return ret; 2244 return ret;
2245 } 2245 }
2246 int result = 0; 2246 int result = 0;
2247 if ( !quick ) { 2247 if ( !quick ) {
2248 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); 2248 mess = i18n("Sync with file \n...%1\nfrom:\n%2\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
2249 result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 2249 result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
2250 mess, 2250 mess,
2251 i18n("Sync"), i18n("Cancel"), 0, 2251 i18n("Sync"), i18n("Cancel"), 0,
2252 0, 1 ); 2252 0, 1 );
2253 if ( result ) 2253 if ( result )
2254 return false; 2254 return false;
2255 } 2255 }
2256 if ( KABPrefs::instance()->mAskForPreferences ) 2256 if ( KABPrefs::instance()->mAskForPreferences )
2257 edit_sync_options(); 2257 edit_sync_options();
2258 if ( result == 0 ) { 2258 if ( result == 0 ) {
2259 //qDebug("Now sycing ... "); 2259 //qDebug("Now sycing ... ");
2260 if ( ret = syncAB( fn, KABPrefs::instance()->mSyncAlgoPrefs ) ) 2260 if ( ret = syncAB( fn, KABPrefs::instance()->mSyncAlgoPrefs ) )
2261 setCaption( i18n("Synchronization successful") ); 2261 setCaption( i18n("Synchronization successful") );
2262 else 2262 else
2263 setCaption( i18n("Sync cancelled or failed. Nothing synced.") ); 2263 setCaption( i18n("Sync cancelled or failed. Nothing synced.") );
2264 if ( ! quick ) 2264 if ( ! quick )
2265 KABPrefs::instance()->mLastSyncedLocalFile = fn; 2265 KABPrefs::instance()->mLastSyncedLocalFile = fn;
2266 setModified(); 2266 setModified();
2267 } 2267 }
2268 return ret; 2268 return ret;
2269} 2269}
2270void KABCore::quickSyncLocalFile() 2270void KABCore::quickSyncLocalFile()
2271{ 2271{
2272 2272
2273 if ( syncWithFile( KABPrefs::instance()->mLastSyncedLocalFile, false ) ) { 2273 if ( syncWithFile( KABPrefs::instance()->mLastSyncedLocalFile, false ) ) {
2274 qDebug("quick syncLocalFile() successful "); 2274 qDebug("quick syncLocalFile() successful ");
2275 2275
2276 } 2276 }
2277} 2277}
2278void KABCore::multiSync( bool askforPrefs ) 2278void KABCore::multiSync( bool askforPrefs )
2279{ 2279{
2280 if (mBlockSaveFlag) 2280 if (mBlockSaveFlag)
2281 return; 2281 return;
2282 mBlockSaveFlag = true; 2282 mBlockSaveFlag = true;
2283 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!"); 2283 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!");
2284 if ( QMessageBox::information( this, i18n("KO/Pi Sync"), 2284 if ( QMessageBox::information( this, i18n("KO/Pi Sync"),
2285 question, 2285 question,
2286 i18n("Yes"), i18n("No"), 2286 i18n("Yes"), i18n("No"),
2287 0, 0 ) != 0 ) { 2287 0, 0 ) != 0 ) {
2288 mBlockSaveFlag = false; 2288 mBlockSaveFlag = false;
2289 setCaption(i18n("Aborted! Nothing synced!")); 2289 setCaption(i18n("Aborted! Nothing synced!"));
2290 return; 2290 return;
2291 } 2291 }
2292 mCurrentSyncDevice = i18n("Multiple profiles") ; 2292 mCurrentSyncDevice = i18n("Multiple profiles") ;
2293 KABPrefs::instance()->mSyncAlgoPrefs = KABPrefs::instance()->mRingSyncAlgoPrefs; 2293 KABPrefs::instance()->mSyncAlgoPrefs = KABPrefs::instance()->mRingSyncAlgoPrefs;
2294 if ( askforPrefs ) { 2294 if ( askforPrefs ) {
2295 edit_sync_options(); 2295 edit_sync_options();
2296 KABPrefs::instance()->mRingSyncAlgoPrefs = KABPrefs::instance()->mSyncAlgoPrefs; 2296 KABPrefs::instance()->mRingSyncAlgoPrefs = KABPrefs::instance()->mSyncAlgoPrefs;
2297 } 2297 }
2298 setCaption(i18n("Multiple sync started.") ); 2298 setCaption(i18n("Multiple sync started.") );
2299 qApp->processEvents(); 2299 qApp->processEvents();
2300 int num = ringSync() ; 2300 int num = ringSync() ;
2301 if ( num > 1 ) 2301 if ( num > 1 )
2302 ringSync(); 2302 ringSync();
2303 mBlockSaveFlag = false; 2303 mBlockSaveFlag = false;
2304 if ( num ) 2304 if ( num )
2305 save(); 2305 save();
2306 if ( num ) 2306 if ( num )
2307 setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) ); 2307 setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) );
2308 else 2308 else
2309 setCaption(i18n("Nothing synced! No profiles defined for multisync!")); 2309 setCaption(i18n("Nothing synced! No profiles defined for multisync!"));
2310 return; 2310 return;
2311} 2311}
2312int KABCore::ringSync() 2312int KABCore::ringSync()
2313{ 2313{
2314 int syncedProfiles = 0; 2314 int syncedProfiles = 0;
2315 int i; 2315 int i;
2316 QTime timer; 2316 QTime timer;
2317 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 2317 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
2318 QStringList syncProfileNames = KABPrefs::instance()->mSyncProfileNames; 2318 QStringList syncProfileNames = KABPrefs::instance()->mSyncProfileNames;
2319 KSyncProfile* temp = new KSyncProfile (); 2319 KSyncProfile* temp = new KSyncProfile ();
2320 KABPrefs::instance()->mAskForPreferences = false; 2320 KABPrefs::instance()->mAskForPreferences = false;
2321 for ( i = 0; i < syncProfileNames.count(); ++i ) { 2321 for ( i = 0; i < syncProfileNames.count(); ++i ) {
2322 mCurrentSyncProfile = i; 2322 mCurrentSyncProfile = i;
2323 temp->setName(syncProfileNames[mCurrentSyncProfile]); 2323 temp->setName(syncProfileNames[mCurrentSyncProfile]);
2324 temp->readConfig(&config); 2324 temp->readConfig(&config);
2325 if ( temp->getIncludeInRingSyncAB() && ( i < 1 || i > 2 )) { 2325 if ( temp->getIncludeInRingSyncAB() && ( i < 1 || i > 2 )) {
2326 setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... ")); 2326 setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... "));
2327 ++syncedProfiles; 2327 ++syncedProfiles;
2328 // KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences(); 2328 // KABPrefs::instance()->mAskForPreferences = temp->getAskForPreferences();
2329 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile(); 2329 KABPrefs::instance()->mWriteBackFile = temp->getWriteBackFile();
2330 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting(); 2330 KABPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting();
2331 KABPrefs::instance()->mWriteBackInFuture = 0; 2331 KABPrefs::instance()->mWriteBackInFuture = 0;
2332 if ( temp->getWriteBackFuture() ) 2332 if ( temp->getWriteBackFuture() )
2333 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( ); 2333 KABPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
2334 KABPrefs::instance()->mShowSyncSummary = false; 2334 KABPrefs::instance()->mShowSyncSummary = false;
2335 mCurrentSyncDevice = syncProfileNames[i] ; 2335 mCurrentSyncDevice = syncProfileNames[i] ;
2336 mCurrentSyncName = KABPrefs::instance()->mLocalMachineName; 2336 mCurrentSyncName = KABPrefs::instance()->mLocalMachineName;
2337 if ( i == 0 ) { 2337 if ( i == 0 ) {
2338 syncSharp(); 2338 syncSharp();
2339 } else { 2339 } else {
2340 if ( temp->getIsLocalFileSync() ) { 2340 if ( temp->getIsLocalFileSync() ) {
2341 if ( syncWithFile( temp->getRemoteFileNameAB( ), true ) ) 2341 if ( syncWithFile( temp->getRemoteFileNameAB( ), true ) )
2342 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB(); 2342 KABPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileNameAB();
2343 } else { 2343 } else {
2344 if ( temp->getIsPhoneSync() ) { 2344 if ( temp->getIsPhoneSync() ) {
2345 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ; 2345 KABPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ;
2346 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( ); 2346 KABPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( );
2347 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( ); 2347 KABPrefs::instance()->mPhoneModel = temp->getPhoneModel( );
2348 syncPhone(); 2348 syncPhone();
2349 } else 2349 } else
2350 syncRemote( temp, false ); 2350 syncRemote( temp, false );
2351 2351
2352 } 2352 }
2353 } 2353 }
2354 timer.start(); 2354 timer.start();
2355 setCaption(i18n("Multiple sync in progress ... please wait!") ); 2355 setCaption(i18n("Multiple sync in progress ... please wait!") );
2356 while ( timer.elapsed () < 2000 ) { 2356 while ( timer.elapsed () < 2000 ) {
2357 qApp->processEvents(); 2357 qApp->processEvents();
2358#ifndef _WIN32_ 2358#ifndef _WIN32_
2359 sleep (1); 2359 sleep (1);
2360#endif 2360#endif
2361 } 2361 }
2362 2362
2363 } 2363 }
2364 2364
2365 } 2365 }
2366 delete temp; 2366 delete temp;
2367 return syncedProfiles; 2367 return syncedProfiles;
2368} 2368}
2369 2369
2370void KABCore::syncRemote( KSyncProfile* prof, bool ask) 2370void KABCore::syncRemote( KSyncProfile* prof, bool ask)
2371{ 2371{
2372 QString question; 2372 QString question;
2373 if ( ask ) { 2373 if ( ask ) {
2374 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n"; 2374 question = i18n("Do you really want\nto remote sync\nwith profile \n")+ prof->getName()+" ?\n";
2375 if ( QMessageBox::information( this, i18n("KO/Pi Sync"), 2375 if ( QMessageBox::information( this, i18n("KO/Pi Sync"),
2376 question, 2376 question,
2377 i18n("Yes"), i18n("No"), 2377 i18n("Yes"), i18n("No"),
2378 0, 0 ) != 0 ) 2378 0, 0 ) != 0 )
2379 return; 2379 return;
2380 } 2380 }
2381 QString command = prof->getPreSyncCommandAB(); 2381 QString command = prof->getPreSyncCommandAB();
2382 int fi; 2382 int fi;
2383 if ( (fi = command.find("$PWD$")) > 0 ) { 2383 if ( (fi = command.find("$PWD$")) > 0 ) {
2384 QString pwd = getPassword(); 2384 QString pwd = getPassword();
2385 command = command.left( fi )+ pwd + command.mid( fi+5 ); 2385 command = command.left( fi )+ pwd + command.mid( fi+5 );
2386 2386
2387 } 2387 }
2388 int maxlen = 30; 2388 int maxlen = 30;
2389 if ( QApplication::desktop()->width() > 320 ) 2389 if ( QApplication::desktop()->width() > 320 )
2390 maxlen += 25; 2390 maxlen += 25;
2391 setCaption ( i18n( "Copy remote file to local machine..." ) ); 2391 setCaption ( i18n( "Copy remote file to local machine..." ) );
2392 int fileSize = 0; 2392 int fileSize = 0;
2393 int result = system ( command ); 2393 int result = system ( command );
2394 // 0 : okay 2394 // 0 : okay
2395 // 256: no such file or dir 2395 // 256: no such file or dir
2396 // 2396 //
2397 qDebug("KO: Remote copy result(0 = okay): %d ",result ); 2397 qDebug("KO: Remote copy result(0 = okay): %d ",result );
2398 if ( result != 0 ) { 2398 if ( result != 0 ) {
2399 int len = maxlen; 2399 int len = maxlen;
2400 while ( len < command.length() ) { 2400 while ( len < command.length() ) {
2401 command.insert( len , "\n" ); 2401 command.insert( len , "\n" );
2402 len += maxlen +2; 2402 len += maxlen +2;
2403 } 2403 }
2404 question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (command) ; 2404 question = i18n("Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n").arg (command) ;
2405 QMessageBox::information( this, i18n("KO/Pi Sync - ERROR"), 2405 QMessageBox::information( this, i18n("KO/Pi Sync - ERROR"),
2406 question, 2406 question,
2407 i18n("Okay!")) ; 2407 i18n("Okay!")) ;
2408 setCaption ("KO/Pi"); 2408 setCaption ("KO/Pi");
2409 return; 2409 return;
2410 } 2410 }
2411 setCaption ( i18n( "Copying succeed." ) ); 2411 setCaption ( i18n( "Copying succeed." ) );
2412 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() ); 2412 //qDebug(" file **%s** ",prof->getLocalTempFile().latin1() );
2413 if ( syncWithFile( prof->getLocalTempFileAB(), true ) ) { 2413 if ( syncWithFile( prof->getLocalTempFileAB(), true ) ) {
2414// Event* e = mView->getLastSyncEvent(); 2414// Event* e = mView->getLastSyncEvent();
2415// e->setReadOnly( false ); 2415// e->setReadOnly( false );
2416// e->setLocation( KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]); 2416// e->setLocation( KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
2417// e->setReadOnly( true ); 2417// e->setReadOnly( true );
2418 if ( KABPrefs::instance()->mWriteBackFile ) { 2418 if ( KABPrefs::instance()->mWriteBackFile ) {
2419 command = prof->getPostSyncCommandAB(); 2419 command = prof->getPostSyncCommandAB();
2420 int fi; 2420 int fi;
2421 if ( (fi = command.find("$PWD$")) > 0 ) { 2421 if ( (fi = command.find("$PWD$")) > 0 ) {
2422 QString pwd = getPassword(); 2422 QString pwd = getPassword();
2423 command = command.left( fi )+ pwd + command.mid( fi+5 ); 2423 command = command.left( fi )+ pwd + command.mid( fi+5 );
2424 2424
2425 } 2425 }
2426 setCaption ( i18n( "Writing back file ..." ) ); 2426 setCaption ( i18n( "Writing back file ..." ) );
2427 result = system ( command ); 2427 result = system ( command );
2428 qDebug("KO: Writing back file result: %d ", result); 2428 qDebug("KO: Writing back file result: %d ", result);
2429 if ( result != 0 ) { 2429 if ( result != 0 ) {
2430 setCaption ( i18n( "Writing back file result: " )+QString::number( result ) ); 2430 setCaption ( i18n( "Writing back file result: " )+QString::number( result ) );
2431 return; 2431 return;
2432 } else { 2432 } else {
2433 setCaption ( i18n( "Syncronization sucessfully completed" ) ); 2433 setCaption ( i18n( "Syncronization sucessfully completed" ) );
2434 } 2434 }
2435 } 2435 }
2436 } 2436 }
2437 return; 2437 return;
2438} 2438}
2439#include <qpushbutton.h> 2439#include <qpushbutton.h>
2440#include <qradiobutton.h> 2440#include <qradiobutton.h>
2441#include <qbuttongroup.h> 2441#include <qbuttongroup.h>
2442void KABCore::edit_sync_options() 2442void KABCore::edit_sync_options()
2443{ 2443{
2444 //mDialogManager->showSyncOptions(); 2444 //mDialogManager->showSyncOptions();
2445 //KABPrefs::instance()->mSyncAlgoPrefs 2445 //KABPrefs::instance()->mSyncAlgoPrefs
2446 QDialog dia( this, "dia", true ); 2446 QDialog dia( this, "dia", true );
2447 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice ); 2447 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice );
2448 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia); 2448 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia);
2449 QVBoxLayout lay ( &dia ); 2449 QVBoxLayout lay ( &dia );
2450 lay.setSpacing( 2 ); 2450 lay.setSpacing( 2 );
2451 lay.setMargin( 3 ); 2451 lay.setMargin( 3 );
2452 lay.addWidget(&gr); 2452 lay.addWidget(&gr);
2453 QRadioButton loc ( i18n("Take local entry on conflict"), &gr ); 2453 QRadioButton loc ( i18n("Take local entry on conflict"), &gr );
2454 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr ); 2454 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr );
2455 QRadioButton newest( i18n("Take newest entry on conflict"), &gr ); 2455 QRadioButton newest( i18n("Take newest entry on conflict"), &gr );
2456 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr ); 2456 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr );
2457 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr ); 2457 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr );
2458 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr ); 2458 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr );
2459 //QRadioButton both( i18n("Take both on conflict"), &gr ); 2459 //QRadioButton both( i18n("Take both on conflict"), &gr );
2460 QPushButton pb ( "OK", &dia); 2460 QPushButton pb ( "OK", &dia);
2461 lay.addWidget( &pb ); 2461 lay.addWidget( &pb );
2462 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 2462 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
2463 switch ( KABPrefs::instance()->mSyncAlgoPrefs ) { 2463 switch ( KABPrefs::instance()->mSyncAlgoPrefs ) {
2464 case 0: 2464 case 0:
2465 loc.setChecked( true); 2465 loc.setChecked( true);
2466 break; 2466 break;
2467 case 1: 2467 case 1:
2468 rem.setChecked( true ); 2468 rem.setChecked( true );
2469 break; 2469 break;
2470 case 2: 2470 case 2:
2471 newest.setChecked( true); 2471 newest.setChecked( true);
2472 break; 2472 break;
2473 case 3: 2473 case 3:
2474 ask.setChecked( true); 2474 ask.setChecked( true);
2475 break; 2475 break;
2476 case 4: 2476 case 4:
2477 f_loc.setChecked( true); 2477 f_loc.setChecked( true);
2478 break; 2478 break;
2479 case 5: 2479 case 5:
2480 f_rem.setChecked( true); 2480 f_rem.setChecked( true);
2481 break; 2481 break;
2482 case 6: 2482 case 6:
2483 // both.setChecked( true); 2483 // both.setChecked( true);
2484 break; 2484 break;
2485 default: 2485 default:
2486 break; 2486 break;
2487 } 2487 }
2488 if ( dia.exec() ) { 2488 if ( dia.exec() ) {
2489 KABPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ; 2489 KABPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
2490 } 2490 }
2491 2491
2492 2492
2493} 2493}
2494QString KABCore::getPassword( ) 2494QString KABCore::getPassword( )
2495{ 2495{
2496 QString retfile = ""; 2496 QString retfile = "";
2497 QDialog dia ( this, "input-dialog", true ); 2497 QDialog dia ( this, "input-dialog", true );
2498 QLineEdit lab ( &dia ); 2498 QLineEdit lab ( &dia );
2499 lab.setEchoMode( QLineEdit::Password ); 2499 lab.setEchoMode( QLineEdit::Password );
2500 QVBoxLayout lay( &dia ); 2500 QVBoxLayout lay( &dia );
2501 lay.setMargin(7); 2501 lay.setMargin(7);
2502 lay.setSpacing(7); 2502 lay.setSpacing(7);
2503 lay.addWidget( &lab); 2503 lay.addWidget( &lab);
2504 dia.setFixedSize( 230,50 ); 2504 dia.setFixedSize( 230,50 );
2505 dia.setCaption( i18n("Enter password") ); 2505 dia.setCaption( i18n("Enter password") );
2506 QPushButton pb ( "OK", &dia); 2506 QPushButton pb ( "OK", &dia);
2507 lay.addWidget( &pb ); 2507 lay.addWidget( &pb );
2508 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 2508 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
2509 dia.show(); 2509 dia.show();
2510 int res = dia.exec(); 2510 int res = dia.exec();
2511 if ( res ) 2511 if ( res )
2512 retfile = lab.text(); 2512 retfile = lab.text();
2513 dia.hide(); 2513 dia.hide();
2514 qApp->processEvents(); 2514 qApp->processEvents();
2515 return retfile; 2515 return retfile;
2516 2516
2517} 2517}
2518#include <libkcal/syncdefines.h> 2518#include <libkcal/syncdefines.h>
2519 2519
2520KABC::Addressee KABCore::getLastSyncAddressee() 2520KABC::Addressee KABCore::getLastSyncAddressee()
2521{ 2521{
2522 Addressee lse; 2522 Addressee lse;
2523 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 2523 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
2524 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2524 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
2525 if (lse.isEmpty()) { 2525 if (lse.isEmpty()) {
2526 qDebug("Creating new last-syncAddressee "); 2526 qDebug("Creating new last-syncAddressee ");
2527 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2527 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice );
2528 QString sum = ""; 2528 QString sum = "";
2529 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 2529 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
2530 sum = "E: "; 2530 sum = "E: ";
2531 lse.setFamilyName("!"+sum+mCurrentSyncDevice + i18n(" - sync event")); 2531 lse.setFamilyName("!"+sum+mCurrentSyncDevice + i18n(" - sync event"));
2532 lse.setRevision( mLastAddressbookSync ); 2532 lse.setRevision( mLastAddressbookSync );
2533 lse.setCategories( i18n("SyncEvent") ); 2533 lse.setCategories( i18n("SyncEvent") );
2534 mAddressBook->insertAddressee( lse ); 2534 mAddressBook->insertAddressee( lse );
2535 } 2535 }
2536 return lse; 2536 return lse;
2537} 2537}
2538int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full ) 2538int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full )
2539{ 2539{
2540 2540
2541 //void setZaurusId(int id); 2541 //void setZaurusId(int id);
2542 // int zaurusId() const; 2542 // int zaurusId() const;
2543 // void setZaurusUid(int id); 2543 // void setZaurusUid(int id);
2544 // int zaurusUid() const; 2544 // int zaurusUid() const;
2545 // void setZaurusStat(int id); 2545 // void setZaurusStat(int id);
2546 // int zaurusStat() const; 2546 // int zaurusStat() const;
2547 // 0 equal 2547 // 0 equal
2548 // 1 take local 2548 // 1 take local
2549 // 2 take remote 2549 // 2 take remote
2550 // 3 cancel 2550 // 3 cancel
2551 QDateTime lastSync = mLastAddressbookSync; 2551 QDateTime lastSync = mLastAddressbookSync;
2552 QDateTime localMod = local->revision(); 2552 QDateTime localMod = local->revision();
2553 QDateTime remoteMod = remote->revision(); 2553 QDateTime remoteMod = remote->revision();
2554 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2554 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2555 bool remCh, locCh; 2555 bool remCh, locCh;
2556 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 2556 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
2557 2557
2558 qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 2558 qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
2559 locCh = ( localMod > mLastAddressbookSync ); 2559 locCh = ( localMod > mLastAddressbookSync );
2560 if ( !remCh && ! locCh ) { 2560 if ( !remCh && ! locCh ) {
2561 qDebug("both not changed "); 2561 qDebug("both not changed ");
2562 lastSync = localMod.addDays(1); 2562 lastSync = localMod.addDays(1);
2563 if ( mode <= SYNC_PREF_ASK ) 2563 if ( mode <= SYNC_PREF_ASK )
2564 return 0; 2564 return 0;
2565 } else { 2565 } else {
2566 if ( locCh ) { 2566 if ( locCh ) {
2567 qDebug("loc changed %s %s", localMod.toString().latin1(), mLastAddressbookSync.toString().latin1()); 2567 qDebug("loc changed %s %s", localMod.toString().latin1(), mLastAddressbookSync.toString().latin1());
2568 lastSync = localMod.addDays( -1 ); 2568 lastSync = localMod.addDays( -1 );
2569 if ( !remCh ) 2569 if ( !remCh )
2570 remoteMod =( lastSync.addDays( -1 ) ); 2570 remoteMod =( lastSync.addDays( -1 ) );
2571 } else { 2571 } else {
2572 //qDebug(" not loc changed "); 2572 //qDebug(" not loc changed ");
2573 lastSync = localMod.addDays( 1 ); 2573 lastSync = localMod.addDays( 1 );
2574 if ( remCh ) 2574 if ( remCh )
2575 remoteMod =( lastSync.addDays( 1 ) ); 2575 remoteMod =( lastSync.addDays( 1 ) );
2576 2576
2577 } 2577 }
2578 } 2578 }
2579 full = true; 2579 full = true;
2580 if ( mode < SYNC_PREF_ASK ) 2580 if ( mode < SYNC_PREF_ASK )
2581 mode = SYNC_PREF_ASK; 2581 mode = SYNC_PREF_ASK;
2582 } else { 2582 } else {
2583 if ( localMod == remoteMod ) 2583 if ( localMod == remoteMod )
2584 return 0; 2584 return 0;
2585 2585
2586 } 2586 }
2587 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 2587 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
2588 2588
2589 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , localMod, remote->lastModified().toString().latin1(), remoteMod); 2589 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , localMod, remote->lastModified().toString().latin1(), remoteMod);
2590 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() ); 2590 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() );
2591 //full = true; //debug only 2591 //full = true; //debug only
2592 if ( full ) { 2592 if ( full ) {
2593 bool equ = ( (*local) == (*remote) ); 2593 bool equ = ( (*local) == (*remote) );
2594 if ( equ ) { 2594 if ( equ ) {
2595 //qDebug("equal "); 2595 //qDebug("equal ");
2596 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2596 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2597 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 2597 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
2598 } 2598 }
2599 if ( mode < SYNC_PREF_FORCE_LOCAL ) 2599 if ( mode < SYNC_PREF_FORCE_LOCAL )
2600 return 0; 2600 return 0;
2601 2601
2602 }//else //debug only 2602 }//else //debug only
2603 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 2603 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
2604 } 2604 }
2605 int result; 2605 int result;
2606 bool localIsNew; 2606 bool localIsNew;
2607 //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() ); 2607 //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() );
2608 2608
2609 if ( full && mode < SYNC_PREF_NEWEST ) 2609 if ( full && mode < SYNC_PREF_NEWEST )
2610 mode = SYNC_PREF_ASK; 2610 mode = SYNC_PREF_ASK;
2611 2611
2612 switch( mode ) { 2612 switch( mode ) {
2613 case SYNC_PREF_LOCAL: 2613 case SYNC_PREF_LOCAL:
2614 if ( lastSync > remoteMod ) 2614 if ( lastSync > remoteMod )
2615 return 1; 2615 return 1;
2616 if ( lastSync > localMod ) 2616 if ( lastSync > localMod )
2617 return 2; 2617 return 2;
2618 return 1; 2618 return 1;
2619 break; 2619 break;
2620 case SYNC_PREF_REMOTE: 2620 case SYNC_PREF_REMOTE:
2621 if ( lastSync > remoteMod ) 2621 if ( lastSync > remoteMod )
2622 return 1; 2622 return 1;
2623 if ( lastSync > localMod ) 2623 if ( lastSync > localMod )
2624 return 2; 2624 return 2;
2625 return 2; 2625 return 2;
2626 break; 2626 break;
2627 case SYNC_PREF_NEWEST: 2627 case SYNC_PREF_NEWEST:
2628 if ( localMod > remoteMod ) 2628 if ( localMod > remoteMod )
2629 return 1; 2629 return 1;
2630 else 2630 else
2631 return 2; 2631 return 2;
2632 break; 2632 break;
2633 case SYNC_PREF_ASK: 2633 case SYNC_PREF_ASK:
2634 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 2634 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
2635 if ( lastSync > remoteMod ) 2635 if ( lastSync > remoteMod )
2636 return 1; 2636 return 1;
2637 if ( lastSync > localMod ) 2637 if ( lastSync > localMod )
2638 return 2; 2638 return 2;
2639 localIsNew = localMod >= remoteMod; 2639 localIsNew = localMod >= remoteMod;
2640 //qDebug("conflict! ************************************** "); 2640 //qDebug("conflict! ************************************** ");
2641 { 2641 {
2642 KPIM::AddresseeChooser acd ( *local,*remote, localIsNew , this ); 2642 KPIM::AddresseeChooser acd ( *local,*remote, localIsNew , this );
2643 result = acd.executeD(localIsNew); 2643 result = acd.executeD(localIsNew);
2644 return result; 2644 return result;
2645 } 2645 }
2646 break; 2646 break;
2647 case SYNC_PREF_FORCE_LOCAL: 2647 case SYNC_PREF_FORCE_LOCAL:
2648 return 1; 2648 return 1;
2649 break; 2649 break;
2650 case SYNC_PREF_FORCE_REMOTE: 2650 case SYNC_PREF_FORCE_REMOTE:
2651 return 2; 2651 return 2;
2652 break; 2652 break;
2653 2653
2654 default: 2654 default:
2655 // SYNC_PREF_TAKE_BOTH not implemented 2655 // SYNC_PREF_TAKE_BOTH not implemented
2656 break; 2656 break;
2657 } 2657 }
2658 return 0; 2658 return 0;
2659} 2659}
2660bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode) 2660bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode)
2661{ 2661{
2662 bool syncOK = true; 2662 bool syncOK = true;
2663 int addedAddressee = 0; 2663 int addedAddressee = 0;
2664 int addedAddresseeR = 0; 2664 int addedAddresseeR = 0;
2665 int deletedAddresseeR = 0; 2665 int deletedAddresseeR = 0;
2666 int deletedAddresseeL = 0; 2666 int deletedAddresseeL = 0;
2667 int changedLocal = 0; 2667 int changedLocal = 0;
2668 int changedRemote = 0; 2668 int changedRemote = 0;
2669 //QPtrList<Addressee> el = local->rawAddressees(); 2669 //QPtrList<Addressee> el = local->rawAddressees();
2670 Addressee addresseeR; 2670 Addressee addresseeR;
2671 QString uid; 2671 QString uid;
2672 int take; 2672 int take;
2673 Addressee addresseeL; 2673 Addressee addresseeL;
2674 Addressee addresseeRSync; 2674 Addressee addresseeRSync;
2675 Addressee addresseeLSync; 2675 Addressee addresseeLSync;
2676 // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees(); 2676 // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees();
2677 //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees(); 2677 //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees();
2678 bool fullDateRange = false; 2678 bool fullDateRange = false;
2679 local->resetTempSyncStat(); 2679 local->resetTempSyncStat();
2680 mLastAddressbookSync = QDateTime::currentDateTime(); 2680 mLastAddressbookSync = QDateTime::currentDateTime();
2681 QDateTime modifiedCalendar = mLastAddressbookSync;; 2681 QDateTime modifiedCalendar = mLastAddressbookSync;;
2682 addresseeLSync = getLastSyncAddressee(); 2682 addresseeLSync = getLastSyncAddressee();
2683 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1()); 2683 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1());
2684 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName ); 2684 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName );
2685 if ( !addresseeR.isEmpty() ) { 2685 if ( !addresseeR.isEmpty() ) {
2686 addresseeRSync = addresseeR; 2686 addresseeRSync = addresseeR;
2687 remote->removeAddressee(addresseeR ); 2687 remote->removeAddressee(addresseeR );
2688 2688
2689 } else { 2689 } else {
2690 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2690 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2691 addresseeRSync = addresseeLSync ; 2691 addresseeRSync = addresseeLSync ;
2692 } else { 2692 } else {
2693 qDebug("FULLDATE 1"); 2693 qDebug("FULLDATE 1");
2694 fullDateRange = true; 2694 fullDateRange = true;
2695 Addressee newAdd; 2695 Addressee newAdd;
2696 addresseeRSync = newAdd; 2696 addresseeRSync = newAdd;
2697 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee")); 2697 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee"));
2698 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName ); 2698 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName );
2699 addresseeRSync.setRevision( mLastAddressbookSync ); 2699 addresseeRSync.setRevision( mLastAddressbookSync );
2700 addresseeRSync.setCategories( i18n("SyncAddressee") ); 2700 addresseeRSync.setCategories( i18n("SyncAddressee") );
2701 } 2701 }
2702 } 2702 }
2703 if ( addresseeLSync.revision() == mLastAddressbookSync ) { 2703 if ( addresseeLSync.revision() == mLastAddressbookSync ) {
2704 qDebug("FULLDATE 2"); 2704 qDebug("FULLDATE 2");
2705 fullDateRange = true; 2705 fullDateRange = true;
2706 } 2706 }
2707 if ( ! fullDateRange ) { 2707 if ( ! fullDateRange ) {
2708 if ( addresseeLSync.revision() != addresseeRSync.revision() ) { 2708 if ( addresseeLSync.revision() != addresseeRSync.revision() ) {
2709 2709
2710 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() ); 2710 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() );
2711 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec()); 2711 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec());
2712 fullDateRange = true; 2712 fullDateRange = true;
2713 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() ); 2713 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() );
2714 } 2714 }
2715 } 2715 }
2716 // fullDateRange = true; // debug only! 2716 // fullDateRange = true; // debug only!
2717 if ( fullDateRange ) 2717 if ( fullDateRange )
2718 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365); 2718 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365);
2719 else 2719 else
2720 mLastAddressbookSync = addresseeLSync.revision(); 2720 mLastAddressbookSync = addresseeLSync.revision();
2721 // for resyncing if own file has changed 2721 // for resyncing if own file has changed
2722 // PENDING fixme later when implemented 2722 // PENDING fixme later when implemented
2723#if 0 2723#if 0
2724 if ( mCurrentSyncDevice == "deleteaftersync" ) { 2724 if ( mCurrentSyncDevice == "deleteaftersync" ) {
2725 mLastAddressbookSync = loadedFileVersion; 2725 mLastAddressbookSync = loadedFileVersion;
2726 qDebug("setting mLastAddressbookSync "); 2726 qDebug("setting mLastAddressbookSync ");
2727 } 2727 }
2728#endif 2728#endif
2729 2729
2730 //qDebug("*************************** "); 2730 //qDebug("*************************** ");
2731 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() ); 2731 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() );
2732 QStringList er = remote->uidList(); 2732 QStringList er = remote->uidList();
2733 Addressee inR ;//= er.first(); 2733 Addressee inR ;//= er.first();
2734 Addressee inL; 2734 Addressee inL;
2735 QProgressBar bar( er.count(),0 ); 2735 QProgressBar bar( er.count(),0 );
2736 bar.setCaption (i18n("Syncing - close to abort!") ); 2736 bar.setCaption (i18n("Syncing - close to abort!") );
2737 2737
2738 int w = 300; 2738 int w = 300;
2739 if ( QApplication::desktop()->width() < 320 ) 2739 if ( QApplication::desktop()->width() < 320 )
2740 w = 220; 2740 w = 220;
2741 int h = bar.sizeHint().height() ; 2741 int h = bar.sizeHint().height() ;
2742 int dw = QApplication::desktop()->width(); 2742 int dw = QApplication::desktop()->width();
2743 int dh = QApplication::desktop()->height(); 2743 int dh = QApplication::desktop()->height();
2744 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2744 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2745 bar.show(); 2745 bar.show();
2746 int modulo = (er.count()/10)+1; 2746 int modulo = (er.count()/10)+1;
2747 int incCounter = 0; 2747 int incCounter = 0;
2748 while ( incCounter < er.count()) { 2748 while ( incCounter < er.count()) {
2749 if ( ! bar.isVisible() ) 2749 if ( ! bar.isVisible() )
2750 return false; 2750 return false;
2751 if ( incCounter % modulo == 0 ) 2751 if ( incCounter % modulo == 0 )
2752 bar.setProgress( incCounter ); 2752 bar.setProgress( incCounter );
2753 uid = er[ incCounter ]; 2753 uid = er[ incCounter ];
2754 bool skipIncidence = false; 2754 bool skipIncidence = false;
2755 if ( uid.left(19) == QString("last-syncAddressee-") ) 2755 if ( uid.left(19) == QString("last-syncAddressee-") )
2756 skipIncidence = true; 2756 skipIncidence = true;
2757 QString idS,OidS; 2757 QString idS,OidS;
2758 qApp->processEvents(); 2758 qApp->processEvents();
2759 if ( !skipIncidence ) { 2759 if ( !skipIncidence ) {
2760 inL = local->findByUid( uid ); 2760 inL = local->findByUid( uid );
2761 inR = remote->findByUid( uid ); 2761 inR = remote->findByUid( uid );
2762 //inL.setResource( 0 ); 2762 //inL.setResource( 0 );
2763 //inR.setResource( 0 ); 2763 //inR.setResource( 0 );
2764 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars 2764 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars
2765 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) { 2765 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) {
2766 //qDebug("take %d %s ", take, inL.summary().latin1()); 2766 //qDebug("take %d %s ", take, inL.summary().latin1());
2767 if ( take == 3 ) 2767 if ( take == 3 )
2768 return false; 2768 return false;
2769 if ( take == 1 ) {// take local 2769 if ( take == 1 ) {// take local
2770 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2770 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2771 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2771 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2772 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2772 local->insertAddressee( inL, false ); 2773 local->insertAddressee( inL, false );
2773 idS = inR.externalUID(); 2774 idS = inR.externalUID();
2774 OidS = inR.originalExternalUID(); 2775 OidS = inR.originalExternalUID();
2775 } 2776 }
2776 else 2777 else
2777 idS = inR.IDStr(); 2778 idS = inR.IDStr();
2778 remote->removeAddressee( inR ); 2779 remote->removeAddressee( inR );
2779 inR = inL; 2780 inR = inL;
2780 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 2781 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
2781 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2782 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2782 inR.setOriginalExternalUID( OidS ); 2783 inR.setOriginalExternalUID( OidS );
2783 inR.setExternalUID( idS ); 2784 inR.setExternalUID( idS );
2784 } else { 2785 } else {
2785 inR.setIDStr( idS ); 2786 inR.setIDStr( idS );
2786 } 2787 }
2787 inR.setResource( 0 ); 2788 inR.setResource( 0 );
2788 remote->insertAddressee( inR , false); 2789 remote->insertAddressee( inR , false);
2789 ++changedRemote; 2790 ++changedRemote;
2790 } else { // take == 2 take remote 2791 } else { // take == 2 take remote
2791 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2792 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2792 if ( inR.revision().date().year() < 2004 ) 2793 if ( inR.revision().date().year() < 2004 )
2793 inR.setRevision( modifiedCalendar ); 2794 inR.setRevision( modifiedCalendar );
2794 } 2795 }
2795 idS = inL.IDStr(); 2796 idS = inL.IDStr();
2796 local->removeAddressee( inL ); 2797 local->removeAddressee( inL );
2797 inL = inR; 2798 inL = inR;
2798 inL.setIDStr( idS ); 2799 inL.setIDStr( idS );
2800 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2801 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2802 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2803 }
2799 inL.setResource( 0 ); 2804 inL.setResource( 0 );
2800 local->insertAddressee( inL , false ); 2805 local->insertAddressee( inL , false );
2801 ++changedLocal; 2806 ++changedLocal;
2802 } 2807 }
2803 } 2808 }
2804 } else { // no conflict 2809 } else { // no conflict
2805 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2810 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2806 QString des = addresseeLSync.note(); 2811 QString des = addresseeLSync.note();
2807 if ( des.find( inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 2812 if ( des.find( inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
2808 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 2813 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE );
2809 remote->insertAddressee( inR, false ); 2814 remote->insertAddressee( inR, false );
2810 ++deletedAddresseeR; 2815 ++deletedAddresseeR;
2811 } else { 2816 } else {
2812 inR.setRevision( modifiedCalendar ); 2817 inR.setRevision( modifiedCalendar );
2813 remote->insertAddressee( inR, false ); 2818 remote->insertAddressee( inR, false );
2814 inL = inR; 2819 inL = inR;
2815 inL.setResource( 0 ); 2820 inL.setResource( 0 );
2816 local->insertAddressee( inL , false); 2821 local->insertAddressee( inL , false);
2817 ++addedAddressee; 2822 ++addedAddressee;
2818 } 2823 }
2819 } else { 2824 } else {
2820 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) { 2825 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) {
2821 inR.setRevision( modifiedCalendar ); 2826 inR.setRevision( modifiedCalendar );
2822 remote->insertAddressee( inR, false ); 2827 remote->insertAddressee( inR, false );
2823 inR.setResource( 0 ); 2828 inR.setResource( 0 );
2824 local->insertAddressee( inR, false ); 2829 local->insertAddressee( inR, false );
2825 ++addedAddressee; 2830 ++addedAddressee;
2826 } else { 2831 } else {
2827 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR); 2832 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR);
2828 remote->removeAddressee( inR ); 2833 remote->removeAddressee( inR );
2829 ++deletedAddresseeR; 2834 ++deletedAddresseeR;
2830 } 2835 }
2831 } 2836 }
2832 } 2837 }
2833 } 2838 }
2834 ++incCounter; 2839 ++incCounter;
2835 } 2840 }
2836 er.clear(); 2841 er.clear();
2837 QStringList el = local->uidList(); 2842 QStringList el = local->uidList();
2838 modulo = (el.count()/10)+1; 2843 modulo = (el.count()/10)+1;
2839 bar.setCaption (i18n("Add / remove addressees") ); 2844 bar.setCaption (i18n("Add / remove addressees") );
2840 bar.setTotalSteps ( el.count() ) ; 2845 bar.setTotalSteps ( el.count() ) ;
2841 bar.show(); 2846 bar.show();
2842 incCounter = 0; 2847 incCounter = 0;
2843 while ( incCounter < el.count()) { 2848 while ( incCounter < el.count()) {
2844 qApp->processEvents(); 2849 qApp->processEvents();
2845 if ( ! bar.isVisible() ) 2850 if ( ! bar.isVisible() )
2846 return false; 2851 return false;
2847 if ( incCounter % modulo == 0 ) 2852 if ( incCounter % modulo == 0 )
2848 bar.setProgress( incCounter ); 2853 bar.setProgress( incCounter );
2849 uid = el[ incCounter ]; 2854 uid = el[ incCounter ];
2850 bool skipIncidence = false; 2855 bool skipIncidence = false;
2851 if ( uid.left(19) == QString("last-syncAddressee-") ) 2856 if ( uid.left(19) == QString("last-syncAddressee-") )
2852 skipIncidence = true; 2857 skipIncidence = true;
2853 if ( !skipIncidence ) { 2858 if ( !skipIncidence ) {
2854 inL = local->findByUid( uid ); 2859 inL = local->findByUid( uid );
2855 inR = remote->findByUid( uid ); 2860 inR = remote->findByUid( uid );
2856 if ( inR.isEmpty() ) { 2861 if ( inR.isEmpty() ) {
2857 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2862 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2858 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 2863 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
2859 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 2864 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2860 local->removeAddressee( inL ); 2865 local->removeAddressee( inL );
2861 ++deletedAddresseeL; 2866 ++deletedAddresseeL;
2862 } else { 2867 } else {
2863 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) { 2868 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) {
2864 inL.removeID(mCurrentSyncDevice ); 2869 inL.removeID(mCurrentSyncDevice );
2865 ++addedAddresseeR; 2870 ++addedAddresseeR;
2866 inL.setRevision( modifiedCalendar ); 2871 inL.setRevision( modifiedCalendar );
2867 local->insertAddressee( inL, false ); 2872 local->insertAddressee( inL, false );
2868 inR = inL; 2873 inR = inL;
2869 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL ); 2874 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL );
2870 inR.setResource( 0 ); 2875 inR.setResource( 0 );
2871 remote->insertAddressee( inR, false ); 2876 remote->insertAddressee( inR, false );
2872 } 2877 }
2873 } 2878 }
2874 } else { 2879 } else {
2875 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) { 2880 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) {
2876 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 2881 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2877 local->removeAddressee( inL ); 2882 local->removeAddressee( inL );
2878 ++deletedAddresseeL; 2883 ++deletedAddresseeL;
2879 } else { 2884 } else {
2880 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) { 2885 if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) {
2881 ++addedAddresseeR; 2886 ++addedAddresseeR;
2882 inL.setRevision( modifiedCalendar ); 2887 inL.setRevision( modifiedCalendar );
2883 local->insertAddressee( inL, false ); 2888 local->insertAddressee( inL, false );
2884 inR = inL; 2889 inR = inL;
2885 inR.setResource( 0 ); 2890 inR.setResource( 0 );
2886 remote->insertAddressee( inR, false ); 2891 remote->insertAddressee( inR, false );
2887 } 2892 }
2888 } 2893 }
2889 } 2894 }
2890 } 2895 }
2891 } 2896 }
2892 ++incCounter; 2897 ++incCounter;
2893 } 2898 }
2894 el.clear(); 2899 el.clear();
2895 bar.hide(); 2900 bar.hide();
2896 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 ); 2901 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 );
2897 // get rid of micro seconds 2902 // get rid of micro seconds
2898 QTime t = mLastAddressbookSync.time(); 2903 QTime t = mLastAddressbookSync.time();
2899 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 2904 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) );
2900 addresseeLSync.setRevision( mLastAddressbookSync ); 2905 addresseeLSync.setRevision( mLastAddressbookSync );
2901 addresseeRSync.setRevision( mLastAddressbookSync ); 2906 addresseeRSync.setRevision( mLastAddressbookSync );
2902 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ; 2907 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ;
2903 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName ); 2908 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName );
2904 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ; 2909 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ;
2905 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") ); 2910 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") );
2906 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ; 2911 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ;
2907 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() ); 2912 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() );
2908 addresseeRSync.setNote( "" ) ; 2913 addresseeRSync.setNote( "" ) ;
2909 addresseeLSync.setNote( "" ); 2914 addresseeLSync.setNote( "" );
2910 2915
2911 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 2916 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
2912 remote->insertAddressee( addresseeRSync, false ); 2917 remote->insertAddressee( addresseeRSync, false );
2913 local->insertAddressee( addresseeLSync, false ); 2918 local->insertAddressee( addresseeLSync, false );
2914 QString mes; 2919 QString mes;
2915 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 ); 2920 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 );
2916 if ( KABPrefs::instance()->mShowSyncSummary ) { 2921 if ( KABPrefs::instance()->mShowSyncSummary ) {
2917 KMessageBox::information(this, mes, i18n("KA/Pi Synchronization") ); 2922 KMessageBox::information(this, mes, i18n("KA/Pi Synchronization") );
2918 } 2923 }
2919 qDebug( mes ); 2924 qDebug( mes );
2920 return syncOK; 2925 return syncOK;
2921} 2926}
2922 2927
2923bool KABCore::syncAB(QString filename, int mode) 2928bool KABCore::syncAB(QString filename, int mode)
2924{ 2929{
2925 2930
2926 //pending prepare addresseeview for output 2931 //pending prepare addresseeview for output
2927 //pending detect, if remote file has REV field. if not switch to external sync 2932 //pending detect, if remote file has REV field. if not switch to external sync
2928 mGlobalSyncMode = SYNC_MODE_NORMAL; 2933 mGlobalSyncMode = SYNC_MODE_NORMAL;
2929 AddressBook abLocal(filename,"syncContact"); 2934 AddressBook abLocal(filename,"syncContact");
2930 bool syncOK = false; 2935 bool syncOK = false;
2931 if ( abLocal.load() ) { 2936 if ( abLocal.load() ) {
2932 qDebug("AB loaded %s,sync mode %d",filename.latin1(), mode ); 2937 qDebug("AB loaded %s,sync mode %d",filename.latin1(), mode );
2933 bool external = false; 2938 bool external = false;
2934 bool isXML = false; 2939 bool isXML = false;
2935 if ( filename.right(4) == ".xml") { 2940 if ( filename.right(4) == ".xml") {
2936 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2941 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2937 isXML = true; 2942 isXML = true;
2938 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice ); 2943 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice );
2939 } else { 2944 } else {
2940 Addressee lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2945 Addressee lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
2941 if ( ! lse.isEmpty() ) { 2946 if ( ! lse.isEmpty() ) {
2942 if ( lse.familyName().left(4) == "!E: " ) 2947 if ( lse.familyName().left(4) == "!E: " )
2943 external = true; 2948 external = true;
2944 } else { 2949 } else {
2945 bool found = false; 2950 bool found = false;
2946 AddressBook::Iterator it; 2951 AddressBook::Iterator it;
2947 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2952 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2948 if ( (*it).revision().date().year() > 2003 ) { 2953 if ( (*it).revision().date().year() > 2003 ) {
2949 found = true; 2954 found = true;
2950 break; 2955 break;
2951 } 2956 }
2952 } 2957 }
2953 external = ! found; 2958 external = ! found;
2954 } 2959 }
2955 2960
2956 if ( external ) { 2961 if ( external ) {
2957 qDebug("Setting vcf mode to external "); 2962 qDebug("Setting vcf mode to external ");
2958 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2963 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2959 AddressBook::Iterator it; 2964 AddressBook::Iterator it;
2960 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2965 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2961 (*it).setID( mCurrentSyncDevice, (*it).uid() ); 2966 (*it).setID( mCurrentSyncDevice, (*it).uid() );
2962 (*it).computeCsum( mCurrentSyncDevice ); 2967 (*it).computeCsum( mCurrentSyncDevice );
2963 } 2968 }
2964 } 2969 }
2965 } 2970 }
2966 //AddressBook::Iterator it; 2971 //AddressBook::Iterator it;
2967 //QStringList vcards; 2972 //QStringList vcards;
2968 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2973 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2969 // qDebug("Name %s ", (*it).familyName().latin1()); 2974 // qDebug("Name %s ", (*it).familyName().latin1());
2970 //} 2975 //}
2971 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode ); 2976 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode );
2972 if ( syncOK ) { 2977 if ( syncOK ) {
2973 if ( KABPrefs::instance()->mWriteBackFile ) 2978 if ( KABPrefs::instance()->mWriteBackFile )
2974 { 2979 {
2975 if ( external ) 2980 if ( external )
2976 abLocal.removeSyncAddressees( !isXML); 2981 abLocal.removeSyncAddressees( !isXML);
2977 qDebug("Saving remote AB "); 2982 qDebug("Saving remote AB ");
2978 abLocal.saveAB(); 2983 abLocal.saveAB();
2979 if ( isXML ) { 2984 if ( isXML ) {
2980 // afterwrite processing 2985 // afterwrite processing
2981 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice ); 2986 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice );
2982 } 2987 }
2983 } 2988 }
2984 } 2989 }
2985 setModified(); 2990 setModified();
2986 2991
2987 } 2992 }
2988 if ( syncOK ) 2993 if ( syncOK )
2989 mViewManager->refreshView(); 2994 mViewManager->refreshView();
2990 return syncOK; 2995 return syncOK;
2991#if 0 2996#if 0
2992 2997
2993 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) { 2998 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) {
2994 getEventViewerDialog()->setSyncMode( true ); 2999 getEventViewerDialog()->setSyncMode( true );
2995 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 3000 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
2996 getEventViewerDialog()->setSyncMode( false ); 3001 getEventViewerDialog()->setSyncMode( false );
2997 if ( syncOK ) { 3002 if ( syncOK ) {
2998 if ( KOPrefs::instance()->mWriteBackFile ) 3003 if ( KOPrefs::instance()->mWriteBackFile )
2999 { 3004 {
3000 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 3005 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
3001 storage->save(); 3006 storage->save();
3002 } 3007 }
3003 } 3008 }
3004 setModified(); 3009 setModified();
3005 } 3010 }
3006 3011
3007#endif 3012#endif
3008} 3013}
3009 3014
3010void KABCore::confSync() 3015void KABCore::confSync()
3011{ 3016{
3012 static KSyncPrefsDialog* sp = 0; 3017 static KSyncPrefsDialog* sp = 0;
3013 if ( ! sp ) { 3018 if ( ! sp ) {
3014 sp = new KSyncPrefsDialog( this, "syncprefs", true ); 3019 sp = new KSyncPrefsDialog( this, "syncprefs", true );
3015 } 3020 }
3016 sp->usrReadConfig(); 3021 sp->usrReadConfig();
3017#ifndef DESKTOP_VERSION 3022#ifndef DESKTOP_VERSION
3018 sp->showMaximized(); 3023 sp->showMaximized();
3019#else 3024#else
3020 sp->show(); 3025 sp->show();
3021#endif 3026#endif
3022 sp->exec(); 3027 sp->exec();
3023 KABPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames(); 3028 KABPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames();
3024 KABPrefs::instance()->mLocalMachineName = sp->getLocalMachineName (); 3029 KABPrefs::instance()->mLocalMachineName = sp->getLocalMachineName ();
3025 fillSyncMenu(); 3030 fillSyncMenu();
3026} 3031}
3027void KABCore::syncSharp() 3032void KABCore::syncSharp()
3028{ 3033{
3029 if ( ! syncExternal("sharp") ) 3034 if ( ! syncExternal("sharp") )
3030 qDebug("ERROR sync sharp ");; 3035 qDebug("ERROR sync sharp ");;
3031} 3036}
3032bool KABCore::syncExternal(QString resource) 3037bool KABCore::syncExternal(QString resource)
3033{ 3038{
3034 if ( mModified ) 3039 if ( mModified )
3035 save(); 3040 save();
3036 if ( KABPrefs::instance()->mAskForPreferences ) 3041 if ( KABPrefs::instance()->mAskForPreferences )
3037 edit_sync_options(); 3042 edit_sync_options();
3038 qDebug("syncSharp() "); 3043 qDebug("syncSharp() ");
3039 AddressBook abLocal( resource,"syncContact"); 3044 AddressBook abLocal( resource,"syncContact");
3040 bool syncOK = false; 3045 bool syncOK = false;
3041 if ( abLocal.load() ) { 3046 if ( abLocal.load() ) {
3042 qDebug("AB sharp loaded ,sync device %s",mCurrentSyncDevice.latin1()); 3047 qDebug("AB sharp loaded ,sync device %s",mCurrentSyncDevice.latin1());
3043 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 3048 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
3044 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice ); 3049 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice );
3045 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, KABPrefs::instance()->mSyncAlgoPrefs ); 3050 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, KABPrefs::instance()->mSyncAlgoPrefs );
3046 if ( syncOK ) { 3051 if ( syncOK ) {
3047 if ( KABPrefs::instance()->mWriteBackFile ) { 3052 if ( KABPrefs::instance()->mWriteBackFile ) {
3048 abLocal.saveAB(); 3053 abLocal.saveAB();
3049 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice ); 3054 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice );
3050 } 3055 }
3051 } 3056 }
3052 setModified(); 3057 setModified();
3053 } 3058 }
3054 if ( syncOK ) 3059 if ( syncOK )
3055 mViewManager->refreshView(); 3060 mViewManager->refreshView();
3056 return syncOK; 3061 return syncOK;
3057 3062
3058} 3063}
3059void KABCore::syncPhone() 3064void KABCore::syncPhone()
3060{ 3065{
3061 if ( mModified ) 3066 if ( mModified )
3062 save(); 3067 save();
3063 qDebug("pending syncPhone(); "); 3068 qDebug("pending syncPhone(); ");
3064 //mView->syncPhone(); 3069 //mView->syncPhone();
3065 setModified(); 3070 setModified();
3066 3071
3067} 3072}
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index bbed05b..7fae4a9 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,3612 +1,3616 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 3
4 Requires the Qt and KDE widget libraries, available at no cost at 4 Requires the Qt and KDE widget libraries, available at no cost at
5 http://www.troll.no and http://www.kde.org respectively 5 http://www.troll.no and http://www.kde.org respectively
6 6
7 Copyright (c) 1997, 1998, 1999 7 Copyright (c) 1997, 1998, 1999
8 Preston Brown (preston.brown@yale.edu) 8 Preston Brown (preston.brown@yale.edu)
9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl) 9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl)
10 Ian Dawes (iadawes@globalserve.net) 10 Ian Dawes (iadawes@globalserve.net)
11 Laszlo Boloni (boloni@cs.purdue.edu) 11 Laszlo Boloni (boloni@cs.purdue.edu)
12 12
13 Copyright (c) 2000, 2001, 2002 13 Copyright (c) 2000, 2001, 2002
14 Cornelius Schumacher <schumacher@kde.org> 14 Cornelius Schumacher <schumacher@kde.org>
15 15
16 This program is free software; you can redistribute it and/or modify 16 This program is free software; you can redistribute it and/or modify
17 it under the terms of the GNU General Public License as published by 17 it under the terms of the GNU General Public License as published by
18 the Free Software Foundation; either version 2 of the License, or 18 the Free Software Foundation; either version 2 of the License, or
19 (at your option) any later version. 19 (at your option) any later version.
20 20
21 This program is distributed in the hope that it will be useful, 21 This program is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of 22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
24 GNU General Public License for more details. 24 GNU General Public License for more details.
25 25
26 You should have received a copy of the GNU General Public License 26 You should have received a copy of the GNU General Public License
27 along with this program; if not, write to the Free Software 27 along with this program; if not, write to the Free Software
28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29*/ 29*/
30 30
31#include <stdlib.h> 31#include <stdlib.h>
32 32
33#include <qapplication.h> 33#include <qapplication.h>
34#include <qradiobutton.h> 34#include <qradiobutton.h>
35#include <qbuttongroup.h> 35#include <qbuttongroup.h>
36#include <qlayout.h> 36#include <qlayout.h>
37#include <qclipboard.h> 37#include <qclipboard.h>
38#include <qcursor.h> 38#include <qcursor.h>
39#include <qmessagebox.h> 39#include <qmessagebox.h>
40#include <qprogressbar.h> 40#include <qprogressbar.h>
41#include <qmultilineedit.h> 41#include <qmultilineedit.h>
42#include <qtimer.h> 42#include <qtimer.h>
43#include <qwidgetstack.h> 43#include <qwidgetstack.h>
44#include <qptrlist.h> 44#include <qptrlist.h>
45#include <qregexp.h> 45#include <qregexp.h>
46#include <qgroupbox.h> 46#include <qgroupbox.h>
47#include <qfile.h> 47#include <qfile.h>
48#include <qdir.h> 48#include <qdir.h>
49#ifndef KORG_NOSPLITTER 49#ifndef KORG_NOSPLITTER
50#include <qsplitter.h> 50#include <qsplitter.h>
51#endif 51#endif
52 52
53#include <kglobal.h> 53#include <kglobal.h>
54#include <kdebug.h> 54#include <kdebug.h>
55#include <kstandarddirs.h> 55#include <kstandarddirs.h>
56#include <kfiledialog.h> 56#include <kfiledialog.h>
57#include <kmessagebox.h> 57#include <kmessagebox.h>
58#include <knotifyclient.h> 58#include <knotifyclient.h>
59#include <kconfig.h> 59#include <kconfig.h>
60 60
61#include <libkdepim/ksyncprefsdialog.h> 61#include <libkdepim/ksyncprefsdialog.h>
62#include <krun.h> 62#include <krun.h>
63#include <kdirwatch.h> 63#include <kdirwatch.h>
64#include <libkdepim/kdatepicker.h> 64#include <libkdepim/kdatepicker.h>
65#include <libkdepim/ksyncprofile.h> 65#include <libkdepim/ksyncprofile.h>
66 66
67#include <libkcal/vcaldrag.h> 67#include <libkcal/vcaldrag.h>
68#include <libkcal/icaldrag.h> 68#include <libkcal/icaldrag.h>
69#include <libkcal/icalformat.h> 69#include <libkcal/icalformat.h>
70#include <libkcal/vcalformat.h> 70#include <libkcal/vcalformat.h>
71#include <libkcal/scheduler.h> 71#include <libkcal/scheduler.h>
72#include <libkcal/calendarlocal.h> 72#include <libkcal/calendarlocal.h>
73#include <libkcal/journal.h> 73#include <libkcal/journal.h>
74#include <libkcal/calfilter.h> 74#include <libkcal/calfilter.h>
75#include <libkcal/attendee.h> 75#include <libkcal/attendee.h>
76#include <libkcal/dndfactory.h> 76#include <libkcal/dndfactory.h>
77#include <libkcal/freebusy.h> 77#include <libkcal/freebusy.h>
78#include <libkcal/filestorage.h> 78#include <libkcal/filestorage.h>
79#include <libkcal/calendarresources.h> 79#include <libkcal/calendarresources.h>
80#include <libkcal/qtopiaformat.h> 80#include <libkcal/qtopiaformat.h>
81#include "../kalarmd/alarmdialog.h" 81#include "../kalarmd/alarmdialog.h"
82 82
83#ifndef DESKTOP_VERSION 83#ifndef DESKTOP_VERSION
84#include <libkcal/sharpformat.h> 84#include <libkcal/sharpformat.h>
85#endif 85#endif
86#include <libkcal/phoneformat.h> 86#include <libkcal/phoneformat.h>
87#ifndef KORG_NOMAIL 87#ifndef KORG_NOMAIL
88#include "komailclient.h" 88#include "komailclient.h"
89#endif 89#endif
90#ifndef KORG_NOPRINTER 90#ifndef KORG_NOPRINTER
91#include "calprinter.h" 91#include "calprinter.h"
92#endif 92#endif
93#ifndef KORG_NOPLUGINS 93#ifndef KORG_NOPLUGINS
94#include "kocore.h" 94#include "kocore.h"
95#endif 95#endif
96#include "koeventeditor.h" 96#include "koeventeditor.h"
97#include "kotodoeditor.h" 97#include "kotodoeditor.h"
98#include "koprefs.h" 98#include "koprefs.h"
99#include "koeventviewerdialog.h" 99#include "koeventviewerdialog.h"
100#include "publishdialog.h" 100#include "publishdialog.h"
101#include "kofilterview.h" 101#include "kofilterview.h"
102#include "koglobals.h" 102#include "koglobals.h"
103#include "koviewmanager.h" 103#include "koviewmanager.h"
104#include "koagendaview.h" 104#include "koagendaview.h"
105#include "kodialogmanager.h" 105#include "kodialogmanager.h"
106#include "outgoingdialog.h" 106#include "outgoingdialog.h"
107#include "incomingdialog.h" 107#include "incomingdialog.h"
108#include "statusdialog.h" 108#include "statusdialog.h"
109#include "kdatenavigator.h" 109#include "kdatenavigator.h"
110#include "kotodoview.h" 110#include "kotodoview.h"
111#include "datenavigator.h" 111#include "datenavigator.h"
112#include "resourceview.h" 112#include "resourceview.h"
113#include "navigatorbar.h" 113#include "navigatorbar.h"
114#include "searchdialog.h" 114#include "searchdialog.h"
115#include "mainwindow.h" 115#include "mainwindow.h"
116 116
117#include "calendarview.h" 117#include "calendarview.h"
118#ifndef DESKTOP_VERSION 118#ifndef DESKTOP_VERSION
119#include <qtopia/alarmserver.h> 119#include <qtopia/alarmserver.h>
120#endif 120#endif
121#ifndef _WIN32_ 121#ifndef _WIN32_
122#include <stdlib.h> 122#include <stdlib.h>
123#include <stdio.h> 123#include <stdio.h>
124#include <unistd.h> 124#include <unistd.h>
125#else 125#else
126#include <qprocess.h> 126#include <qprocess.h>
127#endif 127#endif
128using namespace KOrg; 128using namespace KOrg;
129using namespace KCal; 129using namespace KCal;
130extern int globalFlagBlockAgenda; 130extern int globalFlagBlockAgenda;
131extern int globalFlagBlockStartup; 131extern int globalFlagBlockStartup;
132 132
133 133
134 134
135class KOBeamPrefs : public QDialog 135class KOBeamPrefs : public QDialog
136{ 136{
137 public: 137 public:
138 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : 138 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) :
139 QDialog( parent, name, true ) 139 QDialog( parent, name, true )
140 { 140 {
141 setCaption( i18n("Beam Options") ); 141 setCaption( i18n("Beam Options") );
142 QVBoxLayout* lay = new QVBoxLayout( this ); 142 QVBoxLayout* lay = new QVBoxLayout( this );
143 lay->setSpacing( 3 ); 143 lay->setSpacing( 3 );
144 lay->setMargin( 3 ); 144 lay->setMargin( 3 );
145 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); 145 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this );
146 lay->addWidget( format ); 146 lay->addWidget( format );
147 format->setExclusive ( true ) ; 147 format->setExclusive ( true ) ;
148 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); 148 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this );
149 lay->addWidget( time ); time->setExclusive ( true ) ; 149 lay->addWidget( time ); time->setExclusive ( true ) ;
150 vcal = new QRadioButton(" vCalendar ", format ); 150 vcal = new QRadioButton(" vCalendar ", format );
151 ical = new QRadioButton(" iCalendar ", format ); 151 ical = new QRadioButton(" iCalendar ", format );
152 vcal->setChecked( true ); 152 vcal->setChecked( true );
153 tz = new QRadioButton(i18n(" With timezone "), time ); 153 tz = new QRadioButton(i18n(" With timezone "), time );
154 local = new QRadioButton(i18n(" Local time "), time ); 154 local = new QRadioButton(i18n(" Local time "), time );
155 tz->setChecked( true ); 155 tz->setChecked( true );
156 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); 156 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this );
157 lay->addWidget( ok ); 157 lay->addWidget( ok );
158 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 158 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
159 lay->addWidget( cancel ); 159 lay->addWidget( cancel );
160 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 160 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
161 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 161 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
162 resize( 200, 200 ); 162 resize( 200, 200 );
163 } 163 }
164 164
165 bool beamVcal() { return vcal->isChecked(); } 165 bool beamVcal() { return vcal->isChecked(); }
166 bool beamLocal() { return local->isChecked(); } 166 bool beamLocal() { return local->isChecked(); }
167private: 167private:
168 QRadioButton* vcal, *ical, *local, *tz; 168 QRadioButton* vcal, *ical, *local, *tz;
169}; 169};
170class KOCatPrefs : public QDialog 170class KOCatPrefs : public QDialog
171{ 171{
172 public: 172 public:
173 KOCatPrefs( QWidget *parent=0, const char *name=0 ) : 173 KOCatPrefs( QWidget *parent=0, const char *name=0 ) :
174 QDialog( parent, name, true ) 174 QDialog( parent, name, true )
175 { 175 {
176 setCaption( i18n("Manage new Categories") ); 176 setCaption( i18n("Manage new Categories") );
177 QVBoxLayout* lay = new QVBoxLayout( this ); 177 QVBoxLayout* lay = new QVBoxLayout( this );
178 lay->setSpacing( 3 ); 178 lay->setSpacing( 3 );
179 lay->setMargin( 3 ); 179 lay->setMargin( 3 );
180 QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n "), this ); 180 QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n "), this );
181 lay->addWidget( lab ); 181 lay->addWidget( lab );
182 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); 182 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this );
183 lay->addWidget( format ); 183 lay->addWidget( format );
184 format->setExclusive ( true ) ; 184 format->setExclusive ( true ) ;
185 addCatBut = new QRadioButton(i18n("Add to category list"), format ); 185 addCatBut = new QRadioButton(i18n("Add to category list"), format );
186 new QRadioButton(i18n("Remove from Events/Todos"), format ); 186 new QRadioButton(i18n("Remove from Events/Todos"), format );
187 addCatBut->setChecked( true ); 187 addCatBut->setChecked( true );
188 QPushButton * ok = new QPushButton( i18n("OK"), this ); 188 QPushButton * ok = new QPushButton( i18n("OK"), this );
189 lay->addWidget( ok ); 189 lay->addWidget( ok );
190 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 190 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
191 lay->addWidget( cancel ); 191 lay->addWidget( cancel );
192 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 192 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
193 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 193 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
194 resize( 200, 200 ); 194 resize( 200, 200 );
195 } 195 }
196 196
197 bool addCat() { return addCatBut->isChecked(); } 197 bool addCat() { return addCatBut->isChecked(); }
198private: 198private:
199 QRadioButton* addCatBut; 199 QRadioButton* addCatBut;
200}; 200};
201 201
202 202
203 203
204CalendarView::CalendarView( CalendarResources *calendar, 204CalendarView::CalendarView( CalendarResources *calendar,
205 QWidget *parent, const char *name ) 205 QWidget *parent, const char *name )
206 : CalendarViewBase( parent, name ), 206 : CalendarViewBase( parent, name ),
207 mCalendar( calendar ), 207 mCalendar( calendar ),
208 mResourceManager( calendar->resourceManager() ) 208 mResourceManager( calendar->resourceManager() )
209{ 209{
210 210
211 mEventEditor = 0; 211 mEventEditor = 0;
212 mTodoEditor = 0; 212 mTodoEditor = 0;
213 213
214 init(); 214 init();
215} 215}
216 216
217CalendarView::CalendarView( Calendar *calendar, 217CalendarView::CalendarView( Calendar *calendar,
218 QWidget *parent, const char *name ) 218 QWidget *parent, const char *name )
219 : CalendarViewBase( parent, name ), 219 : CalendarViewBase( parent, name ),
220 mCalendar( calendar ), 220 mCalendar( calendar ),
221 mResourceManager( 0 ) 221 mResourceManager( 0 )
222{ 222{
223 223
224 mEventEditor = 0; 224 mEventEditor = 0;
225 mTodoEditor = 0; 225 mTodoEditor = 0;
226 init();} 226 init();}
227 227
228void CalendarView::init() 228void CalendarView::init()
229{ 229{
230 beamDialog = new KOBeamPrefs(); 230 beamDialog = new KOBeamPrefs();
231 mDatePickerMode = 0; 231 mDatePickerMode = 0;
232 mCurrentSyncDevice = ""; 232 mCurrentSyncDevice = "";
233 writeLocale(); 233 writeLocale();
234 mViewManager = new KOViewManager( this ); 234 mViewManager = new KOViewManager( this );
235 mDialogManager = new KODialogManager( this ); 235 mDialogManager = new KODialogManager( this );
236 mEventViewerDialog = 0; 236 mEventViewerDialog = 0;
237 mModified = false; 237 mModified = false;
238 mReadOnly = false; 238 mReadOnly = false;
239 mSelectedIncidence = 0; 239 mSelectedIncidence = 0;
240 mCalPrinter = 0; 240 mCalPrinter = 0;
241 mFilters.setAutoDelete(true); 241 mFilters.setAutoDelete(true);
242 242
243 mCalendar->registerObserver( this ); 243 mCalendar->registerObserver( this );
244 // TODO: Make sure that view is updated, when calendar is changed. 244 // TODO: Make sure that view is updated, when calendar is changed.
245 245
246 mStorage = new FileStorage( mCalendar ); 246 mStorage = new FileStorage( mCalendar );
247 mNavigator = new DateNavigator( this, "datevav", mViewManager ); 247 mNavigator = new DateNavigator( this, "datevav", mViewManager );
248 248
249 QBoxLayout *topLayout = (QBoxLayout*)layout(); 249 QBoxLayout *topLayout = (QBoxLayout*)layout();
250#ifndef KORG_NOSPLITTER 250#ifndef KORG_NOSPLITTER
251 // create the main layout frames. 251 // create the main layout frames.
252 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); 252 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner");
253 topLayout->addWidget(mPanner); 253 topLayout->addWidget(mPanner);
254 254
255 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, 255 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner,
256 "CalendarView::LeftFrame"); 256 "CalendarView::LeftFrame");
257 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); 257 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize);
258 258
259 mDateNavigator = new KDateNavigator(mLeftSplitter, mCalendar, TRUE, 259 mDateNavigator = new KDateNavigator(mLeftSplitter, mCalendar, TRUE,
260 "CalendarView::DateNavigator", QDate::currentDate() ); 260 "CalendarView::DateNavigator", QDate::currentDate() );
261 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); 261 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize);
262 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); 262 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2");
263 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); 263 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView");
264 264
265#ifdef KORG_NORESOURCEVIEW 265#ifdef KORG_NORESOURCEVIEW
266 mResourceView = 0; 266 mResourceView = 0;
267#else 267#else
268 if ( mResourceManager ) { 268 if ( mResourceManager ) {
269 mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); 269 mResourceView = new ResourceView( mResourceManager, mLeftSplitter );
270 mResourceView->updateView(); 270 mResourceView->updateView();
271 connect( mResourceView, SIGNAL( resourcesChanged() ), 271 connect( mResourceView, SIGNAL( resourcesChanged() ),
272 SLOT( updateView() ) ); 272 SLOT( updateView() ) );
273 } else { 273 } else {
274 mResourceView = 0; 274 mResourceView = 0;
275 } 275 }
276#endif 276#endif
277 QWidget *rightBox = new QWidget( mPanner ); 277 QWidget *rightBox = new QWidget( mPanner );
278 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 278 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
279 279
280 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" ); 280 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" );
281 rightLayout->addWidget( mNavigatorBar ); 281 rightLayout->addWidget( mNavigatorBar );
282 282
283 mRightFrame = new QWidgetStack( rightBox ); 283 mRightFrame = new QWidgetStack( rightBox );
284 rightLayout->addWidget( mRightFrame, 1 ); 284 rightLayout->addWidget( mRightFrame, 1 );
285 285
286 mLeftFrame = mLeftSplitter; 286 mLeftFrame = mLeftSplitter;
287#else 287#else
288 QWidget *mainBox = new QWidget( this ); 288 QWidget *mainBox = new QWidget( this );
289 QWidget *leftFrame = new QWidget( mainBox ); 289 QWidget *leftFrame = new QWidget( mainBox );
290 290
291 QBoxLayout * mainBoxLayout; 291 QBoxLayout * mainBoxLayout;
292 QBoxLayout * leftFrameLayout; 292 QBoxLayout * leftFrameLayout;
293 if ( KOPrefs::instance()->mVerticalScreen ) { 293 if ( KOPrefs::instance()->mVerticalScreen ) {
294 mainBoxLayout = new QVBoxLayout(mainBox); 294 mainBoxLayout = new QVBoxLayout(mainBox);
295 leftFrameLayout = new QHBoxLayout(leftFrame ); 295 leftFrameLayout = new QHBoxLayout(leftFrame );
296 } else { 296 } else {
297 mainBoxLayout = new QHBoxLayout(mainBox); 297 mainBoxLayout = new QHBoxLayout(mainBox);
298 leftFrameLayout = new QVBoxLayout(leftFrame ); 298 leftFrameLayout = new QVBoxLayout(leftFrame );
299 } 299 }
300 topLayout->addWidget( mainBox ); 300 topLayout->addWidget( mainBox );
301 mainBoxLayout->addWidget (leftFrame); 301 mainBoxLayout->addWidget (leftFrame);
302 mDateNavigator = new KDateNavigator(leftFrame, mCalendar, TRUE, 302 mDateNavigator = new KDateNavigator(leftFrame, mCalendar, TRUE,
303 "CalendarView::DateNavigator", QDate::currentDate()); 303 "CalendarView::DateNavigator", QDate::currentDate());
304 // mDateNavigator->blockSignals( true ); 304 // mDateNavigator->blockSignals( true );
305 leftFrameLayout->addWidget( mDateNavigator ); 305 leftFrameLayout->addWidget( mDateNavigator );
306 mFilterView = new KOFilterView(&mFilters,leftFrame,"CalendarView::FilterView"); 306 mFilterView = new KOFilterView(&mFilters,leftFrame,"CalendarView::FilterView");
307 mTodoList = new KOTodoView(mCalendar, leftFrame, "todolist"); 307 mTodoList = new KOTodoView(mCalendar, leftFrame, "todolist");
308 308
309 if ( QApplication::desktop()->width() < 480 ) { 309 if ( QApplication::desktop()->width() < 480 ) {
310 leftFrameLayout->addWidget(mFilterView); 310 leftFrameLayout->addWidget(mFilterView);
311 leftFrameLayout->addWidget(mTodoList, 2 ); 311 leftFrameLayout->addWidget(mTodoList, 2 );
312 312
313 } else { 313 } else {
314 leftFrameLayout->addWidget(mTodoList,2 ); 314 leftFrameLayout->addWidget(mTodoList,2 );
315 leftFrameLayout->addWidget(mFilterView ); 315 leftFrameLayout->addWidget(mFilterView );
316 } 316 }
317 mFilterView->hide(); 317 mFilterView->hide();
318 QWidget *rightBox = new QWidget( mainBox ); 318 QWidget *rightBox = new QWidget( mainBox );
319 mainBoxLayout->addWidget ( rightBox, 10 ); 319 mainBoxLayout->addWidget ( rightBox, 10 );
320 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 320 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
321 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" ); 321 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" );
322 mRightFrame = new QWidgetStack( rightBox ); 322 mRightFrame = new QWidgetStack( rightBox );
323 rightLayout->addWidget( mNavigatorBar ); 323 rightLayout->addWidget( mNavigatorBar );
324 rightLayout->addWidget( mRightFrame, 10 ); 324 rightLayout->addWidget( mRightFrame, 10 );
325 325
326 mLeftFrame = leftFrame; 326 mLeftFrame = leftFrame;
327 if ( KOPrefs::instance()->mVerticalScreen ) { 327 if ( KOPrefs::instance()->mVerticalScreen ) {
328 mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); 328 mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() );
329 leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); 329 leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() );
330 } else { 330 } else {
331 mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); 331 mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() );
332 leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); 332 leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() );
333 } 333 }
334 334
335 //qDebug("Calendarview Size %d %d ", width(), height()); 335 //qDebug("Calendarview Size %d %d ", width(), height());
336#endif 336#endif
337 337
338 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 338 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
339 SLOT( showDates( const KCal::DateList & ) ) ); 339 SLOT( showDates( const KCal::DateList & ) ) );
340 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 340 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
341 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 341 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
342 342
343 connect( mNavigatorBar, SIGNAL( goPrevYear() ), 343 connect( mNavigatorBar, SIGNAL( goPrevYear() ),
344 mNavigator, SLOT( selectPreviousYear() ) ); 344 mNavigator, SLOT( selectPreviousYear() ) );
345 connect( mNavigatorBar, SIGNAL( goNextYear() ), 345 connect( mNavigatorBar, SIGNAL( goNextYear() ),
346 mNavigator, SLOT( selectNextYear() ) ); 346 mNavigator, SLOT( selectNextYear() ) );
347 connect( mNavigatorBar, SIGNAL( goPrevMonth() ), 347 connect( mNavigatorBar, SIGNAL( goPrevMonth() ),
348 mNavigator, SLOT( selectPreviousMonth() ) ); 348 mNavigator, SLOT( selectPreviousMonth() ) );
349 connect( mNavigatorBar, SIGNAL( goNextMonth() ), 349 connect( mNavigatorBar, SIGNAL( goNextMonth() ),
350 mNavigator, SLOT( selectNextMonth() ) ); 350 mNavigator, SLOT( selectNextMonth() ) );
351 351
352 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 352 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
353 mNavigatorBar, SLOT( selectDates( const KCal::DateList & ) ) ); 353 mNavigatorBar, SLOT( selectDates( const KCal::DateList & ) ) );
354 354
355 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), 355 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ),
356 mNavigator, SLOT( selectWeek( const QDate & ) ) ); 356 mNavigator, SLOT( selectWeek( const QDate & ) ) );
357 357
358 connect( mDateNavigator, SIGNAL( goPrevYear() ), 358 connect( mDateNavigator, SIGNAL( goPrevYear() ),
359 mNavigator, SLOT( selectPreviousYear() ) ); 359 mNavigator, SLOT( selectPreviousYear() ) );
360 connect( mDateNavigator, SIGNAL( goNextYear() ), 360 connect( mDateNavigator, SIGNAL( goNextYear() ),
361 mNavigator, SLOT( selectNextYear() ) ); 361 mNavigator, SLOT( selectNextYear() ) );
362 connect( mDateNavigator, SIGNAL( goPrevMonth() ), 362 connect( mDateNavigator, SIGNAL( goPrevMonth() ),
363 mNavigator, SLOT( selectPreviousMonth() ) ); 363 mNavigator, SLOT( selectPreviousMonth() ) );
364 connect( mDateNavigator, SIGNAL( goNextMonth() ), 364 connect( mDateNavigator, SIGNAL( goNextMonth() ),
365 mNavigator, SLOT( selectNextMonth() ) ); 365 mNavigator, SLOT( selectNextMonth() ) );
366 366
367 connect( mDateNavigator, SIGNAL( goPrevious() ), 367 connect( mDateNavigator, SIGNAL( goPrevious() ),
368 mNavigator, SLOT( selectPrevious() ) ); 368 mNavigator, SLOT( selectPrevious() ) );
369 connect( mDateNavigator, SIGNAL( goNext() ), 369 connect( mDateNavigator, SIGNAL( goNext() ),
370 mNavigator, SLOT( selectNext() ) ); 370 mNavigator, SLOT( selectNext() ) );
371 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), 371 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ),
372 mNavigator, SLOT( slotMonthSelect( int ) ) ); 372 mNavigator, SLOT( slotMonthSelect( int ) ) );
373 connect( mNavigatorBar, SIGNAL( monthSelected ( int ) ), 373 connect( mNavigatorBar, SIGNAL( monthSelected ( int ) ),
374 mNavigator, SLOT( slotMonthSelect( int ) ) ); 374 mNavigator, SLOT( slotMonthSelect( int ) ) );
375 375
376 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 376 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
377 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 377 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
378 378
379 connect( mDateNavigator, SIGNAL( eventDropped( Event * ) ), 379 connect( mDateNavigator, SIGNAL( eventDropped( Event * ) ),
380 SLOT( eventAdded( Event *) ) ); 380 SLOT( eventAdded( Event *) ) );
381 381
382 connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); 382 connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView()));
383 383
384 connect( this, SIGNAL( configChanged() ), 384 connect( this, SIGNAL( configChanged() ),
385 mDateNavigator, SLOT( updateConfig() ) ); 385 mDateNavigator, SLOT( updateConfig() ) );
386 386
387 connect( mTodoList, SIGNAL( newTodoSignal() ), 387 connect( mTodoList, SIGNAL( newTodoSignal() ),
388 SLOT( newTodo() ) ); 388 SLOT( newTodo() ) );
389 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), 389 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ),
390 SLOT( newSubTodo( Todo * ) ) ); 390 SLOT( newSubTodo( Todo * ) ) );
391 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), 391 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ),
392 SLOT( editTodo( Todo * ) ) ); 392 SLOT( editTodo( Todo * ) ) );
393 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), 393 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ),
394 SLOT( showTodo( Todo *) ) ); 394 SLOT( showTodo( Todo *) ) );
395 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), 395 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ),
396 SLOT( deleteTodo( Todo *) ) ); 396 SLOT( deleteTodo( Todo *) ) );
397 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); 397 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) );
398 connect( mTodoList, SIGNAL( purgeCompletedSignal() ), 398 connect( mTodoList, SIGNAL( purgeCompletedSignal() ),
399 SLOT( purgeCompleted() ) ); 399 SLOT( purgeCompleted() ) );
400 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), 400 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ),
401 SIGNAL( todoModified( Todo *, int ) ) ); 401 SIGNAL( todoModified( Todo *, int ) ) );
402 402
403 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), 403 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ),
404 this, SLOT ( cloneIncidence( Incidence * ) ) ); 404 this, SLOT ( cloneIncidence( Incidence * ) ) );
405 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), 405 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ),
406 this, SLOT (cancelIncidence( Incidence * ) ) ); 406 this, SLOT (cancelIncidence( Incidence * ) ) );
407 407
408 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), 408 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ),
409 this, SLOT ( moveIncidence( Incidence * ) ) ); 409 this, SLOT ( moveIncidence( Incidence * ) ) );
410 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), 410 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ),
411 this, SLOT ( beamIncidence( Incidence * ) ) ); 411 this, SLOT ( beamIncidence( Incidence * ) ) );
412 412
413 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), 413 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ),
414 this, SLOT ( todo_unsub( Todo * ) ) ); 414 this, SLOT ( todo_unsub( Todo * ) ) );
415 415
416 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, 416 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList,
417 SLOT( updateTodo( Todo *, int ) ) ); 417 SLOT( updateTodo( Todo *, int ) ) );
418 connect( this, SIGNAL( todoModified( Todo *, int )), this, 418 connect( this, SIGNAL( todoModified( Todo *, int )), this,
419 SLOT( changeTodoDisplay( Todo *, int ) ) ); 419 SLOT( changeTodoDisplay( Todo *, int ) ) );
420 420
421 421
422 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); 422 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) );
423 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); 423 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) );
424 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); 424 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) );
425 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); 425 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) );
426 426
427 427
428 428
429 429
430 430
431 connect(QApplication::clipboard(),SIGNAL(dataChanged()), 431 connect(QApplication::clipboard(),SIGNAL(dataChanged()),
432 SLOT(checkClipboard())); 432 SLOT(checkClipboard()));
433 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), 433 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ),
434 SLOT( processTodoListSelection( Incidence * ) ) ); 434 SLOT( processTodoListSelection( Incidence * ) ) );
435 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); 435 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool)));
436 436
437 // kdDebug() << "CalendarView::CalendarView() done" << endl; 437 // kdDebug() << "CalendarView::CalendarView() done" << endl;
438 438
439 mDateFrame = new QVBox(0,0,WType_Popup); 439 mDateFrame = new QVBox(0,0,WType_Popup);
440 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 440 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
441 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 441 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
442 mDateFrame->setLineWidth(3); 442 mDateFrame->setLineWidth(3);
443 mDateFrame->hide(); 443 mDateFrame->hide();
444 mDateFrame->setCaption( i18n( "Pick a date to display")); 444 mDateFrame->setCaption( i18n( "Pick a date to display"));
445 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); 445 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() );
446 446
447 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); 447 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate)));
448 448
449 mEventEditor = mDialogManager->getEventEditor(); 449 mEventEditor = mDialogManager->getEventEditor();
450 mTodoEditor = mDialogManager->getTodoEditor(); 450 mTodoEditor = mDialogManager->getTodoEditor();
451 451
452 mFlagEditDescription = false; 452 mFlagEditDescription = false;
453 453
454 mSuspendTimer = new QTimer( this ); 454 mSuspendTimer = new QTimer( this );
455 mAlarmTimer = new QTimer( this ); 455 mAlarmTimer = new QTimer( this );
456 mRecheckAlarmTimer = new QTimer( this ); 456 mRecheckAlarmTimer = new QTimer( this );
457 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); 457 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
458 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); 458 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
459 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); 459 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
460 mAlarmDialog = new AlarmDialog( this ); 460 mAlarmDialog = new AlarmDialog( this );
461 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); 461 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
462 mAlarmDialog->setServerNotification( false ); 462 mAlarmDialog->setServerNotification( false );
463 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); 463 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
464} 464}
465 465
466 466
467CalendarView::~CalendarView() 467CalendarView::~CalendarView()
468{ 468{
469 // kdDebug() << "~CalendarView()" << endl; 469 // kdDebug() << "~CalendarView()" << endl;
470 //qDebug("CalendarView::~CalendarView() "); 470 //qDebug("CalendarView::~CalendarView() ");
471 delete mDialogManager; 471 delete mDialogManager;
472 delete mViewManager; 472 delete mViewManager;
473 delete mStorage; 473 delete mStorage;
474 delete mDateFrame ; 474 delete mDateFrame ;
475 delete beamDialog; 475 delete beamDialog;
476 //kdDebug() << "~CalendarView() done" << endl; 476 //kdDebug() << "~CalendarView() done" << endl;
477} 477}
478void CalendarView::timerAlarm() 478void CalendarView::timerAlarm()
479{ 479{
480 //qDebug("CalendarView::timerAlarm() "); 480 //qDebug("CalendarView::timerAlarm() ");
481 computeAlarm(mAlarmNotification ); 481 computeAlarm(mAlarmNotification );
482} 482}
483 483
484void CalendarView::suspendAlarm() 484void CalendarView::suspendAlarm()
485{ 485{
486 //qDebug(" CalendarView::suspendAlarm() "); 486 //qDebug(" CalendarView::suspendAlarm() ");
487 computeAlarm(mSuspendAlarmNotification ); 487 computeAlarm(mSuspendAlarmNotification );
488 488
489} 489}
490 490
491void CalendarView::startAlarm( QString mess , QString filename) 491void CalendarView::startAlarm( QString mess , QString filename)
492{ 492{
493 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 493 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
494 QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) ); 494 QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) );
495 495
496} 496}
497 497
498void CalendarView::checkNextTimerAlarm() 498void CalendarView::checkNextTimerAlarm()
499{ 499{
500 mCalendar->checkAlarmForIncidence( 0, true ); 500 mCalendar->checkAlarmForIncidence( 0, true );
501} 501}
502 502
503void CalendarView::computeAlarm( QString msg ) 503void CalendarView::computeAlarm( QString msg )
504{ 504{
505 505
506 QString mess = msg; 506 QString mess = msg;
507 QString mAlarmMessage = mess.mid( 9 ); 507 QString mAlarmMessage = mess.mid( 9 );
508 QString filename = MainWindow::resourcePath(); 508 QString filename = MainWindow::resourcePath();
509 filename += "koalarm.wav"; 509 filename += "koalarm.wav";
510 QString tempfilename; 510 QString tempfilename;
511 if ( mess.left( 13 ) == "suspend_alarm") { 511 if ( mess.left( 13 ) == "suspend_alarm") {
512 bool error = false; 512 bool error = false;
513 int len = mess.mid( 13 ).find("+++"); 513 int len = mess.mid( 13 ).find("+++");
514 if ( len < 2 ) 514 if ( len < 2 )
515 error = true; 515 error = true;
516 else { 516 else {
517 tempfilename = mess.mid( 13, len ); 517 tempfilename = mess.mid( 13, len );
518 if ( !QFile::exists( tempfilename ) ) 518 if ( !QFile::exists( tempfilename ) )
519 error = true; 519 error = true;
520 } 520 }
521 if ( ! error ) { 521 if ( ! error ) {
522 filename = tempfilename; 522 filename = tempfilename;
523 } 523 }
524 mAlarmMessage = mess.mid( 13+len+3 ); 524 mAlarmMessage = mess.mid( 13+len+3 );
525 //qDebug("suspend file %s ",tempfilename.latin1() ); 525 //qDebug("suspend file %s ",tempfilename.latin1() );
526 startAlarm( mAlarmMessage, filename); 526 startAlarm( mAlarmMessage, filename);
527 return; 527 return;
528 } 528 }
529 if ( mess.left( 11 ) == "timer_alarm") { 529 if ( mess.left( 11 ) == "timer_alarm") {
530 //mTimerTime = 0; 530 //mTimerTime = 0;
531 startAlarm( mess.mid( 11 ), filename ); 531 startAlarm( mess.mid( 11 ), filename );
532 return; 532 return;
533 } 533 }
534 if ( mess.left( 10 ) == "proc_alarm") { 534 if ( mess.left( 10 ) == "proc_alarm") {
535 bool error = false; 535 bool error = false;
536 int len = mess.mid( 10 ).find("+++"); 536 int len = mess.mid( 10 ).find("+++");
537 if ( len < 2 ) 537 if ( len < 2 )
538 error = true; 538 error = true;
539 else { 539 else {
540 tempfilename = mess.mid( 10, len ); 540 tempfilename = mess.mid( 10, len );
541 if ( !QFile::exists( tempfilename ) ) 541 if ( !QFile::exists( tempfilename ) )
542 error = true; 542 error = true;
543 } 543 }
544 if ( error ) { 544 if ( error ) {
545 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 545 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
546 mAlarmMessage += mess.mid( 10+len+3+9 ); 546 mAlarmMessage += mess.mid( 10+len+3+9 );
547 } else { 547 } else {
548 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 548 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
549 //qDebug("-----system command %s ",tempfilename.latin1() ); 549 //qDebug("-----system command %s ",tempfilename.latin1() );
550#ifndef _WIN32_ 550#ifndef _WIN32_
551 if ( vfork () == 0 ) { 551 if ( vfork () == 0 ) {
552 execl ( tempfilename.latin1(), 0 ); 552 execl ( tempfilename.latin1(), 0 );
553 return; 553 return;
554 } 554 }
555#else 555#else
556 QProcess* p = new QProcess(); 556 QProcess* p = new QProcess();
557 p->addArgument( tempfilename.latin1() ); 557 p->addArgument( tempfilename.latin1() );
558 p->start(); 558 p->start();
559 return; 559 return;
560#endif 560#endif
561 561
562 return; 562 return;
563 } 563 }
564 564
565 //qDebug("+++++++system command %s ",tempfilename.latin1() ); 565 //qDebug("+++++++system command %s ",tempfilename.latin1() );
566 } 566 }
567 if ( mess.left( 11 ) == "audio_alarm") { 567 if ( mess.left( 11 ) == "audio_alarm") {
568 bool error = false; 568 bool error = false;
569 int len = mess.mid( 11 ).find("+++"); 569 int len = mess.mid( 11 ).find("+++");
570 if ( len < 2 ) 570 if ( len < 2 )
571 error = true; 571 error = true;
572 else { 572 else {
573 tempfilename = mess.mid( 11, len ); 573 tempfilename = mess.mid( 11, len );
574 if ( !QFile::exists( tempfilename ) ) 574 if ( !QFile::exists( tempfilename ) )
575 error = true; 575 error = true;
576 } 576 }
577 if ( ! error ) { 577 if ( ! error ) {
578 filename = tempfilename; 578 filename = tempfilename;
579 } 579 }
580 mAlarmMessage = mess.mid( 11+len+3+9 ); 580 mAlarmMessage = mess.mid( 11+len+3+9 );
581 //qDebug("audio file command %s ",tempfilename.latin1() ); 581 //qDebug("audio file command %s ",tempfilename.latin1() );
582 } 582 }
583 if ( mess.left( 9 ) == "cal_alarm") { 583 if ( mess.left( 9 ) == "cal_alarm") {
584 mAlarmMessage = mess.mid( 9 ) ; 584 mAlarmMessage = mess.mid( 9 ) ;
585 } 585 }
586 586
587 startAlarm( mAlarmMessage, filename ); 587 startAlarm( mAlarmMessage, filename );
588 588
589 589
590} 590}
591 591
592void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti ) 592void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti )
593{ 593{
594 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 594 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
595 595
596 mSuspendAlarmNotification = noti; 596 mSuspendAlarmNotification = noti;
597 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; 597 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000;
598 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); 598 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000);
599 mSuspendTimer->start( ms , true ); 599 mSuspendTimer->start( ms , true );
600 600
601} 601}
602 602
603void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti ) 603void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti )
604{ 604{
605 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 605 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
606 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 606 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
607#ifndef DESKTOP_VERSION 607#ifndef DESKTOP_VERSION
608 AlarmServer::addAlarm ( qdt,"koalarm", noti.latin1() ); 608 AlarmServer::addAlarm ( qdt,"koalarm", noti.latin1() );
609#endif 609#endif
610 return; 610 return;
611 } 611 }
612 int maxSec; 612 int maxSec;
613 //maxSec = 5; //testing only 613 //maxSec = 5; //testing only
614 maxSec = 86400+3600; // one day+1hour 614 maxSec = 86400+3600; // one day+1hour
615 mAlarmNotification = noti; 615 mAlarmNotification = noti;
616 int sec = QDateTime::currentDateTime().secsTo( qdt ); 616 int sec = QDateTime::currentDateTime().secsTo( qdt );
617 if ( sec > maxSec ) { 617 if ( sec > maxSec ) {
618 mRecheckAlarmTimer->start( maxSec * 1000 ); 618 mRecheckAlarmTimer->start( maxSec * 1000 );
619 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec ); 619 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec );
620 return; 620 return;
621 } else { 621 } else {
622 mRecheckAlarmTimer->stop(); 622 mRecheckAlarmTimer->stop();
623 } 623 }
624 //qDebug("Alarm timer started with secs: %d ", sec); 624 //qDebug("Alarm timer started with secs: %d ", sec);
625 mAlarmTimer->start( sec *1000 , true ); 625 mAlarmTimer->start( sec *1000 , true );
626 626
627} 627}
628// called by mRecheckAlarmTimer to get next alarm 628// called by mRecheckAlarmTimer to get next alarm
629// we need this, because a QTimer has only a max range of 25 days 629// we need this, because a QTimer has only a max range of 25 days
630void CalendarView::recheckTimerAlarm() 630void CalendarView::recheckTimerAlarm()
631{ 631{
632 mAlarmTimer->stop(); 632 mAlarmTimer->stop();
633 mRecheckAlarmTimer->stop(); 633 mRecheckAlarmTimer->stop();
634 mCalendar->checkAlarmForIncidence( 0, true ); 634 mCalendar->checkAlarmForIncidence( 0, true );
635} 635}
636void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti ) 636void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti )
637{ 637{
638 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 638 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
639 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 639 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
640#ifndef DESKTOP_VERSION 640#ifndef DESKTOP_VERSION
641 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.latin1() ); 641 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.latin1() );
642#endif 642#endif
643 return; 643 return;
644 } 644 }
645 mAlarmTimer->stop(); 645 mAlarmTimer->stop();
646} 646}
647void CalendarView::selectWeekNum ( int num ) 647void CalendarView::selectWeekNum ( int num )
648{ 648{
649 dateNavigator()->selectWeek( num ); 649 dateNavigator()->selectWeek( num );
650 mViewManager->showWeekView(); 650 mViewManager->showWeekView();
651} 651}
652KOViewManager *CalendarView::viewManager() 652KOViewManager *CalendarView::viewManager()
653{ 653{
654 return mViewManager; 654 return mViewManager;
655} 655}
656 656
657KODialogManager *CalendarView::dialogManager() 657KODialogManager *CalendarView::dialogManager()
658{ 658{
659 return mDialogManager; 659 return mDialogManager;
660} 660}
661 661
662QDate CalendarView::startDate() 662QDate CalendarView::startDate()
663{ 663{
664 DateList dates = mNavigator->selectedDates(); 664 DateList dates = mNavigator->selectedDates();
665 665
666 return dates.first(); 666 return dates.first();
667} 667}
668 668
669QDate CalendarView::endDate() 669QDate CalendarView::endDate()
670{ 670{
671 DateList dates = mNavigator->selectedDates(); 671 DateList dates = mNavigator->selectedDates();
672 672
673 return dates.last(); 673 return dates.last();
674} 674}
675 675
676 676
677void CalendarView::createPrinter() 677void CalendarView::createPrinter()
678{ 678{
679#ifndef KORG_NOPRINTER 679#ifndef KORG_NOPRINTER
680 if (!mCalPrinter) { 680 if (!mCalPrinter) {
681 mCalPrinter = new CalPrinter(this, mCalendar); 681 mCalPrinter = new CalPrinter(this, mCalendar);
682 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); 682 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig()));
683 } 683 }
684#endif 684#endif
685} 685}
686 686
687void CalendarView::confSync() 687void CalendarView::confSync()
688{ 688{
689 static KSyncPrefsDialog* sp = 0; 689 static KSyncPrefsDialog* sp = 0;
690 if ( ! sp ) { 690 if ( ! sp ) {
691 sp = new KSyncPrefsDialog( this, "syncprefs", true ); 691 sp = new KSyncPrefsDialog( this, "syncprefs", true );
692 } 692 }
693 sp->usrReadConfig(); 693 sp->usrReadConfig();
694#ifndef DESKTOP_VERSION 694#ifndef DESKTOP_VERSION
695 sp->showMaximized(); 695 sp->showMaximized();
696#else 696#else
697 sp->show(); 697 sp->show();
698#endif 698#endif
699 sp->exec(); 699 sp->exec();
700 KOPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames(); 700 KOPrefs::instance()->mSyncProfileNames = sp->getSyncProfileNames();
701 KOPrefs::instance()->mLocalMachineName = sp->getLocalMachineName (); 701 KOPrefs::instance()->mLocalMachineName = sp->getLocalMachineName ();
702} 702}
703 703
704 704
705//KOPrefs::instance()->mWriteBackFile 705//KOPrefs::instance()->mWriteBackFile
706//KOPrefs::instance()->mWriteBackExistingOnly 706//KOPrefs::instance()->mWriteBackExistingOnly
707 707
708// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); 708// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict"));
709// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); 709// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict"));
710// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); 710// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict"));
711// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); 711// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict"));
712// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); 712// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always"));
713// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); 713// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always"));
714 714
715int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) 715int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full )
716{ 716{
717 717
718 //void setZaurusId(int id); 718 //void setZaurusId(int id);
719 // int zaurusId() const; 719 // int zaurusId() const;
720 // void setZaurusUid(int id); 720 // void setZaurusUid(int id);
721 // int zaurusUid() const; 721 // int zaurusUid() const;
722 // void setZaurusStat(int id); 722 // void setZaurusStat(int id);
723 // int zaurusStat() const; 723 // int zaurusStat() const;
724 // 0 equal 724 // 0 equal
725 // 1 take local 725 // 1 take local
726 // 2 take remote 726 // 2 take remote
727 // 3 cancel 727 // 3 cancel
728 QDateTime lastSync = mLastCalendarSync; 728 QDateTime lastSync = mLastCalendarSync;
729 QDateTime localMod = local->lastModified(); 729 QDateTime localMod = local->lastModified();
730 QDateTime remoteMod = remote->lastModified(); 730 QDateTime remoteMod = remote->lastModified();
731 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 731 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
732 bool remCh, locCh; 732 bool remCh, locCh;
733 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 733 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
734 //if ( remCh ) 734 //if ( remCh )
735 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 735 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
736 locCh = ( localMod > mLastCalendarSync ); 736 locCh = ( localMod > mLastCalendarSync );
737 if ( !remCh && ! locCh ) { 737 if ( !remCh && ! locCh ) {
738 //qDebug("both not changed "); 738 //qDebug("both not changed ");
739 lastSync = localMod.addDays(1); 739 lastSync = localMod.addDays(1);
740 if ( mode <= SYNC_PREF_ASK ) 740 if ( mode <= SYNC_PREF_ASK )
741 return 0; 741 return 0;
742 } else { 742 } else {
743 if ( locCh ) { 743 if ( locCh ) {
744 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1()); 744 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1());
745 lastSync = localMod.addDays( -1 ); 745 lastSync = localMod.addDays( -1 );
746 if ( !remCh ) 746 if ( !remCh )
747 remoteMod = ( lastSync.addDays( -1 ) ); 747 remoteMod = ( lastSync.addDays( -1 ) );
748 } else { 748 } else {
749 //qDebug(" not loc changed "); 749 //qDebug(" not loc changed ");
750 lastSync = localMod.addDays( 1 ); 750 lastSync = localMod.addDays( 1 );
751 if ( remCh ) 751 if ( remCh )
752 remoteMod =( lastSync.addDays( 1 ) ); 752 remoteMod =( lastSync.addDays( 1 ) );
753 753
754 } 754 }
755 } 755 }
756 full = true; 756 full = true;
757 if ( mode < SYNC_PREF_ASK ) 757 if ( mode < SYNC_PREF_ASK )
758 mode = SYNC_PREF_ASK; 758 mode = SYNC_PREF_ASK;
759 } else { 759 } else {
760 if ( localMod == remoteMod ) 760 if ( localMod == remoteMod )
761 if ( local->revision() == remote->revision() ) 761 if ( local->revision() == remote->revision() )
762 return 0; 762 return 0;
763 763
764 } 764 }
765 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 765 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
766 766
767 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision()); 767 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision());
768 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() ); 768 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() );
769 //full = true; //debug only 769 //full = true; //debug only
770 if ( full ) { 770 if ( full ) {
771 bool equ = false; 771 bool equ = false;
772 if ( local->type() == "Event" ) { 772 if ( local->type() == "Event" ) {
773 equ = (*((Event*) local) == *((Event*) remote)); 773 equ = (*((Event*) local) == *((Event*) remote));
774 } 774 }
775 else if ( local->type() =="Todo" ) 775 else if ( local->type() =="Todo" )
776 equ = (*((Todo*) local) == (*(Todo*) remote)); 776 equ = (*((Todo*) local) == (*(Todo*) remote));
777 else if ( local->type() =="Journal" ) 777 else if ( local->type() =="Journal" )
778 equ = (*((Journal*) local) == *((Journal*) remote)); 778 equ = (*((Journal*) local) == *((Journal*) remote));
779 if ( equ ) { 779 if ( equ ) {
780 //qDebug("equal "); 780 //qDebug("equal ");
781 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 781 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
782 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 782 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
783 } 783 }
784 if ( mode < SYNC_PREF_FORCE_LOCAL ) 784 if ( mode < SYNC_PREF_FORCE_LOCAL )
785 return 0; 785 return 0;
786 786
787 }//else //debug only 787 }//else //debug only
788 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 788 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
789 } 789 }
790 int result; 790 int result;
791 bool localIsNew; 791 bool localIsNew;
792 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() ); 792 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() );
793 793
794 if ( full && mode < SYNC_PREF_NEWEST ) 794 if ( full && mode < SYNC_PREF_NEWEST )
795 mode = SYNC_PREF_ASK; 795 mode = SYNC_PREF_ASK;
796 796
797 switch( mode ) { 797 switch( mode ) {
798 case SYNC_PREF_LOCAL: 798 case SYNC_PREF_LOCAL:
799 if ( lastSync > remoteMod ) 799 if ( lastSync > remoteMod )
800 return 1; 800 return 1;
801 if ( lastSync > localMod ) 801 if ( lastSync > localMod )
802 return 2; 802 return 2;
803 return 1; 803 return 1;
804 break; 804 break;
805 case SYNC_PREF_REMOTE: 805 case SYNC_PREF_REMOTE:
806 if ( lastSync > remoteMod ) 806 if ( lastSync > remoteMod )
807 return 1; 807 return 1;
808 if ( lastSync > localMod ) 808 if ( lastSync > localMod )
809 return 2; 809 return 2;
810 return 2; 810 return 2;
811 break; 811 break;
812 case SYNC_PREF_NEWEST: 812 case SYNC_PREF_NEWEST:
813 if ( localMod > remoteMod ) 813 if ( localMod > remoteMod )
814 return 1; 814 return 1;
815 else 815 else
816 return 2; 816 return 2;
817 break; 817 break;
818 case SYNC_PREF_ASK: 818 case SYNC_PREF_ASK:
819 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 819 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
820 if ( lastSync > remoteMod ) 820 if ( lastSync > remoteMod )
821 return 1; 821 return 1;
822 if ( lastSync > localMod ) 822 if ( lastSync > localMod )
823 return 2; 823 return 2;
824 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 824 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
825 localIsNew = localMod >= remoteMod; 825 localIsNew = localMod >= remoteMod;
826 if ( localIsNew ) 826 if ( localIsNew )
827 getEventViewerDialog()->setColorMode( 1 ); 827 getEventViewerDialog()->setColorMode( 1 );
828 else 828 else
829 getEventViewerDialog()->setColorMode( 2 ); 829 getEventViewerDialog()->setColorMode( 2 );
830 getEventViewerDialog()->setIncidence(local); 830 getEventViewerDialog()->setIncidence(local);
831 if ( localIsNew ) 831 if ( localIsNew )
832 getEventViewerDialog()->setColorMode( 2 ); 832 getEventViewerDialog()->setColorMode( 2 );
833 else 833 else
834 getEventViewerDialog()->setColorMode( 1 ); 834 getEventViewerDialog()->setColorMode( 1 );
835 getEventViewerDialog()->addIncidence(remote); 835 getEventViewerDialog()->addIncidence(remote);
836 getEventViewerDialog()->setColorMode( 0 ); 836 getEventViewerDialog()->setColorMode( 0 );
837 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 837 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
838 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 838 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
839 getEventViewerDialog()->showMe(); 839 getEventViewerDialog()->showMe();
840 result = getEventViewerDialog()->executeS( localIsNew ); 840 result = getEventViewerDialog()->executeS( localIsNew );
841 return result; 841 return result;
842 842
843 break; 843 break;
844 case SYNC_PREF_FORCE_LOCAL: 844 case SYNC_PREF_FORCE_LOCAL:
845 return 1; 845 return 1;
846 break; 846 break;
847 case SYNC_PREF_FORCE_REMOTE: 847 case SYNC_PREF_FORCE_REMOTE:
848 return 2; 848 return 2;
849 break; 849 break;
850 850
851 default: 851 default:
852 // SYNC_PREF_TAKE_BOTH not implemented 852 // SYNC_PREF_TAKE_BOTH not implemented
853 break; 853 break;
854 } 854 }
855 return 0; 855 return 0;
856} 856}
857Event* CalendarView::getLastSyncEvent() 857Event* CalendarView::getLastSyncEvent()
858{ 858{
859 Event* lse; 859 Event* lse;
860 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 860 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
861 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 861 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
862 if (!lse) { 862 if (!lse) {
863 lse = new Event(); 863 lse = new Event();
864 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 864 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
865 QString sum = ""; 865 QString sum = "";
866 if ( KOPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 866 if ( KOPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
867 sum = "E: "; 867 sum = "E: ";
868 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 868 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
869 lse->setDtStart( mLastCalendarSync ); 869 lse->setDtStart( mLastCalendarSync );
870 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 870 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
871 lse->setCategories( i18n("SyncEvent") ); 871 lse->setCategories( i18n("SyncEvent") );
872 lse->setReadOnly( true ); 872 lse->setReadOnly( true );
873 mCalendar->addEvent( lse ); 873 mCalendar->addEvent( lse );
874 } 874 }
875 875
876 return lse; 876 return lse;
877 877
878} 878}
879// probaly useless 879// probaly useless
880void CalendarView::setupExternSyncProfiles() 880void CalendarView::setupExternSyncProfiles()
881{ 881{
882 Event* lse; 882 Event* lse;
883 mExternLastSyncEvent.clear(); 883 mExternLastSyncEvent.clear();
884 int i; 884 int i;
885 for ( i = 0; i < KOPrefs::instance()->mExternSyncProfiles.count(); ++i ) { 885 for ( i = 0; i < KOPrefs::instance()->mExternSyncProfiles.count(); ++i ) {
886 lse = mCalendar->event( "last-syncEvent-"+ KOPrefs::instance()->mExternSyncProfiles[i] ); 886 lse = mCalendar->event( "last-syncEvent-"+ KOPrefs::instance()->mExternSyncProfiles[i] );
887 if ( lse ) 887 if ( lse )
888 mExternLastSyncEvent.append( lse ); 888 mExternLastSyncEvent.append( lse );
889 else 889 else
890 qDebug("Last Sync event not found for %s ", KOPrefs::instance()->mExternSyncProfiles[i].latin1()); 890 qDebug("Last Sync event not found for %s ", KOPrefs::instance()->mExternSyncProfiles[i].latin1());
891 } 891 }
892 892
893} 893}
894// we check, if the to delete event has a id for a profile 894// we check, if the to delete event has a id for a profile
895// if yes, we set this id in the profile to delete 895// if yes, we set this id in the profile to delete
896void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 896void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
897{ 897{
898 if ( lastSync.count() == 0 ) { 898 if ( lastSync.count() == 0 ) {
899 //qDebug(" lastSync.count() == 0"); 899 //qDebug(" lastSync.count() == 0");
900 return; 900 return;
901 } 901 }
902 if ( toDelete->type() == "Journal" ) 902 if ( toDelete->type() == "Journal" )
903 return; 903 return;
904 904
905 Event* eve = lastSync.first(); 905 Event* eve = lastSync.first();
906 906
907 while ( eve ) { 907 while ( eve ) {
908 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 908 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
909 if ( !id.isEmpty() ) { 909 if ( !id.isEmpty() ) {
910 QString des = eve->description(); 910 QString des = eve->description();
911 QString pref = "e"; 911 QString pref = "e";
912 if ( toDelete->type() == "Todo" ) 912 if ( toDelete->type() == "Todo" )
913 pref = "t"; 913 pref = "t";
914 des += pref+ id + ","; 914 des += pref+ id + ",";
915 eve->setReadOnly( false ); 915 eve->setReadOnly( false );
916 eve->setDescription( des ); 916 eve->setDescription( des );
917 //qDebug("setdes %s ", des.latin1()); 917 //qDebug("setdes %s ", des.latin1());
918 eve->setReadOnly( true ); 918 eve->setReadOnly( true );
919 } 919 }
920 eve = lastSync.next(); 920 eve = lastSync.next();
921 } 921 }
922 922
923} 923}
924void CalendarView::checkExternalId( Incidence * inc ) 924void CalendarView::checkExternalId( Incidence * inc )
925{ 925{
926 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 926 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
927 checkExternSyncEvent( lastSync, inc ); 927 checkExternSyncEvent( lastSync, inc );
928 928
929} 929}
930bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 930bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
931{ 931{
932 bool syncOK = true; 932 bool syncOK = true;
933 int addedEvent = 0; 933 int addedEvent = 0;
934 int addedEventR = 0; 934 int addedEventR = 0;
935 int deletedEventR = 0; 935 int deletedEventR = 0;
936 int deletedEventL = 0; 936 int deletedEventL = 0;
937 int changedLocal = 0; 937 int changedLocal = 0;
938 int changedRemote = 0; 938 int changedRemote = 0;
939 //QPtrList<Event> el = local->rawEvents(); 939 //QPtrList<Event> el = local->rawEvents();
940 Event* eventR; 940 Event* eventR;
941 QString uid; 941 QString uid;
942 int take; 942 int take;
943 Event* eventL; 943 Event* eventL;
944 Event* eventRSync; 944 Event* eventRSync;
945 Event* eventLSync; 945 Event* eventLSync;
946 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 946 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
947 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 947 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
948 bool fullDateRange = false; 948 bool fullDateRange = false;
949 local->resetTempSyncStat(); 949 local->resetTempSyncStat();
950 mLastCalendarSync = QDateTime::currentDateTime(); 950 mLastCalendarSync = QDateTime::currentDateTime();
951 QDateTime modifiedCalendar = mLastCalendarSync;; 951 QDateTime modifiedCalendar = mLastCalendarSync;;
952 eventLSync = getLastSyncEvent(); 952 eventLSync = getLastSyncEvent();
953 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 953 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
954 if ( eventR ) { 954 if ( eventR ) {
955 eventRSync = (Event*) eventR->clone(); 955 eventRSync = (Event*) eventR->clone();
956 remote->deleteEvent(eventR ); 956 remote->deleteEvent(eventR );
957 957
958 } else { 958 } else {
959 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 959 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
960 eventRSync = (Event*)eventLSync->clone(); 960 eventRSync = (Event*)eventLSync->clone();
961 } else { 961 } else {
962 fullDateRange = true; 962 fullDateRange = true;
963 eventRSync = new Event(); 963 eventRSync = new Event();
964 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 964 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
965 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 965 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
966 eventRSync->setDtStart( mLastCalendarSync ); 966 eventRSync->setDtStart( mLastCalendarSync );
967 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 967 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
968 eventRSync->setCategories( i18n("SyncEvent") ); 968 eventRSync->setCategories( i18n("SyncEvent") );
969 } 969 }
970 } 970 }
971 if ( eventLSync->dtStart() == mLastCalendarSync ) 971 if ( eventLSync->dtStart() == mLastCalendarSync )
972 fullDateRange = true; 972 fullDateRange = true;
973 973
974 if ( ! fullDateRange ) { 974 if ( ! fullDateRange ) {
975 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 975 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
976 976
977 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 977 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
978 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 978 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
979 fullDateRange = true; 979 fullDateRange = true;
980 } 980 }
981 } 981 }
982 if ( fullDateRange ) 982 if ( fullDateRange )
983 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 983 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
984 else 984 else
985 mLastCalendarSync = eventLSync->dtStart(); 985 mLastCalendarSync = eventLSync->dtStart();
986 // for resyncing if own file has changed 986 // for resyncing if own file has changed
987 if ( mCurrentSyncDevice == "deleteaftersync" ) { 987 if ( mCurrentSyncDevice == "deleteaftersync" ) {
988 mLastCalendarSync = loadedFileVersion; 988 mLastCalendarSync = loadedFileVersion;
989 qDebug("setting mLastCalendarSync "); 989 qDebug("setting mLastCalendarSync ");
990 } 990 }
991 //qDebug("*************************** "); 991 //qDebug("*************************** ");
992 qDebug("mLastCalendarSync %s ",mLastCalendarSync.toString().latin1() ); 992 qDebug("mLastCalendarSync %s ",mLastCalendarSync.toString().latin1() );
993 QPtrList<Incidence> er = remote->rawIncidences(); 993 QPtrList<Incidence> er = remote->rawIncidences();
994 Incidence* inR = er.first(); 994 Incidence* inR = er.first();
995 Incidence* inL; 995 Incidence* inL;
996 QProgressBar bar( er.count(),0 ); 996 QProgressBar bar( er.count(),0 );
997 bar.setCaption (i18n("Syncing - close to abort!") ); 997 bar.setCaption (i18n("Syncing - close to abort!") );
998 998
999 int w = 300; 999 int w = 300;
1000 if ( QApplication::desktop()->width() < 320 ) 1000 if ( QApplication::desktop()->width() < 320 )
1001 w = 220; 1001 w = 220;
1002 int h = bar.sizeHint().height() ; 1002 int h = bar.sizeHint().height() ;
1003 int dw = QApplication::desktop()->width(); 1003 int dw = QApplication::desktop()->width();
1004 int dh = QApplication::desktop()->height(); 1004 int dh = QApplication::desktop()->height();
1005 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1005 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1006 bar.show(); 1006 bar.show();
1007 int modulo = (er.count()/10)+1; 1007 int modulo = (er.count()/10)+1;
1008 int incCounter = 0; 1008 int incCounter = 0;
1009 while ( inR ) { 1009 while ( inR ) {
1010 if ( ! bar.isVisible() ) 1010 if ( ! bar.isVisible() )
1011 return false; 1011 return false;
1012 if ( incCounter % modulo == 0 ) 1012 if ( incCounter % modulo == 0 )
1013 bar.setProgress( incCounter ); 1013 bar.setProgress( incCounter );
1014 ++incCounter; 1014 ++incCounter;
1015 uid = inR->uid(); 1015 uid = inR->uid();
1016 bool skipIncidence = false; 1016 bool skipIncidence = false;
1017 if ( uid.left(15) == QString("last-syncEvent-") ) 1017 if ( uid.left(15) == QString("last-syncEvent-") )
1018 skipIncidence = true; 1018 skipIncidence = true;
1019 QString idS; 1019 QString idS;
1020 qApp->processEvents(); 1020 qApp->processEvents();
1021 if ( !skipIncidence ) { 1021 if ( !skipIncidence ) {
1022 inL = local->incidence( uid ); 1022 inL = local->incidence( uid );
1023 if ( inL ) { // maybe conflict - same uid in both calendars 1023 if ( inL ) { // maybe conflict - same uid in both calendars
1024 int maxrev = inL->revision(); 1024 int maxrev = inL->revision();
1025 if ( maxrev < inR->revision() ) 1025 if ( maxrev < inR->revision() )
1026 maxrev = inR->revision(); 1026 maxrev = inR->revision();
1027 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1027 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1028 //qDebug("take %d %s ", take, inL->summary().latin1()); 1028 //qDebug("take %d %s ", take, inL->summary().latin1());
1029 if ( take == 3 ) 1029 if ( take == 3 )
1030 return false; 1030 return false;
1031 if ( take == 1 ) {// take local 1031 if ( take == 1 ) {// take local
1032 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 1032 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
1033 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1033 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1034 else 1034 else
1035 idS = inR->IDStr(); 1035 idS = inR->IDStr();
1036 remote->deleteIncidence( inR ); 1036 remote->deleteIncidence( inR );
1037 if ( inL->revision() < maxrev ) 1037 if ( inL->revision() < maxrev )
1038 inL->setRevision( maxrev ); 1038 inL->setRevision( maxrev );
1039 inR = inL->clone(); 1039 inR = inL->clone();
1040 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1040 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1041 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) 1041 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
1042 inR->setIDStr( idS ); 1042 inR->setIDStr( idS );
1043 remote->addIncidence( inR ); 1043 remote->addIncidence( inR );
1044 ++changedRemote; 1044 ++changedRemote;
1045 } else { 1045 } else {
1046 if ( inR->revision() < maxrev ) 1046 if ( inR->revision() < maxrev )
1047 inR->setRevision( maxrev ); 1047 inR->setRevision( maxrev );
1048 idS = inL->IDStr(); 1048 idS = inL->IDStr();
1049 local->deleteIncidence( inL ); 1049 local->deleteIncidence( inL );
1050 inL = inR->clone(); 1050 inL = inR->clone();
1051 inL->setIDStr( idS ); 1051 inL->setIDStr( idS );
1052 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1053 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1054 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1055 }
1052 local->addIncidence( inL ); 1056 local->addIncidence( inL );
1053 ++changedLocal; 1057 ++changedLocal;
1054 } 1058 }
1055 } 1059 }
1056 } else { // no conflict 1060 } else { // no conflict
1057 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1061 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1058 QString des = eventLSync->description(); 1062 QString des = eventLSync->description();
1059 QString pref = "e"; 1063 QString pref = "e";
1060 if ( inR->type() == "Todo" ) 1064 if ( inR->type() == "Todo" )
1061 pref = "t"; 1065 pref = "t";
1062 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1066 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1063 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1067 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1064 //remote->deleteIncidence( inR ); 1068 //remote->deleteIncidence( inR );
1065 ++deletedEventR; 1069 ++deletedEventR;
1066 } else { 1070 } else {
1067 inR->setLastModified( modifiedCalendar ); 1071 inR->setLastModified( modifiedCalendar );
1068 inL = inR->clone(); 1072 inL = inR->clone();
1069 local->addIncidence( inL ); 1073 local->addIncidence( inL );
1070 ++addedEvent; 1074 ++addedEvent;
1071 } 1075 }
1072 } else { 1076 } else {
1073 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1077 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1074 inR->setLastModified( modifiedCalendar ); 1078 inR->setLastModified( modifiedCalendar );
1075 local->addIncidence( inR->clone() ); 1079 local->addIncidence( inR->clone() );
1076 ++addedEvent; 1080 ++addedEvent;
1077 } else { 1081 } else {
1078 checkExternSyncEvent(eventRSyncSharp, inR); 1082 checkExternSyncEvent(eventRSyncSharp, inR);
1079 remote->deleteIncidence( inR ); 1083 remote->deleteIncidence( inR );
1080 ++deletedEventR; 1084 ++deletedEventR;
1081 } 1085 }
1082 } 1086 }
1083 } 1087 }
1084 } 1088 }
1085 inR = er.next(); 1089 inR = er.next();
1086 } 1090 }
1087 QPtrList<Incidence> el = local->rawIncidences(); 1091 QPtrList<Incidence> el = local->rawIncidences();
1088 inL = el.first(); 1092 inL = el.first();
1089 modulo = (el.count()/10)+1; 1093 modulo = (el.count()/10)+1;
1090 bar.setCaption (i18n("Add / remove events") ); 1094 bar.setCaption (i18n("Add / remove events") );
1091 bar.setTotalSteps ( el.count() ) ; 1095 bar.setTotalSteps ( el.count() ) ;
1092 bar.show(); 1096 bar.show();
1093 incCounter = 0; 1097 incCounter = 0;
1094 1098
1095 while ( inL ) { 1099 while ( inL ) {
1096 1100
1097 qApp->processEvents(); 1101 qApp->processEvents();
1098 if ( ! bar.isVisible() ) 1102 if ( ! bar.isVisible() )
1099 return false; 1103 return false;
1100 if ( incCounter % modulo == 0 ) 1104 if ( incCounter % modulo == 0 )
1101 bar.setProgress( incCounter ); 1105 bar.setProgress( incCounter );
1102 ++incCounter; 1106 ++incCounter;
1103 uid = inL->uid(); 1107 uid = inL->uid();
1104 bool skipIncidence = false; 1108 bool skipIncidence = false;
1105 if ( uid.left(15) == QString("last-syncEvent-") ) 1109 if ( uid.left(15) == QString("last-syncEvent-") )
1106 skipIncidence = true; 1110 skipIncidence = true;
1107 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" ) 1111 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" )
1108 skipIncidence = true; 1112 skipIncidence = true;
1109 if ( !skipIncidence ) { 1113 if ( !skipIncidence ) {
1110 inR = remote->incidence( uid ); 1114 inR = remote->incidence( uid );
1111 if ( ! inR ) { 1115 if ( ! inR ) {
1112 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1116 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1113 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1117 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1114 checkExternSyncEvent(eventLSyncSharp, inL); 1118 checkExternSyncEvent(eventLSyncSharp, inL);
1115 local->deleteIncidence( inL ); 1119 local->deleteIncidence( inL );
1116 ++deletedEventL; 1120 ++deletedEventL;
1117 } else { 1121 } else {
1118 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { 1122 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) {
1119 inL->removeID(mCurrentSyncDevice ); 1123 inL->removeID(mCurrentSyncDevice );
1120 ++addedEventR; 1124 ++addedEventR;
1121 //qDebug("remote added Incidence %s ", inL->summary().latin1()); 1125 //qDebug("remote added Incidence %s ", inL->summary().latin1());
1122 inL->setLastModified( modifiedCalendar ); 1126 inL->setLastModified( modifiedCalendar );
1123 inR = inL->clone(); 1127 inR = inL->clone();
1124 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1128 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1125 remote->addIncidence( inR ); 1129 remote->addIncidence( inR );
1126 } 1130 }
1127 } 1131 }
1128 } else { 1132 } else {
1129 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1133 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1130 checkExternSyncEvent(eventLSyncSharp, inL); 1134 checkExternSyncEvent(eventLSyncSharp, inL);
1131 local->deleteIncidence( inL ); 1135 local->deleteIncidence( inL );
1132 ++deletedEventL; 1136 ++deletedEventL;
1133 } else { 1137 } else {
1134 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { 1138 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) {
1135 ++addedEventR; 1139 ++addedEventR;
1136 inL->setLastModified( modifiedCalendar ); 1140 inL->setLastModified( modifiedCalendar );
1137 remote->addIncidence( inL->clone() ); 1141 remote->addIncidence( inL->clone() );
1138 } 1142 }
1139 } 1143 }
1140 } 1144 }
1141 } 1145 }
1142 } 1146 }
1143 inL = el.next(); 1147 inL = el.next();
1144 } 1148 }
1145 int delFut = 0; 1149 int delFut = 0;
1146 if ( KOPrefs::instance()->mWriteBackInFuture ) { 1150 if ( KOPrefs::instance()->mWriteBackInFuture ) {
1147 er = remote->rawIncidences(); 1151 er = remote->rawIncidences();
1148 inR = er.first(); 1152 inR = er.first();
1149 QDateTime dt; 1153 QDateTime dt;
1150 QDateTime cur = QDateTime::currentDateTime(); 1154 QDateTime cur = QDateTime::currentDateTime();
1151 QDateTime end = cur.addSecs( KOPrefs::instance()->mWriteBackInFuture * 3600 *24 *7 ); 1155 QDateTime end = cur.addSecs( KOPrefs::instance()->mWriteBackInFuture * 3600 *24 *7 );
1152 while ( inR ) { 1156 while ( inR ) {
1153 if ( inR->type() == "Todo" ) { 1157 if ( inR->type() == "Todo" ) {
1154 Todo * t = (Todo*)inR; 1158 Todo * t = (Todo*)inR;
1155 if ( t->hasDueDate() ) 1159 if ( t->hasDueDate() )
1156 dt = t->dtDue(); 1160 dt = t->dtDue();
1157 else 1161 else
1158 dt = cur.addSecs( 62 ); 1162 dt = cur.addSecs( 62 );
1159 } 1163 }
1160 else if (inR->type() == "Event" ) { 1164 else if (inR->type() == "Event" ) {
1161 bool ok; 1165 bool ok;
1162 dt = inR->getNextOccurence( cur, &ok ); 1166 dt = inR->getNextOccurence( cur, &ok );
1163 if ( !ok ) 1167 if ( !ok )
1164 dt = cur.addSecs( -62 ); 1168 dt = cur.addSecs( -62 );
1165 } 1169 }
1166 else 1170 else
1167 dt = inR->dtStart(); 1171 dt = inR->dtStart();
1168 if ( dt < cur || dt > end ) { 1172 if ( dt < cur || dt > end ) {
1169 remote->deleteIncidence( inR ); 1173 remote->deleteIncidence( inR );
1170 ++delFut; 1174 ++delFut;
1171 } 1175 }
1172 inR = er.next(); 1176 inR = er.next();
1173 } 1177 }
1174 } 1178 }
1175 bar.hide(); 1179 bar.hide();
1176 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1180 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1177 eventLSync->setReadOnly( false ); 1181 eventLSync->setReadOnly( false );
1178 eventLSync->setDtStart( mLastCalendarSync ); 1182 eventLSync->setDtStart( mLastCalendarSync );
1179 eventRSync->setDtStart( mLastCalendarSync ); 1183 eventRSync->setDtStart( mLastCalendarSync );
1180 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1184 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1181 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1185 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1182 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1186 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1183 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1187 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1184 eventLSync->setReadOnly( true ); 1188 eventLSync->setReadOnly( true );
1185 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 1189 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
1186 remote->addEvent( eventRSync ); 1190 remote->addEvent( eventRSync );
1187 QString mes; 1191 QString mes;
1188 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"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR ); 1192 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"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR );
1189 QString delmess; 1193 QString delmess;
1190 if ( delFut ) { 1194 if ( delFut ) {
1191 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are in the past or\nmore than %d weeks in the future.\n"),delFut, KOPrefs::instance()->mWriteBackInFuture ); 1195 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are in the past or\nmore than %d weeks in the future.\n"),delFut, KOPrefs::instance()->mWriteBackInFuture );
1192 mes += delmess; 1196 mes += delmess;
1193 } 1197 }
1194 if ( KOPrefs::instance()->mShowSyncSummary ) { 1198 if ( KOPrefs::instance()->mShowSyncSummary ) {
1195 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") ); 1199 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") );
1196 } 1200 }
1197 qDebug( mes ); 1201 qDebug( mes );
1198 mCalendar->checkAlarmForIncidence( 0, true ); 1202 mCalendar->checkAlarmForIncidence( 0, true );
1199 return syncOK; 1203 return syncOK;
1200} 1204}
1201 1205
1202void CalendarView::setSyncDevice( QString s ) 1206void CalendarView::setSyncDevice( QString s )
1203{ 1207{
1204 mCurrentSyncDevice= s; 1208 mCurrentSyncDevice= s;
1205} 1209}
1206void CalendarView::setSyncName( QString s ) 1210void CalendarView::setSyncName( QString s )
1207{ 1211{
1208 mCurrentSyncName= s; 1212 mCurrentSyncName= s;
1209} 1213}
1210bool CalendarView::syncCalendar(QString filename, int mode) 1214bool CalendarView::syncCalendar(QString filename, int mode)
1211{ 1215{
1212 mGlobalSyncMode = SYNC_MODE_NORMAL; 1216 mGlobalSyncMode = SYNC_MODE_NORMAL;
1213 CalendarLocal* calendar = new CalendarLocal(); 1217 CalendarLocal* calendar = new CalendarLocal();
1214 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1218 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1215 FileStorage* storage = new FileStorage( calendar ); 1219 FileStorage* storage = new FileStorage( calendar );
1216 bool syncOK = false; 1220 bool syncOK = false;
1217 storage->setFileName( filename ); 1221 storage->setFileName( filename );
1218 // qDebug("loading ... "); 1222 // qDebug("loading ... ");
1219 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) { 1223 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) {
1220 getEventViewerDialog()->setSyncMode( true ); 1224 getEventViewerDialog()->setSyncMode( true );
1221 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1225 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1222 getEventViewerDialog()->setSyncMode( false ); 1226 getEventViewerDialog()->setSyncMode( false );
1223 if ( syncOK ) { 1227 if ( syncOK ) {
1224 if ( KOPrefs::instance()->mWriteBackFile ) 1228 if ( KOPrefs::instance()->mWriteBackFile )
1225 { 1229 {
1226 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 1230 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
1227 storage->save(); 1231 storage->save();
1228 } 1232 }
1229 } 1233 }
1230 setModified( true ); 1234 setModified( true );
1231 } 1235 }
1232 delete storage; 1236 delete storage;
1233 delete calendar; 1237 delete calendar;
1234 if ( syncOK ) 1238 if ( syncOK )
1235 updateView(); 1239 updateView();
1236 return syncOK; 1240 return syncOK;
1237} 1241}
1238void CalendarView::syncPhone() 1242void CalendarView::syncPhone()
1239{ 1243{
1240 syncExternal( 1 ); 1244 syncExternal( 1 );
1241} 1245}
1242void CalendarView::syncExternal( int mode ) 1246void CalendarView::syncExternal( int mode )
1243{ 1247{
1244 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1248 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1245 //mCurrentSyncDevice = "sharp-DTM"; 1249 //mCurrentSyncDevice = "sharp-DTM";
1246 if ( KOPrefs::instance()->mAskForPreferences ) 1250 if ( KOPrefs::instance()->mAskForPreferences )
1247 edit_sync_options(); 1251 edit_sync_options();
1248 qApp->processEvents(); 1252 qApp->processEvents();
1249 CalendarLocal* calendar = new CalendarLocal(); 1253 CalendarLocal* calendar = new CalendarLocal();
1250 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1254 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1251 bool syncOK = false; 1255 bool syncOK = false;
1252 bool loadSuccess = false; 1256 bool loadSuccess = false;
1253 PhoneFormat* phoneFormat = 0; 1257 PhoneFormat* phoneFormat = 0;
1254#ifndef DESKTOP_VERSION 1258#ifndef DESKTOP_VERSION
1255 SharpFormat* sharpFormat = 0; 1259 SharpFormat* sharpFormat = 0;
1256 if ( mode == 0 ) { // sharp 1260 if ( mode == 0 ) { // sharp
1257 sharpFormat = new SharpFormat () ; 1261 sharpFormat = new SharpFormat () ;
1258 loadSuccess = sharpFormat->load( calendar, mCalendar ); 1262 loadSuccess = sharpFormat->load( calendar, mCalendar );
1259 1263
1260 } else 1264 } else
1261#endif 1265#endif
1262 if ( mode == 1 ) { // phone 1266 if ( mode == 1 ) { // phone
1263 phoneFormat = new PhoneFormat (mCurrentSyncDevice, 1267 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
1264 KOPrefs::instance()->mPhoneDevice, 1268 KOPrefs::instance()->mPhoneDevice,
1265 KOPrefs::instance()->mPhoneConnection, 1269 KOPrefs::instance()->mPhoneConnection,
1266 KOPrefs::instance()->mPhoneModel); 1270 KOPrefs::instance()->mPhoneModel);
1267 loadSuccess = phoneFormat->load( calendar,mCalendar); 1271 loadSuccess = phoneFormat->load( calendar,mCalendar);
1268 1272
1269 } else 1273 } else
1270 return; 1274 return;
1271 if ( loadSuccess ) { 1275 if ( loadSuccess ) {
1272 getEventViewerDialog()->setSyncMode( true ); 1276 getEventViewerDialog()->setSyncMode( true );
1273 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs ); 1277 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs );
1274 getEventViewerDialog()->setSyncMode( false ); 1278 getEventViewerDialog()->setSyncMode( false );
1275 qApp->processEvents(); 1279 qApp->processEvents();
1276 if ( syncOK ) { 1280 if ( syncOK ) {
1277 if ( KOPrefs::instance()->mWriteBackFile ) 1281 if ( KOPrefs::instance()->mWriteBackFile )
1278 { 1282 {
1279 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 1283 QPtrList<Incidence> iL = mCalendar->rawIncidences();
1280 Incidence* inc = iL.first(); 1284 Incidence* inc = iL.first();
1281 if ( phoneFormat ) { 1285 if ( phoneFormat ) {
1282 while ( inc ) { 1286 while ( inc ) {
1283 inc->removeID(mCurrentSyncDevice); 1287 inc->removeID(mCurrentSyncDevice);
1284 inc = iL.next(); 1288 inc = iL.next();
1285 } 1289 }
1286 } 1290 }
1287#ifndef DESKTOP_VERSION 1291#ifndef DESKTOP_VERSION
1288 if ( sharpFormat ) 1292 if ( sharpFormat )
1289 sharpFormat->save(calendar); 1293 sharpFormat->save(calendar);
1290#endif 1294#endif
1291 if ( phoneFormat ) 1295 if ( phoneFormat )
1292 phoneFormat->save(calendar); 1296 phoneFormat->save(calendar);
1293 iL = calendar->rawIncidences(); 1297 iL = calendar->rawIncidences();
1294 inc = iL.first(); 1298 inc = iL.first();
1295 Incidence* loc; 1299 Incidence* loc;
1296 while ( inc ) { 1300 while ( inc ) {
1297 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 1301 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
1298 loc = mCalendar->incidence(inc->uid() ); 1302 loc = mCalendar->incidence(inc->uid() );
1299 if ( loc ) { 1303 if ( loc ) {
1300 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 1304 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
1301 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 1305 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
1302 } 1306 }
1303 } 1307 }
1304 inc = iL.next(); 1308 inc = iL.next();
1305 } 1309 }
1306 Incidence* lse = getLastSyncEvent(); 1310 Incidence* lse = getLastSyncEvent();
1307 if ( lse ) { 1311 if ( lse ) {
1308 lse->setReadOnly( false ); 1312 lse->setReadOnly( false );
1309 lse->setDescription( "" ); 1313 lse->setDescription( "" );
1310 lse->setReadOnly( true ); 1314 lse->setReadOnly( true );
1311 } 1315 }
1312 } 1316 }
1313 } 1317 }
1314 setModified( true ); 1318 setModified( true );
1315 } else { 1319 } else {
1316 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 1320 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
1317 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 1321 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
1318 question, i18n("Ok")) ; 1322 question, i18n("Ok")) ;
1319 1323
1320 } 1324 }
1321 delete calendar; 1325 delete calendar;
1322 updateView(); 1326 updateView();
1323 return ;//syncOK; 1327 return ;//syncOK;
1324 1328
1325} 1329}
1326void CalendarView::syncSharp() 1330void CalendarView::syncSharp()
1327{ 1331{
1328 syncExternal( 0 ); 1332 syncExternal( 0 );
1329 1333
1330} 1334}
1331 1335
1332 1336
1333//#include <kabc/stdaddressbook.h> 1337//#include <kabc/stdaddressbook.h>
1334bool CalendarView::importBday() 1338bool CalendarView::importBday()
1335{ 1339{
1336#if 0 1340#if 0
1337 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 1341 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
1338 KABC::AddressBook::Iterator it; 1342 KABC::AddressBook::Iterator it;
1339 int count = 0; 1343 int count = 0;
1340 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1344 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1341 ++count; 1345 ++count;
1342 } 1346 }
1343 QProgressBar bar(count,0 ); 1347 QProgressBar bar(count,0 );
1344 int w = 300; 1348 int w = 300;
1345 if ( QApplication::desktop()->width() < 320 ) 1349 if ( QApplication::desktop()->width() < 320 )
1346 w = 220; 1350 w = 220;
1347 int h = bar.sizeHint().height() ; 1351 int h = bar.sizeHint().height() ;
1348 int dw = QApplication::desktop()->width(); 1352 int dw = QApplication::desktop()->width();
1349 int dh = QApplication::desktop()->height(); 1353 int dh = QApplication::desktop()->height();
1350 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1354 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1351 bar.show(); 1355 bar.show();
1352 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 1356 bar.setCaption (i18n("Reading addressbook - close to abort!") );
1353 qApp->processEvents(); 1357 qApp->processEvents();
1354 count = 0; 1358 count = 0;
1355 int addCount = 0; 1359 int addCount = 0;
1356 KCal::Attendee* a = 0; 1360 KCal::Attendee* a = 0;
1357 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1361 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1358 if ( ! bar.isVisible() ) 1362 if ( ! bar.isVisible() )
1359 return false; 1363 return false;
1360 bar.setProgress( count++ ); 1364 bar.setProgress( count++ );
1361 qApp->processEvents(); 1365 qApp->processEvents();
1362 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 1366 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
1363 if ( (*it).birthday().date().isValid() ){ 1367 if ( (*it).birthday().date().isValid() ){
1364 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1368 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1365 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 1369 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
1366 ++addCount; 1370 ++addCount;
1367 } 1371 }
1368 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 1372 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
1369 if ( anni.isValid() ){ 1373 if ( anni.isValid() ){
1370 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1374 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1371 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 1375 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
1372 ++addCount; 1376 ++addCount;
1373 } 1377 }
1374 } 1378 }
1375 updateView(); 1379 updateView();
1376 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 1380 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
1377#endif 1381#endif
1378 return true; 1382 return true;
1379} 1383}
1380 1384
1381bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 1385bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
1382{ 1386{
1383 //qDebug("addAnni "); 1387 //qDebug("addAnni ");
1384 Event * ev = new Event(); 1388 Event * ev = new Event();
1385 if ( a ) { 1389 if ( a ) {
1386 ev->addAttendee( a ); 1390 ev->addAttendee( a );
1387 } 1391 }
1388 QString kind; 1392 QString kind;
1389 if ( birthday ) 1393 if ( birthday )
1390 kind = i18n( "Birthday" ); 1394 kind = i18n( "Birthday" );
1391 else 1395 else
1392 kind = i18n( "Anniversary" ); 1396 kind = i18n( "Anniversary" );
1393 ev->setSummary( name + " - " + kind ); 1397 ev->setSummary( name + " - " + kind );
1394 ev->setOrganizer( "nobody@nowhere" ); 1398 ev->setOrganizer( "nobody@nowhere" );
1395 ev->setCategories( kind ); 1399 ev->setCategories( kind );
1396 ev->setDtStart( QDateTime(date) ); 1400 ev->setDtStart( QDateTime(date) );
1397 ev->setDtEnd( QDateTime(date) ); 1401 ev->setDtEnd( QDateTime(date) );
1398 ev->setFloats( true ); 1402 ev->setFloats( true );
1399 Recurrence * rec = ev->recurrence(); 1403 Recurrence * rec = ev->recurrence();
1400 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 1404 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
1401 rec->addYearlyNum( date.month() ); 1405 rec->addYearlyNum( date.month() );
1402 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 1406 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
1403 delete ev; 1407 delete ev;
1404 return false; 1408 return false;
1405 } 1409 }
1406 return true; 1410 return true;
1407 1411
1408} 1412}
1409bool CalendarView::importQtopia( const QString &categories, 1413bool CalendarView::importQtopia( const QString &categories,
1410 const QString &datebook, 1414 const QString &datebook,
1411 const QString &todolist ) 1415 const QString &todolist )
1412{ 1416{
1413 1417
1414 QtopiaFormat qtopiaFormat; 1418 QtopiaFormat qtopiaFormat;
1415 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1419 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1416 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 1420 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
1417 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 1421 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
1418 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 1422 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
1419 1423
1420 updateView(); 1424 updateView();
1421 return true; 1425 return true;
1422 1426
1423#if 0 1427#if 0
1424 mGlobalSyncMode = SYNC_MODE_QTOPIA; 1428 mGlobalSyncMode = SYNC_MODE_QTOPIA;
1425 mCurrentSyncDevice = "qtopia-XML"; 1429 mCurrentSyncDevice = "qtopia-XML";
1426 if ( KOPrefs::instance()->mAskForPreferences ) 1430 if ( KOPrefs::instance()->mAskForPreferences )
1427 edit_sync_options(); 1431 edit_sync_options();
1428 qApp->processEvents(); 1432 qApp->processEvents();
1429 CalendarLocal* calendar = new CalendarLocal(); 1433 CalendarLocal* calendar = new CalendarLocal();
1430 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1434 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1431 bool syncOK = false; 1435 bool syncOK = false;
1432 QtopiaFormat qtopiaFormat; 1436 QtopiaFormat qtopiaFormat;
1433 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1437 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1434 bool loadOk = true; 1438 bool loadOk = true;
1435 if ( !categories.isEmpty() ) 1439 if ( !categories.isEmpty() )
1436 loadOk = qtopiaFormat.load( calendar, categories ); 1440 loadOk = qtopiaFormat.load( calendar, categories );
1437 if ( loadOk && !datebook.isEmpty() ) 1441 if ( loadOk && !datebook.isEmpty() )
1438 loadOk = qtopiaFormat.load( calendar, datebook ); 1442 loadOk = qtopiaFormat.load( calendar, datebook );
1439 if ( loadOk && !todolist.isEmpty() ) 1443 if ( loadOk && !todolist.isEmpty() )
1440 loadOk = qtopiaFormat.load( calendar, todolist ); 1444 loadOk = qtopiaFormat.load( calendar, todolist );
1441 1445
1442 if ( loadOk ) { 1446 if ( loadOk ) {
1443 getEventViewerDialog()->setSyncMode( true ); 1447 getEventViewerDialog()->setSyncMode( true );
1444 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs ); 1448 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs );
1445 getEventViewerDialog()->setSyncMode( false ); 1449 getEventViewerDialog()->setSyncMode( false );
1446 qApp->processEvents(); 1450 qApp->processEvents();
1447 if ( syncOK ) { 1451 if ( syncOK ) {
1448 if ( KOPrefs::instance()->mWriteBackFile ) 1452 if ( KOPrefs::instance()->mWriteBackFile )
1449 { 1453 {
1450 // write back XML file 1454 // write back XML file
1451 1455
1452 } 1456 }
1453 setModified( true ); 1457 setModified( true );
1454 } 1458 }
1455 } else { 1459 } else {
1456 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 1460 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
1457 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 1461 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
1458 question, i18n("Ok")) ; 1462 question, i18n("Ok")) ;
1459 } 1463 }
1460 delete calendar; 1464 delete calendar;
1461 updateView(); 1465 updateView();
1462 return syncOK; 1466 return syncOK;
1463 1467
1464 1468
1465#endif 1469#endif
1466 1470
1467} 1471}
1468 1472
1469void CalendarView::setSyncEventsReadOnly() 1473void CalendarView::setSyncEventsReadOnly()
1470{ 1474{
1471 Event * ev; 1475 Event * ev;
1472 QPtrList<Event> eL = mCalendar->rawEvents(); 1476 QPtrList<Event> eL = mCalendar->rawEvents();
1473 ev = eL.first(); 1477 ev = eL.first();
1474 while ( ev ) { 1478 while ( ev ) {
1475 if ( ev->uid().left(15) == QString("last-syncEvent-") ) 1479 if ( ev->uid().left(15) == QString("last-syncEvent-") )
1476 ev->setReadOnly( true ); 1480 ev->setReadOnly( true );
1477 ev = eL.next(); 1481 ev = eL.next();
1478 } 1482 }
1479} 1483}
1480bool CalendarView::openCalendar(QString filename, bool merge) 1484bool CalendarView::openCalendar(QString filename, bool merge)
1481{ 1485{
1482 1486
1483 if (filename.isEmpty()) { 1487 if (filename.isEmpty()) {
1484 return false; 1488 return false;
1485 } 1489 }
1486 1490
1487 if (!QFile::exists(filename)) { 1491 if (!QFile::exists(filename)) {
1488 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 1492 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
1489 return false; 1493 return false;
1490 } 1494 }
1491 1495
1492 globalFlagBlockAgenda = 1; 1496 globalFlagBlockAgenda = 1;
1493 if (!merge) mCalendar->close(); 1497 if (!merge) mCalendar->close();
1494 1498
1495 mStorage->setFileName( filename ); 1499 mStorage->setFileName( filename );
1496 1500
1497 if ( mStorage->load(KOPrefs::instance()->mUseQuicksave) ) { 1501 if ( mStorage->load(KOPrefs::instance()->mUseQuicksave) ) {
1498 if ( merge ) ;//setModified( true ); 1502 if ( merge ) ;//setModified( true );
1499 else { 1503 else {
1500 //setModified( true ); 1504 //setModified( true );
1501 mViewManager->setDocumentId( filename ); 1505 mViewManager->setDocumentId( filename );
1502 mDialogManager->setDocumentId( filename ); 1506 mDialogManager->setDocumentId( filename );
1503 mTodoList->setDocumentId( filename ); 1507 mTodoList->setDocumentId( filename );
1504 } 1508 }
1505 globalFlagBlockAgenda = 2; 1509 globalFlagBlockAgenda = 2;
1506 // if ( getLastSyncEvent() ) 1510 // if ( getLastSyncEvent() )
1507 // getLastSyncEvent()->setReadOnly( true ); 1511 // getLastSyncEvent()->setReadOnly( true );
1508 mCalendar->reInitAlarmSettings(); 1512 mCalendar->reInitAlarmSettings();
1509 setSyncEventsReadOnly(); 1513 setSyncEventsReadOnly();
1510 updateUnmanagedViews(); 1514 updateUnmanagedViews();
1511 updateView(); 1515 updateView();
1512 if ( filename != MainWindow::defaultFileName() ) 1516 if ( filename != MainWindow::defaultFileName() )
1513 saveCalendar( MainWindow::defaultFileName() ); 1517 saveCalendar( MainWindow::defaultFileName() );
1514 loadedFileVersion = QDateTime::currentDateTime(); 1518 loadedFileVersion = QDateTime::currentDateTime();
1515 return true; 1519 return true;
1516 } else { 1520 } else {
1517 // while failing to load, the calendar object could 1521 // while failing to load, the calendar object could
1518 // have become partially populated. Clear it out. 1522 // have become partially populated. Clear it out.
1519 if ( !merge ) mCalendar->close(); 1523 if ( !merge ) mCalendar->close();
1520 1524
1521 KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 1525 KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
1522 1526
1523 globalFlagBlockAgenda = 2; 1527 globalFlagBlockAgenda = 2;
1524 updateView(); 1528 updateView();
1525 } 1529 }
1526 return false; 1530 return false;
1527} 1531}
1528void CalendarView::setLoadedFileVersion(QDateTime dt) 1532void CalendarView::setLoadedFileVersion(QDateTime dt)
1529{ 1533{
1530 loadedFileVersion = dt; 1534 loadedFileVersion = dt;
1531} 1535}
1532bool CalendarView::checkFileChanged(QString fn) 1536bool CalendarView::checkFileChanged(QString fn)
1533{ 1537{
1534 QFileInfo finf ( fn ); 1538 QFileInfo finf ( fn );
1535 if ( !finf.exists() ) 1539 if ( !finf.exists() )
1536 return true; 1540 return true;
1537 QDateTime dt = finf.lastModified (); 1541 QDateTime dt = finf.lastModified ();
1538 if ( dt <= loadedFileVersion ) 1542 if ( dt <= loadedFileVersion )
1539 return false; 1543 return false;
1540 return true; 1544 return true;
1541 1545
1542} 1546}
1543bool CalendarView::checkFileVersion(QString fn) 1547bool CalendarView::checkFileVersion(QString fn)
1544{ 1548{
1545 QFileInfo finf ( fn ); 1549 QFileInfo finf ( fn );
1546 if ( !finf.exists() ) 1550 if ( !finf.exists() )
1547 return true; 1551 return true;
1548 QDateTime dt = finf.lastModified (); 1552 QDateTime dt = finf.lastModified ();
1549 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1()); 1553 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1());
1550 //qDebug("file on disk version %s",dt.toString().latin1()); 1554 //qDebug("file on disk version %s",dt.toString().latin1());
1551 if ( dt <= loadedFileVersion ) 1555 if ( dt <= loadedFileVersion )
1552 return true; 1556 return true;
1553 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, false)) , 1557 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, false)) ,
1554 i18n("KO/Pi Warning"),i18n("Overwrite"), 1558 i18n("KO/Pi Warning"),i18n("Overwrite"),
1555 i18n("Sync+save")); 1559 i18n("Sync+save"));
1556 1560
1557 if ( km == KMessageBox::Cancel ) 1561 if ( km == KMessageBox::Cancel )
1558 return false; 1562 return false;
1559 if ( km == KMessageBox::Yes ) 1563 if ( km == KMessageBox::Yes )
1560 return true; 1564 return true;
1561 1565
1562 setSyncDevice("deleteaftersync" ); 1566 setSyncDevice("deleteaftersync" );
1563 KOPrefs::instance()->mAskForPreferences = true; 1567 KOPrefs::instance()->mAskForPreferences = true;
1564 KOPrefs::instance()->mSyncAlgoPrefs = 3; 1568 KOPrefs::instance()->mSyncAlgoPrefs = 3;
1565 KOPrefs::instance()->mWriteBackFile = false; 1569 KOPrefs::instance()->mWriteBackFile = false;
1566 KOPrefs::instance()->mWriteBackExistingOnly = false; 1570 KOPrefs::instance()->mWriteBackExistingOnly = false;
1567 KOPrefs::instance()->mShowSyncSummary = false; 1571 KOPrefs::instance()->mShowSyncSummary = false;
1568 syncCalendar( fn, 3 ); 1572 syncCalendar( fn, 3 );
1569 Event * e = getLastSyncEvent(); 1573 Event * e = getLastSyncEvent();
1570 mCalendar->deleteEvent ( e ); 1574 mCalendar->deleteEvent ( e );
1571 updateView(); 1575 updateView();
1572 return true; 1576 return true;
1573} 1577}
1574 1578
1575bool CalendarView::saveCalendar( QString filename ) 1579bool CalendarView::saveCalendar( QString filename )
1576{ 1580{
1577 1581
1578 // Store back all unsaved data into calendar object 1582 // Store back all unsaved data into calendar object
1579 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 1583 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
1580 if ( mViewManager->currentView() ) 1584 if ( mViewManager->currentView() )
1581 mViewManager->currentView()->flushView(); 1585 mViewManager->currentView()->flushView();
1582 1586
1583 //mStorage->setFileName( filename ); 1587 //mStorage->setFileName( filename );
1584 1588
1585 mStorage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 1589 mStorage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
1586 mStorage->setFileName( filename ); 1590 mStorage->setFileName( filename );
1587 bool success; 1591 bool success;
1588 success = mStorage->save(); 1592 success = mStorage->save();
1589 if ( !success ) { 1593 if ( !success ) {
1590 return false; 1594 return false;
1591 } 1595 }
1592 1596
1593 return true; 1597 return true;
1594} 1598}
1595 1599
1596void CalendarView::closeCalendar() 1600void CalendarView::closeCalendar()
1597{ 1601{
1598 1602
1599 // child windows no longer valid 1603 // child windows no longer valid
1600 emit closingDown(); 1604 emit closingDown();
1601 1605
1602 mCalendar->close(); 1606 mCalendar->close();
1603 setModified(false); 1607 setModified(false);
1604 updateView(); 1608 updateView();
1605} 1609}
1606 1610
1607void CalendarView::archiveCalendar() 1611void CalendarView::archiveCalendar()
1608{ 1612{
1609 mDialogManager->showArchiveDialog(); 1613 mDialogManager->showArchiveDialog();
1610} 1614}
1611 1615
1612 1616
1613void CalendarView::readSettings() 1617void CalendarView::readSettings()
1614{ 1618{
1615 1619
1616 1620
1617 // mViewManager->showAgendaView(); 1621 // mViewManager->showAgendaView();
1618 QString str; 1622 QString str;
1619 //qDebug("CalendarView::readSettings() "); 1623 //qDebug("CalendarView::readSettings() ");
1620 // read settings from the KConfig, supplying reasonable 1624 // read settings from the KConfig, supplying reasonable
1621 // defaults where none are to be found 1625 // defaults where none are to be found
1622 KConfig *config = KOGlobals::config(); 1626 KConfig *config = KOGlobals::config();
1623#ifndef KORG_NOSPLITTER 1627#ifndef KORG_NOSPLITTER
1624 config->setGroup("KOrganizer Geometry"); 1628 config->setGroup("KOrganizer Geometry");
1625 1629
1626 QValueList<int> sizes = config->readIntListEntry("Separator1"); 1630 QValueList<int> sizes = config->readIntListEntry("Separator1");
1627 if (sizes.count() != 2) { 1631 if (sizes.count() != 2) {
1628 sizes << mDateNavigator->minimumSizeHint().width(); 1632 sizes << mDateNavigator->minimumSizeHint().width();
1629 sizes << 300; 1633 sizes << 300;
1630 } 1634 }
1631 mPanner->setSizes(sizes); 1635 mPanner->setSizes(sizes);
1632 1636
1633 sizes = config->readIntListEntry("Separator2"); 1637 sizes = config->readIntListEntry("Separator2");
1634 if ( ( mResourceView && sizes.count() == 4 ) || 1638 if ( ( mResourceView && sizes.count() == 4 ) ||
1635 ( !mResourceView && sizes.count() == 3 ) ) { 1639 ( !mResourceView && sizes.count() == 3 ) ) {
1636 mLeftSplitter->setSizes(sizes); 1640 mLeftSplitter->setSizes(sizes);
1637 } 1641 }
1638#endif 1642#endif
1639 globalFlagBlockAgenda = 1; 1643 globalFlagBlockAgenda = 1;
1640 mViewManager->showAgendaView(); 1644 mViewManager->showAgendaView();
1641 //mViewManager->readSettings( config ); 1645 //mViewManager->readSettings( config );
1642 mTodoList->restoreLayout(config,QString("Todo Layout")); 1646 mTodoList->restoreLayout(config,QString("Todo Layout"));
1643 readFilterSettings(config); 1647 readFilterSettings(config);
1644 config->setGroup( "Views" ); 1648 config->setGroup( "Views" );
1645 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 1649 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
1646 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 1650 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
1647 else if ( dateCount == 7 ) mNavigator->selectWeek(); 1651 else if ( dateCount == 7 ) mNavigator->selectWeek();
1648 else mNavigator->selectDates( dateCount ); 1652 else mNavigator->selectDates( dateCount );
1649 // mViewManager->readSettings( config ); 1653 // mViewManager->readSettings( config );
1650 updateConfig(); 1654 updateConfig();
1651 globalFlagBlockAgenda = 2; 1655 globalFlagBlockAgenda = 2;
1652 mViewManager->readSettings( config ); 1656 mViewManager->readSettings( config );
1653#ifdef DESKTOP_VERSION 1657#ifdef DESKTOP_VERSION
1654 config->setGroup("WidgetLayout"); 1658 config->setGroup("WidgetLayout");
1655 QStringList list; 1659 QStringList list;
1656 list = config->readListEntry("MainLayout"); 1660 list = config->readListEntry("MainLayout");
1657 int x,y,w,h; 1661 int x,y,w,h;
1658 if ( ! list.isEmpty() ) { 1662 if ( ! list.isEmpty() ) {
1659 x = list[0].toInt(); 1663 x = list[0].toInt();
1660 y = list[1].toInt(); 1664 y = list[1].toInt();
1661 w = list[2].toInt(); 1665 w = list[2].toInt();
1662 h = list[3].toInt(); 1666 h = list[3].toInt();
1663 topLevelWidget()->setGeometry(x,y,w,h); 1667 topLevelWidget()->setGeometry(x,y,w,h);
1664 1668
1665 } else { 1669 } else {
1666 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 1670 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
1667 } 1671 }
1668 list = config->readListEntry("EditEventLayout"); 1672 list = config->readListEntry("EditEventLayout");
1669 if ( ! list.isEmpty() ) { 1673 if ( ! list.isEmpty() ) {
1670 x = list[0].toInt(); 1674 x = list[0].toInt();
1671 y = list[1].toInt(); 1675 y = list[1].toInt();
1672 w = list[2].toInt(); 1676 w = list[2].toInt();
1673 h = list[3].toInt(); 1677 h = list[3].toInt();
1674 mEventEditor->setGeometry(x,y,w,h); 1678 mEventEditor->setGeometry(x,y,w,h);
1675 1679
1676 } 1680 }
1677 list = config->readListEntry("EditTodoLayout"); 1681 list = config->readListEntry("EditTodoLayout");
1678 if ( ! list.isEmpty() ) { 1682 if ( ! list.isEmpty() ) {
1679 x = list[0].toInt(); 1683 x = list[0].toInt();
1680 y = list[1].toInt(); 1684 y = list[1].toInt();
1681 w = list[2].toInt(); 1685 w = list[2].toInt();
1682 h = list[3].toInt(); 1686 h = list[3].toInt();
1683 mTodoEditor->setGeometry(x,y,w,h); 1687 mTodoEditor->setGeometry(x,y,w,h);
1684 1688
1685 } 1689 }
1686 list = config->readListEntry("ViewerLayout"); 1690 list = config->readListEntry("ViewerLayout");
1687 if ( ! list.isEmpty() ) { 1691 if ( ! list.isEmpty() ) {
1688 x = list[0].toInt(); 1692 x = list[0].toInt();
1689 y = list[1].toInt(); 1693 y = list[1].toInt();
1690 w = list[2].toInt(); 1694 w = list[2].toInt();
1691 h = list[3].toInt(); 1695 h = list[3].toInt();
1692 getEventViewerDialog()->setGeometry(x,y,w,h); 1696 getEventViewerDialog()->setGeometry(x,y,w,h);
1693 } 1697 }
1694#endif 1698#endif
1695 1699
1696} 1700}
1697 1701
1698 1702
1699void CalendarView::writeSettings() 1703void CalendarView::writeSettings()
1700{ 1704{
1701 // kdDebug() << "CalendarView::writeSettings" << endl; 1705 // kdDebug() << "CalendarView::writeSettings" << endl;
1702 1706
1703 KConfig *config = KOGlobals::config(); 1707 KConfig *config = KOGlobals::config();
1704 1708
1705#ifndef KORG_NOSPLITTER 1709#ifndef KORG_NOSPLITTER
1706 config->setGroup("KOrganizer Geometry"); 1710 config->setGroup("KOrganizer Geometry");
1707 1711
1708 QValueList<int> list = mPanner->sizes(); 1712 QValueList<int> list = mPanner->sizes();
1709 config->writeEntry("Separator1",list); 1713 config->writeEntry("Separator1",list);
1710 1714
1711 list = mLeftSplitter->sizes(); 1715 list = mLeftSplitter->sizes();
1712 config->writeEntry("Separator2",list); 1716 config->writeEntry("Separator2",list);
1713#endif 1717#endif
1714 1718
1715 mViewManager->writeSettings( config ); 1719 mViewManager->writeSettings( config );
1716 mTodoList->saveLayout(config,QString("Todo Layout")); 1720 mTodoList->saveLayout(config,QString("Todo Layout"));
1717 mDialogManager->writeSettings( config ); 1721 mDialogManager->writeSettings( config );
1718 //KOPrefs::instance()->usrWriteConfig(); 1722 //KOPrefs::instance()->usrWriteConfig();
1719 KOPrefs::instance()->writeConfig(); 1723 KOPrefs::instance()->writeConfig();
1720 1724
1721 writeFilterSettings(config); 1725 writeFilterSettings(config);
1722 1726
1723 config->setGroup( "Views" ); 1727 config->setGroup( "Views" );
1724 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 1728 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
1725 1729
1726#ifdef DESKTOP_VERSION 1730#ifdef DESKTOP_VERSION
1727 config->setGroup("WidgetLayout"); 1731 config->setGroup("WidgetLayout");
1728 QStringList list ;//= config->readListEntry("MainLayout"); 1732 QStringList list ;//= config->readListEntry("MainLayout");
1729 int x,y,w,h; 1733 int x,y,w,h;
1730 QWidget* wid; 1734 QWidget* wid;
1731 wid = topLevelWidget(); 1735 wid = topLevelWidget();
1732 x = wid->geometry().x(); 1736 x = wid->geometry().x();
1733 y = wid->geometry().y(); 1737 y = wid->geometry().y();
1734 w = wid->width(); 1738 w = wid->width();
1735 h = wid->height(); 1739 h = wid->height();
1736 list.clear(); 1740 list.clear();
1737 list << QString::number( x ); 1741 list << QString::number( x );
1738 list << QString::number( y ); 1742 list << QString::number( y );
1739 list << QString::number( w ); 1743 list << QString::number( w );
1740 list << QString::number( h ); 1744 list << QString::number( h );
1741 config->writeEntry("MainLayout",list ); 1745 config->writeEntry("MainLayout",list );
1742 1746
1743 wid = mEventEditor; 1747 wid = mEventEditor;
1744 x = wid->geometry().x(); 1748 x = wid->geometry().x();
1745 y = wid->geometry().y(); 1749 y = wid->geometry().y();
1746 w = wid->width(); 1750 w = wid->width();
1747 h = wid->height(); 1751 h = wid->height();
1748 list.clear(); 1752 list.clear();
1749 list << QString::number( x ); 1753 list << QString::number( x );
1750 list << QString::number( y ); 1754 list << QString::number( y );
1751 list << QString::number( w ); 1755 list << QString::number( w );
1752 list << QString::number( h ); 1756 list << QString::number( h );
1753 config->writeEntry("EditEventLayout",list ); 1757 config->writeEntry("EditEventLayout",list );
1754 1758
1755 wid = mTodoEditor; 1759 wid = mTodoEditor;
1756 x = wid->geometry().x(); 1760 x = wid->geometry().x();
1757 y = wid->geometry().y(); 1761 y = wid->geometry().y();
1758 w = wid->width(); 1762 w = wid->width();
1759 h = wid->height(); 1763 h = wid->height();
1760 list.clear(); 1764 list.clear();
1761 list << QString::number( x ); 1765 list << QString::number( x );
1762 list << QString::number( y ); 1766 list << QString::number( y );
1763 list << QString::number( w ); 1767 list << QString::number( w );
1764 list << QString::number( h ); 1768 list << QString::number( h );
1765 config->writeEntry("EditTodoLayout",list ); 1769 config->writeEntry("EditTodoLayout",list );
1766 wid = getEventViewerDialog(); 1770 wid = getEventViewerDialog();
1767 x = wid->geometry().x(); 1771 x = wid->geometry().x();
1768 y = wid->geometry().y(); 1772 y = wid->geometry().y();
1769 w = wid->width(); 1773 w = wid->width();
1770 h = wid->height(); 1774 h = wid->height();
1771 list.clear(); 1775 list.clear();
1772 list << QString::number( x ); 1776 list << QString::number( x );
1773 list << QString::number( y ); 1777 list << QString::number( y );
1774 list << QString::number( w ); 1778 list << QString::number( w );
1775 list << QString::number( h ); 1779 list << QString::number( h );
1776 config->writeEntry("ViewerLayout",list ); 1780 config->writeEntry("ViewerLayout",list );
1777 wid = mDialogManager->getSearchDialog(); 1781 wid = mDialogManager->getSearchDialog();
1778 if ( wid ) { 1782 if ( wid ) {
1779 x = wid->geometry().x(); 1783 x = wid->geometry().x();
1780 y = wid->geometry().y(); 1784 y = wid->geometry().y();
1781 w = wid->width(); 1785 w = wid->width();
1782 h = wid->height(); 1786 h = wid->height();
1783 list.clear(); 1787 list.clear();
1784 list << QString::number( x ); 1788 list << QString::number( x );
1785 list << QString::number( y ); 1789 list << QString::number( y );
1786 list << QString::number( w ); 1790 list << QString::number( w );
1787 list << QString::number( h ); 1791 list << QString::number( h );
1788 config->writeEntry("SearchLayout",list ); 1792 config->writeEntry("SearchLayout",list );
1789 } 1793 }
1790#endif 1794#endif
1791 1795
1792 1796
1793 config->sync(); 1797 config->sync();
1794} 1798}
1795 1799
1796void CalendarView::readFilterSettings(KConfig *config) 1800void CalendarView::readFilterSettings(KConfig *config)
1797{ 1801{
1798 // kdDebug() << "CalendarView::readFilterSettings()" << endl; 1802 // kdDebug() << "CalendarView::readFilterSettings()" << endl;
1799 1803
1800 mFilters.clear(); 1804 mFilters.clear();
1801 1805
1802 config->setGroup("General"); 1806 config->setGroup("General");
1803 QStringList filterList = config->readListEntry("CalendarFilters"); 1807 QStringList filterList = config->readListEntry("CalendarFilters");
1804 1808
1805 QStringList::ConstIterator it = filterList.begin(); 1809 QStringList::ConstIterator it = filterList.begin();
1806 QStringList::ConstIterator end = filterList.end(); 1810 QStringList::ConstIterator end = filterList.end();
1807 while(it != end) { 1811 while(it != end) {
1808 // kdDebug() << " filter: " << (*it) << endl; 1812 // kdDebug() << " filter: " << (*it) << endl;
1809 1813
1810 CalFilter *filter; 1814 CalFilter *filter;
1811 filter = new CalFilter(*it); 1815 filter = new CalFilter(*it);
1812 config->setGroup("Filter_" + (*it)); 1816 config->setGroup("Filter_" + (*it));
1813 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); 1817 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) );
1814 filter->setCriteria(config->readNumEntry("Criteria",0)); 1818 filter->setCriteria(config->readNumEntry("Criteria",0));
1815 filter->setCategoryList(config->readListEntry("CategoryList")); 1819 filter->setCategoryList(config->readListEntry("CategoryList"));
1816 mFilters.append(filter); 1820 mFilters.append(filter);
1817 1821
1818 ++it; 1822 ++it;
1819 } 1823 }
1820 1824
1821 if (mFilters.count() == 0) { 1825 if (mFilters.count() == 0) {
1822 CalFilter *filter = new CalFilter(i18n("Default")); 1826 CalFilter *filter = new CalFilter(i18n("Default"));
1823 mFilters.append(filter); 1827 mFilters.append(filter);
1824 } 1828 }
1825 mFilterView->updateFilters(); 1829 mFilterView->updateFilters();
1826 config->setGroup("FilterView"); 1830 config->setGroup("FilterView");
1827 1831
1828 mFilterView->blockSignals(true); 1832 mFilterView->blockSignals(true);
1829 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); 1833 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled"));
1830 mFilterView->setSelectedFilter(config->readEntry("Current Filter")); 1834 mFilterView->setSelectedFilter(config->readEntry("Current Filter"));
1831 mFilterView->blockSignals(false); 1835 mFilterView->blockSignals(false);
1832 // We do it manually to avoid it being done twice by the above calls 1836 // We do it manually to avoid it being done twice by the above calls
1833 updateFilter(); 1837 updateFilter();
1834} 1838}
1835 1839
1836void CalendarView::writeFilterSettings(KConfig *config) 1840void CalendarView::writeFilterSettings(KConfig *config)
1837{ 1841{
1838 // kdDebug() << "CalendarView::writeFilterSettings()" << endl; 1842 // kdDebug() << "CalendarView::writeFilterSettings()" << endl;
1839 1843
1840 QStringList filterList; 1844 QStringList filterList;
1841 1845
1842 CalFilter *filter = mFilters.first(); 1846 CalFilter *filter = mFilters.first();
1843 while(filter) { 1847 while(filter) {
1844 // kdDebug() << " fn: " << filter->name() << endl; 1848 // kdDebug() << " fn: " << filter->name() << endl;
1845 filterList << filter->name(); 1849 filterList << filter->name();
1846 config->setGroup("Filter_" + filter->name()); 1850 config->setGroup("Filter_" + filter->name());
1847 config->writeEntry("Criteria",filter->criteria()); 1851 config->writeEntry("Criteria",filter->criteria());
1848 config->writeEntry("CategoryList",filter->categoryList()); 1852 config->writeEntry("CategoryList",filter->categoryList());
1849 filter = mFilters.next(); 1853 filter = mFilters.next();
1850 } 1854 }
1851 config->setGroup("General"); 1855 config->setGroup("General");
1852 config->writeEntry("CalendarFilters",filterList); 1856 config->writeEntry("CalendarFilters",filterList);
1853 1857
1854 config->setGroup("FilterView"); 1858 config->setGroup("FilterView");
1855 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); 1859 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled());
1856 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); 1860 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name());
1857} 1861}
1858 1862
1859 1863
1860void CalendarView::goToday() 1864void CalendarView::goToday()
1861{ 1865{
1862 mNavigator->selectToday(); 1866 mNavigator->selectToday();
1863} 1867}
1864 1868
1865void CalendarView::goNext() 1869void CalendarView::goNext()
1866{ 1870{
1867 mNavigator->selectNext(); 1871 mNavigator->selectNext();
1868} 1872}
1869 1873
1870void CalendarView::goPrevious() 1874void CalendarView::goPrevious()
1871{ 1875{
1872 mNavigator->selectPrevious(); 1876 mNavigator->selectPrevious();
1873} 1877}
1874void CalendarView::goNextMonth() 1878void CalendarView::goNextMonth()
1875{ 1879{
1876 mNavigator->selectNextMonth(); 1880 mNavigator->selectNextMonth();
1877} 1881}
1878 1882
1879void CalendarView::goPreviousMonth() 1883void CalendarView::goPreviousMonth()
1880{ 1884{
1881 mNavigator->selectPreviousMonth(); 1885 mNavigator->selectPreviousMonth();
1882} 1886}
1883void CalendarView::writeLocale() 1887void CalendarView::writeLocale()
1884{ 1888{
1885 KGlobal::locale()->setHore24Format( !KOPrefs::instance()->mPreferredTime ); 1889 KGlobal::locale()->setHore24Format( !KOPrefs::instance()->mPreferredTime );
1886 KGlobal::locale()->setWeekStartMonday( !KOPrefs::instance()->mWeekStartsOnSunday ); 1890 KGlobal::locale()->setWeekStartMonday( !KOPrefs::instance()->mWeekStartsOnSunday );
1887 KGlobal::locale()->setIntDateFormat( (KLocale::IntDateFormat)KOPrefs::instance()->mPreferredDate ); 1891 KGlobal::locale()->setIntDateFormat( (KLocale::IntDateFormat)KOPrefs::instance()->mPreferredDate );
1888 KGlobal::locale()->setLanguage( KOPrefs::instance()->mPreferredLanguage ); 1892 KGlobal::locale()->setLanguage( KOPrefs::instance()->mPreferredLanguage );
1889 QString dummy = KOPrefs::instance()->mUserDateFormatLong; 1893 QString dummy = KOPrefs::instance()->mUserDateFormatLong;
1890 KGlobal::locale()->setDateFormat(dummy.replace( QRegExp("K"), QString(",") )); 1894 KGlobal::locale()->setDateFormat(dummy.replace( QRegExp("K"), QString(",") ));
1891 dummy = KOPrefs::instance()->mUserDateFormatShort; 1895 dummy = KOPrefs::instance()->mUserDateFormatShort;
1892 KGlobal::locale()->setDateFormatShort(dummy.replace( QRegExp("K"), QString(",") )); 1896 KGlobal::locale()->setDateFormatShort(dummy.replace( QRegExp("K"), QString(",") ));
1893 KGlobal::locale()->setDaylightSaving( KOPrefs::instance()->mUseDaylightsaving, 1897 KGlobal::locale()->setDaylightSaving( KOPrefs::instance()->mUseDaylightsaving,
1894 KOPrefs::instance()->mDaylightsavingStart, 1898 KOPrefs::instance()->mDaylightsavingStart,
1895 KOPrefs::instance()->mDaylightsavingEnd ); 1899 KOPrefs::instance()->mDaylightsavingEnd );
1896 KGlobal::locale()->setTimezone( KOPrefs::instance()->mTimeZoneId ); 1900 KGlobal::locale()->setTimezone( KOPrefs::instance()->mTimeZoneId );
1897} 1901}
1898void CalendarView::updateConfig() 1902void CalendarView::updateConfig()
1899{ 1903{
1900 writeLocale(); 1904 writeLocale();
1901 if ( KOPrefs::instance()->mUseAppColors ) 1905 if ( KOPrefs::instance()->mUseAppColors )
1902 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 1906 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
1903 emit configChanged(); 1907 emit configChanged();
1904 mTodoList->updateConfig(); 1908 mTodoList->updateConfig();
1905 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); 1909 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont);
1906 mCalendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1910 mCalendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1907 // To make the "fill window" configurations work 1911 // To make the "fill window" configurations work
1908 //mViewManager->raiseCurrentView(); 1912 //mViewManager->raiseCurrentView();
1909} 1913}
1910 1914
1911 1915
1912void CalendarView::eventChanged(Event *event) 1916void CalendarView::eventChanged(Event *event)
1913{ 1917{
1914 changeEventDisplay(event,KOGlobals::EVENTEDITED); 1918 changeEventDisplay(event,KOGlobals::EVENTEDITED);
1915 //updateUnmanagedViews(); 1919 //updateUnmanagedViews();
1916} 1920}
1917 1921
1918void CalendarView::eventAdded(Event *event) 1922void CalendarView::eventAdded(Event *event)
1919{ 1923{
1920 changeEventDisplay(event,KOGlobals::EVENTADDED); 1924 changeEventDisplay(event,KOGlobals::EVENTADDED);
1921} 1925}
1922 1926
1923void CalendarView::eventToBeDeleted(Event *) 1927void CalendarView::eventToBeDeleted(Event *)
1924{ 1928{
1925 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 1929 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
1926} 1930}
1927 1931
1928void CalendarView::eventDeleted() 1932void CalendarView::eventDeleted()
1929{ 1933{
1930 changeEventDisplay(0,KOGlobals::EVENTDELETED); 1934 changeEventDisplay(0,KOGlobals::EVENTDELETED);
1931} 1935}
1932void CalendarView::changeTodoDisplay(Todo *which, int action) 1936void CalendarView::changeTodoDisplay(Todo *which, int action)
1933{ 1937{
1934 changeIncidenceDisplay((Incidence *)which, action); 1938 changeIncidenceDisplay((Incidence *)which, action);
1935 mDateNavigator->updateView(); //LR 1939 mDateNavigator->updateView(); //LR
1936 //mDialogManager->updateSearchDialog(); 1940 //mDialogManager->updateSearchDialog();
1937 1941
1938 if (which) { 1942 if (which) {
1939 mViewManager->updateWNview(); 1943 mViewManager->updateWNview();
1940 //mTodoList->updateView(); 1944 //mTodoList->updateView();
1941 } 1945 }
1942 1946
1943} 1947}
1944 1948
1945void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 1949void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
1946{ 1950{
1947 updateUnmanagedViews(); 1951 updateUnmanagedViews();
1948 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 1952 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
1949 if ( action == KOGlobals::EVENTDELETED ) { //delete 1953 if ( action == KOGlobals::EVENTDELETED ) { //delete
1950 mCalendar->checkAlarmForIncidence( 0, true ); 1954 mCalendar->checkAlarmForIncidence( 0, true );
1951 if ( mEventViewerDialog ) 1955 if ( mEventViewerDialog )
1952 mEventViewerDialog->hide(); 1956 mEventViewerDialog->hide();
1953 } 1957 }
1954 else 1958 else
1955 mCalendar->checkAlarmForIncidence( which , false ); 1959 mCalendar->checkAlarmForIncidence( which , false );
1956} 1960}
1957 1961
1958// most of the changeEventDisplays() right now just call the view's 1962// most of the changeEventDisplays() right now just call the view's
1959// total update mode, but they SHOULD be recoded to be more refresh-efficient. 1963// total update mode, but they SHOULD be recoded to be more refresh-efficient.
1960void CalendarView::changeEventDisplay(Event *which, int action) 1964void CalendarView::changeEventDisplay(Event *which, int action)
1961{ 1965{
1962 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 1966 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
1963 changeIncidenceDisplay((Incidence *)which, action); 1967 changeIncidenceDisplay((Incidence *)which, action);
1964 mDateNavigator->updateView(); 1968 mDateNavigator->updateView();
1965 //mDialogManager->updateSearchDialog(); 1969 //mDialogManager->updateSearchDialog();
1966 1970
1967 if (which) { 1971 if (which) {
1968 // If there is an event view visible update the display 1972 // If there is an event view visible update the display
1969 mViewManager->currentView()->changeEventDisplay(which,action); 1973 mViewManager->currentView()->changeEventDisplay(which,action);
1970 // TODO: check, if update needed 1974 // TODO: check, if update needed
1971 // if (which->getTodoStatus()) { 1975 // if (which->getTodoStatus()) {
1972 mTodoList->updateView(); 1976 mTodoList->updateView();
1973 // } 1977 // }
1974 } else { 1978 } else {
1975 mViewManager->currentView()->updateView(); 1979 mViewManager->currentView()->updateView();
1976 } 1980 }
1977} 1981}
1978 1982
1979 1983
1980void CalendarView::updateTodoViews() 1984void CalendarView::updateTodoViews()
1981{ 1985{
1982 1986
1983 mTodoList->updateView(); 1987 mTodoList->updateView();
1984 mViewManager->currentView()->updateView(); 1988 mViewManager->currentView()->updateView();
1985 1989
1986} 1990}
1987 1991
1988 1992
1989void CalendarView::updateView(const QDate &start, const QDate &end) 1993void CalendarView::updateView(const QDate &start, const QDate &end)
1990{ 1994{
1991 mTodoList->updateView(); 1995 mTodoList->updateView();
1992 mViewManager->updateView(start, end); 1996 mViewManager->updateView(start, end);
1993 //mDateNavigator->updateView(); 1997 //mDateNavigator->updateView();
1994} 1998}
1995 1999
1996void CalendarView::updateView() 2000void CalendarView::updateView()
1997{ 2001{
1998 DateList tmpList = mNavigator->selectedDates(); 2002 DateList tmpList = mNavigator->selectedDates();
1999 2003
2000 // We assume that the navigator only selects consecutive days. 2004 // We assume that the navigator only selects consecutive days.
2001 updateView( tmpList.first(), tmpList.last() ); 2005 updateView( tmpList.first(), tmpList.last() );
2002} 2006}
2003 2007
2004void CalendarView::updateUnmanagedViews() 2008void CalendarView::updateUnmanagedViews()
2005{ 2009{
2006 mDateNavigator->updateDayMatrix(); 2010 mDateNavigator->updateDayMatrix();
2007} 2011}
2008 2012
2009int CalendarView::msgItemDelete() 2013int CalendarView::msgItemDelete()
2010{ 2014{
2011 return KMessageBox::warningContinueCancel(this, 2015 return KMessageBox::warningContinueCancel(this,
2012 i18n("This item will be\npermanently deleted."), 2016 i18n("This item will be\npermanently deleted."),
2013 i18n("KO/Pi Confirmation"),i18n("Delete")); 2017 i18n("KO/Pi Confirmation"),i18n("Delete"));
2014} 2018}
2015 2019
2016 2020
2017void CalendarView::edit_cut() 2021void CalendarView::edit_cut()
2018{ 2022{
2019 Event *anEvent=0; 2023 Event *anEvent=0;
2020 2024
2021 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2025 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2022 2026
2023 if (mViewManager->currentView()->isEventView()) { 2027 if (mViewManager->currentView()->isEventView()) {
2024 if ( incidence && incidence->type() == "Event" ) { 2028 if ( incidence && incidence->type() == "Event" ) {
2025 anEvent = static_cast<Event *>(incidence); 2029 anEvent = static_cast<Event *>(incidence);
2026 } 2030 }
2027 } 2031 }
2028 2032
2029 if (!anEvent) { 2033 if (!anEvent) {
2030 KNotifyClient::beep(); 2034 KNotifyClient::beep();
2031 return; 2035 return;
2032 } 2036 }
2033 DndFactory factory( mCalendar ); 2037 DndFactory factory( mCalendar );
2034 factory.cutEvent(anEvent); 2038 factory.cutEvent(anEvent);
2035 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2039 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2036} 2040}
2037 2041
2038void CalendarView::edit_copy() 2042void CalendarView::edit_copy()
2039{ 2043{
2040 Event *anEvent=0; 2044 Event *anEvent=0;
2041 2045
2042 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2046 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2043 2047
2044 if (mViewManager->currentView()->isEventView()) { 2048 if (mViewManager->currentView()->isEventView()) {
2045 if ( incidence && incidence->type() == "Event" ) { 2049 if ( incidence && incidence->type() == "Event" ) {
2046 anEvent = static_cast<Event *>(incidence); 2050 anEvent = static_cast<Event *>(incidence);
2047 } 2051 }
2048 } 2052 }
2049 2053
2050 if (!anEvent) { 2054 if (!anEvent) {
2051 KNotifyClient::beep(); 2055 KNotifyClient::beep();
2052 return; 2056 return;
2053 } 2057 }
2054 DndFactory factory( mCalendar ); 2058 DndFactory factory( mCalendar );
2055 factory.copyEvent(anEvent); 2059 factory.copyEvent(anEvent);
2056} 2060}
2057 2061
2058void CalendarView::edit_paste() 2062void CalendarView::edit_paste()
2059{ 2063{
2060 QDate date = mNavigator->selectedDates().first(); 2064 QDate date = mNavigator->selectedDates().first();
2061 2065
2062 DndFactory factory( mCalendar ); 2066 DndFactory factory( mCalendar );
2063 Event *pastedEvent = factory.pasteEvent( date ); 2067 Event *pastedEvent = factory.pasteEvent( date );
2064 2068
2065 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 2069 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
2066} 2070}
2067 2071
2068void CalendarView::edit_options() 2072void CalendarView::edit_options()
2069{ 2073{
2070 mDialogManager->showOptionsDialog(); 2074 mDialogManager->showOptionsDialog();
2071 //writeSettings(); 2075 //writeSettings();
2072} 2076}
2073void CalendarView::edit_sync_options() 2077void CalendarView::edit_sync_options()
2074{ 2078{
2075 //mDialogManager->showSyncOptions(); 2079 //mDialogManager->showSyncOptions();
2076 //KOPrefs::instance()->mSyncAlgoPrefs 2080 //KOPrefs::instance()->mSyncAlgoPrefs
2077 QDialog dia( this, "dia", true ); 2081 QDialog dia( this, "dia", true );
2078 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice ); 2082 dia.setCaption( i18n("Device: " ) +mCurrentSyncDevice );
2079 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia); 2083 QButtonGroup gr ( 1, Qt::Horizontal, i18n("Sync preferences"), &dia);
2080 QVBoxLayout lay ( &dia ); 2084 QVBoxLayout lay ( &dia );
2081 lay.setSpacing( 2 ); 2085 lay.setSpacing( 2 );
2082 lay.setMargin( 3 ); 2086 lay.setMargin( 3 );
2083 lay.addWidget(&gr); 2087 lay.addWidget(&gr);
2084 QRadioButton loc ( i18n("Take local entry on conflict"), &gr ); 2088 QRadioButton loc ( i18n("Take local entry on conflict"), &gr );
2085 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr ); 2089 QRadioButton rem ( i18n("Take remote entry on conflict"), &gr );
2086 QRadioButton newest( i18n("Take newest entry on conflict"), &gr ); 2090 QRadioButton newest( i18n("Take newest entry on conflict"), &gr );
2087 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr ); 2091 QRadioButton ask( i18n("Ask for every entry on conflict"), &gr );
2088 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr ); 2092 QRadioButton f_loc( i18n("Force: Take local entry always"), &gr );
2089 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr ); 2093 QRadioButton f_rem( i18n("Force: Take remote entry always"), &gr );
2090 //QRadioButton both( i18n("Take both on conflict"), &gr ); 2094 //QRadioButton both( i18n("Take both on conflict"), &gr );
2091 QPushButton pb ( "OK", &dia); 2095 QPushButton pb ( "OK", &dia);
2092 lay.addWidget( &pb ); 2096 lay.addWidget( &pb );
2093 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) ); 2097 connect(&pb, SIGNAL( clicked() ), &dia, SLOT ( accept() ) );
2094 switch ( KOPrefs::instance()->mSyncAlgoPrefs ) { 2098 switch ( KOPrefs::instance()->mSyncAlgoPrefs ) {
2095 case 0: 2099 case 0:
2096 loc.setChecked( true); 2100 loc.setChecked( true);
2097 break; 2101 break;
2098 case 1: 2102 case 1:
2099 rem.setChecked( true ); 2103 rem.setChecked( true );
2100 break; 2104 break;
2101 case 2: 2105 case 2:
2102 newest.setChecked( true); 2106 newest.setChecked( true);
2103 break; 2107 break;
2104 case 3: 2108 case 3:
2105 ask.setChecked( true); 2109 ask.setChecked( true);
2106 break; 2110 break;
2107 case 4: 2111 case 4:
2108 f_loc.setChecked( true); 2112 f_loc.setChecked( true);
2109 break; 2113 break;
2110 case 5: 2114 case 5:
2111 f_rem.setChecked( true); 2115 f_rem.setChecked( true);
2112 break; 2116 break;
2113 case 6: 2117 case 6:
2114 // both.setChecked( true); 2118 // both.setChecked( true);
2115 break; 2119 break;
2116 default: 2120 default:
2117 break; 2121 break;
2118 } 2122 }
2119 if ( dia.exec() ) { 2123 if ( dia.exec() ) {
2120 KOPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ; 2124 KOPrefs::instance()->mSyncAlgoPrefs = rem.isChecked()*1+newest.isChecked()*2+ ask.isChecked()*3+ f_loc.isChecked()*4+ f_rem.isChecked()*5;//+ both.isChecked()*6 ;
2121 } 2125 }
2122 2126
2123} 2127}
2124 2128
2125void CalendarView::slotSelectPickerDate( QDate d) 2129void CalendarView::slotSelectPickerDate( QDate d)
2126{ 2130{
2127 mDateFrame->hide(); 2131 mDateFrame->hide();
2128 if ( mDatePickerMode == 1 ) { 2132 if ( mDatePickerMode == 1 ) {
2129 mNavigator->slotDaySelect( d ); 2133 mNavigator->slotDaySelect( d );
2130 } else if ( mDatePickerMode == 2 ) { 2134 } else if ( mDatePickerMode == 2 ) {
2131 if ( mMoveIncidence->type() == "Todo" ) { 2135 if ( mMoveIncidence->type() == "Todo" ) {
2132 Todo * to = (Todo *) mMoveIncidence; 2136 Todo * to = (Todo *) mMoveIncidence;
2133 QTime tim; 2137 QTime tim;
2134 if ( to->hasDueDate() ) 2138 if ( to->hasDueDate() )
2135 tim = to->dtDue().time(); 2139 tim = to->dtDue().time();
2136 else { 2140 else {
2137 tim = QTime ( 0,0,0 ); 2141 tim = QTime ( 0,0,0 );
2138 to->setFloats( true ); 2142 to->setFloats( true );
2139 to->setHasDueDate( true ); 2143 to->setHasDueDate( true );
2140 } 2144 }
2141 QDateTime dt ( d,tim ); 2145 QDateTime dt ( d,tim );
2142 to->setDtDue( dt ); 2146 to->setDtDue( dt );
2143 todoChanged( to ); 2147 todoChanged( to );
2144 } else { 2148 } else {
2145 QTime tim = mMoveIncidence->dtStart().time(); 2149 QTime tim = mMoveIncidence->dtStart().time();
2146 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 2150 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
2147 QDateTime dt ( d,tim ); 2151 QDateTime dt ( d,tim );
2148 mMoveIncidence->setDtStart( dt ); 2152 mMoveIncidence->setDtStart( dt );
2149 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 2153 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
2150 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 2154 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
2151 } 2155 }
2152 2156
2153 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 2157 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
2154 } 2158 }
2155} 2159}
2156 2160
2157void CalendarView::removeCategories() 2161void CalendarView::removeCategories()
2158{ 2162{
2159 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 2163 QPtrList<Incidence> incList = mCalendar->rawIncidences();
2160 QStringList catList = KOPrefs::instance()->mCustomCategories; 2164 QStringList catList = KOPrefs::instance()->mCustomCategories;
2161 QStringList catIncList; 2165 QStringList catIncList;
2162 QStringList newCatList; 2166 QStringList newCatList;
2163 Incidence* inc = incList.first(); 2167 Incidence* inc = incList.first();
2164 int i; 2168 int i;
2165 int count = 0; 2169 int count = 0;
2166 while ( inc ) { 2170 while ( inc ) {
2167 newCatList.clear(); 2171 newCatList.clear();
2168 catIncList = inc->categories() ; 2172 catIncList = inc->categories() ;
2169 for( i = 0; i< catIncList.count(); ++i ) { 2173 for( i = 0; i< catIncList.count(); ++i ) {
2170 if ( catList.contains (catIncList[i])) 2174 if ( catList.contains (catIncList[i]))
2171 newCatList.append( catIncList[i] ); 2175 newCatList.append( catIncList[i] );
2172 } 2176 }
2173 newCatList.sort(); 2177 newCatList.sort();
2174 inc->setCategories( newCatList.join(",") ); 2178 inc->setCategories( newCatList.join(",") );
2175 inc = incList.next(); 2179 inc = incList.next();
2176 } 2180 }
2177} 2181}
2178 2182
2179int CalendarView::addCategories() 2183int CalendarView::addCategories()
2180{ 2184{
2181 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 2185 QPtrList<Incidence> incList = mCalendar->rawIncidences();
2182 QStringList catList = KOPrefs::instance()->mCustomCategories; 2186 QStringList catList = KOPrefs::instance()->mCustomCategories;
2183 QStringList catIncList; 2187 QStringList catIncList;
2184 Incidence* inc = incList.first(); 2188 Incidence* inc = incList.first();
2185 int i; 2189 int i;
2186 int count = 0; 2190 int count = 0;
2187 while ( inc ) { 2191 while ( inc ) {
2188 catIncList = inc->categories() ; 2192 catIncList = inc->categories() ;
2189 for( i = 0; i< catIncList.count(); ++i ) { 2193 for( i = 0; i< catIncList.count(); ++i ) {
2190 if ( !catList.contains (catIncList[i])) { 2194 if ( !catList.contains (catIncList[i])) {
2191 catList.append( catIncList[i] ); 2195 catList.append( catIncList[i] );
2192 //qDebug("add cat %s ", catIncList[i].latin1()); 2196 //qDebug("add cat %s ", catIncList[i].latin1());
2193 ++count; 2197 ++count;
2194 } 2198 }
2195 } 2199 }
2196 inc = incList.next(); 2200 inc = incList.next();
2197 } 2201 }
2198 catList.sort(); 2202 catList.sort();
2199 KOPrefs::instance()->mCustomCategories = catList; 2203 KOPrefs::instance()->mCustomCategories = catList;
2200 return count; 2204 return count;
2201} 2205}
2202 2206
2203void CalendarView::manageCategories() 2207void CalendarView::manageCategories()
2204{ 2208{
2205 KOCatPrefs* cp = new KOCatPrefs(); 2209 KOCatPrefs* cp = new KOCatPrefs();
2206 cp->show(); 2210 cp->show();
2207 int w =cp->sizeHint().width() ; 2211 int w =cp->sizeHint().width() ;
2208 int h = cp->sizeHint().height() ; 2212 int h = cp->sizeHint().height() ;
2209 int dw = QApplication::desktop()->width(); 2213 int dw = QApplication::desktop()->width();
2210 int dh = QApplication::desktop()->height(); 2214 int dh = QApplication::desktop()->height();
2211 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2215 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2212 if ( !cp->exec() ) { 2216 if ( !cp->exec() ) {
2213 delete cp; 2217 delete cp;
2214 return; 2218 return;
2215 } 2219 }
2216 int count = 0; 2220 int count = 0;
2217 if ( cp->addCat() ) { 2221 if ( cp->addCat() ) {
2218 count = addCategories(); 2222 count = addCategories();
2219 if ( count ) { 2223 if ( count ) {
2220 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); 2224 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! "));
2221 writeSettings(); 2225 writeSettings();
2222 } 2226 }
2223 } else { 2227 } else {
2224 removeCategories(); 2228 removeCategories();
2225 updateView(); 2229 updateView();
2226 } 2230 }
2227 delete cp; 2231 delete cp;
2228} 2232}
2229 2233
2230void CalendarView::beamIncidence(Incidence * Inc) 2234void CalendarView::beamIncidence(Incidence * Inc)
2231{ 2235{
2232 QPtrList<Incidence> delSel ; 2236 QPtrList<Incidence> delSel ;
2233 delSel.append(Inc); 2237 delSel.append(Inc);
2234 beamIncidenceList( delSel ); 2238 beamIncidenceList( delSel );
2235} 2239}
2236void CalendarView::beamCalendar() 2240void CalendarView::beamCalendar()
2237{ 2241{
2238 QPtrList<Incidence> delSel = mCalendar->rawIncidences(); 2242 QPtrList<Incidence> delSel = mCalendar->rawIncidences();
2239 //qDebug("beamCalendar() "); 2243 //qDebug("beamCalendar() ");
2240 beamIncidenceList( delSel ); 2244 beamIncidenceList( delSel );
2241} 2245}
2242void CalendarView::beamFilteredCalendar() 2246void CalendarView::beamFilteredCalendar()
2243{ 2247{
2244 QPtrList<Incidence> delSel = mCalendar->incidences(); 2248 QPtrList<Incidence> delSel = mCalendar->incidences();
2245 //qDebug("beamFilteredCalendar() "); 2249 //qDebug("beamFilteredCalendar() ");
2246 beamIncidenceList( delSel ); 2250 beamIncidenceList( delSel );
2247} 2251}
2248void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) 2252void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
2249{ 2253{
2250 if ( beamDialog->exec () == QDialog::Rejected ) 2254 if ( beamDialog->exec () == QDialog::Rejected )
2251 return; 2255 return;
2252 2256
2253 QString fn = "/tmp/kopibeamfile"; 2257 QString fn = "/tmp/kopibeamfile";
2254 QString mes; 2258 QString mes;
2255 bool createbup = true; 2259 bool createbup = true;
2256 if ( createbup ) { 2260 if ( createbup ) {
2257 QString description = "\n"; 2261 QString description = "\n";
2258 CalendarLocal* cal = new CalendarLocal(); 2262 CalendarLocal* cal = new CalendarLocal();
2259 if ( beamDialog->beamLocal() ) 2263 if ( beamDialog->beamLocal() )
2260 cal->setLocalTime(); 2264 cal->setLocalTime();
2261 else 2265 else
2262 cal->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 2266 cal->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
2263 Incidence *incidence = delSel.first(); 2267 Incidence *incidence = delSel.first();
2264 bool addText = false; 2268 bool addText = false;
2265 if ( delSel.count() < 10 ) 2269 if ( delSel.count() < 10 )
2266 addText = true; 2270 addText = true;
2267 else { 2271 else {
2268 description.sprintf(i18n(" %d items?"),delSel.count() ); 2272 description.sprintf(i18n(" %d items?"),delSel.count() );
2269 } 2273 }
2270 while ( incidence ) { 2274 while ( incidence ) {
2271 Incidence *in = incidence->clone(); 2275 Incidence *in = incidence->clone();
2272 if ( addText ) 2276 if ( addText )
2273 description += in->summary() + "\n"; 2277 description += in->summary() + "\n";
2274 cal->addIncidence( in ); 2278 cal->addIncidence( in );
2275 incidence = delSel.next(); 2279 incidence = delSel.next();
2276 } 2280 }
2277 if ( beamDialog->beamVcal() ) { 2281 if ( beamDialog->beamVcal() ) {
2278 fn += ".vcs"; 2282 fn += ".vcs";
2279 FileStorage storage( cal, fn, new VCalFormat ); 2283 FileStorage storage( cal, fn, new VCalFormat );
2280 storage.save(); 2284 storage.save();
2281 } else { 2285 } else {
2282 fn += ".ics"; 2286 fn += ".ics";
2283 FileStorage storage( cal, fn, new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 2287 FileStorage storage( cal, fn, new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
2284 storage.save(); 2288 storage.save();
2285 } 2289 }
2286 delete cal; 2290 delete cal;
2287 mes = i18n("KO/Pi: Ready for beaming"); 2291 mes = i18n("KO/Pi: Ready for beaming");
2288 setCaption(mes); 2292 setCaption(mes);
2289 2293
2290#ifndef DESKTOP_VERSION 2294#ifndef DESKTOP_VERSION
2291 Ir *ir = new Ir( this ); 2295 Ir *ir = new Ir( this );
2292 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 2296 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
2293 ir->send( fn, description, "text/x-vCalendar" ); 2297 ir->send( fn, description, "text/x-vCalendar" );
2294#endif 2298#endif
2295 } 2299 }
2296} 2300}
2297void CalendarView::beamDone( Ir *ir ) 2301void CalendarView::beamDone( Ir *ir )
2298{ 2302{
2299#ifndef DESKTOP_VERSION 2303#ifndef DESKTOP_VERSION
2300 delete ir; 2304 delete ir;
2301#endif 2305#endif
2302} 2306}
2303 2307
2304void CalendarView::moveIncidence(Incidence * inc ) 2308void CalendarView::moveIncidence(Incidence * inc )
2305{ 2309{
2306 if ( !inc ) return; 2310 if ( !inc ) return;
2307 // qDebug("showDatePickerForIncidence( ) "); 2311 // qDebug("showDatePickerForIncidence( ) ");
2308 if ( mDateFrame->isVisible() ) 2312 if ( mDateFrame->isVisible() )
2309 mDateFrame->hide(); 2313 mDateFrame->hide();
2310 else { 2314 else {
2311 int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ; 2315 int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ;
2312 int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ; 2316 int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ;
2313 int dw = QApplication::desktop()->width(); 2317 int dw = QApplication::desktop()->width();
2314 int dh = QApplication::desktop()->height(); 2318 int dh = QApplication::desktop()->height();
2315 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2319 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2316 mDateFrame->show(); 2320 mDateFrame->show();
2317 } 2321 }
2318 mDatePickerMode = 2; 2322 mDatePickerMode = 2;
2319 mMoveIncidence = inc ; 2323 mMoveIncidence = inc ;
2320 QDate da; 2324 QDate da;
2321 if ( mMoveIncidence->type() == "Todo" ) { 2325 if ( mMoveIncidence->type() == "Todo" ) {
2322 Todo * to = (Todo *) mMoveIncidence; 2326 Todo * to = (Todo *) mMoveIncidence;
2323 if ( to->hasDueDate() ) 2327 if ( to->hasDueDate() )
2324 da = to->dtDue().date(); 2328 da = to->dtDue().date();
2325 else 2329 else
2326 da = QDate::currentDate(); 2330 da = QDate::currentDate();
2327 } else { 2331 } else {
2328 da = mMoveIncidence->dtStart().date(); 2332 da = mMoveIncidence->dtStart().date();
2329 } 2333 }
2330 mDatePicker->setDate( da ); 2334 mDatePicker->setDate( da );
2331} 2335}
2332void CalendarView::showDatePicker( ) 2336void CalendarView::showDatePicker( )
2333{ 2337{
2334 //qDebug("CalendarView::showDatePicker( ) "); 2338 //qDebug("CalendarView::showDatePicker( ) ");
2335 if ( mDateFrame->isVisible() ) 2339 if ( mDateFrame->isVisible() )
2336 mDateFrame->hide(); 2340 mDateFrame->hide();
2337 else { 2341 else {
2338 int w =mDatePicker->sizeHint().width() ; 2342 int w =mDatePicker->sizeHint().width() ;
2339 int h = mDatePicker->sizeHint().height() ; 2343 int h = mDatePicker->sizeHint().height() ;
2340 int dw = QApplication::desktop()->width(); 2344 int dw = QApplication::desktop()->width();
2341 int dh = QApplication::desktop()->height(); 2345 int dh = QApplication::desktop()->height();
2342 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2346 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2343 mDateFrame->show(); 2347 mDateFrame->show();
2344 } 2348 }
2345 mDatePickerMode = 1; 2349 mDatePickerMode = 1;
2346 mDatePicker->setDate( mNavigator->selectedDates().first() ); 2350 mDatePicker->setDate( mNavigator->selectedDates().first() );
2347} 2351}
2348 2352
2349void CalendarView::showEventEditor() 2353void CalendarView::showEventEditor()
2350{ 2354{
2351#ifdef DESKTOP_VERSION 2355#ifdef DESKTOP_VERSION
2352 mEventEditor->show(); 2356 mEventEditor->show();
2353#else 2357#else
2354 mEventEditor->showMaximized(); 2358 mEventEditor->showMaximized();
2355#endif 2359#endif
2356} 2360}
2357void CalendarView::showTodoEditor() 2361void CalendarView::showTodoEditor()
2358{ 2362{
2359#ifdef DESKTOP_VERSION 2363#ifdef DESKTOP_VERSION
2360 mTodoEditor->show(); 2364 mTodoEditor->show();
2361#else 2365#else
2362 mTodoEditor->showMaximized(); 2366 mTodoEditor->showMaximized();
2363#endif 2367#endif
2364} 2368}
2365void CalendarView::cancelIncidence(Incidence * inc ) 2369void CalendarView::cancelIncidence(Incidence * inc )
2366{ 2370{
2367 inc->setCancelled( ! inc->cancelled() ); 2371 inc->setCancelled( ! inc->cancelled() );
2368 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 2372 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
2369 updateView(); 2373 updateView();
2370} 2374}
2371void CalendarView::cloneIncidence(Incidence * orgInc ) 2375void CalendarView::cloneIncidence(Incidence * orgInc )
2372{ 2376{
2373 Incidence * newInc = orgInc->clone(); 2377 Incidence * newInc = orgInc->clone();
2374 newInc->recreate(); 2378 newInc->recreate();
2375 2379
2376 if ( newInc->type() == "Todo" ) { 2380 if ( newInc->type() == "Todo" ) {
2377 Todo* t = (Todo*) newInc; 2381 Todo* t = (Todo*) newInc;
2378 mTodoEditor->editTodo( t ); 2382 mTodoEditor->editTodo( t );
2379 showTodoEditor(); 2383 showTodoEditor();
2380 if ( mTodoEditor->exec() ) { 2384 if ( mTodoEditor->exec() ) {
2381 mCalendar->addTodo( t ); 2385 mCalendar->addTodo( t );
2382 updateView(); 2386 updateView();
2383 } else { 2387 } else {
2384 delete t; 2388 delete t;
2385 } 2389 }
2386 } 2390 }
2387 else { 2391 else {
2388 Event* e = (Event*) newInc; 2392 Event* e = (Event*) newInc;
2389 mEventEditor->editEvent( e ); 2393 mEventEditor->editEvent( e );
2390 showEventEditor(); 2394 showEventEditor();
2391 if ( mEventEditor->exec() ) { 2395 if ( mEventEditor->exec() ) {
2392 mCalendar->addEvent( e ); 2396 mCalendar->addEvent( e );
2393 updateView(); 2397 updateView();
2394 } else { 2398 } else {
2395 delete e; 2399 delete e;
2396 } 2400 }
2397 } 2401 }
2398} 2402}
2399 2403
2400void CalendarView::newEvent() 2404void CalendarView::newEvent()
2401{ 2405{
2402 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 2406 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
2403 KOAgendaView *aView = mViewManager->agendaView(); 2407 KOAgendaView *aView = mViewManager->agendaView();
2404 if (aView) { 2408 if (aView) {
2405 if (aView->selectionStart().isValid()) { 2409 if (aView->selectionStart().isValid()) {
2406 if (aView->selectedIsAllDay()) { 2410 if (aView->selectedIsAllDay()) {
2407 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 2411 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
2408 } else { 2412 } else {
2409 newEvent(aView->selectionStart(),aView->selectionEnd()); 2413 newEvent(aView->selectionStart(),aView->selectionEnd());
2410 } 2414 }
2411 return; 2415 return;
2412 } 2416 }
2413 } 2417 }
2414 2418
2415 QDate date = mNavigator->selectedDates().first(); 2419 QDate date = mNavigator->selectedDates().first();
2416 QDateTime current = QDateTime::currentDateTime(); 2420 QDateTime current = QDateTime::currentDateTime();
2417 if ( date <= current.date() ) { 2421 if ( date <= current.date() ) {
2418 int hour = current.time().hour() +1; 2422 int hour = current.time().hour() +1;
2419 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 2423 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
2420 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2424 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2421 } else 2425 } else
2422 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 2426 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
2423 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 2427 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
2424 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2428 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2425} 2429}
2426 2430
2427void CalendarView::newEvent(QDateTime fh) 2431void CalendarView::newEvent(QDateTime fh)
2428{ 2432{
2429 newEvent(fh, 2433 newEvent(fh,
2430 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 2434 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
2431} 2435}
2432 2436
2433void CalendarView::newEvent(QDate dt) 2437void CalendarView::newEvent(QDate dt)
2434{ 2438{
2435 newEvent(QDateTime(dt, QTime(0,0,0)), 2439 newEvent(QDateTime(dt, QTime(0,0,0)),
2436 QDateTime(dt, QTime(0,0,0)), true); 2440 QDateTime(dt, QTime(0,0,0)), true);
2437} 2441}
2438 2442
2439void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 2443void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
2440{ 2444{
2441 2445
2442 mEventEditor->newEvent(fromHint,toHint,allDay); 2446 mEventEditor->newEvent(fromHint,toHint,allDay);
2443 if ( mFilterView->filtersEnabled() ) { 2447 if ( mFilterView->filtersEnabled() ) {
2444 CalFilter *filter = mFilterView->selectedFilter(); 2448 CalFilter *filter = mFilterView->selectedFilter();
2445 if (filter && filter->showCategories()) { 2449 if (filter && filter->showCategories()) {
2446 mEventEditor->setCategories(filter->categoryList().join(",") ); 2450 mEventEditor->setCategories(filter->categoryList().join(",") );
2447 } 2451 }
2448 if ( filter ) 2452 if ( filter )
2449 mEventEditor->setSecrecy( filter->getSecrecy() ); 2453 mEventEditor->setSecrecy( filter->getSecrecy() );
2450 } 2454 }
2451 showEventEditor(); 2455 showEventEditor();
2452} 2456}
2453void CalendarView::todoAdded(Todo * t) 2457void CalendarView::todoAdded(Todo * t)
2454{ 2458{
2455 2459
2456 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 2460 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
2457 updateTodoViews(); 2461 updateTodoViews();
2458} 2462}
2459void CalendarView::todoChanged(Todo * t) 2463void CalendarView::todoChanged(Todo * t)
2460{ 2464{
2461 emit todoModified( t, 4 ); 2465 emit todoModified( t, 4 );
2462 // updateTodoViews(); 2466 // updateTodoViews();
2463} 2467}
2464void CalendarView::todoToBeDeleted(Todo *) 2468void CalendarView::todoToBeDeleted(Todo *)
2465{ 2469{
2466 //qDebug("todoToBeDeleted(Todo *) "); 2470 //qDebug("todoToBeDeleted(Todo *) ");
2467 updateTodoViews(); 2471 updateTodoViews();
2468} 2472}
2469void CalendarView::todoDeleted() 2473void CalendarView::todoDeleted()
2470{ 2474{
2471 //qDebug(" todoDeleted()"); 2475 //qDebug(" todoDeleted()");
2472 updateTodoViews(); 2476 updateTodoViews();
2473} 2477}
2474 2478
2475 2479
2476 2480
2477void CalendarView::newTodo() 2481void CalendarView::newTodo()
2478{ 2482{
2479 2483
2480 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),0,true); 2484 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),0,true);
2481 if ( mFilterView->filtersEnabled() ) { 2485 if ( mFilterView->filtersEnabled() ) {
2482 CalFilter *filter = mFilterView->selectedFilter(); 2486 CalFilter *filter = mFilterView->selectedFilter();
2483 if (filter && filter->showCategories()) { 2487 if (filter && filter->showCategories()) {
2484 mTodoEditor->setCategories(filter->categoryList().join(",") ); 2488 mTodoEditor->setCategories(filter->categoryList().join(",") );
2485 } 2489 }
2486 if ( filter ) 2490 if ( filter )
2487 mTodoEditor->setSecrecy( filter->getSecrecy() ); 2491 mTodoEditor->setSecrecy( filter->getSecrecy() );
2488 } 2492 }
2489 showTodoEditor(); 2493 showTodoEditor();
2490} 2494}
2491 2495
2492void CalendarView::newSubTodo() 2496void CalendarView::newSubTodo()
2493{ 2497{
2494 Todo *todo = selectedTodo(); 2498 Todo *todo = selectedTodo();
2495 if ( todo ) newSubTodo( todo ); 2499 if ( todo ) newSubTodo( todo );
2496} 2500}
2497 2501
2498void CalendarView::newSubTodo(Todo *parentEvent) 2502void CalendarView::newSubTodo(Todo *parentEvent)
2499{ 2503{
2500 2504
2501 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true); 2505 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true);
2502 showTodoEditor(); 2506 showTodoEditor();
2503} 2507}
2504 2508
2505void CalendarView::newFloatingEvent() 2509void CalendarView::newFloatingEvent()
2506{ 2510{
2507 DateList tmpList = mNavigator->selectedDates(); 2511 DateList tmpList = mNavigator->selectedDates();
2508 QDate date = tmpList.first(); 2512 QDate date = tmpList.first();
2509 2513
2510 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 2514 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
2511 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 2515 QDateTime( date, QTime( 12, 0, 0 ) ), true );
2512} 2516}
2513 2517
2514 2518
2515void CalendarView::editEvent( Event *event ) 2519void CalendarView::editEvent( Event *event )
2516{ 2520{
2517 2521
2518 if ( !event ) return; 2522 if ( !event ) return;
2519 if ( event->isReadOnly() ) { 2523 if ( event->isReadOnly() ) {
2520 showEvent( event ); 2524 showEvent( event );
2521 return; 2525 return;
2522 } 2526 }
2523 mEventEditor->editEvent( event , mFlagEditDescription); 2527 mEventEditor->editEvent( event , mFlagEditDescription);
2524 showEventEditor(); 2528 showEventEditor();
2525} 2529}
2526void CalendarView::editJournal( Journal *jour ) 2530void CalendarView::editJournal( Journal *jour )
2527{ 2531{
2528 if ( !jour ) return; 2532 if ( !jour ) return;
2529 mDialogManager->hideSearchDialog(); 2533 mDialogManager->hideSearchDialog();
2530 mViewManager->showJournalView(); 2534 mViewManager->showJournalView();
2531 mNavigator->slotDaySelect( jour->dtStart().date() ); 2535 mNavigator->slotDaySelect( jour->dtStart().date() );
2532} 2536}
2533void CalendarView::editTodo( Todo *todo ) 2537void CalendarView::editTodo( Todo *todo )
2534{ 2538{
2535 if ( !todo ) return; 2539 if ( !todo ) return;
2536 2540
2537 if ( todo->isReadOnly() ) { 2541 if ( todo->isReadOnly() ) {
2538 showTodo( todo ); 2542 showTodo( todo );
2539 return; 2543 return;
2540 } 2544 }
2541 mTodoEditor->editTodo( todo ,mFlagEditDescription); 2545 mTodoEditor->editTodo( todo ,mFlagEditDescription);
2542 showTodoEditor(); 2546 showTodoEditor();
2543 2547
2544} 2548}
2545 2549
2546KOEventViewerDialog* CalendarView::getEventViewerDialog() 2550KOEventViewerDialog* CalendarView::getEventViewerDialog()
2547{ 2551{
2548 if ( !mEventViewerDialog ) { 2552 if ( !mEventViewerDialog ) {
2549 mEventViewerDialog = new KOEventViewerDialog(this); 2553 mEventViewerDialog = new KOEventViewerDialog(this);
2550 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 2554 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
2551 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 2555 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
2552 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 2556 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
2553 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 2557 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
2554 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 2558 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
2555 viewManager(), SLOT( showAgendaView( bool ) ) ); 2559 viewManager(), SLOT( showAgendaView( bool ) ) );
2556 mEventViewerDialog->resize( 640, 480 ); 2560 mEventViewerDialog->resize( 640, 480 );
2557 2561
2558 } 2562 }
2559 return mEventViewerDialog; 2563 return mEventViewerDialog;
2560} 2564}
2561void CalendarView::showEvent(Event *event) 2565void CalendarView::showEvent(Event *event)
2562{ 2566{
2563 getEventViewerDialog()->setEvent(event); 2567 getEventViewerDialog()->setEvent(event);
2564 getEventViewerDialog()->showMe(); 2568 getEventViewerDialog()->showMe();
2565} 2569}
2566 2570
2567void CalendarView::showTodo(Todo *event) 2571void CalendarView::showTodo(Todo *event)
2568{ 2572{
2569 getEventViewerDialog()->setTodo(event); 2573 getEventViewerDialog()->setTodo(event);
2570 getEventViewerDialog()->showMe(); 2574 getEventViewerDialog()->showMe();
2571} 2575}
2572void CalendarView::showJournal( Journal *jour ) 2576void CalendarView::showJournal( Journal *jour )
2573{ 2577{
2574 getEventViewerDialog()->setJournal(jour); 2578 getEventViewerDialog()->setJournal(jour);
2575 getEventViewerDialog()->showMe(); 2579 getEventViewerDialog()->showMe();
2576 2580
2577} 2581}
2578// void CalendarView::todoModified (Todo *event, int changed) 2582// void CalendarView::todoModified (Todo *event, int changed)
2579// { 2583// {
2580// // if (mDialogList.find (event) != mDialogList.end ()) { 2584// // if (mDialogList.find (event) != mDialogList.end ()) {
2581// // kdDebug() << "Todo modified and open" << endl; 2585// // kdDebug() << "Todo modified and open" << endl;
2582// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; 2586// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event];
2583// // temp->modified (changed); 2587// // temp->modified (changed);
2584 2588
2585// // } 2589// // }
2586 2590
2587// mViewManager->updateView(); 2591// mViewManager->updateView();
2588// } 2592// }
2589 2593
2590void CalendarView::appointment_show() 2594void CalendarView::appointment_show()
2591{ 2595{
2592 Event *anEvent = 0; 2596 Event *anEvent = 0;
2593 2597
2594 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2598 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2595 2599
2596 if (mViewManager->currentView()->isEventView()) { 2600 if (mViewManager->currentView()->isEventView()) {
2597 if ( incidence && incidence->type() == "Event" ) { 2601 if ( incidence && incidence->type() == "Event" ) {
2598 anEvent = static_cast<Event *>(incidence); 2602 anEvent = static_cast<Event *>(incidence);
2599 } 2603 }
2600 } 2604 }
2601 2605
2602 if (!anEvent) { 2606 if (!anEvent) {
2603 KNotifyClient::beep(); 2607 KNotifyClient::beep();
2604 return; 2608 return;
2605 } 2609 }
2606 2610
2607 showEvent(anEvent); 2611 showEvent(anEvent);
2608} 2612}
2609 2613
2610void CalendarView::appointment_edit() 2614void CalendarView::appointment_edit()
2611{ 2615{
2612 Event *anEvent = 0; 2616 Event *anEvent = 0;
2613 2617
2614 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2618 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2615 2619
2616 if (mViewManager->currentView()->isEventView()) { 2620 if (mViewManager->currentView()->isEventView()) {
2617 if ( incidence && incidence->type() == "Event" ) { 2621 if ( incidence && incidence->type() == "Event" ) {
2618 anEvent = static_cast<Event *>(incidence); 2622 anEvent = static_cast<Event *>(incidence);
2619 } 2623 }
2620 } 2624 }
2621 2625
2622 if (!anEvent) { 2626 if (!anEvent) {
2623 KNotifyClient::beep(); 2627 KNotifyClient::beep();
2624 return; 2628 return;
2625 } 2629 }
2626 2630
2627 editEvent(anEvent); 2631 editEvent(anEvent);
2628} 2632}
2629 2633
2630void CalendarView::appointment_delete() 2634void CalendarView::appointment_delete()
2631{ 2635{
2632 Event *anEvent = 0; 2636 Event *anEvent = 0;
2633 2637
2634 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2638 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2635 2639
2636 if (mViewManager->currentView()->isEventView()) { 2640 if (mViewManager->currentView()->isEventView()) {
2637 if ( incidence && incidence->type() == "Event" ) { 2641 if ( incidence && incidence->type() == "Event" ) {
2638 anEvent = static_cast<Event *>(incidence); 2642 anEvent = static_cast<Event *>(incidence);
2639 } 2643 }
2640 } 2644 }
2641 2645
2642 if (!anEvent) { 2646 if (!anEvent) {
2643 KNotifyClient::beep(); 2647 KNotifyClient::beep();
2644 return; 2648 return;
2645 } 2649 }
2646 2650
2647 deleteEvent(anEvent); 2651 deleteEvent(anEvent);
2648} 2652}
2649 2653
2650void CalendarView::todo_unsub(Todo *anTodo ) 2654void CalendarView::todo_unsub(Todo *anTodo )
2651{ 2655{
2652 // Todo *anTodo = selectedTodo(); 2656 // Todo *anTodo = selectedTodo();
2653 if (!anTodo) return; 2657 if (!anTodo) return;
2654 if (!anTodo->relatedTo()) return; 2658 if (!anTodo->relatedTo()) return;
2655 anTodo->relatedTo()->removeRelation(anTodo); 2659 anTodo->relatedTo()->removeRelation(anTodo);
2656 anTodo->setRelatedTo(0); 2660 anTodo->setRelatedTo(0);
2657 anTodo->updated(); 2661 anTodo->updated();
2658 anTodo->setRelatedToUid(""); 2662 anTodo->setRelatedToUid("");
2659 setModified(true); 2663 setModified(true);
2660 updateView(); 2664 updateView();
2661} 2665}
2662 2666
2663void CalendarView::deleteTodo(Todo *todo) 2667void CalendarView::deleteTodo(Todo *todo)
2664{ 2668{
2665 if (!todo) { 2669 if (!todo) {
2666 KNotifyClient::beep(); 2670 KNotifyClient::beep();
2667 return; 2671 return;
2668 } 2672 }
2669 if (KOPrefs::instance()->mConfirm) { 2673 if (KOPrefs::instance()->mConfirm) {
2670 switch (msgItemDelete()) { 2674 switch (msgItemDelete()) {
2671 case KMessageBox::Continue: // OK 2675 case KMessageBox::Continue: // OK
2672 if (!todo->relations().isEmpty()) { 2676 if (!todo->relations().isEmpty()) {
2673 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."), 2677 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."),
2674 i18n("Delete To-Do")); 2678 i18n("Delete To-Do"));
2675 } else { 2679 } else {
2676 checkExternalId( todo ); 2680 checkExternalId( todo );
2677 calendar()->deleteTodo(todo); 2681 calendar()->deleteTodo(todo);
2678 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 2682 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2679 updateView(); 2683 updateView();
2680 } 2684 }
2681 break; 2685 break;
2682 } // switch 2686 } // switch
2683 } else { 2687 } else {
2684 if (!todo->relations().isEmpty()) { 2688 if (!todo->relations().isEmpty()) {
2685 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."), 2689 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."),
2686 i18n("Delete To-Do")); 2690 i18n("Delete To-Do"));
2687 } else { 2691 } else {
2688 checkExternalId( todo ); 2692 checkExternalId( todo );
2689 mCalendar->deleteTodo(todo); 2693 mCalendar->deleteTodo(todo);
2690 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 2694 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2691 updateView(); 2695 updateView();
2692 } 2696 }
2693 } 2697 }
2694 emit updateSearchDialog(); 2698 emit updateSearchDialog();
2695} 2699}
2696void CalendarView::deleteJournal(Journal *jour) 2700void CalendarView::deleteJournal(Journal *jour)
2697{ 2701{
2698 if (!jour) { 2702 if (!jour) {
2699 KNotifyClient::beep(); 2703 KNotifyClient::beep();
2700 return; 2704 return;
2701 } 2705 }
2702 if (KOPrefs::instance()->mConfirm) { 2706 if (KOPrefs::instance()->mConfirm) {
2703 switch (msgItemDelete()) { 2707 switch (msgItemDelete()) {
2704 case KMessageBox::Continue: // OK 2708 case KMessageBox::Continue: // OK
2705 calendar()->deleteJournal(jour); 2709 calendar()->deleteJournal(jour);
2706 updateView(); 2710 updateView();
2707 break; 2711 break;
2708 } // switch 2712 } // switch
2709 } else { 2713 } else {
2710 calendar()->deleteJournal(jour);; 2714 calendar()->deleteJournal(jour);;
2711 updateView(); 2715 updateView();
2712 } 2716 }
2713 emit updateSearchDialog(); 2717 emit updateSearchDialog();
2714} 2718}
2715 2719
2716void CalendarView::deleteEvent(Event *anEvent) 2720void CalendarView::deleteEvent(Event *anEvent)
2717{ 2721{
2718 if (!anEvent) { 2722 if (!anEvent) {
2719 KNotifyClient::beep(); 2723 KNotifyClient::beep();
2720 return; 2724 return;
2721 } 2725 }
2722 2726
2723 if (anEvent->recurrence()->doesRecur()) { 2727 if (anEvent->recurrence()->doesRecur()) {
2724 QDate itemDate = mViewManager->currentSelectionDate(); 2728 QDate itemDate = mViewManager->currentSelectionDate();
2725 int km; 2729 int km;
2726 if (!itemDate.isValid()) { 2730 if (!itemDate.isValid()) {
2727 //kdDebug() << "Date Not Valid" << endl; 2731 //kdDebug() << "Date Not Valid" << endl;
2728 if (KOPrefs::instance()->mConfirm) { 2732 if (KOPrefs::instance()->mConfirm) {
2729 km = KMessageBox::warningContinueCancel(this,anEvent->summary() + 2733 km = KMessageBox::warningContinueCancel(this,anEvent->summary() +
2730 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), 2734 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
2731 i18n("KO/Pi Confirmation"),i18n("Delete All")); 2735 i18n("KO/Pi Confirmation"),i18n("Delete All"));
2732 if ( km == KMessageBox::Continue ) 2736 if ( km == KMessageBox::Continue )
2733 km = KMessageBox::No; // No = all below 2737 km = KMessageBox::No; // No = all below
2734 } else 2738 } else
2735 km = KMessageBox::No; 2739 km = KMessageBox::No;
2736 } else { 2740 } else {
2737 km = KMessageBox::warningYesNoCancel(this,anEvent->summary() + 2741 km = KMessageBox::warningYesNoCancel(this,anEvent->summary() +
2738 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ 2742 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
2739 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), 2743 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
2740 i18n("KO/Pi Confirmation"),i18n("Current"), 2744 i18n("KO/Pi Confirmation"),i18n("Current"),
2741 i18n("All")); 2745 i18n("All"));
2742 } 2746 }
2743 switch(km) { 2747 switch(km) {
2744 2748
2745 case KMessageBox::No: // Continue // all 2749 case KMessageBox::No: // Continue // all
2746 //qDebug("KMessageBox::No "); 2750 //qDebug("KMessageBox::No ");
2747 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2751 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2748 schedule(Scheduler::Cancel,anEvent); 2752 schedule(Scheduler::Cancel,anEvent);
2749 2753
2750 checkExternalId( anEvent); 2754 checkExternalId( anEvent);
2751 mCalendar->deleteEvent(anEvent); 2755 mCalendar->deleteEvent(anEvent);
2752 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); 2756 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED);
2753 break; 2757 break;
2754 2758
2755 // Disabled because it does not work 2759 // Disabled because it does not work
2756 //#if 0 2760 //#if 0
2757 case KMessageBox::Yes: // just this one 2761 case KMessageBox::Yes: // just this one
2758 //QDate qd = mNavigator->selectedDates().first(); 2762 //QDate qd = mNavigator->selectedDates().first();
2759 //if (!qd.isValid()) { 2763 //if (!qd.isValid()) {
2760 // kdDebug() << "no date selected, or invalid date" << endl; 2764 // kdDebug() << "no date selected, or invalid date" << endl;
2761 // KNotifyClient::beep(); 2765 // KNotifyClient::beep();
2762 // return; 2766 // return;
2763 //} 2767 //}
2764 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); 2768 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1);
2765 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { 2769 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) {
2766 anEvent->addExDate(itemDate); 2770 anEvent->addExDate(itemDate);
2767 int duration = anEvent->recurrence()->duration(); 2771 int duration = anEvent->recurrence()->duration();
2768 if ( duration > 0 ) { 2772 if ( duration > 0 ) {
2769 anEvent->recurrence()->setDuration( duration - 1 ); 2773 anEvent->recurrence()->setDuration( duration - 1 );
2770 } 2774 }
2771 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); 2775 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED);
2772 } 2776 }
2773 break; 2777 break;
2774 //#endif 2778 //#endif
2775 } // switch 2779 } // switch
2776 } else { 2780 } else {
2777 if (KOPrefs::instance()->mConfirm) { 2781 if (KOPrefs::instance()->mConfirm) {
2778 switch (KMessageBox::warningContinueCancel(this,anEvent->summary() + 2782 switch (KMessageBox::warningContinueCancel(this,anEvent->summary() +
2779 i18n("\nAre you sure you want\nto delete this event?"), 2783 i18n("\nAre you sure you want\nto delete this event?"),
2780 i18n("KO/Pi Confirmation"),i18n("Delete"))) { 2784 i18n("KO/Pi Confirmation"),i18n("Delete"))) {
2781 case KMessageBox::Continue: // OK 2785 case KMessageBox::Continue: // OK
2782 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2786 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2783 schedule(Scheduler::Cancel,anEvent); 2787 schedule(Scheduler::Cancel,anEvent);
2784 checkExternalId( anEvent); 2788 checkExternalId( anEvent);
2785 mCalendar->deleteEvent(anEvent); 2789 mCalendar->deleteEvent(anEvent);
2786 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2790 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2787 break; 2791 break;
2788 } // switch 2792 } // switch
2789 } else { 2793 } else {
2790 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2794 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2791 schedule(Scheduler::Cancel,anEvent); 2795 schedule(Scheduler::Cancel,anEvent);
2792 checkExternalId( anEvent); 2796 checkExternalId( anEvent);
2793 mCalendar->deleteEvent(anEvent); 2797 mCalendar->deleteEvent(anEvent);
2794 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2798 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2795 } 2799 }
2796 } // if-else 2800 } // if-else
2797 emit updateSearchDialog(); 2801 emit updateSearchDialog();
2798} 2802}
2799 2803
2800bool CalendarView::deleteEvent(const QString &uid) 2804bool CalendarView::deleteEvent(const QString &uid)
2801{ 2805{
2802 Event *ev = mCalendar->event(uid); 2806 Event *ev = mCalendar->event(uid);
2803 if (ev) { 2807 if (ev) {
2804 deleteEvent(ev); 2808 deleteEvent(ev);
2805 return true; 2809 return true;
2806 } else { 2810 } else {
2807 return false; 2811 return false;
2808 } 2812 }
2809} 2813}
2810 2814
2811/*****************************************************************************/ 2815/*****************************************************************************/
2812 2816
2813void CalendarView::action_mail() 2817void CalendarView::action_mail()
2814{ 2818{
2815#ifndef KORG_NOMAIL 2819#ifndef KORG_NOMAIL
2816 KOMailClient mailClient; 2820 KOMailClient mailClient;
2817 2821
2818 Incidence *incidence = currentSelection(); 2822 Incidence *incidence = currentSelection();
2819 2823
2820 if (!incidence) { 2824 if (!incidence) {
2821 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 2825 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
2822 return; 2826 return;
2823 } 2827 }
2824 if(incidence->attendeeCount() == 0 ) { 2828 if(incidence->attendeeCount() == 0 ) {
2825 KMessageBox::sorry(this, 2829 KMessageBox::sorry(this,
2826 i18n("Can't generate mail:\nNo attendees defined.\n")); 2830 i18n("Can't generate mail:\nNo attendees defined.\n"));
2827 return; 2831 return;
2828 } 2832 }
2829 2833
2830 CalendarLocal cal_tmp; 2834 CalendarLocal cal_tmp;
2831 Event *event = 0; 2835 Event *event = 0;
2832 Event *ev = 0; 2836 Event *ev = 0;
2833 if ( incidence && incidence->type() == "Event" ) { 2837 if ( incidence && incidence->type() == "Event" ) {
2834 event = static_cast<Event *>(incidence); 2838 event = static_cast<Event *>(incidence);
2835 ev = new Event(*event); 2839 ev = new Event(*event);
2836 cal_tmp.addEvent(ev); 2840 cal_tmp.addEvent(ev);
2837 } 2841 }
2838 ICalFormat mForm( KOPrefs::instance()->mUseQuicksave); 2842 ICalFormat mForm( KOPrefs::instance()->mUseQuicksave);
2839 QString attachment = mForm.toString( &cal_tmp ); 2843 QString attachment = mForm.toString( &cal_tmp );
2840 if (ev) delete(ev); 2844 if (ev) delete(ev);
2841 2845
2842 mailClient.mailAttendees(currentSelection(), attachment); 2846 mailClient.mailAttendees(currentSelection(), attachment);
2843 2847
2844#endif 2848#endif
2845 2849
2846#if 0 2850#if 0
2847 Event *anEvent = 0; 2851 Event *anEvent = 0;
2848 if (mViewManager->currentView()->isEventView()) { 2852 if (mViewManager->currentView()->isEventView()) {
2849 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first()); 2853 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first());
2850 } 2854 }
2851 2855
2852 if (!anEvent) { 2856 if (!anEvent) {
2853 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 2857 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
2854 return; 2858 return;
2855 } 2859 }
2856 if(anEvent->attendeeCount() == 0 ) { 2860 if(anEvent->attendeeCount() == 0 ) {
2857 KMessageBox::sorry(this, 2861 KMessageBox::sorry(this,
2858 i18n("Can't generate mail:\nNo attendees defined.\n")); 2862 i18n("Can't generate mail:\nNo attendees defined.\n"));
2859 return; 2863 return;
2860 } 2864 }
2861 2865
2862 mailobject.emailEvent(anEvent); 2866 mailobject.emailEvent(anEvent);
2863#endif 2867#endif
2864} 2868}
2865 2869
2866 2870
2867void CalendarView::schedule_publish(Incidence *incidence) 2871void CalendarView::schedule_publish(Incidence *incidence)
2868{ 2872{
2869 Event *event = 0; 2873 Event *event = 0;
2870 Todo *todo = 0; 2874 Todo *todo = 0;
2871 2875
2872 if (incidence == 0) { 2876 if (incidence == 0) {
2873 incidence = mViewManager->currentView()->selectedIncidences().first(); 2877 incidence = mViewManager->currentView()->selectedIncidences().first();
2874 if (incidence == 0) { 2878 if (incidence == 0) {
2875 incidence = mTodoList->selectedIncidences().first(); 2879 incidence = mTodoList->selectedIncidences().first();
2876 } 2880 }
2877 } 2881 }
2878 if ( incidence && incidence->type() == "Event" ) { 2882 if ( incidence && incidence->type() == "Event" ) {
2879 event = static_cast<Event *>(incidence); 2883 event = static_cast<Event *>(incidence);
2880 } else { 2884 } else {
2881 if ( incidence && incidence->type() == "Todo" ) { 2885 if ( incidence && incidence->type() == "Todo" ) {
2882 todo = static_cast<Todo *>(incidence); 2886 todo = static_cast<Todo *>(incidence);
2883 } 2887 }
2884 } 2888 }
2885 2889
2886 if (!event && !todo) { 2890 if (!event && !todo) {
2887 KMessageBox::sorry(this,i18n("No event selected.")); 2891 KMessageBox::sorry(this,i18n("No event selected."));
2888 return; 2892 return;
2889 } 2893 }
2890 2894
2891 PublishDialog *publishdlg = new PublishDialog(); 2895 PublishDialog *publishdlg = new PublishDialog();
2892 if (incidence->attendeeCount()>0) { 2896 if (incidence->attendeeCount()>0) {
2893 QPtrList<Attendee> attendees = incidence->attendees(); 2897 QPtrList<Attendee> attendees = incidence->attendees();
2894 attendees.first(); 2898 attendees.first();
2895 while ( attendees.current()!=0 ) { 2899 while ( attendees.current()!=0 ) {
2896 publishdlg->addAttendee(attendees.current()); 2900 publishdlg->addAttendee(attendees.current());
2897 attendees.next(); 2901 attendees.next();
2898 } 2902 }
2899 } 2903 }
2900 bool send = true; 2904 bool send = true;
2901 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) { 2905 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) {
2902 if ( publishdlg->exec() != QDialog::Accepted ) 2906 if ( publishdlg->exec() != QDialog::Accepted )
2903 send = false; 2907 send = false;
2904 } 2908 }
2905 if ( send ) { 2909 if ( send ) {
2906 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 2910 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
2907 if ( event ) { 2911 if ( event ) {
2908 Event *ev = new Event(*event); 2912 Event *ev = new Event(*event);
2909 ev->registerObserver(0); 2913 ev->registerObserver(0);
2910 ev->clearAttendees(); 2914 ev->clearAttendees();
2911 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 2915 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
2912 delete(ev); 2916 delete(ev);
2913 } 2917 }
2914 } else { 2918 } else {
2915 if ( todo ) { 2919 if ( todo ) {
2916 Todo *ev = new Todo(*todo); 2920 Todo *ev = new Todo(*todo);
2917 ev->registerObserver(0); 2921 ev->registerObserver(0);
2918 ev->clearAttendees(); 2922 ev->clearAttendees();
2919 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 2923 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
2920 delete(ev); 2924 delete(ev);
2921 } 2925 }
2922 } 2926 }
2923 } 2927 }
2924 } 2928 }
2925 delete publishdlg; 2929 delete publishdlg;
2926} 2930}
2927 2931
2928void CalendarView::schedule_request(Incidence *incidence) 2932void CalendarView::schedule_request(Incidence *incidence)
2929{ 2933{
2930 schedule(Scheduler::Request,incidence); 2934 schedule(Scheduler::Request,incidence);
2931} 2935}
2932 2936
2933void CalendarView::schedule_refresh(Incidence *incidence) 2937void CalendarView::schedule_refresh(Incidence *incidence)
2934{ 2938{
2935 schedule(Scheduler::Refresh,incidence); 2939 schedule(Scheduler::Refresh,incidence);
2936} 2940}
2937 2941
2938void CalendarView::schedule_cancel(Incidence *incidence) 2942void CalendarView::schedule_cancel(Incidence *incidence)
2939{ 2943{
2940 schedule(Scheduler::Cancel,incidence); 2944 schedule(Scheduler::Cancel,incidence);
2941} 2945}
2942 2946
2943void CalendarView::schedule_add(Incidence *incidence) 2947void CalendarView::schedule_add(Incidence *incidence)
2944{ 2948{
2945 schedule(Scheduler::Add,incidence); 2949 schedule(Scheduler::Add,incidence);
2946} 2950}
2947 2951
2948void CalendarView::schedule_reply(Incidence *incidence) 2952void CalendarView::schedule_reply(Incidence *incidence)
2949{ 2953{
2950 schedule(Scheduler::Reply,incidence); 2954 schedule(Scheduler::Reply,incidence);
2951} 2955}
2952 2956
2953void CalendarView::schedule_counter(Incidence *incidence) 2957void CalendarView::schedule_counter(Incidence *incidence)
2954{ 2958{
2955 schedule(Scheduler::Counter,incidence); 2959 schedule(Scheduler::Counter,incidence);
2956} 2960}
2957 2961
2958void CalendarView::schedule_declinecounter(Incidence *incidence) 2962void CalendarView::schedule_declinecounter(Incidence *incidence)
2959{ 2963{
2960 schedule(Scheduler::Declinecounter,incidence); 2964 schedule(Scheduler::Declinecounter,incidence);
2961} 2965}
2962 2966
2963void CalendarView::schedule_publish_freebusy(int daysToPublish) 2967void CalendarView::schedule_publish_freebusy(int daysToPublish)
2964{ 2968{
2965 QDateTime start = QDateTime::currentDateTime(); 2969 QDateTime start = QDateTime::currentDateTime();
2966 QDateTime end = start.addDays(daysToPublish); 2970 QDateTime end = start.addDays(daysToPublish);
2967 2971
2968 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); 2972 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end);
2969 freebusy->setOrganizer(KOPrefs::instance()->email()); 2973 freebusy->setOrganizer(KOPrefs::instance()->email());
2970 2974
2971 2975
2972 PublishDialog *publishdlg = new PublishDialog(); 2976 PublishDialog *publishdlg = new PublishDialog();
2973 if ( publishdlg->exec() == QDialog::Accepted ) { 2977 if ( publishdlg->exec() == QDialog::Accepted ) {
2974 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 2978 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
2975 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) { 2979 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) {
2976 delete(freebusy); 2980 delete(freebusy);
2977 } 2981 }
2978 } 2982 }
2979 delete publishdlg; 2983 delete publishdlg;
2980} 2984}
2981 2985
2982void CalendarView::schedule(Scheduler::Method method, Incidence *incidence) 2986void CalendarView::schedule(Scheduler::Method method, Incidence *incidence)
2983{ 2987{
2984 Event *event = 0; 2988 Event *event = 0;
2985 Todo *todo = 0; 2989 Todo *todo = 0;
2986 2990
2987 if (incidence == 0) { 2991 if (incidence == 0) {
2988 incidence = mViewManager->currentView()->selectedIncidences().first(); 2992 incidence = mViewManager->currentView()->selectedIncidences().first();
2989 if (incidence == 0) { 2993 if (incidence == 0) {
2990 incidence = mTodoList->selectedIncidences().first(); 2994 incidence = mTodoList->selectedIncidences().first();
2991 } 2995 }
2992 } 2996 }
2993 if ( incidence && incidence->type() == "Event" ) { 2997 if ( incidence && incidence->type() == "Event" ) {
2994 event = static_cast<Event *>(incidence); 2998 event = static_cast<Event *>(incidence);
2995 } 2999 }
2996 if ( incidence && incidence->type() == "Todo" ) { 3000 if ( incidence && incidence->type() == "Todo" ) {
2997 todo = static_cast<Todo *>(incidence); 3001 todo = static_cast<Todo *>(incidence);
2998 } 3002 }
2999 3003
3000 if (!event && !todo) { 3004 if (!event && !todo) {
3001 KMessageBox::sorry(this,i18n("No event selected.")); 3005 KMessageBox::sorry(this,i18n("No event selected."));
3002 return; 3006 return;
3003 } 3007 }
3004 3008
3005 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) { 3009 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) {
3006 KMessageBox::sorry(this,i18n("The event has no attendees.")); 3010 KMessageBox::sorry(this,i18n("The event has no attendees."));
3007 return; 3011 return;
3008 } 3012 }
3009 3013
3010 Event *ev = 0; 3014 Event *ev = 0;
3011 if (event) ev = new Event(*event); 3015 if (event) ev = new Event(*event);
3012 Todo *to = 0; 3016 Todo *to = 0;
3013 if (todo) to = new Todo(*todo); 3017 if (todo) to = new Todo(*todo);
3014 3018
3015 if (method == Scheduler::Reply || method == Scheduler::Refresh) { 3019 if (method == Scheduler::Reply || method == Scheduler::Refresh) {
3016 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 3020 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
3017 if (!me) { 3021 if (!me) {
3018 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails.")); 3022 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails."));
3019 return; 3023 return;
3020 } 3024 }
3021 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) { 3025 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) {
3022 StatusDialog *statdlg = new StatusDialog(this); 3026 StatusDialog *statdlg = new StatusDialog(this);
3023 if (!statdlg->exec()==QDialog::Accepted) return; 3027 if (!statdlg->exec()==QDialog::Accepted) return;
3024 me->setStatus( statdlg->status() ); 3028 me->setStatus( statdlg->status() );
3025 delete(statdlg); 3029 delete(statdlg);
3026 } 3030 }
3027 Attendee *menew = new Attendee(*me); 3031 Attendee *menew = new Attendee(*me);
3028 if (ev) { 3032 if (ev) {
3029 ev->clearAttendees(); 3033 ev->clearAttendees();
3030 ev->addAttendee(menew,false); 3034 ev->addAttendee(menew,false);
3031 } else { 3035 } else {
3032 if (to) { 3036 if (to) {
3033 todo->clearAttendees(); 3037 todo->clearAttendees();
3034 todo->addAttendee(menew,false); 3038 todo->addAttendee(menew,false);
3035 } 3039 }
3036 } 3040 }
3037 } 3041 }
3038 3042
3039 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 3043 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
3040 if (ev) { 3044 if (ev) {
3041 if ( !dlg->addMessage(ev,method) ) delete(ev); 3045 if ( !dlg->addMessage(ev,method) ) delete(ev);
3042 } else { 3046 } else {
3043 if (to) { 3047 if (to) {
3044 if ( !dlg->addMessage(to,method) ) delete(to); 3048 if ( !dlg->addMessage(to,method) ) delete(to);
3045 } 3049 }
3046 } 3050 }
3047} 3051}
3048 3052
3049void CalendarView::openAddressbook() 3053void CalendarView::openAddressbook()
3050{ 3054{
3051 KRun::runCommand("kaddressbook"); 3055 KRun::runCommand("kaddressbook");
3052} 3056}
3053 3057
3054void CalendarView::setModified(bool modified) 3058void CalendarView::setModified(bool modified)
3055{ 3059{
3056 if ( modified ) 3060 if ( modified )
3057 emit signalmodified(); 3061 emit signalmodified();
3058 if (mModified != modified) { 3062 if (mModified != modified) {
3059 mModified = modified; 3063 mModified = modified;
3060 emit modifiedChanged(mModified); 3064 emit modifiedChanged(mModified);
3061 } 3065 }
3062} 3066}
3063 3067
3064bool CalendarView::isReadOnly() 3068bool CalendarView::isReadOnly()
3065{ 3069{
3066 return mReadOnly; 3070 return mReadOnly;
3067} 3071}
3068 3072
3069void CalendarView::setReadOnly(bool readOnly) 3073void CalendarView::setReadOnly(bool readOnly)
3070{ 3074{
3071 if (mReadOnly != readOnly) { 3075 if (mReadOnly != readOnly) {
3072 mReadOnly = readOnly; 3076 mReadOnly = readOnly;
3073 emit readOnlyChanged(mReadOnly); 3077 emit readOnlyChanged(mReadOnly);
3074 } 3078 }
3075} 3079}
3076 3080
3077bool CalendarView::isModified() 3081bool CalendarView::isModified()
3078{ 3082{
3079 return mModified; 3083 return mModified;
3080} 3084}
3081 3085
3082void CalendarView::printSetup() 3086void CalendarView::printSetup()
3083{ 3087{
3084#ifndef KORG_NOPRINTER 3088#ifndef KORG_NOPRINTER
3085 createPrinter(); 3089 createPrinter();
3086 3090
3087 mCalPrinter->setupPrinter(); 3091 mCalPrinter->setupPrinter();
3088#endif 3092#endif
3089} 3093}
3090 3094
3091void CalendarView::print() 3095void CalendarView::print()
3092{ 3096{
3093#ifndef KORG_NOPRINTER 3097#ifndef KORG_NOPRINTER
3094 createPrinter(); 3098 createPrinter();
3095 3099
3096 DateList tmpDateList = mNavigator->selectedDates(); 3100 DateList tmpDateList = mNavigator->selectedDates();
3097 mCalPrinter->print(CalPrinter::Month, 3101 mCalPrinter->print(CalPrinter::Month,
3098 tmpDateList.first(), tmpDateList.last()); 3102 tmpDateList.first(), tmpDateList.last());
3099#endif 3103#endif
3100} 3104}
3101 3105
3102void CalendarView::printPreview() 3106void CalendarView::printPreview()
3103{ 3107{
3104#ifndef KORG_NOPRINTER 3108#ifndef KORG_NOPRINTER
3105 kdDebug() << "CalendarView::printPreview()" << endl; 3109 kdDebug() << "CalendarView::printPreview()" << endl;
3106 3110
3107 createPrinter(); 3111 createPrinter();
3108 3112
3109 DateList tmpDateList = mNavigator->selectedDates(); 3113 DateList tmpDateList = mNavigator->selectedDates();
3110 3114
3111 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(), 3115 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(),
3112 tmpDateList.last()); 3116 tmpDateList.last());
3113#endif 3117#endif
3114} 3118}
3115 3119
3116void CalendarView::exportICalendar() 3120void CalendarView::exportICalendar()
3117{ 3121{
3118 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this); 3122 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this);
3119 3123
3120 // Force correct extension 3124 // Force correct extension
3121 if (filename.right(4) != ".ics") filename += ".ics"; 3125 if (filename.right(4) != ".ics") filename += ".ics";
3122 3126
3123 FileStorage storage( mCalendar, filename, new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 3127 FileStorage storage( mCalendar, filename, new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
3124 storage.save(); 3128 storage.save();
3125} 3129}
3126 3130
3127bool CalendarView::exportVCalendar( QString filename ) 3131bool CalendarView::exportVCalendar( QString filename )
3128{ 3132{
3129 if (mCalendar->journals().count() > 0) { 3133 if (mCalendar->journals().count() > 0) {
3130 int result = KMessageBox::warningContinueCancel(this, 3134 int result = KMessageBox::warningContinueCancel(this,
3131 i18n("The journal entries can not be\nexported to a vCalendar file."), 3135 i18n("The journal entries can not be\nexported to a vCalendar file."),
3132 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 3136 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
3133 true); 3137 true);
3134 if (result != KMessageBox::Continue) return false; 3138 if (result != KMessageBox::Continue) return false;
3135 } 3139 }
3136 3140
3137 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this); 3141 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this);
3138 3142
3139 // Force correct extension 3143 // Force correct extension
3140 if (filename.right(4) != ".vcs") filename += ".vcs"; 3144 if (filename.right(4) != ".vcs") filename += ".vcs";
3141 3145
3142 FileStorage storage( mCalendar, filename, new VCalFormat ); 3146 FileStorage storage( mCalendar, filename, new VCalFormat );
3143 return storage.save(); 3147 return storage.save();
3144 3148
3145} 3149}
3146 3150
3147void CalendarView::eventUpdated(Incidence *) 3151void CalendarView::eventUpdated(Incidence *)
3148{ 3152{
3149 setModified(); 3153 setModified();
3150 // Don't call updateView here. The code, which has caused the update of the 3154 // Don't call updateView here. The code, which has caused the update of the
3151 // event is responsible for updating the view. 3155 // event is responsible for updating the view.
3152 // updateView(); 3156 // updateView();
3153} 3157}
3154 3158
3155void CalendarView::adaptNavigationUnits() 3159void CalendarView::adaptNavigationUnits()
3156{ 3160{
3157 if (mViewManager->currentView()->isEventView()) { 3161 if (mViewManager->currentView()->isEventView()) {
3158 int days = mViewManager->currentView()->currentDateCount(); 3162 int days = mViewManager->currentView()->currentDateCount();
3159 if (days == 1) { 3163 if (days == 1) {
3160 emit changeNavStringPrev(i18n("&Previous Day")); 3164 emit changeNavStringPrev(i18n("&Previous Day"));
3161 emit changeNavStringNext(i18n("&Next Day")); 3165 emit changeNavStringNext(i18n("&Next Day"));
3162 } else { 3166 } else {
3163 emit changeNavStringPrev(i18n("&Previous Week")); 3167 emit changeNavStringPrev(i18n("&Previous Week"));
3164 emit changeNavStringNext(i18n("&Next Week")); 3168 emit changeNavStringNext(i18n("&Next Week"));
3165 } 3169 }
3166 } 3170 }
3167} 3171}
3168 3172
3169void CalendarView::processMainViewSelection( Incidence *incidence ) 3173void CalendarView::processMainViewSelection( Incidence *incidence )
3170{ 3174{
3171 if ( incidence ) mTodoList->clearSelection(); 3175 if ( incidence ) mTodoList->clearSelection();
3172 processIncidenceSelection( incidence ); 3176 processIncidenceSelection( incidence );
3173} 3177}
3174 3178
3175void CalendarView::processTodoListSelection( Incidence *incidence ) 3179void CalendarView::processTodoListSelection( Incidence *incidence )
3176{ 3180{
3177 if ( incidence && mViewManager->currentView() ) { 3181 if ( incidence && mViewManager->currentView() ) {
3178 mViewManager->currentView()->clearSelection(); 3182 mViewManager->currentView()->clearSelection();
3179 } 3183 }
3180 processIncidenceSelection( incidence ); 3184 processIncidenceSelection( incidence );
3181} 3185}
3182 3186
3183void CalendarView::processIncidenceSelection( Incidence *incidence ) 3187void CalendarView::processIncidenceSelection( Incidence *incidence )
3184{ 3188{
3185 if ( incidence == mSelectedIncidence ) return; 3189 if ( incidence == mSelectedIncidence ) return;
3186 3190
3187 mSelectedIncidence = incidence; 3191 mSelectedIncidence = incidence;
3188 3192
3189 emit incidenceSelected( mSelectedIncidence ); 3193 emit incidenceSelected( mSelectedIncidence );
3190 3194
3191 if ( incidence && incidence->type() == "Event" ) { 3195 if ( incidence && incidence->type() == "Event" ) {
3192 Event *event = static_cast<Event *>( incidence ); 3196 Event *event = static_cast<Event *>( incidence );
3193 if ( event->organizer() == KOPrefs::instance()->email() ) { 3197 if ( event->organizer() == KOPrefs::instance()->email() ) {
3194 emit organizerEventsSelected( true ); 3198 emit organizerEventsSelected( true );
3195 } else { 3199 } else {
3196 emit organizerEventsSelected(false); 3200 emit organizerEventsSelected(false);
3197 } 3201 }
3198 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 3202 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
3199 KOPrefs::instance()->email() ) ) { 3203 KOPrefs::instance()->email() ) ) {
3200 emit groupEventsSelected( true ); 3204 emit groupEventsSelected( true );
3201 } else { 3205 } else {
3202 emit groupEventsSelected(false); 3206 emit groupEventsSelected(false);
3203 } 3207 }
3204 return; 3208 return;
3205 } else { 3209 } else {
3206 if ( incidence && incidence->type() == "Todo" ) { 3210 if ( incidence && incidence->type() == "Todo" ) {
3207 emit todoSelected( true ); 3211 emit todoSelected( true );
3208 Todo *event = static_cast<Todo *>( incidence ); 3212 Todo *event = static_cast<Todo *>( incidence );
3209 if ( event->organizer() == KOPrefs::instance()->email() ) { 3213 if ( event->organizer() == KOPrefs::instance()->email() ) {
3210 emit organizerEventsSelected( true ); 3214 emit organizerEventsSelected( true );
3211 } else { 3215 } else {
3212 emit organizerEventsSelected(false); 3216 emit organizerEventsSelected(false);
3213 } 3217 }
3214 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 3218 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
3215 KOPrefs::instance()->email() ) ) { 3219 KOPrefs::instance()->email() ) ) {
3216 emit groupEventsSelected( true ); 3220 emit groupEventsSelected( true );
3217 } else { 3221 } else {
3218 emit groupEventsSelected(false); 3222 emit groupEventsSelected(false);
3219 } 3223 }
3220 return; 3224 return;
3221 } else { 3225 } else {
3222 emit todoSelected( false ); 3226 emit todoSelected( false );
3223 emit organizerEventsSelected(false); 3227 emit organizerEventsSelected(false);
3224 emit groupEventsSelected(false); 3228 emit groupEventsSelected(false);
3225 } 3229 }
3226 return; 3230 return;
3227 } 3231 }
3228 3232
3229 /* if ( incidence && incidence->type() == "Todo" ) { 3233 /* if ( incidence && incidence->type() == "Todo" ) {
3230 emit todoSelected( true ); 3234 emit todoSelected( true );
3231 } else { 3235 } else {
3232 emit todoSelected( false ); 3236 emit todoSelected( false );
3233 }*/ 3237 }*/
3234} 3238}
3235 3239
3236 3240
3237void CalendarView::checkClipboard() 3241void CalendarView::checkClipboard()
3238{ 3242{
3239#ifndef KORG_NODND 3243#ifndef KORG_NODND
3240 if (ICalDrag::canDecode(QApplication::clipboard()->data())) { 3244 if (ICalDrag::canDecode(QApplication::clipboard()->data())) {
3241 emit pasteEnabled(true); 3245 emit pasteEnabled(true);
3242 } else { 3246 } else {
3243 emit pasteEnabled(false); 3247 emit pasteEnabled(false);
3244 } 3248 }
3245#endif 3249#endif
3246} 3250}
3247 3251
3248void CalendarView::showDates(const DateList &selectedDates) 3252void CalendarView::showDates(const DateList &selectedDates)
3249{ 3253{
3250 // kdDebug() << "CalendarView::selectDates()" << endl; 3254 // kdDebug() << "CalendarView::selectDates()" << endl;
3251 3255
3252 if ( mViewManager->currentView() ) { 3256 if ( mViewManager->currentView() ) {
3253 updateView( selectedDates.first(), selectedDates.last() ); 3257 updateView( selectedDates.first(), selectedDates.last() );
3254 } else { 3258 } else {
3255 mViewManager->showAgendaView(); 3259 mViewManager->showAgendaView();
3256 } 3260 }
3257 3261
3258 QString selDates; 3262 QString selDates;
3259 selDates = KGlobal::locale()->formatDate( selectedDates.first(), true); 3263 selDates = KGlobal::locale()->formatDate( selectedDates.first(), true);
3260 if (selectedDates.first() < selectedDates.last() ) 3264 if (selectedDates.first() < selectedDates.last() )
3261 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true); 3265 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true);
3262 topLevelWidget()->setCaption( i18n("Dates: ") + selDates ); 3266 topLevelWidget()->setCaption( i18n("Dates: ") + selDates );
3263 3267
3264} 3268}
3265 3269
3266QPtrList<CalFilter> CalendarView::filters() 3270QPtrList<CalFilter> CalendarView::filters()
3267{ 3271{
3268 return mFilters; 3272 return mFilters;
3269 3273
3270} 3274}
3271void CalendarView::editFilters() 3275void CalendarView::editFilters()
3272{ 3276{
3273 // kdDebug() << "CalendarView::editFilters()" << endl; 3277 // kdDebug() << "CalendarView::editFilters()" << endl;
3274 3278
3275 CalFilter *filter = mFilters.first(); 3279 CalFilter *filter = mFilters.first();
3276 while(filter) { 3280 while(filter) {
3277 kdDebug() << " Filter: " << filter->name() << endl; 3281 kdDebug() << " Filter: " << filter->name() << endl;
3278 filter = mFilters.next(); 3282 filter = mFilters.next();
3279 } 3283 }
3280 3284
3281 mDialogManager->showFilterEditDialog(&mFilters); 3285 mDialogManager->showFilterEditDialog(&mFilters);
3282} 3286}
3283void CalendarView::toggleFilter() 3287void CalendarView::toggleFilter()
3284{ 3288{
3285 showFilter(! mFilterView->isVisible()); 3289 showFilter(! mFilterView->isVisible());
3286} 3290}
3287 3291
3288KOFilterView *CalendarView::filterView() 3292KOFilterView *CalendarView::filterView()
3289{ 3293{
3290 return mFilterView; 3294 return mFilterView;
3291} 3295}
3292void CalendarView::selectFilter( int fil ) 3296void CalendarView::selectFilter( int fil )
3293{ 3297{
3294 mFilterView->setSelectedFilter( fil ); 3298 mFilterView->setSelectedFilter( fil );
3295} 3299}
3296void CalendarView::showFilter(bool visible) 3300void CalendarView::showFilter(bool visible)
3297{ 3301{
3298 if (visible) mFilterView->show(); 3302 if (visible) mFilterView->show();
3299 else mFilterView->hide(); 3303 else mFilterView->hide();
3300} 3304}
3301void CalendarView::toggleFilerEnabled( ) 3305void CalendarView::toggleFilerEnabled( )
3302{ 3306{
3303 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); 3307 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() );
3304 if ( !mFilterView->filtersEnabled() ) 3308 if ( !mFilterView->filtersEnabled() )
3305 topLevelWidget()->setCaption( i18n("Filter disabled ") ); 3309 topLevelWidget()->setCaption( i18n("Filter disabled ") );
3306 3310
3307} 3311}
3308void CalendarView::updateFilter() 3312void CalendarView::updateFilter()
3309{ 3313{
3310 CalFilter *filter = mFilterView->selectedFilter(); 3314 CalFilter *filter = mFilterView->selectedFilter();
3311 if (filter) { 3315 if (filter) {
3312 if (mFilterView->filtersEnabled()) { 3316 if (mFilterView->filtersEnabled()) {
3313 topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() ); 3317 topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() );
3314 filter->setEnabled(true); 3318 filter->setEnabled(true);
3315 } 3319 }
3316 else filter->setEnabled(false); 3320 else filter->setEnabled(false);
3317 mCalendar->setFilter(filter); 3321 mCalendar->setFilter(filter);
3318 updateView(); 3322 updateView();
3319 } 3323 }
3320} 3324}
3321 3325
3322void CalendarView::filterEdited() 3326void CalendarView::filterEdited()
3323{ 3327{
3324 mFilterView->updateFilters(); 3328 mFilterView->updateFilters();
3325 updateFilter(); 3329 updateFilter();
3326 writeSettings(); 3330 writeSettings();
3327} 3331}
3328 3332
3329 3333
3330void CalendarView::takeOverEvent() 3334void CalendarView::takeOverEvent()
3331{ 3335{
3332 Incidence *incidence = currentSelection(); 3336 Incidence *incidence = currentSelection();
3333 3337
3334 if (!incidence) return; 3338 if (!incidence) return;
3335 3339
3336 incidence->setOrganizer(KOPrefs::instance()->email()); 3340 incidence->setOrganizer(KOPrefs::instance()->email());
3337 incidence->recreate(); 3341 incidence->recreate();
3338 incidence->setReadOnly(false); 3342 incidence->setReadOnly(false);
3339 3343
3340 updateView(); 3344 updateView();
3341} 3345}
3342 3346
3343void CalendarView::takeOverCalendar() 3347void CalendarView::takeOverCalendar()
3344{ 3348{
3345 // TODO: Create Calendar::allIncidences() function and use it here 3349 // TODO: Create Calendar::allIncidences() function and use it here
3346 3350
3347 QPtrList<Event> events = mCalendar->events(); 3351 QPtrList<Event> events = mCalendar->events();
3348 for(uint i=0; i<events.count(); ++i) { 3352 for(uint i=0; i<events.count(); ++i) {
3349 events.at(i)->setOrganizer(KOPrefs::instance()->email()); 3353 events.at(i)->setOrganizer(KOPrefs::instance()->email());
3350 events.at(i)->recreate(); 3354 events.at(i)->recreate();
3351 events.at(i)->setReadOnly(false); 3355 events.at(i)->setReadOnly(false);
3352 } 3356 }
3353 3357
3354 QPtrList<Todo> todos = mCalendar->todos(); 3358 QPtrList<Todo> todos = mCalendar->todos();
3355 for(uint i=0; i<todos.count(); ++i) { 3359 for(uint i=0; i<todos.count(); ++i) {
3356 todos.at(i)->setOrganizer(KOPrefs::instance()->email()); 3360 todos.at(i)->setOrganizer(KOPrefs::instance()->email());
3357 todos.at(i)->recreate(); 3361 todos.at(i)->recreate();
3358 todos.at(i)->setReadOnly(false); 3362 todos.at(i)->setReadOnly(false);
3359 } 3363 }
3360 3364
3361 QPtrList<Journal> journals = mCalendar->journals(); 3365 QPtrList<Journal> journals = mCalendar->journals();
3362 for(uint i=0; i<journals.count(); ++i) { 3366 for(uint i=0; i<journals.count(); ++i) {
3363 journals.at(i)->setOrganizer(KOPrefs::instance()->email()); 3367 journals.at(i)->setOrganizer(KOPrefs::instance()->email());
3364 journals.at(i)->recreate(); 3368 journals.at(i)->recreate();
3365 journals.at(i)->setReadOnly(false); 3369 journals.at(i)->setReadOnly(false);
3366 } 3370 }
3367 3371
3368 updateView(); 3372 updateView();
3369} 3373}
3370 3374
3371void CalendarView::showIntro() 3375void CalendarView::showIntro()
3372{ 3376{
3373 kdDebug() << "To be implemented." << endl; 3377 kdDebug() << "To be implemented." << endl;
3374} 3378}
3375 3379
3376QWidgetStack *CalendarView::viewStack() 3380QWidgetStack *CalendarView::viewStack()
3377{ 3381{
3378 return mRightFrame; 3382 return mRightFrame;
3379} 3383}
3380 3384
3381QWidget *CalendarView::leftFrame() 3385QWidget *CalendarView::leftFrame()
3382{ 3386{
3383 return mLeftFrame; 3387 return mLeftFrame;
3384} 3388}
3385 3389
3386DateNavigator *CalendarView::dateNavigator() 3390DateNavigator *CalendarView::dateNavigator()
3387{ 3391{
3388 return mNavigator; 3392 return mNavigator;
3389} 3393}
3390 3394
3391KDateNavigator* CalendarView::dateNavigatorWidget() 3395KDateNavigator* CalendarView::dateNavigatorWidget()
3392{ 3396{
3393 return mDateNavigator; 3397 return mDateNavigator;
3394} 3398}
3395void CalendarView::toggleDateNavigatorWidget() 3399void CalendarView::toggleDateNavigatorWidget()
3396{ 3400{
3397 if (mDateNavigator->isVisible()) 3401 if (mDateNavigator->isVisible())
3398 mDateNavigator->hide(); 3402 mDateNavigator->hide();
3399 else 3403 else
3400 mDateNavigator->show(); 3404 mDateNavigator->show();
3401} 3405}
3402void CalendarView::addView(KOrg::BaseView *view) 3406void CalendarView::addView(KOrg::BaseView *view)
3403{ 3407{
3404 mViewManager->addView(view); 3408 mViewManager->addView(view);
3405} 3409}
3406 3410
3407void CalendarView::showView(KOrg::BaseView *view) 3411void CalendarView::showView(KOrg::BaseView *view)
3408{ 3412{
3409 mViewManager->showView(view, mLeftFrame->isVisible()); 3413 mViewManager->showView(view, mLeftFrame->isVisible());
3410} 3414}
3411 3415
3412Incidence *CalendarView::currentSelection() 3416Incidence *CalendarView::currentSelection()
3413{ 3417{
3414 return mViewManager->currentSelection(); 3418 return mViewManager->currentSelection();
3415} 3419}
3416void CalendarView::toggleAllDaySize() 3420void CalendarView::toggleAllDaySize()
3417{ 3421{
3418 /* 3422 /*
3419 if ( KOPrefs::instance()->mAllDaySize > 47 ) 3423 if ( KOPrefs::instance()->mAllDaySize > 47 )
3420 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; 3424 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2;
3421 else 3425 else
3422 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; 3426 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2;
3423 */ 3427 */
3424 viewManager()->agendaView()->toggleAllDay(); 3428 viewManager()->agendaView()->toggleAllDay();
3425} 3429}
3426void CalendarView::toggleExpand() 3430void CalendarView::toggleExpand()
3427{ 3431{
3428 // if ( mLeftFrame->isHidden() ) { 3432 // if ( mLeftFrame->isHidden() ) {
3429 // mLeftFrame->show(); 3433 // mLeftFrame->show();
3430 // emit calendarViewExpanded( false ); 3434 // emit calendarViewExpanded( false );
3431 // } else { 3435 // } else {
3432 // mLeftFrame->hide(); 3436 // mLeftFrame->hide();
3433 // emit calendarViewExpanded( true ); 3437 // emit calendarViewExpanded( true );
3434 // } 3438 // }
3435 3439
3436 globalFlagBlockAgenda = 1; 3440 globalFlagBlockAgenda = 1;
3437 emit calendarViewExpanded( !mLeftFrame->isHidden() ); 3441 emit calendarViewExpanded( !mLeftFrame->isHidden() );
3438 globalFlagBlockAgenda = 5; 3442 globalFlagBlockAgenda = 5;
3439 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); 3443 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() );
3440 //mViewManager->showView( 0, true ); 3444 //mViewManager->showView( 0, true );
3441} 3445}
3442 3446
3443void CalendarView::calendarModified( bool modified, Calendar * ) 3447void CalendarView::calendarModified( bool modified, Calendar * )
3444{ 3448{
3445 setModified( modified ); 3449 setModified( modified );
3446} 3450}
3447 3451
3448Todo *CalendarView::selectedTodo() 3452Todo *CalendarView::selectedTodo()
3449{ 3453{
3450 Incidence *incidence = currentSelection(); 3454 Incidence *incidence = currentSelection();
3451 if ( incidence && incidence->type() == "Todo" ) { 3455 if ( incidence && incidence->type() == "Todo" ) {
3452 return static_cast<Todo *>( incidence ); 3456 return static_cast<Todo *>( incidence );
3453 } 3457 }
3454 3458
3455 incidence = mTodoList->selectedIncidences().first(); 3459 incidence = mTodoList->selectedIncidences().first();
3456 if ( incidence && incidence->type() == "Todo" ) { 3460 if ( incidence && incidence->type() == "Todo" ) {
3457 return static_cast<Todo *>( incidence ); 3461 return static_cast<Todo *>( incidence );
3458 } 3462 }
3459 3463
3460 return 0; 3464 return 0;
3461} 3465}
3462 3466
3463void CalendarView::dialogClosing(Incidence *in) 3467void CalendarView::dialogClosing(Incidence *in)
3464{ 3468{
3465 // mDialogList.remove(in); 3469 // mDialogList.remove(in);
3466} 3470}
3467 3471
3468void CalendarView::showIncidence() 3472void CalendarView::showIncidence()
3469{ 3473{
3470 Incidence *incidence = currentSelection(); 3474 Incidence *incidence = currentSelection();
3471 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3475 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3472 if ( incidence ) { 3476 if ( incidence ) {
3473 ShowIncidenceVisitor v; 3477 ShowIncidenceVisitor v;
3474 v.act( incidence, this ); 3478 v.act( incidence, this );
3475 } 3479 }
3476} 3480}
3477void CalendarView::editIncidenceDescription() 3481void CalendarView::editIncidenceDescription()
3478{ 3482{
3479 mFlagEditDescription = true; 3483 mFlagEditDescription = true;
3480 editIncidence(); 3484 editIncidence();
3481 mFlagEditDescription = false; 3485 mFlagEditDescription = false;
3482} 3486}
3483void CalendarView::editIncidence() 3487void CalendarView::editIncidence()
3484{ 3488{
3485 // qDebug("editIncidence() "); 3489 // qDebug("editIncidence() ");
3486 Incidence *incidence = currentSelection(); 3490 Incidence *incidence = currentSelection();
3487 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3491 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3488 if ( incidence ) { 3492 if ( incidence ) {
3489 EditIncidenceVisitor v; 3493 EditIncidenceVisitor v;
3490 v.act( incidence, this ); 3494 v.act( incidence, this );
3491 } 3495 }
3492} 3496}
3493 3497
3494void CalendarView::deleteIncidence() 3498void CalendarView::deleteIncidence()
3495{ 3499{
3496 Incidence *incidence = currentSelection(); 3500 Incidence *incidence = currentSelection();
3497 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3501 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3498 if ( incidence ) { 3502 if ( incidence ) {
3499 deleteIncidence(incidence); 3503 deleteIncidence(incidence);
3500 } 3504 }
3501} 3505}
3502 3506
3503void CalendarView::showIncidence(Incidence *incidence) 3507void CalendarView::showIncidence(Incidence *incidence)
3504{ 3508{
3505 if ( incidence ) { 3509 if ( incidence ) {
3506 ShowIncidenceVisitor v; 3510 ShowIncidenceVisitor v;
3507 v.act( incidence, this ); 3511 v.act( incidence, this );
3508 } 3512 }
3509} 3513}
3510 3514
3511void CalendarView::editIncidence(Incidence *incidence) 3515void CalendarView::editIncidence(Incidence *incidence)
3512{ 3516{
3513 if ( incidence ) { 3517 if ( incidence ) {
3514 3518
3515 EditIncidenceVisitor v; 3519 EditIncidenceVisitor v;
3516 v.act( incidence, this ); 3520 v.act( incidence, this );
3517 3521
3518 } 3522 }
3519} 3523}
3520 3524
3521void CalendarView::deleteIncidence(Incidence *incidence) 3525void CalendarView::deleteIncidence(Incidence *incidence)
3522{ 3526{
3523 //qDebug(" CalendarView::deleteIncidence "); 3527 //qDebug(" CalendarView::deleteIncidence ");
3524 if ( incidence ) { 3528 if ( incidence ) {
3525 DeleteIncidenceVisitor v; 3529 DeleteIncidenceVisitor v;
3526 v.act( incidence, this ); 3530 v.act( incidence, this );
3527 } 3531 }
3528} 3532}
3529 3533
3530 3534
3531void CalendarView::lookForOutgoingMessages() 3535void CalendarView::lookForOutgoingMessages()
3532{ 3536{
3533 OutgoingDialog *ogd = mDialogManager->outgoingDialog(); 3537 OutgoingDialog *ogd = mDialogManager->outgoingDialog();
3534 ogd->loadMessages(); 3538 ogd->loadMessages();
3535} 3539}
3536 3540
3537void CalendarView::lookForIncomingMessages() 3541void CalendarView::lookForIncomingMessages()
3538{ 3542{
3539 IncomingDialog *icd = mDialogManager->incomingDialog(); 3543 IncomingDialog *icd = mDialogManager->incomingDialog();
3540 icd->retrieve(); 3544 icd->retrieve();
3541} 3545}
3542 3546
3543bool CalendarView::removeCompletedSubTodos( Todo* t ) 3547bool CalendarView::removeCompletedSubTodos( Todo* t )
3544{ 3548{
3545 bool deleteTodo = true; 3549 bool deleteTodo = true;
3546 QPtrList<Incidence> subTodos; 3550 QPtrList<Incidence> subTodos;
3547 Incidence *aTodo; 3551 Incidence *aTodo;
3548 subTodos = t->relations(); 3552 subTodos = t->relations();
3549 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) { 3553 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) {
3550 if (! removeCompletedSubTodos( (Todo*) aTodo )) 3554 if (! removeCompletedSubTodos( (Todo*) aTodo ))
3551 deleteTodo = false; 3555 deleteTodo = false;
3552 } 3556 }
3553 if ( deleteTodo ) { 3557 if ( deleteTodo ) {
3554 if ( t->isCompleted() ) { 3558 if ( t->isCompleted() ) {
3555 checkExternalId( t ); 3559 checkExternalId( t );
3556 mCalendar->deleteTodo( t ); 3560 mCalendar->deleteTodo( t );
3557 changeTodoDisplay( t,KOGlobals::EVENTDELETED ); 3561 changeTodoDisplay( t,KOGlobals::EVENTDELETED );
3558 } 3562 }
3559 else 3563 else
3560 deleteTodo = false; 3564 deleteTodo = false;
3561 } 3565 }
3562 return deleteTodo; 3566 return deleteTodo;
3563 3567
3564} 3568}
3565void CalendarView::purgeCompleted() 3569void CalendarView::purgeCompleted()
3566{ 3570{
3567 int result = KMessageBox::warningContinueCancel(this, 3571 int result = KMessageBox::warningContinueCancel(this,
3568 i18n("Delete all\ncompleted To-Dos?"),i18n("Purge To-Dos"),i18n("Purge")); 3572 i18n("Delete all\ncompleted To-Dos?"),i18n("Purge To-Dos"),i18n("Purge"));
3569 3573
3570 if (result == KMessageBox::Continue) { 3574 if (result == KMessageBox::Continue) {
3571 3575
3572 QPtrList<Todo> todoCal; 3576 QPtrList<Todo> todoCal;
3573 QPtrList<Todo> rootTodos; 3577 QPtrList<Todo> rootTodos;
3574 //QPtrList<Incidence> rel; 3578 //QPtrList<Incidence> rel;
3575 Todo *aTodo;//, *rTodo; 3579 Todo *aTodo;//, *rTodo;
3576 Incidence *rIncidence; 3580 Incidence *rIncidence;
3577 bool childDelete = false; 3581 bool childDelete = false;
3578 bool deletedOne = true; 3582 bool deletedOne = true;
3579 todoCal = calendar()->todos(); 3583 todoCal = calendar()->todos();
3580 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) { 3584 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) {
3581 if ( !aTodo->relatedTo() ) 3585 if ( !aTodo->relatedTo() )
3582 rootTodos.append( aTodo ); 3586 rootTodos.append( aTodo );
3583 } 3587 }
3584 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) { 3588 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) {
3585 removeCompletedSubTodos( aTodo ); 3589 removeCompletedSubTodos( aTodo );
3586 } 3590 }
3587 3591
3588 updateView(); 3592 updateView();
3589 } 3593 }
3590} 3594}
3591 3595
3592void CalendarView::slotCalendarChanged() 3596void CalendarView::slotCalendarChanged()
3593{ 3597{
3594 ; 3598 ;
3595} 3599}
3596 3600
3597NavigatorBar *CalendarView::navigatorBar() 3601NavigatorBar *CalendarView::navigatorBar()
3598{ 3602{
3599 return mNavigatorBar; 3603 return mNavigatorBar;
3600} 3604}
3601 3605
3602 3606
3603 3607
3604void CalendarView::keyPressEvent ( QKeyEvent *e) 3608void CalendarView::keyPressEvent ( QKeyEvent *e)
3605{ 3609{
3606 //qDebug(" alendarView::keyPressEvent "); 3610 //qDebug(" alendarView::keyPressEvent ");
3607 e->ignore(); 3611 e->ignore();
3608} 3612}
3609 3613
3610//#include "calendarview.moc" 3614//#include "calendarview.moc"
3611 3615
3612//#include "calendarviewbase.moc" 3616//#include "calendarviewbase.moc"