summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp53
-rw-r--r--korganizer/koprefs.h1
-rw-r--r--korganizer/mainwindow.cpp6
-rw-r--r--libkcal/phoneformat.cpp15
4 files changed, 55 insertions, 20 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index db07713..cfd9290 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -348,1156 +348,1183 @@ void CalendarView::init()
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 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 729 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
730 bool remCh, locCh; 730 bool remCh, locCh;
731 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 731 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
732 if ( remCh )
733 qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
732 locCh = ( local->lastModified() > mLastCalendarSync ); 734 locCh = ( local->lastModified() > mLastCalendarSync );
733 //qDebug("locCh %d remCh %d locuid %d remuid %d", locCh, remCh,local->zaurusUid(), remote->zaurusUid() ); 735 //qDebug("locCh %d remCh %d locuid %d remuid %d", locCh, remCh,local->zaurusUid(), remote->zaurusUid() );
734 if ( !remCh && ! locCh ) { 736 if ( !remCh && ! locCh ) {
735 //qDebug("both not changed "); 737 qDebug("both not changed ");
736 lastSync = local->lastModified().addDays(1); 738 lastSync = local->lastModified().addDays(1);
737 } else { 739 } else {
738 if ( locCh ) { 740 if ( locCh ) {
739 //qDebug("loc changed %d %d", local->zaurusStat(), local->revision() ); 741 qDebug("loc changed %d", local->revision() );
740 lastSync = local->lastModified().addDays( -1 ); 742 lastSync = local->lastModified().addDays( -1 );
741 if ( !remCh ) 743 if ( !remCh )
742 remote->setLastModified( lastSync.addDays( -1 ) ); 744 remote->setLastModified( lastSync.addDays( -1 ) );
743 } else { 745 } else {
744 //qDebug(" not loc changed "); 746 qDebug(" not loc changed ");
745 lastSync = local->lastModified().addDays( 1 ); 747 lastSync = local->lastModified().addDays( 1 );
746 if ( remCh ) 748 if ( remCh )
747 remote->setLastModified( lastSync.addDays( 1 ) ); 749 remote->setLastModified( lastSync.addDays( 1 ) );
748 750
749 } 751 }
750 } 752 }
751 full = true; 753 full = true;
752 if ( mode < SYNC_PREF_ASK ) 754 if ( mode < SYNC_PREF_ASK )
753 mode = SYNC_PREF_ASK; 755 mode = SYNC_PREF_ASK;
754 } else { 756 } else {
755 if ( local->lastModified() == remote->lastModified() ) 757 if ( local->lastModified() == remote->lastModified() )
756 if ( local->revision() == remote->revision() ) 758 if ( local->revision() == remote->revision() )
757 return 0; 759 return 0;
758 760
759 } 761 }
760 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 762 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
761 763
762 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , local->revision(), remote->lastModified().toString().latin1(), remote->revision()); 764 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , local->revision(), remote->lastModified().toString().latin1(), remote->revision());
763 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() ); 765 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() );
764 //full = true; //debug only 766 //full = true; //debug only
765 if ( full ) { 767 if ( full ) {
766 bool equ = false; 768 bool equ = false;
767 if ( local->type() == "Event" ) { 769 if ( local->type() == "Event" ) {
768 equ = (*((Event*) local) == *((Event*) remote)); 770 equ = (*((Event*) local) == *((Event*) remote));
769 } 771 }
770 else if ( local->type() =="Todo" ) 772 else if ( local->type() =="Todo" )
771 equ = (*((Todo*) local) == (*(Todo*) remote)); 773 equ = (*((Todo*) local) == (*(Todo*) remote));
772 else if ( local->type() =="Journal" ) 774 else if ( local->type() =="Journal" )
773 equ = (*((Journal*) local) == *((Journal*) remote)); 775 equ = (*((Journal*) local) == *((Journal*) remote));
774 if ( equ ) { 776 if ( equ ) {
775 //qDebug("equal "); 777 //qDebug("equal ");
776 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 778 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
777 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 779 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
778 } 780 }
779 if ( mode < SYNC_PREF_FORCE_LOCAL ) 781 if ( mode < SYNC_PREF_FORCE_LOCAL )
780 return 0; 782 return 0;
781 783
782 }//else //debug only 784 }//else //debug only
783 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 785 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
784 } 786 }
785 int result; 787 int result;
786 bool localIsNew; 788 bool localIsNew;
789 qDebug("mLastCalendarSync %s lastsync %s --- local %s remote %s ",mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , local->lastModified().toString().latin1() , remote->lastModified().toString().latin1() );
790
787 if ( full && mode < SYNC_PREF_NEWEST ) 791 if ( full && mode < SYNC_PREF_NEWEST )
788 mode = SYNC_PREF_ASK; 792 mode = SYNC_PREF_ASK;
789 793
790 switch( mode ) { 794 switch( mode ) {
791 case SYNC_PREF_LOCAL: 795 case SYNC_PREF_LOCAL:
792 if ( lastSync > remote->lastModified() ) 796 if ( lastSync > remote->lastModified() )
793 return 1; 797 return 1;
794 if ( lastSync > local->lastModified() ) 798 if ( lastSync > local->lastModified() )
795 return 2; 799 return 2;
796 return 1; 800 return 1;
797 break; 801 break;
798 case SYNC_PREF_REMOTE: 802 case SYNC_PREF_REMOTE:
799 if ( lastSync > remote->lastModified() ) 803 if ( lastSync > remote->lastModified() )
800 return 1; 804 return 1;
801 if ( lastSync > local->lastModified() ) 805 if ( lastSync > local->lastModified() )
802 return 2; 806 return 2;
803 return 2; 807 return 2;
804 break; 808 break;
805 case SYNC_PREF_NEWEST: 809 case SYNC_PREF_NEWEST:
806 if ( local->lastModified() > remote->lastModified() ) 810 if ( local->lastModified() > remote->lastModified() )
807 return 1; 811 return 1;
808 else 812 else
809 return 2; 813 return 2;
810 break; 814 break;
811 case SYNC_PREF_ASK: 815 case SYNC_PREF_ASK:
812 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() ); 816 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() );
813 if ( lastSync > remote->lastModified() ) 817 if ( lastSync > remote->lastModified() )
814 return 1; 818 return 1;
815 if ( lastSync > local->lastModified() ) 819 if ( lastSync > local->lastModified() )
816 return 2; 820 return 2;
817 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() ); 821 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->lastModified().toString().latin1(), remote->lastModified().toString().latin1() );
818 localIsNew = local->lastModified() > remote->lastModified(); 822 localIsNew = local->lastModified() >= remote->lastModified();
819 if ( localIsNew ) 823 if ( localIsNew )
820 getEventViewerDialog()->setColorMode( 1 ); 824 getEventViewerDialog()->setColorMode( 1 );
821 else 825 else
822 getEventViewerDialog()->setColorMode( 2 ); 826 getEventViewerDialog()->setColorMode( 2 );
823 getEventViewerDialog()->setIncidence(local); 827 getEventViewerDialog()->setIncidence(local);
824 if ( localIsNew ) 828 if ( localIsNew )
825 getEventViewerDialog()->setColorMode( 2 ); 829 getEventViewerDialog()->setColorMode( 2 );
826 else 830 else
827 getEventViewerDialog()->setColorMode( 1 ); 831 getEventViewerDialog()->setColorMode( 1 );
828 getEventViewerDialog()->addIncidence(remote); 832 getEventViewerDialog()->addIncidence(remote);
829 getEventViewerDialog()->setColorMode( 0 ); 833 getEventViewerDialog()->setColorMode( 0 );
830 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 834 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
831 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 835 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
832 getEventViewerDialog()->showMe(); 836 getEventViewerDialog()->showMe();
833 result = getEventViewerDialog()->executeS( localIsNew ); 837 result = getEventViewerDialog()->executeS( localIsNew );
834 return result; 838 return result;
835 839
836 break; 840 break;
837 case SYNC_PREF_FORCE_LOCAL: 841 case SYNC_PREF_FORCE_LOCAL:
838 return 1; 842 return 1;
839 break; 843 break;
840 case SYNC_PREF_FORCE_REMOTE: 844 case SYNC_PREF_FORCE_REMOTE:
841 return 2; 845 return 2;
842 break; 846 break;
843 847
844 default: 848 default:
845 // SYNC_PREF_TAKE_BOTH not implemented 849 // SYNC_PREF_TAKE_BOTH not implemented
846 break; 850 break;
847 } 851 }
848 return 0; 852 return 0;
849} 853}
850Event* CalendarView::getLastSyncEvent() 854Event* CalendarView::getLastSyncEvent()
851{ 855{
852 Event* lse; 856 Event* lse;
853 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 857 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
854 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 858 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
855 if (!lse) { 859 if (!lse) {
856 lse = new Event(); 860 lse = new Event();
857 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 861 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
858 QString sum = ""; 862 QString sum = "";
859 if ( KOPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 863 if ( KOPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
860 sum = "E: "; 864 sum = "E: ";
861 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 865 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
862 lse->setDtStart( mLastCalendarSync ); 866 lse->setDtStart( mLastCalendarSync );
863 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 867 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
864 lse->setCategories( i18n("SyncEvent") ); 868 lse->setCategories( i18n("SyncEvent") );
865 lse->setReadOnly( true ); 869 lse->setReadOnly( true );
866 mCalendar->addEvent( lse ); 870 mCalendar->addEvent( lse );
867 } 871 }
868 872
869 return lse; 873 return lse;
870 874
871} 875}
872// probaly useless 876// probaly useless
873void CalendarView::setupExternSyncProfiles() 877void CalendarView::setupExternSyncProfiles()
874{ 878{
875 Event* lse; 879 Event* lse;
876 mExternLastSyncEvent.clear(); 880 mExternLastSyncEvent.clear();
877 int i; 881 int i;
878 for ( i = 0; i < KOPrefs::instance()->mExternSyncProfiles.count(); ++i ) { 882 for ( i = 0; i < KOPrefs::instance()->mExternSyncProfiles.count(); ++i ) {
879 lse = mCalendar->event( "last-syncEvent-"+ KOPrefs::instance()->mExternSyncProfiles[i] ); 883 lse = mCalendar->event( "last-syncEvent-"+ KOPrefs::instance()->mExternSyncProfiles[i] );
880 if ( lse ) 884 if ( lse )
881 mExternLastSyncEvent.append( lse ); 885 mExternLastSyncEvent.append( lse );
882 else 886 else
883 qDebug("Last Sync event not found for %s ", KOPrefs::instance()->mExternSyncProfiles[i].latin1()); 887 qDebug("Last Sync event not found for %s ", KOPrefs::instance()->mExternSyncProfiles[i].latin1());
884 } 888 }
885 889
886} 890}
887// we check, if the to delete event has a id for a profile 891// we check, if the to delete event has a id for a profile
888// if yes, we set this id in the profile to delete 892// if yes, we set this id in the profile to delete
889void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 893void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
890{ 894{
891 if ( lastSync.count() == 0 ) { 895 if ( lastSync.count() == 0 ) {
892 //qDebug(" lastSync.count() == 0"); 896 //qDebug(" lastSync.count() == 0");
893 return; 897 return;
894 } 898 }
895 if ( toDelete->type() == "Journal" ) 899 if ( toDelete->type() == "Journal" )
896 return; 900 return;
897 901
898 Event* eve = lastSync.first(); 902 Event* eve = lastSync.first();
899 903
900 while ( eve ) { 904 while ( eve ) {
901 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 905 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
902 if ( !id.isEmpty() ) { 906 if ( !id.isEmpty() ) {
903 QString des = eve->description(); 907 QString des = eve->description();
904 QString pref = "e"; 908 QString pref = "e";
905 if ( toDelete->type() == "Todo" ) 909 if ( toDelete->type() == "Todo" )
906 pref = "t"; 910 pref = "t";
907 des += pref+ id + ","; 911 des += pref+ id + ",";
908 eve->setReadOnly( false ); 912 eve->setReadOnly( false );
909 eve->setDescription( des ); 913 eve->setDescription( des );
910 //qDebug("setdes %s ", des.latin1()); 914 //qDebug("setdes %s ", des.latin1());
911 eve->setReadOnly( true ); 915 eve->setReadOnly( true );
912 } 916 }
913 eve = lastSync.next(); 917 eve = lastSync.next();
914 } 918 }
915 919
916} 920}
917void CalendarView::checkExternalId( Incidence * inc ) 921void CalendarView::checkExternalId( Incidence * inc )
918{ 922{
919 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 923 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
920 checkExternSyncEvent( lastSync, inc ); 924 checkExternSyncEvent( lastSync, inc );
921 925
922} 926}
923bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 927bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
924{ 928{
925 bool syncOK = true; 929 bool syncOK = true;
926 int addedEvent = 0; 930 int addedEvent = 0;
927 int addedEventR = 0; 931 int addedEventR = 0;
928 int deletedEventR = 0; 932 int deletedEventR = 0;
929 int deletedEventL = 0; 933 int deletedEventL = 0;
930 int changedLocal = 0; 934 int changedLocal = 0;
931 int changedRemote = 0; 935 int changedRemote = 0;
932 //QPtrList<Event> el = local->rawEvents(); 936 //QPtrList<Event> el = local->rawEvents();
933 Event* eventR; 937 Event* eventR;
934 QString uid; 938 QString uid;
935 int take; 939 int take;
936 Event* eventL; 940 Event* eventL;
937 Event* eventRSync; 941 Event* eventRSync;
938 Event* eventLSync; 942 Event* eventLSync;
939 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 943 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
940 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 944 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
941 bool fullDateRange = false; 945 bool fullDateRange = false;
942 local->resetTempSyncStat(); 946 local->resetTempSyncStat();
943 mLastCalendarSync = QDateTime::currentDateTime(); 947 mLastCalendarSync = QDateTime::currentDateTime();
944 QDateTime modifiedCalendar = mLastCalendarSync;; 948 QDateTime modifiedCalendar = mLastCalendarSync;;
949 eventLSync = getLastSyncEvent();
945 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 950 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
946 if ( eventR ) { 951 if ( eventR ) {
947 eventRSync = (Event*) eventR->clone(); 952 eventRSync = (Event*) eventR->clone();
948 remote->deleteEvent(eventR ); 953 remote->deleteEvent(eventR );
949 954
950 } else { 955 } else {
951 fullDateRange = true; 956 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
952 eventRSync = new Event(); 957 eventRSync = (Event*)eventLSync->clone();
953 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 958 } else {
954 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 959 fullDateRange = true;
955 eventRSync->setDtStart( mLastCalendarSync ); 960 eventRSync = new Event();
956 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 961 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
957 eventRSync->setCategories( i18n("SyncEvent") ); 962 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
963 eventRSync->setDtStart( mLastCalendarSync );
964 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
965 eventRSync->setCategories( i18n("SyncEvent") );
966 }
958 } 967 }
959 eventLSync = getLastSyncEvent();
960 if ( eventLSync->dtStart() == mLastCalendarSync ) 968 if ( eventLSync->dtStart() == mLastCalendarSync )
961 fullDateRange = true; 969 fullDateRange = true;
962 970
963 if ( ! fullDateRange ) { 971 if ( ! fullDateRange ) {
964 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 972 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
965 973
966 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 974 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
967 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 975 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
968 fullDateRange = true; 976 fullDateRange = true;
969 } 977 }
970 } 978 }
971 if ( fullDateRange ) 979 if ( fullDateRange )
972 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 980 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
973 else 981 else
974 mLastCalendarSync = eventLSync->dtStart(); 982 mLastCalendarSync = eventLSync->dtStart();
975 // for resyncing if own file has changed 983 // for resyncing if own file has changed
976 if ( mCurrentSyncDevice == "deleteaftersync" ) { 984 if ( mCurrentSyncDevice == "deleteaftersync" ) {
977 mLastCalendarSync = loadedFileVersion; 985 mLastCalendarSync = loadedFileVersion;
978 qDebug("setting mLastCalendarSync "); 986 qDebug("setting mLastCalendarSync ");
979 } 987 }
980 //qDebug("*************************** "); 988 //qDebug("*************************** ");
981 qDebug("mLastCalendarSync %s ",mLastCalendarSync.toString().latin1() ); 989 qDebug("mLastCalendarSync %s ",mLastCalendarSync.toString().latin1() );
982 QPtrList<Incidence> er = remote->rawIncidences(); 990 QPtrList<Incidence> er = remote->rawIncidences();
983 Incidence* inR = er.first(); 991 Incidence* inR = er.first();
984 Incidence* inL; 992 Incidence* inL;
985 QProgressBar bar( er.count(),0 ); 993 QProgressBar bar( er.count(),0 );
986 bar.setCaption (i18n("Syncing - close to abort!") ); 994 bar.setCaption (i18n("Syncing - close to abort!") );
987 995
988 int w = 300; 996 int w = 300;
989 if ( QApplication::desktop()->width() < 320 ) 997 if ( QApplication::desktop()->width() < 320 )
990 w = 220; 998 w = 220;
991 int h = bar.sizeHint().height() ; 999 int h = bar.sizeHint().height() ;
992 int dw = QApplication::desktop()->width(); 1000 int dw = QApplication::desktop()->width();
993 int dh = QApplication::desktop()->height(); 1001 int dh = QApplication::desktop()->height();
994 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1002 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
995 bar.show(); 1003 bar.show();
996 int modulo = (er.count()/10)+1; 1004 int modulo = (er.count()/10)+1;
997 int incCounter = 0; 1005 int incCounter = 0;
998 while ( inR ) { 1006 while ( inR ) {
999 if ( ! bar.isVisible() ) 1007 if ( ! bar.isVisible() )
1000 return false; 1008 return false;
1001 if ( incCounter % modulo == 0 ) 1009 if ( incCounter % modulo == 0 )
1002 bar.setProgress( incCounter ); 1010 bar.setProgress( incCounter );
1003 ++incCounter; 1011 ++incCounter;
1004 uid = inR->uid(); 1012 uid = inR->uid();
1005 bool skipIncidence = false; 1013 bool skipIncidence = false;
1006 if ( uid.left(15) == QString("last-syncEvent-") ) 1014 if ( uid.left(15) == QString("last-syncEvent-") )
1007 skipIncidence = true; 1015 skipIncidence = true;
1008 1016
1009 qApp->processEvents(); 1017 qApp->processEvents();
1010 if ( !skipIncidence ) { 1018 if ( !skipIncidence ) {
1011 inL = local->incidence( uid ); 1019 inL = local->incidence( uid );
1012 if ( inL ) { // maybe conflict - same uid in both calendars 1020 if ( inL ) { // maybe conflict - same uid in both calendars
1013 int maxrev = inL->revision(); 1021 int maxrev = inL->revision();
1014 if ( maxrev < inR->revision() ) 1022 if ( maxrev < inR->revision() )
1015 maxrev = inR->revision(); 1023 maxrev = inR->revision();
1016 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1024 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1017 //qDebug("take %d %s ", take, inL->summary().latin1()); 1025 //qDebug("take %d %s ", take, inL->summary().latin1());
1018 if ( take == 3 ) 1026 if ( take == 3 )
1019 return false; 1027 return false;
1020 if ( take == 1 ) {// take local 1028 if ( take == 1 ) {// take local
1021 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1029 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1022 remote->deleteIncidence( inR ); 1030 remote->deleteIncidence( inR );
1023 if ( inL->revision() < maxrev ) 1031 if ( inL->revision() < maxrev )
1024 inL->setRevision( maxrev ); 1032 inL->setRevision( maxrev );
1025 remote->addIncidence( inL->clone() ); 1033 remote->addIncidence( inL->clone() );
1026 ++changedRemote; 1034 ++changedRemote;
1027 } else { 1035 } else {
1028 if ( inR->revision() < maxrev ) 1036 if ( inR->revision() < maxrev )
1029 inR->setRevision( maxrev ); 1037 inR->setRevision( maxrev );
1030 local->deleteIncidence( inL ); 1038 local->deleteIncidence( inL );
1031 local->addIncidence( inR->clone() ); 1039 local->addIncidence( inR->clone() );
1032 ++changedLocal; 1040 ++changedLocal;
1033 } 1041 }
1034 } 1042 }
1035 } else { // no conflict 1043 } else { // no conflict
1036 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1044 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1037 QString des = eventLSync->description(); 1045 QString des = eventLSync->description();
1038 QString pref = "e"; 1046 QString pref = "e";
1039 if ( inR->type() == "Todo" ) 1047 if ( inR->type() == "Todo" )
1040 pref = "t"; 1048 pref = "t";
1041 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1049 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1042 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1050 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1043 //remote->deleteIncidence( inR ); 1051 //remote->deleteIncidence( inR );
1044 ++deletedEventR; 1052 ++deletedEventR;
1045 } else { 1053 } else {
1046 inR->setLastModified( modifiedCalendar ); 1054 inR->setLastModified( modifiedCalendar );
1047 local->addIncidence( inR->clone() ); 1055 local->addIncidence( inR->clone() );
1048 ++addedEvent; 1056 ++addedEvent;
1049 } 1057 }
1050 } else { 1058 } else {
1051 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1059 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1052 inR->setLastModified( modifiedCalendar ); 1060 inR->setLastModified( modifiedCalendar );
1053 local->addIncidence( inR->clone() ); 1061 local->addIncidence( inR->clone() );
1054 ++addedEvent; 1062 ++addedEvent;
1055 } else { 1063 } else {
1056 checkExternSyncEvent(eventRSyncSharp, inR); 1064 checkExternSyncEvent(eventRSyncSharp, inR);
1057 remote->deleteIncidence( inR ); 1065 remote->deleteIncidence( inR );
1058 ++deletedEventR; 1066 ++deletedEventR;
1059 } 1067 }
1060 } 1068 }
1061 } 1069 }
1062 } 1070 }
1063 inR = er.next(); 1071 inR = er.next();
1064 } 1072 }
1065 QPtrList<Incidence> el = local->rawIncidences(); 1073 QPtrList<Incidence> el = local->rawIncidences();
1066 inL = el.first(); 1074 inL = el.first();
1067 modulo = (el.count()/10)+1; 1075 modulo = (el.count()/10)+1;
1068 bar.setCaption (i18n("Add / remove events") ); 1076 bar.setCaption (i18n("Add / remove events") );
1069 bar.setTotalSteps ( el.count() ) ; 1077 bar.setTotalSteps ( el.count() ) ;
1070 bar.show(); 1078 bar.show();
1071 incCounter = 0; 1079 incCounter = 0;
1072 1080
1073 while ( inL ) { 1081 while ( inL ) {
1074 1082
1075 qApp->processEvents(); 1083 qApp->processEvents();
1076 if ( ! bar.isVisible() ) 1084 if ( ! bar.isVisible() )
1077 return false; 1085 return false;
1078 if ( incCounter % modulo == 0 ) 1086 if ( incCounter % modulo == 0 )
1079 bar.setProgress( incCounter ); 1087 bar.setProgress( incCounter );
1080 ++incCounter; 1088 ++incCounter;
1081 uid = inL->uid(); 1089 uid = inL->uid();
1082 bool skipIncidence = false; 1090 bool skipIncidence = false;
1083 if ( uid.left(15) == QString("last-syncEvent-") ) 1091 if ( uid.left(15) == QString("last-syncEvent-") )
1084 skipIncidence = true; 1092 skipIncidence = true;
1085 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" ) 1093 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" )
1086 skipIncidence = true; 1094 skipIncidence = true;
1087 if ( !skipIncidence ) { 1095 if ( !skipIncidence ) {
1088 inR = remote->incidence( uid ); 1096 inR = remote->incidence( uid );
1089 if ( ! inR ) { 1097 if ( ! inR ) {
1090 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1098 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1091 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1099 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1092 local->deleteIncidence( inL ); 1100 local->deleteIncidence( inL );
1093 ++deletedEventL; 1101 ++deletedEventL;
1094 } else { 1102 } else {
1095 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { 1103 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) {
1096 inL->removeID(mCurrentSyncDevice ); 1104 inL->removeID(mCurrentSyncDevice );
1097 ++addedEventR; 1105 ++addedEventR;
1098 inL->setLastModified( modifiedCalendar ); 1106 inL->setLastModified( modifiedCalendar );
1099 remote->addIncidence( inL->clone() ); 1107 remote->addIncidence( inL->clone() );
1100 } 1108 }
1101 } 1109 }
1102 } else { 1110 } else {
1103 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1111 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1104 checkExternSyncEvent(eventLSyncSharp, inL); 1112 checkExternSyncEvent(eventLSyncSharp, inL);
1105 local->deleteIncidence( inL ); 1113 local->deleteIncidence( inL );
1106 ++deletedEventL; 1114 ++deletedEventL;
1107 } else { 1115 } else {
1108 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) { 1116 if ( ! KOPrefs::instance()->mWriteBackExistingOnly ) {
1109 ++addedEventR; 1117 ++addedEventR;
1110 inL->setLastModified( modifiedCalendar ); 1118 inL->setLastModified( modifiedCalendar );
1111 remote->addIncidence( inL->clone() ); 1119 remote->addIncidence( inL->clone() );
1112 } 1120 }
1113 } 1121 }
1114 } 1122 }
1115 } 1123 }
1116 } 1124 }
1117 inL = el.next(); 1125 inL = el.next();
1118 } 1126 }
1119 1127 if ( KOPrefs::instance()->mWriteBackInFuture ) {
1128 er = remote->rawIncidences();
1129 inR = er.first();
1130 QDateTime dt;
1131 QDateTime cur = QDateTime::currentDateTime();
1132 QDateTime end = cur.addSecs( KOPrefs::instance()->mWriteBackInFuture * 3600 *24 *7 );
1133 while ( inR ) {
1134 if ( inR->type() == "Todo" ) {
1135 Todo * t = (Todo*)inR;
1136 if ( t->hasDueDate() )
1137 dt = t->dtDue();
1138 else
1139 dt = cur.addSecs( 62 );
1140 }
1141 else dt = inR->dtStart();
1142 if ( dt < cur || dt > end )
1143 remote->deleteIncidence( inR );
1144 inR = er.next();
1145 }
1146 }
1120 bar.hide(); 1147 bar.hide();
1121 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1148 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1122 eventLSync->setReadOnly( false ); 1149 eventLSync->setReadOnly( false );
1123 eventLSync->setDtStart( mLastCalendarSync ); 1150 eventLSync->setDtStart( mLastCalendarSync );
1124 eventRSync->setDtStart( mLastCalendarSync ); 1151 eventRSync->setDtStart( mLastCalendarSync );
1125 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1152 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1126 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1153 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1127 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1154 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1128 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1155 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1129 eventLSync->setReadOnly( true ); 1156 eventLSync->setReadOnly( true );
1130 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 1157 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
1131 remote->addEvent( eventRSync ); 1158 remote->addEvent( eventRSync );
1132 QString mes; 1159 QString mes;
1133 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 ); 1160 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 );
1134 if ( KOPrefs::instance()->mShowSyncSummary ) { 1161 if ( KOPrefs::instance()->mShowSyncSummary ) {
1135 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") ); 1162 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") );
1136 } 1163 }
1137 qDebug( mes ); 1164 qDebug( mes );
1138 mCalendar->checkAlarmForIncidence( 0, true ); 1165 mCalendar->checkAlarmForIncidence( 0, true );
1139 return syncOK; 1166 return syncOK;
1140} 1167}
1141 1168
1142void CalendarView::setSyncDevice( QString s ) 1169void CalendarView::setSyncDevice( QString s )
1143{ 1170{
1144 mCurrentSyncDevice= s; 1171 mCurrentSyncDevice= s;
1145} 1172}
1146void CalendarView::setSyncName( QString s ) 1173void CalendarView::setSyncName( QString s )
1147{ 1174{
1148 mCurrentSyncName= s; 1175 mCurrentSyncName= s;
1149} 1176}
1150bool CalendarView::syncCalendar(QString filename, int mode) 1177bool CalendarView::syncCalendar(QString filename, int mode)
1151{ 1178{
1152 mGlobalSyncMode = SYNC_MODE_NORMAL; 1179 mGlobalSyncMode = SYNC_MODE_NORMAL;
1153 CalendarLocal* calendar = new CalendarLocal(); 1180 CalendarLocal* calendar = new CalendarLocal();
1154 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1181 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1155 FileStorage* storage = new FileStorage( calendar ); 1182 FileStorage* storage = new FileStorage( calendar );
1156 bool syncOK = false; 1183 bool syncOK = false;
1157 storage->setFileName( filename ); 1184 storage->setFileName( filename );
1158 // qDebug("loading ... "); 1185 // qDebug("loading ... ");
1159 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) { 1186 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) {
1160 getEventViewerDialog()->setSyncMode( true ); 1187 getEventViewerDialog()->setSyncMode( true );
1161 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1188 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1162 getEventViewerDialog()->setSyncMode( false ); 1189 getEventViewerDialog()->setSyncMode( false );
1163 if ( syncOK ) { 1190 if ( syncOK ) {
1164 if ( KOPrefs::instance()->mWriteBackFile ) 1191 if ( KOPrefs::instance()->mWriteBackFile )
1165 { 1192 {
1166 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 1193 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
1167 storage->save(); 1194 storage->save();
1168 } 1195 }
1169 } 1196 }
1170 setModified( true ); 1197 setModified( true );
1171 } 1198 }
1172 delete storage; 1199 delete storage;
1173 delete calendar; 1200 delete calendar;
1174 if ( syncOK ) 1201 if ( syncOK )
1175 updateView(); 1202 updateView();
1176 return syncOK; 1203 return syncOK;
1177} 1204}
1178void CalendarView::syncPhone() 1205void CalendarView::syncPhone()
1179{ 1206{
1180 syncExternal( 1 ); 1207 syncExternal( 1 );
1181} 1208}
1182void CalendarView::syncExternal( int mode ) 1209void CalendarView::syncExternal( int mode )
1183{ 1210{
1184 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1211 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1185 //mCurrentSyncDevice = "sharp-DTM"; 1212 //mCurrentSyncDevice = "sharp-DTM";
1186 if ( KOPrefs::instance()->mAskForPreferences ) 1213 if ( KOPrefs::instance()->mAskForPreferences )
1187 edit_sync_options(); 1214 edit_sync_options();
1188 qApp->processEvents(); 1215 qApp->processEvents();
1189 CalendarLocal* calendar = new CalendarLocal(); 1216 CalendarLocal* calendar = new CalendarLocal();
1190 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1217 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1191 bool syncOK = false; 1218 bool syncOK = false;
1192 bool loadSuccess = false; 1219 bool loadSuccess = false;
1193 PhoneFormat* phoneFormat = 0; 1220 PhoneFormat* phoneFormat = 0;
1194#ifndef DESKTOP_VERSION 1221#ifndef DESKTOP_VERSION
1195 SharpFormat* sharpFormat = 0; 1222 SharpFormat* sharpFormat = 0;
1196 if ( mode == 0 ) { // sharp 1223 if ( mode == 0 ) { // sharp
1197 sharpFormat = new SharpFormat () ; 1224 sharpFormat = new SharpFormat () ;
1198 loadSuccess = sharpFormat->load( calendar, mCalendar ); 1225 loadSuccess = sharpFormat->load( calendar, mCalendar );
1199 1226
1200 } else 1227 } else
1201#endif 1228#endif
1202 if ( mode == 1 ) { // phone 1229 if ( mode == 1 ) { // phone
1203 phoneFormat = new PhoneFormat (mCurrentSyncDevice, 1230 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
1204 KOPrefs::instance()->mPhoneDevice, 1231 KOPrefs::instance()->mPhoneDevice,
1205 KOPrefs::instance()->mPhoneConnection, 1232 KOPrefs::instance()->mPhoneConnection,
1206 KOPrefs::instance()->mPhoneModel); 1233 KOPrefs::instance()->mPhoneModel);
1207 loadSuccess = phoneFormat->load( calendar,mCalendar); 1234 loadSuccess = phoneFormat->load( calendar,mCalendar);
1208 1235
1209 } else 1236 } else
1210 return; 1237 return;
1211 if ( loadSuccess ) { 1238 if ( loadSuccess ) {
1212 getEventViewerDialog()->setSyncMode( true ); 1239 getEventViewerDialog()->setSyncMode( true );
1213 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs ); 1240 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs );
1214 getEventViewerDialog()->setSyncMode( false ); 1241 getEventViewerDialog()->setSyncMode( false );
1215 qApp->processEvents(); 1242 qApp->processEvents();
1216 if ( syncOK ) { 1243 if ( syncOK ) {
1217 if ( KOPrefs::instance()->mWriteBackFile ) 1244 if ( KOPrefs::instance()->mWriteBackFile )
1218 { 1245 {
1219 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 1246 QPtrList<Incidence> iL = mCalendar->rawIncidences();
1220 Incidence* inc = iL.first(); 1247 Incidence* inc = iL.first();
1221 /* obsolete 1248 /* obsolete
1222 while ( inc ) { 1249 while ( inc ) {
1223 inc->setZaurusStat( inc->revision () ); 1250 inc->setZaurusStat( inc->revision () );
1224 inc = iL.next(); 1251 inc = iL.next();
1225 } 1252 }
1226 */ 1253 */
1227#ifndef DESKTOP_VERSION 1254#ifndef DESKTOP_VERSION
1228 if ( sharpFormat ) 1255 if ( sharpFormat )
1229 sharpFormat->save(calendar); 1256 sharpFormat->save(calendar);
1230#endif 1257#endif
1231 if ( phoneFormat ) 1258 if ( phoneFormat )
1232 phoneFormat->save(calendar); 1259 phoneFormat->save(calendar);
1233 iL = calendar->rawIncidences(); 1260 iL = calendar->rawIncidences();
1234 inc = iL.first(); 1261 inc = iL.first();
1235 Incidence* loc; 1262 Incidence* loc;
1236 while ( inc ) { 1263 while ( inc ) {
1237 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 1264 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
1238 loc = mCalendar->incidence(inc->uid() ); 1265 loc = mCalendar->incidence(inc->uid() );
1239 if ( loc ) { 1266 if ( loc ) {
1240 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 1267 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
1241 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 1268 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
1242 } 1269 }
1243 } 1270 }
1244 inc = iL.next(); 1271 inc = iL.next();
1245 } 1272 }
1246 Incidence* lse = getLastSyncEvent(); 1273 Incidence* lse = getLastSyncEvent();
1247 if ( lse ) { 1274 if ( lse ) {
1248 lse->setReadOnly( false ); 1275 lse->setReadOnly( false );
1249 lse->setDescription( "" ); 1276 lse->setDescription( "" );
1250 lse->setReadOnly( true ); 1277 lse->setReadOnly( true );
1251 } 1278 }
1252 } 1279 }
1253 } 1280 }
1254 setModified( true ); 1281 setModified( true );
1255 } else { 1282 } else {
1256 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 1283 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
1257 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 1284 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
1258 question, i18n("Ok")) ; 1285 question, i18n("Ok")) ;
1259 1286
1260 } 1287 }
1261 delete calendar; 1288 delete calendar;
1262 updateView(); 1289 updateView();
1263 return ;//syncOK; 1290 return ;//syncOK;
1264 1291
1265} 1292}
1266void CalendarView::syncSharp() 1293void CalendarView::syncSharp()
1267{ 1294{
1268 syncExternal( 0 ); 1295 syncExternal( 0 );
1269 1296
1270} 1297}
1271 1298
1272 1299
1273#include <kabc/stdaddressbook.h> 1300#include <kabc/stdaddressbook.h>
1274bool CalendarView::importBday() 1301bool CalendarView::importBday()
1275{ 1302{
1276 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 1303 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
1277 KABC::AddressBook::Iterator it; 1304 KABC::AddressBook::Iterator it;
1278 int count = 0; 1305 int count = 0;
1279 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1306 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1280 ++count; 1307 ++count;
1281 } 1308 }
1282 QProgressBar bar(count,0 ); 1309 QProgressBar bar(count,0 );
1283 int w = 300; 1310 int w = 300;
1284 if ( QApplication::desktop()->width() < 320 ) 1311 if ( QApplication::desktop()->width() < 320 )
1285 w = 220; 1312 w = 220;
1286 int h = bar.sizeHint().height() ; 1313 int h = bar.sizeHint().height() ;
1287 int dw = QApplication::desktop()->width(); 1314 int dw = QApplication::desktop()->width();
1288 int dh = QApplication::desktop()->height(); 1315 int dh = QApplication::desktop()->height();
1289 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1316 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1290 bar.show(); 1317 bar.show();
1291 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 1318 bar.setCaption (i18n("Reading addressbook - close to abort!") );
1292 qApp->processEvents(); 1319 qApp->processEvents();
1293 count = 0; 1320 count = 0;
1294 int addCount = 0; 1321 int addCount = 0;
1295 KCal::Attendee* a = 0; 1322 KCal::Attendee* a = 0;
1296 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1323 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1297 if ( ! bar.isVisible() ) 1324 if ( ! bar.isVisible() )
1298 return false; 1325 return false;
1299 bar.setProgress( count++ ); 1326 bar.setProgress( count++ );
1300 qApp->processEvents(); 1327 qApp->processEvents();
1301 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 1328 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
1302 if ( (*it).birthday().date().isValid() ){ 1329 if ( (*it).birthday().date().isValid() ){
1303 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1330 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1304 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 1331 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
1305 ++addCount; 1332 ++addCount;
1306 } 1333 }
1307 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 1334 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
1308 if ( anni.isValid() ){ 1335 if ( anni.isValid() ){
1309 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1336 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1310 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 1337 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
1311 ++addCount; 1338 ++addCount;
1312 } 1339 }
1313 } 1340 }
1314 updateView(); 1341 updateView();
1315 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 1342 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
1316 return true; 1343 return true;
1317} 1344}
1318 1345
1319bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 1346bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
1320{ 1347{
1321 //qDebug("addAnni "); 1348 //qDebug("addAnni ");
1322 Event * ev = new Event(); 1349 Event * ev = new Event();
1323 if ( a ) { 1350 if ( a ) {
1324 ev->addAttendee( a ); 1351 ev->addAttendee( a );
1325 } 1352 }
1326 QString kind; 1353 QString kind;
1327 if ( birthday ) 1354 if ( birthday )
1328 kind = i18n( "Birthday" ); 1355 kind = i18n( "Birthday" );
1329 else 1356 else
1330 kind = i18n( "Anniversary" ); 1357 kind = i18n( "Anniversary" );
1331 ev->setSummary( name + " - " + kind ); 1358 ev->setSummary( name + " - " + kind );
1332 ev->setOrganizer( "nobody@nowhere" ); 1359 ev->setOrganizer( "nobody@nowhere" );
1333 ev->setCategories( kind ); 1360 ev->setCategories( kind );
1334 ev->setDtStart( QDateTime(date) ); 1361 ev->setDtStart( QDateTime(date) );
1335 ev->setDtEnd( QDateTime(date) ); 1362 ev->setDtEnd( QDateTime(date) );
1336 ev->setFloats( true ); 1363 ev->setFloats( true );
1337 Recurrence * rec = ev->recurrence(); 1364 Recurrence * rec = ev->recurrence();
1338 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 1365 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
1339 rec->addYearlyNum( date.month() ); 1366 rec->addYearlyNum( date.month() );
1340 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 1367 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
1341 delete ev; 1368 delete ev;
1342 return false; 1369 return false;
1343 } 1370 }
1344 return true; 1371 return true;
1345 1372
1346} 1373}
1347bool CalendarView::importQtopia( const QString &categories, 1374bool CalendarView::importQtopia( const QString &categories,
1348 const QString &datebook, 1375 const QString &datebook,
1349 const QString &todolist ) 1376 const QString &todolist )
1350{ 1377{
1351 1378
1352 QtopiaFormat qtopiaFormat; 1379 QtopiaFormat qtopiaFormat;
1353 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1380 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1354 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 1381 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
1355 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 1382 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
1356 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 1383 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
1357 1384
1358 updateView(); 1385 updateView();
1359 return true; 1386 return true;
1360 1387
1361#if 0 1388#if 0
1362 mGlobalSyncMode = SYNC_MODE_QTOPIA; 1389 mGlobalSyncMode = SYNC_MODE_QTOPIA;
1363 mCurrentSyncDevice = "qtopia-XML"; 1390 mCurrentSyncDevice = "qtopia-XML";
1364 if ( KOPrefs::instance()->mAskForPreferences ) 1391 if ( KOPrefs::instance()->mAskForPreferences )
1365 edit_sync_options(); 1392 edit_sync_options();
1366 qApp->processEvents(); 1393 qApp->processEvents();
1367 CalendarLocal* calendar = new CalendarLocal(); 1394 CalendarLocal* calendar = new CalendarLocal();
1368 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1395 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1369 bool syncOK = false; 1396 bool syncOK = false;
1370 QtopiaFormat qtopiaFormat; 1397 QtopiaFormat qtopiaFormat;
1371 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1398 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1372 bool loadOk = true; 1399 bool loadOk = true;
1373 if ( !categories.isEmpty() ) 1400 if ( !categories.isEmpty() )
1374 loadOk = qtopiaFormat.load( calendar, categories ); 1401 loadOk = qtopiaFormat.load( calendar, categories );
1375 if ( loadOk && !datebook.isEmpty() ) 1402 if ( loadOk && !datebook.isEmpty() )
1376 loadOk = qtopiaFormat.load( calendar, datebook ); 1403 loadOk = qtopiaFormat.load( calendar, datebook );
1377 if ( loadOk && !todolist.isEmpty() ) 1404 if ( loadOk && !todolist.isEmpty() )
1378 loadOk = qtopiaFormat.load( calendar, todolist ); 1405 loadOk = qtopiaFormat.load( calendar, todolist );
1379 1406
1380 if ( loadOk ) { 1407 if ( loadOk ) {
1381 getEventViewerDialog()->setSyncMode( true ); 1408 getEventViewerDialog()->setSyncMode( true );
1382 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs ); 1409 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs );
1383 getEventViewerDialog()->setSyncMode( false ); 1410 getEventViewerDialog()->setSyncMode( false );
1384 qApp->processEvents(); 1411 qApp->processEvents();
1385 if ( syncOK ) { 1412 if ( syncOK ) {
1386 if ( KOPrefs::instance()->mWriteBackFile ) 1413 if ( KOPrefs::instance()->mWriteBackFile )
1387 { 1414 {
1388 // write back XML file 1415 // write back XML file
1389 1416
1390 } 1417 }
1391 setModified( true ); 1418 setModified( true );
1392 } 1419 }
1393 } else { 1420 } else {
1394 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 1421 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
1395 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 1422 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
1396 question, i18n("Ok")) ; 1423 question, i18n("Ok")) ;
1397 } 1424 }
1398 delete calendar; 1425 delete calendar;
1399 updateView(); 1426 updateView();
1400 return syncOK; 1427 return syncOK;
1401 1428
1402 1429
1403#endif 1430#endif
1404 1431
1405} 1432}
1406 1433
1407void CalendarView::setSyncEventsReadOnly() 1434void CalendarView::setSyncEventsReadOnly()
1408{ 1435{
1409 Event * ev; 1436 Event * ev;
1410 QPtrList<Event> eL = mCalendar->rawEvents(); 1437 QPtrList<Event> eL = mCalendar->rawEvents();
1411 ev = eL.first(); 1438 ev = eL.first();
1412 while ( ev ) { 1439 while ( ev ) {
1413 if ( ev->uid().left(15) == QString("last-syncEvent-") ) 1440 if ( ev->uid().left(15) == QString("last-syncEvent-") )
1414 ev->setReadOnly( true ); 1441 ev->setReadOnly( true );
1415 ev = eL.next(); 1442 ev = eL.next();
1416 } 1443 }
1417} 1444}
1418bool CalendarView::openCalendar(QString filename, bool merge) 1445bool CalendarView::openCalendar(QString filename, bool merge)
1419{ 1446{
1420 1447
1421 if (filename.isEmpty()) { 1448 if (filename.isEmpty()) {
1422 return false; 1449 return false;
1423 } 1450 }
1424 1451
1425 if (!QFile::exists(filename)) { 1452 if (!QFile::exists(filename)) {
1426 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 1453 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
1427 return false; 1454 return false;
1428 } 1455 }
1429 1456
1430 globalFlagBlockAgenda = 1; 1457 globalFlagBlockAgenda = 1;
1431 if (!merge) mCalendar->close(); 1458 if (!merge) mCalendar->close();
1432 1459
1433 mStorage->setFileName( filename ); 1460 mStorage->setFileName( filename );
1434 1461
1435 if ( mStorage->load(KOPrefs::instance()->mUseQuicksave) ) { 1462 if ( mStorage->load(KOPrefs::instance()->mUseQuicksave) ) {
1436 if ( merge ) ;//setModified( true ); 1463 if ( merge ) ;//setModified( true );
1437 else { 1464 else {
1438 //setModified( true ); 1465 //setModified( true );
1439 mViewManager->setDocumentId( filename ); 1466 mViewManager->setDocumentId( filename );
1440 mDialogManager->setDocumentId( filename ); 1467 mDialogManager->setDocumentId( filename );
1441 mTodoList->setDocumentId( filename ); 1468 mTodoList->setDocumentId( filename );
1442 } 1469 }
1443 globalFlagBlockAgenda = 2; 1470 globalFlagBlockAgenda = 2;
1444 // if ( getLastSyncEvent() ) 1471 // if ( getLastSyncEvent() )
1445 // getLastSyncEvent()->setReadOnly( true ); 1472 // getLastSyncEvent()->setReadOnly( true );
1446 mCalendar->reInitAlarmSettings(); 1473 mCalendar->reInitAlarmSettings();
1447 setSyncEventsReadOnly(); 1474 setSyncEventsReadOnly();
1448 updateUnmanagedViews(); 1475 updateUnmanagedViews();
1449 updateView(); 1476 updateView();
1450 if ( filename != MainWindow::defaultFileName() ) 1477 if ( filename != MainWindow::defaultFileName() )
1451 saveCalendar( MainWindow::defaultFileName() ); 1478 saveCalendar( MainWindow::defaultFileName() );
1452 loadedFileVersion = QDateTime::currentDateTime(); 1479 loadedFileVersion = QDateTime::currentDateTime();
1453 return true; 1480 return true;
1454 } else { 1481 } else {
1455 // while failing to load, the calendar object could 1482 // while failing to load, the calendar object could
1456 // have become partially populated. Clear it out. 1483 // have become partially populated. Clear it out.
1457 if ( !merge ) mCalendar->close(); 1484 if ( !merge ) mCalendar->close();
1458 1485
1459 KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 1486 KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
1460 1487
1461 globalFlagBlockAgenda = 2; 1488 globalFlagBlockAgenda = 2;
1462 updateView(); 1489 updateView();
1463 } 1490 }
1464 return false; 1491 return false;
1465} 1492}
1466void CalendarView::setLoadedFileVersion(QDateTime dt) 1493void CalendarView::setLoadedFileVersion(QDateTime dt)
1467{ 1494{
1468 loadedFileVersion = dt; 1495 loadedFileVersion = dt;
1469} 1496}
1470bool CalendarView::checkFileChanged(QString fn) 1497bool CalendarView::checkFileChanged(QString fn)
1471{ 1498{
1472 QFileInfo finf ( fn ); 1499 QFileInfo finf ( fn );
1473 if ( !finf.exists() ) 1500 if ( !finf.exists() )
1474 return true; 1501 return true;
1475 QDateTime dt = finf.lastModified (); 1502 QDateTime dt = finf.lastModified ();
1476 if ( dt <= loadedFileVersion ) 1503 if ( dt <= loadedFileVersion )
1477 return false; 1504 return false;
1478 return true; 1505 return true;
1479 1506
1480} 1507}
1481bool CalendarView::checkFileVersion(QString fn) 1508bool CalendarView::checkFileVersion(QString fn)
1482{ 1509{
1483 QFileInfo finf ( fn ); 1510 QFileInfo finf ( fn );
1484 if ( !finf.exists() ) 1511 if ( !finf.exists() )
1485 return true; 1512 return true;
1486 QDateTime dt = finf.lastModified (); 1513 QDateTime dt = finf.lastModified ();
1487 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1()); 1514 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1());
1488 //qDebug("file on disk version %s",dt.toString().latin1()); 1515 //qDebug("file on disk version %s",dt.toString().latin1());
1489 if ( dt <= loadedFileVersion ) 1516 if ( dt <= loadedFileVersion )
1490 return true; 1517 return true;
1491 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)) , 1518 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)) ,
1492 i18n("KO/Pi Warning"),i18n("Overwrite"), 1519 i18n("KO/Pi Warning"),i18n("Overwrite"),
1493 i18n("Sync+save")); 1520 i18n("Sync+save"));
1494 1521
1495 if ( km == KMessageBox::Cancel ) 1522 if ( km == KMessageBox::Cancel )
1496 return false; 1523 return false;
1497 if ( km == KMessageBox::Yes ) 1524 if ( km == KMessageBox::Yes )
1498 return true; 1525 return true;
1499 1526
1500 setSyncDevice("deleteaftersync" ); 1527 setSyncDevice("deleteaftersync" );
1501 KOPrefs::instance()->mAskForPreferences = true; 1528 KOPrefs::instance()->mAskForPreferences = true;
1502 KOPrefs::instance()->mSyncAlgoPrefs = 3; 1529 KOPrefs::instance()->mSyncAlgoPrefs = 3;
1503 KOPrefs::instance()->mWriteBackFile = false; 1530 KOPrefs::instance()->mWriteBackFile = false;
diff --git a/korganizer/koprefs.h b/korganizer/koprefs.h
index 446fe2e..a9ac52f 100644
--- a/korganizer/koprefs.h
+++ b/korganizer/koprefs.h
@@ -1,303 +1,304 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@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#ifndef KOPREFS_H 23#ifndef KOPREFS_H
24#define KOPREFS_H 24#define KOPREFS_H
25 25
26#include <qdict.h> 26#include <qdict.h>
27 27
28#include <libkdepim/kpimprefs.h> 28#include <libkdepim/kpimprefs.h>
29 29
30class KConfig; 30class KConfig;
31class QFont; 31class QFont;
32class QColor; 32class QColor;
33class QStringList; 33class QStringList;
34 34
35class KOPrefs : public KPimPrefs 35class KOPrefs : public KPimPrefs
36{ 36{
37 public: 37 public:
38 enum { FormatVCalendar, FormatICalendar }; 38 enum { FormatVCalendar, FormatICalendar };
39 enum { MailClientKMail, MailClientSendmail }; 39 enum { MailClientKMail, MailClientSendmail };
40 enum { IMIPDummy, IMIPKMail }; 40 enum { IMIPDummy, IMIPKMail };
41 enum { IMIPOutbox, IMIPdirectsend }; 41 enum { IMIPOutbox, IMIPdirectsend };
42 enum { neverAuto, addressbookAuto, selectedAuto }; 42 enum { neverAuto, addressbookAuto, selectedAuto };
43 enum { standardDestination, askDestination }; 43 enum { standardDestination, askDestination };
44 44
45 virtual ~KOPrefs(); 45 virtual ~KOPrefs();
46 46
47 /** Get instance of KOPrefs. It is made sure that there is only one 47 /** Get instance of KOPrefs. It is made sure that there is only one
48 instance. */ 48 instance. */
49 static KOPrefs *instance(); 49 static KOPrefs *instance();
50 50
51 /** Set preferences to default values */ 51 /** Set preferences to default values */
52 void usrSetDefaults(); 52 void usrSetDefaults();
53 53
54 /** Read preferences from config file */ 54 /** Read preferences from config file */
55 void usrReadConfig(); 55 void usrReadConfig();
56 56
57 /** Write preferences to config file */ 57 /** Write preferences to config file */
58 void usrWriteConfig(); 58 void usrWriteConfig();
59 void setCategoryDefaults(); 59 void setCategoryDefaults();
60 60
61 protected: 61 protected:
62 void setTimeZoneIdDefault(); 62 void setTimeZoneIdDefault();
63 63
64 /** Fill empty mail fields with default values. */ 64 /** Fill empty mail fields with default values. */
65 void fillMailDefaults(); 65 void fillMailDefaults();
66 66
67 private: 67 private:
68 /** Constructor disabled for public. Use instance() to create a KOPrefs 68 /** Constructor disabled for public. Use instance() to create a KOPrefs
69 object. */ 69 object. */
70 KOPrefs(); 70 KOPrefs();
71 71
72 static KOPrefs *mInstance; 72 static KOPrefs *mInstance;
73 QDict<QString> *mLocaleDict; 73 QDict<QString> *mLocaleDict;
74 QStringList getDefaultList(); 74 QStringList getDefaultList();
75 public: 75 public:
76 // preferences data 76 // preferences data
77 KConfig* getConfig(); 77 KConfig* getConfig();
78 void setFullName(const QString &); 78 void setFullName(const QString &);
79 QString fullName(); 79 QString fullName();
80 void setEmail(const QString &); 80 void setEmail(const QString &);
81 QString email(); 81 QString email();
82 82
83 QString mAdditional; 83 QString mAdditional;
84 84
85 bool mEmailControlCenter; 85 bool mEmailControlCenter;
86 86
87 bool mBcc; 87 bool mBcc;
88 bool mAutoSave; 88 bool mAutoSave;
89 int mAutoSaveInterval; 89 int mAutoSaveInterval;
90 bool mConfirm; 90 bool mConfirm;
91 91
92 bool mEnableGroupScheduling; 92 bool mEnableGroupScheduling;
93 bool mEnableProjectView; 93 bool mEnableProjectView;
94 94
95 int mDefaultFormat; 95 int mDefaultFormat;
96 int mMailClient; 96 int mMailClient;
97 97
98 QString mTimeZone; 98 QString mTimeZone;
99 QString mTimeZoneId; 99 QString mTimeZoneId;
100 //QString mTimeZoneName; // e.g. +00:04:00 Indian/Mauritius 100 //QString mTimeZoneName; // e.g. +00:04:00 Indian/Mauritius
101 //int mTimeZoneOffset; // e.g. -240 min 101 //int mTimeZoneOffset; // e.g. -240 min
102 bool mUseDaylightsaving; 102 bool mUseDaylightsaving;
103 int mDaylightsavingStart; 103 int mDaylightsavingStart;
104 int mDaylightsavingEnd; 104 int mDaylightsavingEnd;
105 int mStartTime; 105 int mStartTime;
106 int mDefaultDuration; 106 int mDefaultDuration;
107 int mAlarmTime; 107 int mAlarmTime;
108 int mDaylightSavings; 108 int mDaylightSavings;
109 109
110 int mWorkingHoursStart; 110 int mWorkingHoursStart;
111 int mWorkingHoursEnd; 111 int mWorkingHoursEnd;
112 bool mExcludeHolidays; 112 bool mExcludeHolidays;
113 bool mExcludeSaturdays; 113 bool mExcludeSaturdays;
114 bool mMarcusBainsShowSeconds; 114 bool mMarcusBainsShowSeconds;
115 115
116 QFont mTimeBarFont; 116 QFont mTimeBarFont;
117 QFont mMonthViewFont; 117 QFont mMonthViewFont;
118 QFont mAgendaViewFont; 118 QFont mAgendaViewFont;
119 QFont mMarcusBainsFont; 119 QFont mMarcusBainsFont;
120 QFont mTimeLabelsFont; 120 QFont mTimeLabelsFont;
121 QFont mTodoViewFont; 121 QFont mTodoViewFont;
122 QFont mListViewFont; 122 QFont mListViewFont;
123 QFont mDateNavigatorFont; 123 QFont mDateNavigatorFont;
124 QFont mEditBoxFont; 124 QFont mEditBoxFont;
125 QFont mJornalViewFont; 125 QFont mJornalViewFont;
126 QFont mWhatsNextFont; 126 QFont mWhatsNextFont;
127 QFont mEventViewFont; 127 QFont mEventViewFont;
128 128
129 129
130 130
131 131
132 QColor mHolidayColor; 132 QColor mHolidayColor;
133 QColor mHighlightColor; 133 QColor mHighlightColor;
134 QColor mEventColor; 134 QColor mEventColor;
135 QColor mAgendaBgColor; 135 QColor mAgendaBgColor;
136 QColor mWorkingHoursColor; 136 QColor mWorkingHoursColor;
137 QColor mTodoDueTodayColor; 137 QColor mTodoDueTodayColor;
138 QColor mTodoOverdueColor; 138 QColor mTodoOverdueColor;
139 QColor mMonthViewEvenColor; 139 QColor mMonthViewEvenColor;
140 QColor mMonthViewOddColor; 140 QColor mMonthViewOddColor;
141 QColor mMonthViewHolidayColor; 141 QColor mMonthViewHolidayColor;
142 bool mMonthViewUsesDayColors; 142 bool mMonthViewUsesDayColors;
143 bool mMonthViewSatSunTog; 143 bool mMonthViewSatSunTog;
144 QColor mAppColor1; 144 QColor mAppColor1;
145 QColor mAppColor2; 145 QColor mAppColor2;
146 bool mUseAppColors; 146 bool mUseAppColors;
147 147
148 int mDayBegins; 148 int mDayBegins;
149 int mHourSize; 149 int mHourSize;
150 int mAllDaySize; 150 int mAllDaySize;
151 bool mShowFullMenu; 151 bool mShowFullMenu;
152 bool mDailyRecur; 152 bool mDailyRecur;
153 bool mWeeklyRecur; 153 bool mWeeklyRecur;
154 bool mMonthDailyRecur; 154 bool mMonthDailyRecur;
155 bool mMonthWeeklyRecur; 155 bool mMonthWeeklyRecur;
156 bool mMonthShowIcons; 156 bool mMonthShowIcons;
157 bool mMonthShowShort; 157 bool mMonthShowShort;
158 bool mEnableToolTips; 158 bool mEnableToolTips;
159 bool mEnableMonthScroll; 159 bool mEnableMonthScroll;
160 bool mFullViewMonth; 160 bool mFullViewMonth;
161 bool mMonthViewUsesCategoryColor; 161 bool mMonthViewUsesCategoryColor;
162 bool mFullViewTodo; 162 bool mFullViewTodo;
163 bool mShowCompletedTodo; 163 bool mShowCompletedTodo;
164 bool mMarcusBainsEnabled; 164 bool mMarcusBainsEnabled;
165 int mNextXDays; 165 int mNextXDays;
166 int mWhatsNextDays; 166 int mWhatsNextDays;
167 int mWhatsNextPrios; 167 int mWhatsNextPrios;
168 bool mEnableQuickTodo; 168 bool mEnableQuickTodo;
169 bool mLanguageChanged; 169 bool mLanguageChanged;
170 170
171 bool mCompactDialogs; 171 bool mCompactDialogs;
172 bool mVerticalScreen; 172 bool mVerticalScreen;
173 173
174 bool mShowIconNewTodo; 174 bool mShowIconNewTodo;
175 bool mShowIconNewEvent; 175 bool mShowIconNewEvent;
176 bool mShowIconSearch; 176 bool mShowIconSearch;
177 bool mShowIconList; 177 bool mShowIconList;
178 bool mShowIconDay1; 178 bool mShowIconDay1;
179 bool mShowIconDay5; 179 bool mShowIconDay5;
180 bool mShowIconDay7; 180 bool mShowIconDay7;
181 bool mShowIconMonth; 181 bool mShowIconMonth;
182 bool mShowIconTodoview; 182 bool mShowIconTodoview;
183 bool mShowIconBackFast; 183 bool mShowIconBackFast;
184 bool mShowIconBack; 184 bool mShowIconBack;
185 bool mShowIconToday; 185 bool mShowIconToday;
186 bool mShowIconForward; 186 bool mShowIconForward;
187 bool mShowIconForwardFast; 187 bool mShowIconForwardFast;
188 bool mShowIconWhatsThis; 188 bool mShowIconWhatsThis;
189 bool mShowIconNextDays; 189 bool mShowIconNextDays;
190 bool mShowIconNext; 190 bool mShowIconNext;
191 bool mShowIconJournal; 191 bool mShowIconJournal;
192 192
193 bool mShowIconStretch; 193 bool mShowIconStretch;
194 194
195 bool mToolBarHor; 195 bool mToolBarHor;
196 bool mToolBarUp; 196 bool mToolBarUp;
197 bool mToolBarMiniIcons; 197 bool mToolBarMiniIcons;
198 198
199 bool mAskForQuit; 199 bool mAskForQuit;
200 bool mUsePassWd; 200 bool mUsePassWd;
201 bool mWriteBackFile; 201 bool mWriteBackFile;
202 int mWriteBackInFuture;
202 bool mAskForPreferences; 203 bool mAskForPreferences;
203 bool mShowSyncSummary; 204 bool mShowSyncSummary;
204 bool mShowSyncEvents; 205 bool mShowSyncEvents;
205 bool mShowTodoInAgenda; 206 bool mShowTodoInAgenda;
206 bool mWriteBackExistingOnly; 207 bool mWriteBackExistingOnly;
207 208
208 QString mRemoteIP; 209 QString mRemoteIP;
209 QString mRemoteUser; 210 QString mRemoteUser;
210 QString mRemotePassWd; 211 QString mRemotePassWd;
211 QString mRemoteFile; 212 QString mRemoteFile;
212 QString mLocalTempFile; 213 QString mLocalTempFile;
213 QString mPhoneDevice; 214 QString mPhoneDevice;
214 QString mPhoneConnection; 215 QString mPhoneConnection;
215 QString mPhoneModel; 216 QString mPhoneModel;
216 217
217 int mLastSyncTime; 218 int mLastSyncTime;
218 int mSyncAlgoPrefs; 219 int mSyncAlgoPrefs;
219 int mRingSyncAlgoPrefs; 220 int mRingSyncAlgoPrefs;
220 QStringList mSyncProfileNames; 221 QStringList mSyncProfileNames;
221 QStringList mExternSyncProfiles; 222 QStringList mExternSyncProfiles;
222 QString mLocalMachineName; 223 QString mLocalMachineName;
223 void setCategoryColor(QString cat,const QColor & color); 224 void setCategoryColor(QString cat,const QColor & color);
224 QColor *categoryColor(QString cat); 225 QColor *categoryColor(QString cat);
225 226
226 QString mArchiveFile; 227 QString mArchiveFile;
227 QString mHtmlExportFile; 228 QString mHtmlExportFile;
228 bool mHtmlWithSave; 229 bool mHtmlWithSave;
229 230
230 QStringList mSelectedPlugins; 231 QStringList mSelectedPlugins;
231 232
232 QString mLastImportFile; 233 QString mLastImportFile;
233 QString mLastVcalFile; 234 QString mLastVcalFile;
234 QString mLastSaveFile; 235 QString mLastSaveFile;
235 QString mLastLoadFile; 236 QString mLastLoadFile;
236 QString mLastSyncedLocalFile; 237 QString mLastSyncedLocalFile;
237 238
238 239
239 QString mDefaultAlarmFile; 240 QString mDefaultAlarmFile;
240 int mIMIPScheduler; 241 int mIMIPScheduler;
241 int mIMIPSend; 242 int mIMIPSend;
242 QStringList mAdditionalMails; 243 QStringList mAdditionalMails;
243 int mIMIPAutoRefresh; 244 int mIMIPAutoRefresh;
244 int mIMIPAutoInsertReply; 245 int mIMIPAutoInsertReply;
245 int mIMIPAutoInsertRequest; 246 int mIMIPAutoInsertRequest;
246 int mIMIPAutoFreeBusy; 247 int mIMIPAutoFreeBusy;
247 int mIMIPAutoFreeBusyReply; 248 int mIMIPAutoFreeBusyReply;
248 249
249 QStringList mTodoTemplates; 250 QStringList mTodoTemplates;
250 QStringList mEventTemplates; 251 QStringList mEventTemplates;
251 252
252 int mDestination; 253 int mDestination;
253 254
254 255
255 bool mEditOnDoubleClick; 256 bool mEditOnDoubleClick;
256 bool mViewChangeHoldFullscreen; 257 bool mViewChangeHoldFullscreen;
257 bool mViewChangeHoldNonFullscreen; 258 bool mViewChangeHoldNonFullscreen;
258 bool mCenterOnCurrentTime; 259 bool mCenterOnCurrentTime;
259 bool mSetTimeToDayStartAt; 260 bool mSetTimeToDayStartAt;
260 bool mHighlightCurrentDay; 261 bool mHighlightCurrentDay;
261 bool mUseHighlightLightColor; 262 bool mUseHighlightLightColor;
262 bool mListViewMonthTimespan; 263 bool mListViewMonthTimespan;
263 bool mWNViewShowsParents; 264 bool mWNViewShowsParents;
264 bool mWNViewShowLocation; 265 bool mWNViewShowLocation;
265 bool mTodoViewShowsPercentage; 266 bool mTodoViewShowsPercentage;
266 bool mTodoViewUsesCatColors; 267 bool mTodoViewUsesCatColors;
267 bool mTodoViewUsesSmallFont; 268 bool mTodoViewUsesSmallFont;
268 bool mTodoViewUsesForegroundColor; 269 bool mTodoViewUsesForegroundColor;
269 bool mMonthViewUsesForegroundColor; 270 bool mMonthViewUsesForegroundColor;
270 271
271 bool mHightlightDateTimeEdit; 272 bool mHightlightDateTimeEdit;
272 int mPreferredLanguage; 273 int mPreferredLanguage;
273 bool mUseQuicksave; 274 bool mUseQuicksave;
274 int mPreferredTime; 275 int mPreferredTime;
275 int mPreferredDate; 276 int mPreferredDate;
276 bool mWeekStartsOnSunday; 277 bool mWeekStartsOnSunday;
277 bool mShortDateInViewer; 278 bool mShortDateInViewer;
278 QString mUserDateFormatLong; 279 QString mUserDateFormatLong;
279 QString mUserDateFormatShort; 280 QString mUserDateFormatShort;
280 281
281 QStringList mLocationDefaults; 282 QStringList mLocationDefaults;
282 QStringList mEventSummaryUser; 283 QStringList mEventSummaryUser;
283 QStringList mTodoSummaryUser; 284 QStringList mTodoSummaryUser;
284 285
285 bool mUseInternalAlarmNotification; 286 bool mUseInternalAlarmNotification;
286 int mAlarmPlayBeeps; 287 int mAlarmPlayBeeps;
287 int mAlarmSuspendTime; 288 int mAlarmSuspendTime;
288 int mAlarmSuspendCount; 289 int mAlarmSuspendCount;
289 int mAlarmBeepInterval; 290 int mAlarmBeepInterval;
290 291
291 private: 292 private:
292 QDict<QColor> mCategoryColors; 293 QDict<QColor> mCategoryColors;
293 QColor mDefaultCategoryColor; 294 QColor mDefaultCategoryColor;
294 295
295 QFont mDefaultTimeBarFont; 296 QFont mDefaultTimeBarFont;
296 QFont mDefaultViewFont; 297 QFont mDefaultViewFont;
297 QFont mDefaultMonthViewFont; 298 QFont mDefaultMonthViewFont;
298 299
299 QString mName; 300 QString mName;
300 QString mEmail; 301 QString mEmail;
301}; 302};
302 303
303#endif 304#endif
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp
index d8aa43a..aa30b52 100644
--- a/korganizer/mainwindow.cpp
+++ b/korganizer/mainwindow.cpp
@@ -533,871 +533,877 @@ void MainWindow::initActions()
533 configureToolBarMenu->insertItem(icon, i18n("Next days"), 100,4 ); 533 configureToolBarMenu->insertItem(icon, i18n("Next days"), 100,4 );
534 QAction* xdays_action = new QAction( i18n("Next days"), icon, i18n("Next days"), 0, this ); 534 QAction* xdays_action = new QAction( i18n("Next days"), icon, i18n("Next days"), 0, this );
535 xdays_action->addTo( viewMenu ); 535 xdays_action->addTo( viewMenu );
536 connect( xdays_action, SIGNAL( activated() ), 536 connect( xdays_action, SIGNAL( activated() ),
537 mView->viewManager(), SLOT( showNextXView() ) ); 537 mView->viewManager(), SLOT( showNextXView() ) );
538 538
539 icon = loadPixmap( pathString + "whatsnext" ); 539 icon = loadPixmap( pathString + "whatsnext" );
540 configureToolBarMenu->insertItem(icon, i18n("What's Next"), 110, 4 ); 540 configureToolBarMenu->insertItem(icon, i18n("What's Next"), 110, 4 );
541 QAction* whatsnext_action = new QAction( i18n("What's Next"), icon, i18n("What's Next"), 0, this ); 541 QAction* whatsnext_action = new QAction( i18n("What's Next"), icon, i18n("What's Next"), 0, this );
542 whatsnext_action->addTo( viewMenu ); 542 whatsnext_action->addTo( viewMenu );
543 connect( whatsnext_action, SIGNAL( activated() ), 543 connect( whatsnext_action, SIGNAL( activated() ),
544 mView->viewManager(), SLOT( showWhatsNextView() ) ); 544 mView->viewManager(), SLOT( showWhatsNextView() ) );
545 545
546#if 0 546#if 0
547 action = new QAction( "view_timespan", "Time Span", 0, this ); 547 action = new QAction( "view_timespan", "Time Span", 0, this );
548 action->addTo( viewMenu ); 548 action->addTo( viewMenu );
549 connect( action, SIGNAL( activated() ), 549 connect( action, SIGNAL( activated() ),
550 mView->viewManager(), SLOT( showTimeSpanView() ) ); 550 mView->viewManager(), SLOT( showTimeSpanView() ) );
551#endif 551#endif
552 552
553 mNewSubTodoAction = new QAction( "new_subtodo", i18n("New Sub-Todo..."), 0, 553 mNewSubTodoAction = new QAction( "new_subtodo", i18n("New Sub-Todo..."), 0,
554 this ); 554 this );
555 mNewSubTodoAction->addTo( actionMenu ); 555 mNewSubTodoAction->addTo( actionMenu );
556 connect( mNewSubTodoAction, SIGNAL( activated() ), 556 connect( mNewSubTodoAction, SIGNAL( activated() ),
557 mView, SLOT( newSubTodo() ) ); 557 mView, SLOT( newSubTodo() ) );
558 558
559 actionMenu->insertSeparator(); 559 actionMenu->insertSeparator();
560 560
561 mShowAction = new QAction( "show_incidence", i18n("Show..."), 0, this ); 561 mShowAction = new QAction( "show_incidence", i18n("Show..."), 0, this );
562 mShowAction->addTo( actionMenu ); 562 mShowAction->addTo( actionMenu );
563 connect( mShowAction, SIGNAL( activated() ), 563 connect( mShowAction, SIGNAL( activated() ),
564 mView, SLOT( showIncidence() ) ); 564 mView, SLOT( showIncidence() ) );
565 565
566 mEditAction = new QAction( "edit_incidence", i18n("Edit..."), 0, this ); 566 mEditAction = new QAction( "edit_incidence", i18n("Edit..."), 0, this );
567 mEditAction->addTo( actionMenu ); 567 mEditAction->addTo( actionMenu );
568 connect( mEditAction, SIGNAL( activated() ), 568 connect( mEditAction, SIGNAL( activated() ),
569 mView, SLOT( editIncidence() ) ); 569 mView, SLOT( editIncidence() ) );
570 570
571 mDeleteAction = new QAction( "delete_incidence", i18n("Delete..."), 0, this ); 571 mDeleteAction = new QAction( "delete_incidence", i18n("Delete..."), 0, this );
572 mDeleteAction->addTo( actionMenu ); 572 mDeleteAction->addTo( actionMenu );
573 connect( mDeleteAction, SIGNAL( activated() ), 573 connect( mDeleteAction, SIGNAL( activated() ),
574 mView, SLOT( deleteIncidence() ) ); 574 mView, SLOT( deleteIncidence() ) );
575 575
576 actionMenu->insertSeparator(); 576 actionMenu->insertSeparator();
577 577
578 action = new QAction( "purge_completed", i18n("Purge Completed"), 0, 578 action = new QAction( "purge_completed", i18n("Purge Completed"), 0,
579 this ); 579 this );
580 action->addTo( actionMenu ); 580 action->addTo( actionMenu );
581 connect( action, SIGNAL( activated() ), mView, SLOT( purgeCompleted() ) ); 581 connect( action, SIGNAL( activated() ), mView, SLOT( purgeCompleted() ) );
582 582
583 icon = loadPixmap( pathString + "search" ); 583 icon = loadPixmap( pathString + "search" );
584 QAction* search_action = new QAction( i18n("Search"), icon, i18n("Search..."), 0, this ); 584 QAction* search_action = new QAction( i18n("Search"), icon, i18n("Search..."), 0, this );
585 configureToolBarMenu->insertItem(icon, i18n("Search"), 120 , 4); 585 configureToolBarMenu->insertItem(icon, i18n("Search"), 120 , 4);
586 search_action->addTo( actionMenu ); 586 search_action->addTo( actionMenu );
587 connect( search_action, SIGNAL( activated() ), 587 connect( search_action, SIGNAL( activated() ),
588 mView->dialogManager(), SLOT( showSearchDialog() ) ); 588 mView->dialogManager(), SLOT( showSearchDialog() ) );
589 589
590 icon = loadPixmap( pathString + "today" ); 590 icon = loadPixmap( pathString + "today" );
591 configureToolBarMenu->insertItem(icon, i18n("Go to Today"), 130); 591 configureToolBarMenu->insertItem(icon, i18n("Go to Today"), 130);
592 QAction* today_action = new QAction( i18n("Go to Today"), icon, i18n("Go to Today"), 0, this ); 592 QAction* today_action = new QAction( i18n("Go to Today"), icon, i18n("Go to Today"), 0, this );
593 today_action->addTo( actionMenu ); 593 today_action->addTo( actionMenu );
594 connect( today_action, SIGNAL( activated() ), 594 connect( today_action, SIGNAL( activated() ),
595 mView, SLOT( goToday() ) ); 595 mView, SLOT( goToday() ) );
596 596
597 if ( KOPrefs::instance()->mShowFullMenu ) { 597 if ( KOPrefs::instance()->mShowFullMenu ) {
598 actionMenu->insertSeparator(); 598 actionMenu->insertSeparator();
599 actionMenu->insertItem( i18n("Configure Toolbar"),configureToolBarMenu ); 599 actionMenu->insertItem( i18n("Configure Toolbar"),configureToolBarMenu );
600 600
601 } 601 }
602 // actionMenu->insertSeparator(); 602 // actionMenu->insertSeparator();
603 action = new QAction( "import_qtopia", i18n("Import (*.ics/*.vcs) file"), 0, 603 action = new QAction( "import_qtopia", i18n("Import (*.ics/*.vcs) file"), 0,
604 this ); 604 this );
605 action->addTo( importMenu ); 605 action->addTo( importMenu );
606 connect( action, SIGNAL( activated() ), SLOT( importIcal() ) ); 606 connect( action, SIGNAL( activated() ), SLOT( importIcal() ) );
607 action = new QAction( "import_quick", i18n("Import last file"), 0, 607 action = new QAction( "import_quick", i18n("Import last file"), 0,
608 this ); 608 this );
609 action->addTo( importMenu ); 609 action->addTo( importMenu );
610 connect( action, SIGNAL( activated() ), SLOT( quickImportIcal() ) ); 610 connect( action, SIGNAL( activated() ), SLOT( quickImportIcal() ) );
611 importMenu->insertSeparator(); 611 importMenu->insertSeparator();
612 action = new QAction( "import_bday", i18n("Import Birthdays (KA/Pi)"), 0, 612 action = new QAction( "import_bday", i18n("Import Birthdays (KA/Pi)"), 0,
613 this ); 613 this );
614 action->addTo( importMenu ); 614 action->addTo( importMenu );
615 connect( action, SIGNAL( activated() ), SLOT( importBday() ) ); 615 connect( action, SIGNAL( activated() ), SLOT( importBday() ) );
616#ifndef DESKTOP_VERSION 616#ifndef DESKTOP_VERSION
617 importMenu->insertSeparator(); 617 importMenu->insertSeparator();
618 action = new QAction( "import_qtopia", i18n("Import Opie/Qtopia Cal."), 0, 618 action = new QAction( "import_qtopia", i18n("Import Opie/Qtopia Cal."), 0,
619 this ); 619 this );
620 action->addTo( importMenu ); 620 action->addTo( importMenu );
621 connect( action, SIGNAL( activated() ), SLOT( importQtopia() ) ); 621 connect( action, SIGNAL( activated() ), SLOT( importQtopia() ) );
622#else 622#else
623#ifdef _WIN32_ 623#ifdef _WIN32_
624 importMenu->insertSeparator(); 624 importMenu->insertSeparator();
625 action = new QAction( "import_ol", i18n("Import from OL"), 0, 625 action = new QAction( "import_ol", i18n("Import from OL"), 0,
626 this ); 626 this );
627 action->addTo( importMenu ); 627 action->addTo( importMenu );
628 connect( action, SIGNAL( activated() ), SLOT( importOL() ) ); 628 connect( action, SIGNAL( activated() ), SLOT( importOL() ) );
629#endif 629#endif
630#endif 630#endif
631 631
632 importMenu->insertSeparator(); 632 importMenu->insertSeparator();
633 action = new QAction( "load_cal", i18n("Load Calendar Backup"), 0, 633 action = new QAction( "load_cal", i18n("Load Calendar Backup"), 0,
634 this ); 634 this );
635 action->addTo( importMenu ); 635 action->addTo( importMenu );
636 connect( action, SIGNAL( activated() ), SLOT( loadCalendar() ) ); 636 connect( action, SIGNAL( activated() ), SLOT( loadCalendar() ) );
637 637
638 action = new QAction( "save_cal", i18n("Save Calendar Backup"), 0, 638 action = new QAction( "save_cal", i18n("Save Calendar Backup"), 0,
639 this ); 639 this );
640 action->addTo( importMenu ); 640 action->addTo( importMenu );
641 connect( action, SIGNAL( activated() ), SLOT( saveCalendar() ) ); 641 connect( action, SIGNAL( activated() ), SLOT( saveCalendar() ) );
642 642
643 importMenu->insertSeparator(); 643 importMenu->insertSeparator();
644 action = new QAction( "import_qtopia", i18n("Export VCalendar"), 0, 644 action = new QAction( "import_qtopia", i18n("Export VCalendar"), 0,
645 this ); 645 this );
646 action->addTo( importMenu ); connect( action, SIGNAL( activated() ), SLOT( exportVCalendar() ) ); 646 action->addTo( importMenu ); connect( action, SIGNAL( activated() ), SLOT( exportVCalendar() ) );
647 importMenu->insertSeparator(); 647 importMenu->insertSeparator();
648 action = new QAction( "manage cat", i18n("Manage new categories..."), 0, 648 action = new QAction( "manage cat", i18n("Manage new categories..."), 0,
649 this ); 649 this );
650 action->addTo( importMenu ); 650 action->addTo( importMenu );
651 connect( action, SIGNAL( activated() ), mView, SLOT( manageCategories() ) ); 651 connect( action, SIGNAL( activated() ), mView, SLOT( manageCategories() ) );
652#ifndef DESKTOP_VERSION 652#ifndef DESKTOP_VERSION
653 importMenu->insertSeparator(); 653 importMenu->insertSeparator();
654 action = new QAction( "beam all", i18n("Beam complete calendar..."), 0, 654 action = new QAction( "beam all", i18n("Beam complete calendar..."), 0,
655 this ); 655 this );
656 action->addTo( importMenu ); 656 action->addTo( importMenu );
657 connect( action, SIGNAL( activated() ), mView, SLOT( beamCalendar() ) ); 657 connect( action, SIGNAL( activated() ), mView, SLOT( beamCalendar() ) );
658 658
659 action = new QAction( "beam all", i18n("Beam filtered calendar..."), 0, 659 action = new QAction( "beam all", i18n("Beam filtered calendar..."), 0,
660 this ); 660 this );
661 action->addTo( importMenu ); 661 action->addTo( importMenu );
662 connect( action, SIGNAL( activated() ), mView, SLOT( beamFilteredCalendar()) ); 662 connect( action, SIGNAL( activated() ), mView, SLOT( beamFilteredCalendar()) );
663#else 663#else
664 importMenu->insertSeparator(); 664 importMenu->insertSeparator();
665 icon = loadPixmap( pathString + "print" ); 665 icon = loadPixmap( pathString + "print" );
666 action = new QAction( i18n("Print calendar..."),icon,i18n("Print calendar..."), 0, this ); 666 action = new QAction( i18n("Print calendar..."),icon,i18n("Print calendar..."), 0, this );
667 action->addTo( importMenu ); 667 action->addTo( importMenu );
668 connect( action, SIGNAL( activated() ), 668 connect( action, SIGNAL( activated() ),
669 this, SLOT( printCal() ) ); 669 this, SLOT( printCal() ) );
670 670
671 icon = loadPixmap( pathString + "print" ); 671 icon = loadPixmap( pathString + "print" );
672 action = new QAction( i18n("Print agenda selection..."),icon,i18n("Print agenda selection..."), 0, this ); 672 action = new QAction( i18n("Print agenda selection..."),icon,i18n("Print agenda selection..."), 0, this );
673 action->addTo( importMenu ); 673 action->addTo( importMenu );
674 connect( action, SIGNAL( activated() ), 674 connect( action, SIGNAL( activated() ),
675 this, SLOT( printSel() ) ); 675 this, SLOT( printSel() ) );
676#endif 676#endif
677 importMenu->insertSeparator(); 677 importMenu->insertSeparator();
678 action = new QAction( "beam all", i18n("Save"), 0, 678 action = new QAction( "beam all", i18n("Save"), 0,
679 this ); 679 this );
680 action->addTo( importMenu ); 680 action->addTo( importMenu );
681 connect( action, SIGNAL( activated() ), this, SLOT( save() ) ); 681 connect( action, SIGNAL( activated() ), this, SLOT( save() ) );
682 action = new QAction( "beam all", i18n("Exit (+save)"), 0, 682 action = new QAction( "beam all", i18n("Exit (+save)"), 0,
683 this ); 683 this );
684 action->addTo( importMenu ); 684 action->addTo( importMenu );
685 connect( action, SIGNAL( activated() ), this, SLOT( close() ) ); 685 connect( action, SIGNAL( activated() ), this, SLOT( close() ) );
686 686
687 //menuBar->insertItem( "Configure",configureMenu ); 687 //menuBar->insertItem( "Configure",configureMenu );
688 //configureMenu->insertItem( "Toolbar",configureToolBarMenu ); 688 //configureMenu->insertItem( "Toolbar",configureToolBarMenu );
689 icon = loadPixmap( "korganizer/korganizer" ); 689 icon = loadPixmap( "korganizer/korganizer" );
690 action = new QAction( "Keys + Colors", i18n("Keys + Colors..."), 0, this ); 690 action = new QAction( "Keys + Colors", i18n("Keys + Colors..."), 0, this );
691 action->addTo( helpMenu ); 691 action->addTo( helpMenu );
692 connect( action, SIGNAL( activated() ), 692 connect( action, SIGNAL( activated() ),
693 SLOT( keyBindings() ) ); 693 SLOT( keyBindings() ) );
694 action = new QAction( "featureHowto", i18n("Features + hints..."), 0,this ); 694 action = new QAction( "featureHowto", i18n("Features + hints..."), 0,this );
695 action->addTo( helpMenu ); 695 action->addTo( helpMenu );
696 connect( action, SIGNAL( activated() ), 696 connect( action, SIGNAL( activated() ),
697 SLOT( features() ) ); 697 SLOT( features() ) );
698 action = new QAction( "Auto saving", i18n("Auto saving..."), 0, this ); 698 action = new QAction( "Auto saving", i18n("Auto saving..."), 0, this );
699 action->addTo( helpMenu ); 699 action->addTo( helpMenu );
700 connect( action, SIGNAL( activated() ), 700 connect( action, SIGNAL( activated() ),
701 SLOT( aboutAutoSaving() ) ); 701 SLOT( aboutAutoSaving() ) );
702 action = new QAction( "Problemd", i18n("Known Problems..."), 0,this ); 702 action = new QAction( "Problemd", i18n("Known Problems..."), 0,this );
703 action->addTo( helpMenu ); 703 action->addTo( helpMenu );
704 connect( action, SIGNAL( activated() ), 704 connect( action, SIGNAL( activated() ),
705 SLOT( aboutKnownBugs() ) ); 705 SLOT( aboutKnownBugs() ) );
706 action = new QAction( "Translate Howto", i18n("User translation..."), 0,this ); 706 action = new QAction( "Translate Howto", i18n("User translation..."), 0,this );
707 action->addTo( helpMenu ); 707 action->addTo( helpMenu );
708 connect( action, SIGNAL( activated() ), 708 connect( action, SIGNAL( activated() ),
709 SLOT( usertrans() ) ); 709 SLOT( usertrans() ) );
710 action = new QAction( "Sync Howto", i18n("Sync HowTo..."), 0,this ); 710 action = new QAction( "Sync Howto", i18n("Sync HowTo..."), 0,this );
711 action->addTo( helpMenu ); 711 action->addTo( helpMenu );
712 connect( action, SIGNAL( activated() ), 712 connect( action, SIGNAL( activated() ),
713 SLOT( synchowto() ) ); 713 SLOT( synchowto() ) );
714 action = new QAction( "Whats New", i18n("What's new?"), 0,this ); 714 action = new QAction( "Whats New", i18n("What's new?"), 0,this );
715 action->addTo( helpMenu ); 715 action->addTo( helpMenu );
716 connect( action, SIGNAL( activated() ), 716 connect( action, SIGNAL( activated() ),
717 SLOT( whatsNew() ) ); 717 SLOT( whatsNew() ) );
718 action = new QAction( "Frequently asked questions", i18n("FAQ..."), 0,this ); 718 action = new QAction( "Frequently asked questions", i18n("FAQ..."), 0,this );
719 action->addTo( helpMenu ); 719 action->addTo( helpMenu );
720 connect( action, SIGNAL( activated() ), 720 connect( action, SIGNAL( activated() ),
721 SLOT( faq() ) ); 721 SLOT( faq() ) );
722 722
723 723
724 action = new QAction( "about", i18n("About..."), 0, this ); 724 action = new QAction( "about", i18n("About..."), 0, this );
725 action->addTo( helpMenu ); 725 action->addTo( helpMenu );
726 connect( action, SIGNAL( activated() ), 726 connect( action, SIGNAL( activated() ),
727 SLOT( about() ) ); 727 SLOT( about() ) );
728 action = new QAction( "licence", i18n("Licence..."), 0, this ); 728 action = new QAction( "licence", i18n("Licence..."), 0, this );
729 action->addTo( helpMenu ); 729 action->addTo( helpMenu );
730 connect( action, SIGNAL( activated() ), 730 connect( action, SIGNAL( activated() ),
731 SLOT( licence() ) ); 731 SLOT( licence() ) );
732 //menuBar->insertSeparator(); 732 //menuBar->insertSeparator();
733 733
734 // ****************************************************** 734 // ******************************************************
735 // menubar icons 735 // menubar icons
736 736
737 737
738 iconToolBar->setHorizontalStretchable (true ); 738 iconToolBar->setHorizontalStretchable (true );
739 //menuBar->insertItem( iconToolBar ); 739 //menuBar->insertItem( iconToolBar );
740 //xdays_action 740 //xdays_action
741 if (p-> mShowIconNewEvent) 741 if (p-> mShowIconNewEvent)
742 ne_action->addTo( iconToolBar ); 742 ne_action->addTo( iconToolBar );
743 if (p->mShowIconNewTodo ) 743 if (p->mShowIconNewTodo )
744 nt_action->addTo( iconToolBar ); 744 nt_action->addTo( iconToolBar );
745 if (p-> mShowIconSearch) 745 if (p-> mShowIconSearch)
746 search_action->addTo( iconToolBar ); 746 search_action->addTo( iconToolBar );
747 if (p-> mShowIconNext) 747 if (p-> mShowIconNext)
748 whatsnext_action->addTo( iconToolBar ); 748 whatsnext_action->addTo( iconToolBar );
749 if (p-> mShowIconNextDays) 749 if (p-> mShowIconNextDays)
750 xdays_action->addTo( iconToolBar ); 750 xdays_action->addTo( iconToolBar );
751 if (p-> mShowIconList) 751 if (p-> mShowIconList)
752 showlist_action->addTo( iconToolBar ); 752 showlist_action->addTo( iconToolBar );
753 if (p-> mShowIconDay1) 753 if (p-> mShowIconDay1)
754 day1_action->addTo( iconToolBar ); 754 day1_action->addTo( iconToolBar );
755 if (p-> mShowIconDay5) 755 if (p-> mShowIconDay5)
756 day5_action->addTo( iconToolBar ); 756 day5_action->addTo( iconToolBar );
757 if (p-> mShowIconDay7) 757 if (p-> mShowIconDay7)
758 day7_action->addTo( iconToolBar ); 758 day7_action->addTo( iconToolBar );
759 if (p-> mShowIconMonth) 759 if (p-> mShowIconMonth)
760 month_action->addTo( iconToolBar ); 760 month_action->addTo( iconToolBar );
761 if (p-> mShowIconTodoview) 761 if (p-> mShowIconTodoview)
762 todoview_action->addTo( iconToolBar ); 762 todoview_action->addTo( iconToolBar );
763 if (p-> mShowIconJournal) 763 if (p-> mShowIconJournal)
764 viewjournal_action->addTo( iconToolBar ); 764 viewjournal_action->addTo( iconToolBar );
765 icon = loadPixmap( pathString + "2leftarrowB" ); 765 icon = loadPixmap( pathString + "2leftarrowB" );
766 configureToolBarMenu->insertItem(icon, i18n("Prev. month"), 200, 14); 766 configureToolBarMenu->insertItem(icon, i18n("Prev. month"), 200, 14);
767 if (p-> mShowIconBackFast) { 767 if (p-> mShowIconBackFast) {
768 action = new QAction( i18n("Prev. month"), icon, i18n("Prev. month"),0 , this ); 768 action = new QAction( i18n("Prev. month"), icon, i18n("Prev. month"),0 , this );
769 connect( action, SIGNAL( activated() ), 769 connect( action, SIGNAL( activated() ),
770 mView, SLOT( goPreviousMonth() ) ); 770 mView, SLOT( goPreviousMonth() ) );
771 action->addTo( iconToolBar ); 771 action->addTo( iconToolBar );
772 } 772 }
773 icon = loadPixmap( pathString + "1leftarrowB" ); 773 icon = loadPixmap( pathString + "1leftarrowB" );
774 configureToolBarMenu->insertItem(icon, i18n("Go backward"), 210,15); 774 configureToolBarMenu->insertItem(icon, i18n("Go backward"), 210,15);
775 if (p-> mShowIconBack) { 775 if (p-> mShowIconBack) {
776 action = new QAction( i18n("Go backward"), icon, i18n("Go backward"),0 , this ); 776 action = new QAction( i18n("Go backward"), icon, i18n("Go backward"),0 , this );
777 connect( action, SIGNAL( activated() ), 777 connect( action, SIGNAL( activated() ),
778 mView, SLOT( goPrevious() ) ); 778 mView, SLOT( goPrevious() ) );
779 action->addTo( iconToolBar ); 779 action->addTo( iconToolBar );
780 } 780 }
781 if (p-> mShowIconToday) 781 if (p-> mShowIconToday)
782 today_action->addTo( iconToolBar ); 782 today_action->addTo( iconToolBar );
783 icon = loadPixmap( pathString + "1rightarrowB" ); 783 icon = loadPixmap( pathString + "1rightarrowB" );
784 configureToolBarMenu->insertItem(icon, i18n("Go forward"), 220); 784 configureToolBarMenu->insertItem(icon, i18n("Go forward"), 220);
785 if (p-> mShowIconForward) { 785 if (p-> mShowIconForward) {
786 action = new QAction( i18n("Go forward"), icon, i18n("Go forward"),0 , this ); 786 action = new QAction( i18n("Go forward"), icon, i18n("Go forward"),0 , this );
787 connect( action, SIGNAL( activated() ), 787 connect( action, SIGNAL( activated() ),
788 mView, SLOT( goNext() ) ); 788 mView, SLOT( goNext() ) );
789 action->addTo( iconToolBar ); 789 action->addTo( iconToolBar );
790 } 790 }
791 icon = loadPixmap( pathString + "2rightarrowB" ); 791 icon = loadPixmap( pathString + "2rightarrowB" );
792 configureToolBarMenu->insertItem(icon, i18n("Next month"), 230); 792 configureToolBarMenu->insertItem(icon, i18n("Next month"), 230);
793 if (p-> mShowIconForwardFast) { 793 if (p-> mShowIconForwardFast) {
794 action = new QAction( i18n("Next month"), icon, i18n("Next month"),0 , this ); 794 action = new QAction( i18n("Next month"), icon, i18n("Next month"),0 , this );
795 connect( action, SIGNAL( activated() ), 795 connect( action, SIGNAL( activated() ),
796 mView, SLOT( goNextMonth() ) ); 796 mView, SLOT( goNextMonth() ) );
797 action->addTo( iconToolBar ); 797 action->addTo( iconToolBar );
798 } 798 }
799 799
800 800
801 configureToolBarMenu->insertItem(i18n("What's This?"), 300); 801 configureToolBarMenu->insertItem(i18n("What's This?"), 300);
802 802
803 if (p-> mShowIconNewEvent) 803 if (p-> mShowIconNewEvent)
804 configureToolBarMenu->setItemChecked( 10, true ); 804 configureToolBarMenu->setItemChecked( 10, true );
805 if (p->mShowIconNewTodo ) 805 if (p->mShowIconNewTodo )
806 configureToolBarMenu->setItemChecked( 20, true ); 806 configureToolBarMenu->setItemChecked( 20, true );
807 if (p-> mShowIconSearch) 807 if (p-> mShowIconSearch)
808 configureToolBarMenu->setItemChecked( 120, true ); 808 configureToolBarMenu->setItemChecked( 120, true );
809 if (p-> mShowIconList) 809 if (p-> mShowIconList)
810 configureToolBarMenu->setItemChecked( 30, true ); 810 configureToolBarMenu->setItemChecked( 30, true );
811 if (p-> mShowIconDay1) 811 if (p-> mShowIconDay1)
812 configureToolBarMenu->setItemChecked( 40, true ); 812 configureToolBarMenu->setItemChecked( 40, true );
813 if (p-> mShowIconDay5) 813 if (p-> mShowIconDay5)
814 configureToolBarMenu->setItemChecked( 50, true ); 814 configureToolBarMenu->setItemChecked( 50, true );
815 if (p-> mShowIconDay7) 815 if (p-> mShowIconDay7)
816 configureToolBarMenu->setItemChecked( 60, true ); 816 configureToolBarMenu->setItemChecked( 60, true );
817 if (p-> mShowIconMonth) 817 if (p-> mShowIconMonth)
818 configureToolBarMenu->setItemChecked( 70, true ); 818 configureToolBarMenu->setItemChecked( 70, true );
819 if (p-> mShowIconTodoview) 819 if (p-> mShowIconTodoview)
820 configureToolBarMenu->setItemChecked( 80, true ); 820 configureToolBarMenu->setItemChecked( 80, true );
821 if (p-> mShowIconBackFast) 821 if (p-> mShowIconBackFast)
822 configureToolBarMenu->setItemChecked( 200, true ); 822 configureToolBarMenu->setItemChecked( 200, true );
823 if (p-> mShowIconBack) 823 if (p-> mShowIconBack)
824 configureToolBarMenu->setItemChecked( 210, true ); 824 configureToolBarMenu->setItemChecked( 210, true );
825 if (p-> mShowIconToday) 825 if (p-> mShowIconToday)
826 configureToolBarMenu->setItemChecked( 130, true ); 826 configureToolBarMenu->setItemChecked( 130, true );
827 if (p-> mShowIconForward) 827 if (p-> mShowIconForward)
828 configureToolBarMenu->setItemChecked( 220, true ); 828 configureToolBarMenu->setItemChecked( 220, true );
829 if (p-> mShowIconForwardFast) 829 if (p-> mShowIconForwardFast)
830 configureToolBarMenu->setItemChecked( 230, true ); 830 configureToolBarMenu->setItemChecked( 230, true );
831 if (p-> mShowIconNextDays) 831 if (p-> mShowIconNextDays)
832 configureToolBarMenu->setItemChecked( 100, true ); 832 configureToolBarMenu->setItemChecked( 100, true );
833 if (p-> mShowIconNext) 833 if (p-> mShowIconNext)
834 configureToolBarMenu->setItemChecked( 110, true ); 834 configureToolBarMenu->setItemChecked( 110, true );
835 if (p-> mShowIconJournal) 835 if (p-> mShowIconJournal)
836 configureToolBarMenu->setItemChecked( 90, true ); 836 configureToolBarMenu->setItemChecked( 90, true );
837 if (p-> mShowIconWhatsThis) 837 if (p-> mShowIconWhatsThis)
838 configureToolBarMenu->setItemChecked( 300, true ); 838 configureToolBarMenu->setItemChecked( 300, true );
839 839
840 QLabel* dummy = new QLabel( iconToolBar ); 840 QLabel* dummy = new QLabel( iconToolBar );
841 dummy->setBackgroundColor( iconToolBar->backgroundColor() ); 841 dummy->setBackgroundColor( iconToolBar->backgroundColor() );
842 if (!p-> mShowIconStretch) 842 if (!p-> mShowIconStretch)
843 iconToolBar->setStretchableWidget ( dummy ) ; 843 iconToolBar->setStretchableWidget ( dummy ) ;
844 else 844 else
845 configureToolBarMenu->setItemChecked( 5, true ); 845 configureToolBarMenu->setItemChecked( 5, true );
846 if (p-> mShowIconWhatsThis) 846 if (p-> mShowIconWhatsThis)
847 QWhatsThis::whatsThisButton ( iconToolBar ); 847 QWhatsThis::whatsThisButton ( iconToolBar );
848 connect( configureToolBarMenu, SIGNAL( activated( int ) ),this, SLOT(configureToolBar( int ) ) ); 848 connect( configureToolBarMenu, SIGNAL( activated( int ) ),this, SLOT(configureToolBar( int ) ) );
849 configureAgenda( p->mHourSize ); 849 configureAgenda( p->mHourSize );
850 connect( configureAgendaMenu, SIGNAL( activated( int ) ),this, SLOT(configureAgenda( int ) ) ); 850 connect( configureAgendaMenu, SIGNAL( activated( int ) ),this, SLOT(configureAgenda( int ) ) );
851} 851}
852void MainWindow::fillSyncMenu() 852void MainWindow::fillSyncMenu()
853{ 853{
854 if ( syncMenu->count() ) 854 if ( syncMenu->count() )
855 syncMenu->clear(); 855 syncMenu->clear();
856 syncMenu->insertItem( i18n("Configure..."), 0 ); 856 syncMenu->insertItem( i18n("Configure..."), 0 );
857 syncMenu->insertSeparator(); 857 syncMenu->insertSeparator();
858 syncMenu->insertItem( i18n("Multiple sync"), 1 ); 858 syncMenu->insertItem( i18n("Multiple sync"), 1 );
859 syncMenu->insertSeparator(); 859 syncMenu->insertSeparator();
860 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 860 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
861 config.setGroup("General"); 861 config.setGroup("General");
862 QStringList prof = config.readListEntry("SyncProfileNames"); 862 QStringList prof = config.readListEntry("SyncProfileNames");
863 KOPrefs::instance()->mLocalMachineName = config.readEntry("LocalMachineName","undefined"); 863 KOPrefs::instance()->mLocalMachineName = config.readEntry("LocalMachineName","undefined");
864 if ( prof.count() < 3 ) { 864 if ( prof.count() < 3 ) {
865 prof.clear(); 865 prof.clear();
866 prof << i18n("Sharp_DTM"); 866 prof << i18n("Sharp_DTM");
867 prof << i18n("Local_file"); 867 prof << i18n("Local_file");
868 prof << i18n("Last_file"); 868 prof << i18n("Last_file");
869 KSyncProfile* temp = new KSyncProfile (); 869 KSyncProfile* temp = new KSyncProfile ();
870 temp->setName( prof[0] ); 870 temp->setName( prof[0] );
871 temp->writeConfig(&config); 871 temp->writeConfig(&config);
872 temp->setName( prof[1] ); 872 temp->setName( prof[1] );
873 temp->writeConfig(&config); 873 temp->writeConfig(&config);
874 temp->setName( prof[2] ); 874 temp->setName( prof[2] );
875 temp->writeConfig(&config); 875 temp->writeConfig(&config);
876 config.setGroup("General"); 876 config.setGroup("General");
877 config.writeEntry("SyncProfileNames",prof); 877 config.writeEntry("SyncProfileNames",prof);
878 config.writeEntry("ExternSyncProfiles","Sharp_DTM"); 878 config.writeEntry("ExternSyncProfiles","Sharp_DTM");
879 config.sync(); 879 config.sync();
880 delete temp; 880 delete temp;
881 } 881 }
882 KOPrefs::instance()->mExternSyncProfiles = config.readListEntry("ExternSyncProfiles"); 882 KOPrefs::instance()->mExternSyncProfiles = config.readListEntry("ExternSyncProfiles");
883 KOPrefs::instance()->mSyncProfileNames = prof; 883 KOPrefs::instance()->mSyncProfileNames = prof;
884 int i; 884 int i;
885 for ( i = 0; i < prof.count(); ++i ) { 885 for ( i = 0; i < prof.count(); ++i ) {
886 886
887 syncMenu->insertItem( prof[i], 1000+i ); 887 syncMenu->insertItem( prof[i], 1000+i );
888 if ( i == 2 ) 888 if ( i == 2 )
889 syncMenu->insertSeparator(); 889 syncMenu->insertSeparator();
890 } 890 }
891 QDir app_dir; 891 QDir app_dir;
892 if ( !app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) { 892 if ( !app_dir.exists(QDir::homeDirPath()+"/Applications/dtm" ) ) {
893 syncMenu->setItemEnabled( false , 1000 ); 893 syncMenu->setItemEnabled( false , 1000 );
894 } 894 }
895 mView->setupExternSyncProfiles(); 895 mView->setupExternSyncProfiles();
896} 896}
897 897
898int MainWindow::ringSync() 898int MainWindow::ringSync()
899{ 899{
900 int syncedProfiles = 0; 900 int syncedProfiles = 0;
901 int i; 901 int i;
902 QTime timer; 902 QTime timer;
903 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 903 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
904 QStringList syncProfileNames = KOPrefs::instance()->mSyncProfileNames; 904 QStringList syncProfileNames = KOPrefs::instance()->mSyncProfileNames;
905 KSyncProfile* temp = new KSyncProfile (); 905 KSyncProfile* temp = new KSyncProfile ();
906 KOPrefs::instance()->mAskForPreferences = false; 906 KOPrefs::instance()->mAskForPreferences = false;
907 for ( i = 0; i < syncProfileNames.count(); ++i ) { 907 for ( i = 0; i < syncProfileNames.count(); ++i ) {
908 mCurrentSyncProfile = i; 908 mCurrentSyncProfile = i;
909 temp->setName(syncProfileNames[mCurrentSyncProfile]); 909 temp->setName(syncProfileNames[mCurrentSyncProfile]);
910 temp->readConfig(&config); 910 temp->readConfig(&config);
911 if ( temp->getIncludeInRingSync() && ( i < 1 || i > 2 )) { 911 if ( temp->getIncludeInRingSync() && ( i < 1 || i > 2 )) {
912 setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... ")); 912 setCaption(i18n("Profile ")+syncProfileNames[mCurrentSyncProfile]+ i18n(" is synced ... "));
913 ++syncedProfiles; 913 ++syncedProfiles;
914 // KOPrefs::instance()->mAskForPreferences = temp->getAskForPreferences(); 914 // KOPrefs::instance()->mAskForPreferences = temp->getAskForPreferences();
915 KOPrefs::instance()->mWriteBackFile = temp->getWriteBackFile(); 915 KOPrefs::instance()->mWriteBackFile = temp->getWriteBackFile();
916 KOPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting(); 916 KOPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting();
917 KOPrefs::instance()->mWriteBackInFuture = 0;
918 if ( temp->getWriteBackFuture() )
919 KOPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
917 KOPrefs::instance()->mShowSyncSummary = false; 920 KOPrefs::instance()->mShowSyncSummary = false;
918 mView->setSyncDevice(syncProfileNames[i] ); 921 mView->setSyncDevice(syncProfileNames[i] );
919 mView->setSyncName( KOPrefs::instance()->mLocalMachineName ); 922 mView->setSyncName( KOPrefs::instance()->mLocalMachineName );
920 if ( i == 0 ) { 923 if ( i == 0 ) {
921 syncSharp(); 924 syncSharp();
922 } else { 925 } else {
923 if ( temp->getIsLocalFileSync() ) { 926 if ( temp->getIsLocalFileSync() ) {
924 if ( syncWithFile( temp->getRemoteFileName( ), true ) ) 927 if ( syncWithFile( temp->getRemoteFileName( ), true ) )
925 KOPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileName(); 928 KOPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileName();
926 } else { 929 } else {
927 if ( temp->getIsPhoneSync() ) { 930 if ( temp->getIsPhoneSync() ) {
928 KOPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ; 931 KOPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ;
929 KOPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( ); 932 KOPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( );
930 KOPrefs::instance()->mPhoneModel = temp->getPhoneModel( ); 933 KOPrefs::instance()->mPhoneModel = temp->getPhoneModel( );
931 syncPhone(); 934 syncPhone();
932 } else 935 } else
933 syncRemote( temp, false ); 936 syncRemote( temp, false );
934 937
935 } 938 }
936 } 939 }
937 timer.start(); 940 timer.start();
938 setCaption(i18n("Multiple sync in progress ... please wait!") ); 941 setCaption(i18n("Multiple sync in progress ... please wait!") );
939 while ( timer.elapsed () < 2000 ) { 942 while ( timer.elapsed () < 2000 ) {
940 qApp->processEvents(); 943 qApp->processEvents();
941#ifndef _WIN32_ 944#ifndef _WIN32_
942 sleep (1); 945 sleep (1);
943#endif 946#endif
944 } 947 }
945 948
946 } 949 }
947 950
948 } 951 }
949 delete temp; 952 delete temp;
950 return syncedProfiles; 953 return syncedProfiles;
951} 954}
952 955
953void MainWindow::multiSync( bool askforPrefs ) 956void MainWindow::multiSync( bool askforPrefs )
954{ 957{
955 if (mBlockSaveFlag) 958 if (mBlockSaveFlag)
956 return; 959 return;
957 mBlockSaveFlag = true; 960 mBlockSaveFlag = true;
958 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!"); 961 QString question = i18n("Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!");
959 if ( QMessageBox::information( this, i18n("KO/Pi Sync"), 962 if ( QMessageBox::information( this, i18n("KO/Pi Sync"),
960 question, 963 question,
961 i18n("Yes"), i18n("No"), 964 i18n("Yes"), i18n("No"),
962 0, 0 ) != 0 ) { 965 0, 0 ) != 0 ) {
963 mBlockSaveFlag = false; 966 mBlockSaveFlag = false;
964 setCaption(i18n("Aborted! Nothing synced!")); 967 setCaption(i18n("Aborted! Nothing synced!"));
965 return; 968 return;
966 } 969 }
967 mView->setSyncDevice(i18n("Multiple profiles") ); 970 mView->setSyncDevice(i18n("Multiple profiles") );
968 KOPrefs::instance()->mSyncAlgoPrefs = KOPrefs::instance()->mRingSyncAlgoPrefs; 971 KOPrefs::instance()->mSyncAlgoPrefs = KOPrefs::instance()->mRingSyncAlgoPrefs;
969 if ( askforPrefs ) { 972 if ( askforPrefs ) {
970 mView->edit_sync_options(); 973 mView->edit_sync_options();
971 KOPrefs::instance()->mRingSyncAlgoPrefs = KOPrefs::instance()->mSyncAlgoPrefs; 974 KOPrefs::instance()->mRingSyncAlgoPrefs = KOPrefs::instance()->mSyncAlgoPrefs;
972 } 975 }
973 setCaption(i18n("Multiple sync started.") ); 976 setCaption(i18n("Multiple sync started.") );
974 qApp->processEvents(); 977 qApp->processEvents();
975 int num = ringSync() ; 978 int num = ringSync() ;
976 if ( num > 1 ) 979 if ( num > 1 )
977 ringSync(); 980 ringSync();
978 mBlockSaveFlag = false; 981 mBlockSaveFlag = false;
979 if ( num ) 982 if ( num )
980 save(); 983 save();
981 if ( num ) 984 if ( num )
982 setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) ); 985 setCaption(i18n("%1 profiles synced. Multiple sync completed!").arg(num) );
983 else 986 else
984 setCaption(i18n("Nothing synced! No profiles defined for multisync!")); 987 setCaption(i18n("Nothing synced! No profiles defined for multisync!"));
985 return; 988 return;
986} 989}
987void MainWindow::slotSyncMenu( int action ) 990void MainWindow::slotSyncMenu( int action )
988{ 991{
989 //qDebug("syncaction %d ", action); 992 //qDebug("syncaction %d ", action);
990 if ( action == 0 ) { 993 if ( action == 0 ) {
991 994
992 // seems to be a Qt2 event handling bug 995 // seems to be a Qt2 event handling bug
993 // syncmenu.clear causes a segfault at first time 996 // syncmenu.clear causes a segfault at first time
994 // when we call it after the main event loop, it is ok 997 // when we call it after the main event loop, it is ok
995 // same behaviour when calling OM/Pi via QCOP for the first time 998 // same behaviour when calling OM/Pi via QCOP for the first time
996 QTimer::singleShot ( 1, this, SLOT ( confSync() ) ); 999 QTimer::singleShot ( 1, this, SLOT ( confSync() ) );
997 //confSync(); 1000 //confSync();
998 1001
999 return; 1002 return;
1000 } 1003 }
1001 if ( action == 1 ) { 1004 if ( action == 1 ) {
1002 multiSync( true ); 1005 multiSync( true );
1003 return; 1006 return;
1004 } 1007 }
1005 1008
1006 if (mBlockSaveFlag) 1009 if (mBlockSaveFlag)
1007 return; 1010 return;
1008 mBlockSaveFlag = true; 1011 mBlockSaveFlag = true;
1009 mCurrentSyncProfile = action - 1000 ; 1012 mCurrentSyncProfile = action - 1000 ;
1010 mView->setSyncDevice(KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] ); 1013 mView->setSyncDevice(KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile] );
1011 mView->setSyncName( KOPrefs::instance()->mLocalMachineName ); 1014 mView->setSyncName( KOPrefs::instance()->mLocalMachineName );
1012 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) ); 1015 KConfig config ( locateLocal( "config","ksyncprofilesrc" ) );
1013 KSyncProfile* temp = new KSyncProfile (); 1016 KSyncProfile* temp = new KSyncProfile ();
1014 temp->setName(KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]); 1017 temp->setName(KOPrefs::instance()->mSyncProfileNames[mCurrentSyncProfile]);
1015 temp->readConfig(&config); 1018 temp->readConfig(&config);
1016 KOPrefs::instance()->mAskForPreferences = temp->getAskForPreferences(); 1019 KOPrefs::instance()->mAskForPreferences = temp->getAskForPreferences();
1017 KOPrefs::instance()->mSyncAlgoPrefs = temp->getSyncPrefs(); 1020 KOPrefs::instance()->mSyncAlgoPrefs = temp->getSyncPrefs();
1018 KOPrefs::instance()->mWriteBackFile = temp->getWriteBackFile(); 1021 KOPrefs::instance()->mWriteBackFile = temp->getWriteBackFile();
1019 KOPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting(); 1022 KOPrefs::instance()->mWriteBackExistingOnly = temp->getWriteBackExisting();
1023 KOPrefs::instance()->mWriteBackInFuture = 0;
1024 if ( temp->getWriteBackFuture() )
1025 KOPrefs::instance()->mWriteBackInFuture = temp->getWriteBackFutureWeeks( );
1020 KOPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync(); 1026 KOPrefs::instance()->mShowSyncSummary = temp->getShowSummaryAfterSync();
1021 if ( action == 1000 ) { 1027 if ( action == 1000 ) {
1022 syncSharp(); 1028 syncSharp();
1023 1029
1024 } else if ( action == 1001 ) { 1030 } else if ( action == 1001 ) {
1025 syncLocalFile(); 1031 syncLocalFile();
1026 1032
1027 } else if ( action == 1002 ) { 1033 } else if ( action == 1002 ) {
1028 quickSyncLocalFile(); 1034 quickSyncLocalFile();
1029 1035
1030 } else if ( action >= 1003 ) { 1036 } else if ( action >= 1003 ) {
1031 if ( temp->getIsLocalFileSync() ) { 1037 if ( temp->getIsLocalFileSync() ) {
1032 if ( syncWithFile( temp->getRemoteFileName( ), false ) ) 1038 if ( syncWithFile( temp->getRemoteFileName( ), false ) )
1033 KOPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileName(); 1039 KOPrefs::instance()->mLastSyncedLocalFile = temp->getRemoteFileName();
1034 } else { 1040 } else {
1035 if ( temp->getIsPhoneSync() ) { 1041 if ( temp->getIsPhoneSync() ) {
1036 KOPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ; 1042 KOPrefs::instance()->mPhoneDevice = temp->getPhoneDevice( ) ;
1037 KOPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( ); 1043 KOPrefs::instance()->mPhoneConnection = temp->getPhoneConnection( );
1038 KOPrefs::instance()->mPhoneModel = temp->getPhoneModel( ); 1044 KOPrefs::instance()->mPhoneModel = temp->getPhoneModel( );
1039 syncPhone(); 1045 syncPhone();
1040 } else 1046 } else
1041 syncRemote( temp ); 1047 syncRemote( temp );
1042 1048
1043 } 1049 }
1044 } 1050 }
1045 delete temp; 1051 delete temp;
1046 mBlockSaveFlag = false; 1052 mBlockSaveFlag = false;
1047} 1053}
1048void MainWindow::setDefaultPreferences() 1054void MainWindow::setDefaultPreferences()
1049{ 1055{
1050 KOPrefs *p = KOPrefs::instance(); 1056 KOPrefs *p = KOPrefs::instance();
1051 1057
1052 p->mCompactDialogs = true; 1058 p->mCompactDialogs = true;
1053 p->mConfirm = true; 1059 p->mConfirm = true;
1054 // p->mEnableQuickTodo = false; 1060 // p->mEnableQuickTodo = false;
1055} 1061}
1056 1062
1057QString MainWindow::resourcePath() 1063QString MainWindow::resourcePath()
1058{ 1064{
1059 return KGlobal::iconLoader()->iconPath(); 1065 return KGlobal::iconLoader()->iconPath();
1060} 1066}
1061 1067
1062void MainWindow::displayText( QString text ,QString cap ) 1068void MainWindow::displayText( QString text ,QString cap )
1063{ 1069{
1064 QDialog dia( this, "name", true ); ; 1070 QDialog dia( this, "name", true ); ;
1065 dia.setCaption( cap ); 1071 dia.setCaption( cap );
1066 QVBoxLayout* lay = new QVBoxLayout( &dia ); 1072 QVBoxLayout* lay = new QVBoxLayout( &dia );
1067 lay->setSpacing( 3 ); 1073 lay->setSpacing( 3 );
1068 lay->setMargin( 3 ); 1074 lay->setMargin( 3 );
1069 QTextBrowser tb ( &dia ); 1075 QTextBrowser tb ( &dia );
1070 lay->addWidget( &tb ); 1076 lay->addWidget( &tb );
1071 tb.setText( text ); 1077 tb.setText( text );
1072#ifdef DESKTOP_VERSION 1078#ifdef DESKTOP_VERSION
1073 dia.resize( 640, 480); 1079 dia.resize( 640, 480);
1074#else 1080#else
1075 dia.showMaximized(); 1081 dia.showMaximized();
1076#endif 1082#endif
1077 dia.exec(); 1083 dia.exec();
1078} 1084}
1079void MainWindow::displayFile( QString fn, QString cap ) 1085void MainWindow::displayFile( QString fn, QString cap )
1080{ 1086{
1081 QString fileName = resourcePath() + fn; 1087 QString fileName = resourcePath() + fn;
1082 QString text; 1088 QString text;
1083 QFile file( fileName ); 1089 QFile file( fileName );
1084 if (!file.open( IO_ReadOnly ) ) { 1090 if (!file.open( IO_ReadOnly ) ) {
1085 return ; 1091 return ;
1086 1092
1087 } 1093 }
1088 QTextStream ts( &file ); 1094 QTextStream ts( &file );
1089 text = ts.read(); 1095 text = ts.read();
1090 file.close(); 1096 file.close();
1091 displayText( text, cap); 1097 displayText( text, cap);
1092} 1098}
1093void MainWindow::features() 1099void MainWindow::features()
1094{ 1100{
1095 1101
1096 displayFile( "featuresKOPI.txt",i18n("KO/Pi Features and hints") ); 1102 displayFile( "featuresKOPI.txt",i18n("KO/Pi Features and hints") );
1097} 1103}
1098 1104
1099void MainWindow::usertrans() 1105void MainWindow::usertrans()
1100{ 1106{
1101 1107
1102 displayFile( "usertranslationHOWTO.txt",i18n("KO/Pi User translation HowTo") ); 1108 displayFile( "usertranslationHOWTO.txt",i18n("KO/Pi User translation HowTo") );
1103} 1109}
1104#if 0 1110#if 0
1105#include <libkcal/vcalformat.h> 1111#include <libkcal/vcalformat.h>
1106#include <libkcal/event.h> 1112#include <libkcal/event.h>
1107#include <libkcal/todo.h> 1113#include <libkcal/todo.h>
1108#include <libkcal/incidence.h> 1114#include <libkcal/incidence.h>
1109#endif 1115#endif
1110void MainWindow::synchowto() 1116void MainWindow::synchowto()
1111{ 1117{
1112#if 0 1118#if 0
1113 QPtrList<Incidence> er = mCalendar->rawIncidences(); 1119 QPtrList<Incidence> er = mCalendar->rawIncidences();
1114 Incidence* inR = er.first(); 1120 Incidence* inR = er.first();
1115 VCalFormat vf; 1121 VCalFormat vf;
1116 QString strout; 1122 QString strout;
1117 while ( inR ) { 1123 while ( inR ) {
1118 if ( inR->type() == "Todo" ) 1124 if ( inR->type() == "Todo" )
1119 strout = vf.todoToString( (Todo *) inR ); 1125 strout = vf.todoToString( (Todo *) inR );
1120 if ( inR->type() == "Event" ) 1126 if ( inR->type() == "Event" )
1121 strout = vf.eventToString( (Event *) inR ); 1127 strout = vf.eventToString( (Event *) inR );
1122 qDebug("incidence: \n%s\n ente\n\n",strout.latin1() ); 1128 qDebug("incidence: \n%s\n ente\n\n",strout.latin1() );
1123 inR = er.next(); 1129 inR = er.next();
1124 } 1130 }
1125#endif 1131#endif
1126 displayFile( "howtoSYNC.txt",i18n("KO/Pi Synchronization HowTo") ); 1132 displayFile( "howtoSYNC.txt",i18n("KO/Pi Synchronization HowTo") );
1127} 1133}
1128void MainWindow::faq() 1134void MainWindow::faq()
1129{ 1135{
1130 displayFile( "kopiFAQ.txt",i18n("KO/Pi FAQ") ); 1136 displayFile( "kopiFAQ.txt",i18n("KO/Pi FAQ") );
1131 1137
1132} 1138}
1133void MainWindow::whatsNew() 1139void MainWindow::whatsNew()
1134{ 1140{
1135 displayFile( "kopiWhatsNew.txt",i18n("KO/Pi Version Info") ); 1141 displayFile( "kopiWhatsNew.txt",i18n("KO/Pi Version Info") );
1136 1142
1137} 1143}
1138void MainWindow::licence() 1144void MainWindow::licence()
1139{ 1145{
1140 KApplication::showLicence(); 1146 KApplication::showLicence();
1141 1147
1142} 1148}
1143void MainWindow::about() 1149void MainWindow::about()
1144{ 1150{
1145 QString version; 1151 QString version;
1146#include <../version> 1152#include <../version>
1147 QMessageBox::about( this, i18n("About KOrganizer/Pi"), 1153 QMessageBox::about( this, i18n("About KOrganizer/Pi"),
1148 i18n("KOrganizer/Platform-independent\n") + 1154 i18n("KOrganizer/Platform-independent\n") +
1149 "(KO/Pi) " + version + " - " + 1155 "(KO/Pi) " + version + " - " +
1150 1156
1151#ifdef DESKTOP_VERSION 1157#ifdef DESKTOP_VERSION
1152 i18n("Desktop Edition\n") + 1158 i18n("Desktop Edition\n") +
1153#else 1159#else
1154 i18n("PDA-Edition\nfor: Zaurus 5x00 / 7x0 / 8x0\n") + 1160 i18n("PDA-Edition\nfor: Zaurus 5x00 / 7x0 / 8x0\n") +
1155#endif 1161#endif
1156 i18n("(c) 2004 Lutz Rogowski\nEmail:lutz@pi-sync.net\nKO/Pi is based on KOrganizer\n(c) 2002,2003 Cornelius Schumacher\nEmail: schumacher@kde.org\nKOrganizer/Pi is licensed\nunder the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.korganizer.org\nwww.pi-sync.net\n") ); 1162 i18n("(c) 2004 Lutz Rogowski\nEmail:lutz@pi-sync.net\nKO/Pi is based on KOrganizer\n(c) 2002,2003 Cornelius Schumacher\nEmail: schumacher@kde.org\nKOrganizer/Pi is licensed\nunder the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.korganizer.org\nwww.pi-sync.net\n") );
1157} 1163}
1158void MainWindow::keyBindings() 1164void MainWindow::keyBindings()
1159{ 1165{
1160 QString cap = i18n("Key bindings KOrganizer/Pi"); 1166 QString cap = i18n("Key bindings KOrganizer/Pi");
1161 QString text = i18n("<p><h2>KO/Pi key shortcuts:</h2></p>\n") + 1167 QString text = i18n("<p><h2>KO/Pi key shortcuts:</h2></p>\n") +
1162 i18n("<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n")+ 1168 i18n("<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n")+
1163 i18n("<p><b>I</b>: Show info for selected event/todo</p>\n") + 1169 i18n("<p><b>I</b>: Show info for selected event/todo</p>\n") +
1164 i18n("<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n")+ 1170 i18n("<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n")+
1165 i18n("<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n")+ 1171 i18n("<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n")+
1166 i18n("<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n")+ 1172 i18n("<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n")+
1167 i18n("<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n")+ 1173 i18n("<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n")+
1168 i18n("<p><b>N</b>: Next days view| <b>W</b>: What's next view\n ")+ 1174 i18n("<p><b>N</b>: Next days view| <b>W</b>: What's next view\n ")+
1169 i18n("<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n")+ 1175 i18n("<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n")+
1170 i18n("<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n")+ 1176 i18n("<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n")+
1171 i18n("<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n")+ 1177 i18n("<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n")+
1172 i18n("<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n")+ 1178 i18n("<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n")+
1173 i18n("<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n")+ 1179 i18n("<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n")+
1174 i18n("<p><b>S+ctrl</b>: Add sub-todo | <b>X</b>: Toggle datenavigator</p>\n")+ 1180 i18n("<p><b>S+ctrl</b>: Add sub-todo | <b>X</b>: Toggle datenavigator</p>\n")+
1175 i18n("<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n")+ 1181 i18n("<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n")+
1176 i18n("<p><b>C</b>: Show current time in agenda view</p>\n")+ 1182 i18n("<p><b>C</b>: Show current time in agenda view</p>\n")+
1177 i18n("<p><b>B</b>: Edit description (details) of selected item</p>\n")+ 1183 i18n("<p><b>B</b>: Edit description (details) of selected item</p>\n")+
1178 i18n("<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n")+ 1184 i18n("<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n")+
1179 i18n("<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n")+ 1185 i18n("<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n")+
1180 i18n("<p><b>del,backspace</b>: Delete selected item</p>\n")+ 1186 i18n("<p><b>del,backspace</b>: Delete selected item</p>\n")+
1181 i18n("<p><h3>In agenda view:</h3></p>\n") + 1187 i18n("<p><h3>In agenda view:</h3></p>\n") +
1182 i18n("<p><b>up/down</b>: Scroll agenda view</p>\n")+ 1188 i18n("<p><b>up/down</b>: Scroll agenda view</p>\n")+
1183 i18n("<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n")+ 1189 i18n("<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n")+
1184 i18n("<p><h3>In todo view:</h3></p>\n") + 1190 i18n("<p><h3>In todo view:</h3></p>\n") +
1185 i18n("<p><b>Q</b>: Toggle quick todo line edit.</p>\n")+ 1191 i18n("<p><b>Q</b>: Toggle quick todo line edit.</p>\n")+
1186 i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+ 1192 i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+
1187 i18n("<p><b>return</b>: Mark item as completed+one step down.</p>\n")+ 1193 i18n("<p><b>return</b>: Mark item as completed+one step down.</p>\n")+
1188 i18n("<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n")+ 1194 i18n("<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n")+
1189 i18n("<p><h3>In list view:</h3></p>\n") + 1195 i18n("<p><h3>In list view:</h3></p>\n") +
1190 i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+ 1196 i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+
1191 i18n("<p><b>return</b>: Select item+one step down</p>\n")+ 1197 i18n("<p><b>return</b>: Select item+one step down</p>\n")+
1192 i18n("<p><b>return+shift</b>: Deselect item+one step down</p>\n")+ 1198 i18n("<p><b>return+shift</b>: Deselect item+one step down</p>\n")+
1193 i18n("<p><b>up/down</b>: Next/prev item</p>\n")+ 1199 i18n("<p><b>up/down</b>: Next/prev item</p>\n")+
1194 i18n("<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n")+ 1200 i18n("<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n")+
1195 i18n("<p><b>shift+up/down</b>: Goto first/last item</p>\n")+ 1201 i18n("<p><b>shift+up/down</b>: Goto first/last item</p>\n")+
1196 i18n("<p><h3>In event/todo viewer:</h3></p>\n") + 1202 i18n("<p><h3>In event/todo viewer:</h3></p>\n") +
1197 i18n("<p><b>I,C</b>: Close dialog.</p>\n")+ 1203 i18n("<p><b>I,C</b>: Close dialog.</p>\n")+
1198 i18n("<p><b>A</b>: Show agenda view.</p>\n")+ 1204 i18n("<p><b>A</b>: Show agenda view.</p>\n")+
1199 i18n("<p><b>E</b>: Edit item</p>\n") + 1205 i18n("<p><b>E</b>: Edit item</p>\n") +
1200 i18n("<p><h2>KO/Pi icon colors:</h2></p>\n") + 1206 i18n("<p><h2>KO/Pi icon colors:</h2></p>\n") +
1201 i18n("<p><b>(for square icons in agenda and month view)</b></p>\n") + 1207 i18n("<p><b>(for square icons in agenda and month view)</b></p>\n") +
1202 i18n("<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n")+ 1208 i18n("<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n")+
1203 i18n("<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n")+ 1209 i18n("<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n")+
1204 i18n("<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n")+ 1210 i18n("<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n")+
1205 i18n("<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n")+ 1211 i18n("<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n")+
1206 i18n("<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n")+ 1212 i18n("<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n")+
1207 i18n("<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n") + 1213 i18n("<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n") +
1208 i18n("<p><b>White</b>: Item readonly</p>\n"); 1214 i18n("<p><b>White</b>: Item readonly</p>\n");
1209 displayText( text, cap); 1215 displayText( text, cap);
1210 1216
1211} 1217}
1212void MainWindow::aboutAutoSaving() 1218void MainWindow::aboutAutoSaving()
1213{ 1219{
1214 QMessageBox* msg; 1220 QMessageBox* msg;
1215 msg = new QMessageBox( i18n("Auto Saving in KOrganizer/Pi"), 1221 msg = new QMessageBox( i18n("Auto Saving in KOrganizer/Pi"),
1216 i18n("After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configureable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n"), QMessageBox::NoIcon, 1222 i18n("After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configureable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n"), QMessageBox::NoIcon,
1217 QMessageBox::Ok, 1223 QMessageBox::Ok,
1218 QMessageBox::NoButton, 1224 QMessageBox::NoButton,
1219 QMessageBox::NoButton); 1225 QMessageBox::NoButton);
1220 msg->exec(); 1226 msg->exec();
1221 delete msg; 1227 delete msg;
1222 1228
1223 1229
1224} 1230}
1225void MainWindow::aboutKnownBugs() 1231void MainWindow::aboutKnownBugs()
1226{ 1232{
1227 QMessageBox* msg; 1233 QMessageBox* msg;
1228 msg = new QMessageBox( i18n("Known Problems in KOrganizer/Pi"), 1234 msg = new QMessageBox( i18n("Known Problems in KOrganizer/Pi"),
1229 i18n("1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n")+ 1235 i18n("1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n")+
1230 i18n("2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n")+ 1236 i18n("2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n")+
1231 i18n("\nPlease report unexpected behaviour to\nlutz@pi-sync.net\n") + 1237 i18n("\nPlease report unexpected behaviour to\nlutz@pi-sync.net\n") +
1232 i18n("\nor report them in the bugtracker on\n") + 1238 i18n("\nor report them in the bugtracker on\n") +
1233 i18n("\nhttp://sourceforge.net/projects/kdepimpi\n"), 1239 i18n("\nhttp://sourceforge.net/projects/kdepimpi\n"),
1234 QMessageBox::NoIcon, 1240 QMessageBox::NoIcon,
1235 QMessageBox::Ok, 1241 QMessageBox::Ok,
1236 QMessageBox::NoButton, 1242 QMessageBox::NoButton,
1237 QMessageBox::NoButton); 1243 QMessageBox::NoButton);
1238 msg->exec(); 1244 msg->exec();
1239 delete msg; 1245 delete msg;
1240 1246
1241} 1247}
1242 1248
1243QString MainWindow::defaultFileName() 1249QString MainWindow::defaultFileName()
1244{ 1250{
1245 return locateLocal( "data", "korganizer/mycalendar.ics" ); 1251 return locateLocal( "data", "korganizer/mycalendar.ics" );
1246} 1252}
1247 1253
1248void MainWindow::processIncidenceSelection( Incidence *incidence ) 1254void MainWindow::processIncidenceSelection( Incidence *incidence )
1249{ 1255{
1250 if ( !incidence ) { 1256 if ( !incidence ) {
1251 enableIncidenceActions( false ); 1257 enableIncidenceActions( false );
1252 1258
1253 mNewSubTodoAction->setEnabled( false ); 1259 mNewSubTodoAction->setEnabled( false );
1254 setCaptionToDates(); 1260 setCaptionToDates();
1255 return; 1261 return;
1256 1262
1257 } 1263 }
1258 1264
1259 //KGlobal::locale()->formatDateTime(nextA, true); 1265 //KGlobal::locale()->formatDateTime(nextA, true);
1260 QString startString = ""; 1266 QString startString = "";
1261 if ( incidence->type() != "Todo" ) { 1267 if ( incidence->type() != "Todo" ) {
1262 if ( incidence->dtStart().date() < incidence->dtEnd().date() ) { 1268 if ( incidence->dtStart().date() < incidence->dtEnd().date() ) {
1263 if ( incidence->doesFloat() ) { 1269 if ( incidence->doesFloat() ) {
1264 startString += ": "+incidence->dtStartDateStr( true ); 1270 startString += ": "+incidence->dtStartDateStr( true );
1265 startString += " --- "+((Event*)incidence)->dtEndDateStr( true ); 1271 startString += " --- "+((Event*)incidence)->dtEndDateStr( true );
1266 1272
1267 } else { 1273 } else {
1268 startString = ": "+incidence->dtStartStr(true); 1274 startString = ": "+incidence->dtStartStr(true);
1269 startString += " --- "+((Event*)incidence)->dtEndStr(true); 1275 startString += " --- "+((Event*)incidence)->dtEndStr(true);
1270 1276
1271 } 1277 }
1272 1278
1273 } else { 1279 } else {
1274 if ( incidence->dtStart().time() != incidence->dtEnd().time() ) 1280 if ( incidence->dtStart().time() != incidence->dtEnd().time() )
1275 startString = ": "+KGlobal::locale()->formatTime(incidence->dtStart().time())+ 1281 startString = ": "+KGlobal::locale()->formatTime(incidence->dtStart().time())+
1276 "-"+KGlobal::locale()->formatTime(incidence->dtEnd().time()); 1282 "-"+KGlobal::locale()->formatTime(incidence->dtEnd().time());
1277 startString +=" "+KGlobal::locale()->formatDate( incidence->dtStart().date(), true); 1283 startString +=" "+KGlobal::locale()->formatDate( incidence->dtStart().date(), true);
1278 } 1284 }
1279 1285
1280 } 1286 }
1281 else 1287 else
1282 startString = i18n(": (Prio ") +QString::number( (( KCal::Todo*)incidence)->priority() ) +") "+QString::number( (( KCal::Todo*)incidence)->percentComplete() ) +i18n("\% completed"); 1288 startString = i18n(": (Prio ") +QString::number( (( KCal::Todo*)incidence)->priority() ) +") "+QString::number( (( KCal::Todo*)incidence)->percentComplete() ) +i18n("\% completed");
1283 if ( !incidence->location().isEmpty() ) 1289 if ( !incidence->location().isEmpty() )
1284 startString += " (" +incidence->location()+")"; 1290 startString += " (" +incidence->location()+")";
1285 setCaption( incidence->summary()+startString); 1291 setCaption( incidence->summary()+startString);
1286 1292
1287 enableIncidenceActions( true ); 1293 enableIncidenceActions( true );
1288 1294
1289 if ( incidence->type() == "Event" ) { 1295 if ( incidence->type() == "Event" ) {
1290 mShowAction->setText( i18n("Show Event...") ); 1296 mShowAction->setText( i18n("Show Event...") );
1291 mEditAction->setText( i18n("Edit Event...") ); 1297 mEditAction->setText( i18n("Edit Event...") );
1292 mDeleteAction->setText( i18n("Delete Event...") ); 1298 mDeleteAction->setText( i18n("Delete Event...") );
1293 1299
1294 mNewSubTodoAction->setEnabled( false ); 1300 mNewSubTodoAction->setEnabled( false );
1295 } else if ( incidence->type() == "Todo" ) { 1301 } else if ( incidence->type() == "Todo" ) {
1296 mShowAction->setText( i18n("Show Todo...") ); 1302 mShowAction->setText( i18n("Show Todo...") );
1297 mEditAction->setText( i18n("Edit Todo...") ); 1303 mEditAction->setText( i18n("Edit Todo...") );
1298 mDeleteAction->setText( i18n("Delete Todo...") ); 1304 mDeleteAction->setText( i18n("Delete Todo...") );
1299 1305
1300 mNewSubTodoAction->setEnabled( true ); 1306 mNewSubTodoAction->setEnabled( true );
1301 } else { 1307 } else {
1302 mShowAction->setText( i18n("Show...") ); 1308 mShowAction->setText( i18n("Show...") );
1303 mShowAction->setText( i18n("Edit...") ); 1309 mShowAction->setText( i18n("Edit...") );
1304 mShowAction->setText( i18n("Delete...") ); 1310 mShowAction->setText( i18n("Delete...") );
1305 1311
1306 mNewSubTodoAction->setEnabled( false ); 1312 mNewSubTodoAction->setEnabled( false );
1307 } 1313 }
1308} 1314}
1309 1315
1310void MainWindow::enableIncidenceActions( bool enabled ) 1316void MainWindow::enableIncidenceActions( bool enabled )
1311{ 1317{
1312 mShowAction->setEnabled( enabled ); 1318 mShowAction->setEnabled( enabled );
1313 mEditAction->setEnabled( enabled ); 1319 mEditAction->setEnabled( enabled );
1314 mDeleteAction->setEnabled( enabled ); 1320 mDeleteAction->setEnabled( enabled );
1315} 1321}
1316 1322
1317void MainWindow::importOL() 1323void MainWindow::importOL()
1318{ 1324{
1319#ifdef _WIN32_ 1325#ifdef _WIN32_
1320 KOImportOLdialog *id = new KOImportOLdialog("Import from OL - select folder!" , mView->calendar(),this ); 1326 KOImportOLdialog *id = new KOImportOLdialog("Import from OL - select folder!" , mView->calendar(),this );
1321 id->exec(); 1327 id->exec();
1322 delete id; 1328 delete id;
1323 mView->updateView(); 1329 mView->updateView();
1324#endif 1330#endif
1325} 1331}
1326void MainWindow::importBday() 1332void MainWindow::importBday()
1327{ 1333{
1328 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 1334 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
1329 i18n("When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n"), 1335 i18n("When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n"),
1330 i18n("Import!"), i18n("Cancel"), 0, 1336 i18n("Import!"), i18n("Cancel"), 0,
1331 0, 1 ); 1337 0, 1 );
1332 if ( result == 0 ) { 1338 if ( result == 0 ) {
1333 mView->importBday(); 1339 mView->importBday();
1334 1340
1335 } 1341 }
1336 1342
1337 1343
1338} 1344}
1339void MainWindow::importQtopia() 1345void MainWindow::importQtopia()
1340{ 1346{
1341#ifndef DESKTOP_VERSION 1347#ifndef DESKTOP_VERSION
1342 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 1348 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
1343 i18n("When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing"), 1349 i18n("When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing"),
1344 i18n("Import!"), i18n("Cancel"), 0, 1350 i18n("Import!"), i18n("Cancel"), 0,
1345 0, 1 ); 1351 0, 1 );
1346 if ( result == 0 ) { 1352 if ( result == 0 ) {
1347 QString datebook = Global::applicationFileName( "datebook", "datebook.xml"); 1353 QString datebook = Global::applicationFileName( "datebook", "datebook.xml");
1348 QString todolist = Global::applicationFileName( "todolist", "todolist.xml"); 1354 QString todolist = Global::applicationFileName( "todolist", "todolist.xml");
1349 QString categories = QString( getenv( "HOME" ) ) + "/Settings/Categories.xml"; 1355 QString categories = QString( getenv( "HOME" ) ) + "/Settings/Categories.xml";
1350 mView->importQtopia( categories, datebook, todolist ); 1356 mView->importQtopia( categories, datebook, todolist );
1351 } 1357 }
1352#else 1358#else
1353 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 1359 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
1354 i18n("Not supported \non desktop!\n"), 1360 i18n("Not supported \non desktop!\n"),
1355 i18n("Ok"), i18n("Cancel"), 0, 1361 i18n("Ok"), i18n("Cancel"), 0,
1356 0, 1 ); 1362 0, 1 );
1357 1363
1358#endif 1364#endif
1359} 1365}
1360 1366
1361void MainWindow::saveOnClose() 1367void MainWindow::saveOnClose()
1362{ 1368{
1363 KOPrefs *p = KOPrefs::instance(); 1369 KOPrefs *p = KOPrefs::instance();
1364 p->mToolBarHor = ( iconToolBar->orientation () == Qt:: Horizontal ); 1370 p->mToolBarHor = ( iconToolBar->orientation () == Qt:: Horizontal );
1365 p->mToolBarUp = iconToolBar->x() > width()/2 || 1371 p->mToolBarUp = iconToolBar->x() > width()/2 ||
1366 iconToolBar->y() > height()/2; 1372 iconToolBar->y() > height()/2;
1367 mView->writeSettings(); 1373 mView->writeSettings();
1368 if ( mCalendarModifiedFlag || mView->checkFileChanged( defaultFileName())) 1374 if ( mCalendarModifiedFlag || mView->checkFileChanged( defaultFileName()))
1369 save(); 1375 save();
1370} 1376}
1371void MainWindow::slotModifiedChanged( bool changed ) 1377void MainWindow::slotModifiedChanged( bool changed )
1372{ 1378{
1373 if ( mBlockAtStartup ) 1379 if ( mBlockAtStartup )
1374 return; 1380 return;
1375 int msec; 1381 int msec;
1376 // we store the changes after 1 minute, 1382 // we store the changes after 1 minute,
1377 // and for safety reasons after 10 minutes again 1383 // and for safety reasons after 10 minutes again
1378 if ( !mBlockSaveFlag ) 1384 if ( !mBlockSaveFlag )
1379 msec = (1000 * 60*KOPrefs::instance()->mAutoSaveInterval) +1000; 1385 msec = (1000 * 60*KOPrefs::instance()->mAutoSaveInterval) +1000;
1380 else 1386 else
1381 msec = 1000 * 600; 1387 msec = 1000 * 600;
1382 mSaveTimer.start( msec, true ); // 1 minute 1388 mSaveTimer.start( msec, true ); // 1 minute
1383 qDebug("KO: Saving File in %d secs!", msec/1000); 1389 qDebug("KO: Saving File in %d secs!", msec/1000);
1384 mCalendarModifiedFlag = true; 1390 mCalendarModifiedFlag = true;
1385} 1391}
1386#include <qfileinfo.h> 1392#include <qfileinfo.h>
1387void MainWindow::save() 1393void MainWindow::save()
1388{ 1394{
1389 if ( mBlockSaveFlag ) 1395 if ( mBlockSaveFlag )
1390 return; 1396 return;
1391 bool store = mBlockSaveFlag; 1397 bool store = mBlockSaveFlag;
1392 mBlockSaveFlag = true; 1398 mBlockSaveFlag = true;
1393 if ( mView->checkFileVersion( defaultFileName()) ) { 1399 if ( mView->checkFileVersion( defaultFileName()) ) {
1394 1400
1395 QTime neededSaveTime = QDateTime::currentDateTime().time(); 1401 QTime neededSaveTime = QDateTime::currentDateTime().time();
1396 setCaption(i18n("KO/Pi:Saving Data to File ..." )); 1402 setCaption(i18n("KO/Pi:Saving Data to File ..." ));
1397 qDebug("KO: Start saving data to file!"); 1403 qDebug("KO: Start saving data to file!");
1398 mView->saveCalendar( defaultFileName() ); 1404 mView->saveCalendar( defaultFileName() );
1399 1405
1400 int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() ); 1406 int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() );
1401 mView->setLoadedFileVersion(QDateTime::currentDateTime()); 1407 mView->setLoadedFileVersion(QDateTime::currentDateTime());
1402 qDebug("KO: Needed %d ms for saving.",msNeeded ); 1408 qDebug("KO: Needed %d ms for saving.",msNeeded );
1403 QString savemes; 1409 QString savemes;
diff --git a/libkcal/phoneformat.cpp b/libkcal/phoneformat.cpp
index ef69bce..6d0da5c 100644
--- a/libkcal/phoneformat.cpp
+++ b/libkcal/phoneformat.cpp
@@ -1,636 +1,637 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 2004 Lutz Rogowski <rogowski@kde.org> 4 Copyright (c) 2004 Lutz Rogowski <rogowski@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22#include <qdatetime.h> 22#include <qdatetime.h>
23#include <qstring.h> 23#include <qstring.h>
24#include <qapplication.h> 24#include <qapplication.h>
25#include <qptrlist.h> 25#include <qptrlist.h>
26#include <qregexp.h> 26#include <qregexp.h>
27#include <qmessagebox.h> 27#include <qmessagebox.h>
28#include <qclipboard.h> 28#include <qclipboard.h>
29#include <qfile.h> 29#include <qfile.h>
30#include <qtextstream.h> 30#include <qtextstream.h>
31#include <qtextcodec.h> 31#include <qtextcodec.h>
32#include <qxml.h> 32#include <qxml.h>
33#include <qlabel.h> 33#include <qlabel.h>
34 34
35#include <kdebug.h> 35#include <kdebug.h>
36#include <klocale.h> 36#include <klocale.h>
37#include <kglobal.h> 37#include <kglobal.h>
38#include <kmessagebox.h> 38#include <kmessagebox.h>
39 39
40#include "calendar.h" 40#include "calendar.h"
41#include "alarm.h" 41#include "alarm.h"
42#include "recurrence.h" 42#include "recurrence.h"
43#include "calendarlocal.h" 43#include "calendarlocal.h"
44 44
45#include "phoneformat.h" 45#include "phoneformat.h"
46#include "syncdefines.h" 46#include "syncdefines.h"
47 47
48using namespace KCal; 48using namespace KCal;
49class PhoneParser : public QObject 49class PhoneParser : public QObject
50{ 50{
51public: 51public:
52 PhoneParser( ) { 52 PhoneParser( ) {
53 ; 53 ;
54 } 54 }
55 55
56 static QString dtToString( const QDateTime& dti, bool useTZ = false ) 56 static QString dtToString( const QDateTime& dti, bool useTZ = false )
57 { 57 {
58 QString datestr; 58 QString datestr;
59 QString timestr; 59 QString timestr;
60 int offset = KGlobal::locale()->localTimeOffset( dti ); 60 int offset = KGlobal::locale()->localTimeOffset( dti );
61 QDateTime dt; 61 QDateTime dt;
62 if (useTZ) 62 if (useTZ)
63 dt = dti.addSecs ( -(offset*60)); 63 dt = dti.addSecs ( -(offset*60));
64 else 64 else
65 dt = dti; 65 dt = dti;
66 if(dt.date().isValid()){ 66 if(dt.date().isValid()){
67 const QDate& date = dt.date(); 67 const QDate& date = dt.date();
68 datestr.sprintf("%04d%02d%02d", 68 datestr.sprintf("%04d%02d%02d",
69 date.year(), date.month(), date.day()); 69 date.year(), date.month(), date.day());
70 } 70 }
71 if(dt.time().isValid()){ 71 if(dt.time().isValid()){
72 const QTime& time = dt.time(); 72 const QTime& time = dt.time();
73 timestr.sprintf("T%02d%02d%02d", 73 timestr.sprintf("T%02d%02d%02d",
74 time.hour(), time.minute(), time.second()); 74 time.hour(), time.minute(), time.second());
75 } 75 }
76 return datestr + timestr; 76 return datestr + timestr;
77 } 77 }
78 78
79 79
80}; 80};
81 81
82 82
83 83
84PhoneFormat::PhoneFormat(QString profileName, QString device,QString connection, QString model ) 84PhoneFormat::PhoneFormat(QString profileName, QString device,QString connection, QString model )
85{ 85{
86 mProfileName = profileName; 86 mProfileName = profileName;
87 mDevice = device; 87 mDevice = device;
88 mConnection = connection; 88 mConnection = connection;
89 mModel = model; 89 mModel = model;
90} 90}
91 91
92PhoneFormat::~PhoneFormat() 92PhoneFormat::~PhoneFormat()
93{ 93{
94} 94}
95#if 0 95#if 0
96int PhoneFormat::initDevice(GSM_StateMachine *s) 96int PhoneFormat::initDevice(GSM_StateMachine *s)
97{ 97{
98 GSM_ReadConfig(NULL, &s->Config[0], 0); 98 GSM_ReadConfig(NULL, &s->Config[0], 0);
99 s->ConfigNum = 1; 99 s->ConfigNum = 1;
100 GSM_Config *cfg = &s->Config[0]; 100 GSM_Config *cfg = &s->Config[0];
101 if ( ! mConnection.isEmpty() ) { 101 if ( ! mConnection.isEmpty() ) {
102 cfg->Connection = strdup(mConnection.latin1()); 102 cfg->Connection = strdup(mConnection.latin1());
103 cfg->DefaultConnection = false; 103 cfg->DefaultConnection = false;
104 qDebug("Connection set %s ", cfg->Connection ); 104 qDebug("Connection set %s ", cfg->Connection );
105 105
106 } 106 }
107 if ( ! mDevice.isEmpty() ) { 107 if ( ! mDevice.isEmpty() ) {
108 cfg->Device = strdup(mDevice.latin1()); 108 cfg->Device = strdup(mDevice.latin1());
109 cfg->DefaultDevice = false; 109 cfg->DefaultDevice = false;
110 qDebug("Device set %s ", cfg->Device); 110 qDebug("Device set %s ", cfg->Device);
111 111
112 } 112 }
113 if ( ! mModel.isEmpty() ) { 113 if ( ! mModel.isEmpty() ) {
114 strcpy(cfg->Model,mModel.latin1() ); 114 strcpy(cfg->Model,mModel.latin1() );
115 cfg->DefaultModel = false; 115 cfg->DefaultModel = false;
116 qDebug("Model set %s ",cfg->Model ); 116 qDebug("Model set %s ",cfg->Model );
117 } 117 }
118 int error=GSM_InitConnection(s,3); 118 int error=GSM_InitConnection(s,3);
119 return error; 119 return error;
120} 120}
121#endif 121#endif
122ulong PhoneFormat::getCsumTodo( Todo* todo ) 122ulong PhoneFormat::getCsumTodo( Todo* todo )
123{ 123{
124 QStringList attList; 124 QStringList attList;
125 if ( todo->hasDueDate() ) 125 if ( todo->hasDueDate() )
126 attList << PhoneParser::dtToString ( todo->dtDue() ); 126 attList << PhoneParser::dtToString ( todo->dtDue() );
127 attList << todo->summary(); 127 attList << todo->summary();
128 QString completedString = "no"; 128 QString completedString = "no";
129 if ( todo->isCompleted() ) 129 if ( todo->isCompleted() )
130 completedString = "yes"; 130 completedString = "yes";
131 attList << completedString; 131 attList << completedString;
132 int prio = todo->priority(); 132 int prio = todo->priority();
133 if( prio == 2 ) prio = 1; 133 if( prio == 2 ) prio = 1;
134 if (prio == 4 ) prio = 5 ; 134 if (prio == 4 ) prio = 5 ;
135 attList << QString::number( prio ); 135 attList << QString::number( prio );
136 QString alarmString = "na"; 136 QString alarmString = "na";
137 Alarm *alarm; 137 Alarm *alarm;
138 if ( todo->alarms().count() > 0 ) { 138 if ( todo->alarms().count() > 0 ) {
139 alarm = todo->alarms().first(); 139 alarm = todo->alarms().first();
140 if ( alarm->enabled() ) { 140 if ( alarm->enabled() ) {
141 alarmString = QString::number(alarm->startOffset().asSeconds() ); 141 alarmString = QString::number(alarm->startOffset().asSeconds() );
142 } 142 }
143 } 143 }
144 attList << alarmString; 144 attList << alarmString;
145 attList << todo->categoriesStr(); 145 attList << todo->categoriesStr();
146 attList << todo->secrecyStr(); 146 attList << todo->secrecyStr();
147 return PhoneFormat::getCsum(attList ); 147 return PhoneFormat::getCsum(attList );
148 148
149} 149}
150ulong PhoneFormat::getCsumEvent( Event* event ) 150ulong PhoneFormat::getCsumEvent( Event* event )
151{ 151{
152 QStringList attList; 152 QStringList attList;
153 attList << PhoneParser::dtToString ( event->dtStart() ); 153 attList << PhoneParser::dtToString ( event->dtStart() );
154 attList << PhoneParser::dtToString ( event->dtEnd() ); 154 attList << PhoneParser::dtToString ( event->dtEnd() );
155 attList << event->summary(); 155 attList << event->summary();
156 attList << event->location(); 156 attList << event->location();
157 QString alarmString = "na"; 157 QString alarmString = "na";
158 Alarm *alarm; 158 Alarm *alarm;
159 if ( event->alarms().count() > 0 ) { 159 if ( event->alarms().count() > 0 ) {
160 alarm = event->alarms().first(); 160 alarm = event->alarms().first();
161 if ( alarm->enabled() ) { 161 if ( alarm->enabled() ) {
162 alarmString = QString::number( alarm->startOffset().asSeconds() ); 162 alarmString = QString::number( alarm->startOffset().asSeconds() );
163 } 163 }
164 } 164 }
165 attList << alarmString; 165 attList << alarmString;
166 Recurrence* rec = event->recurrence(); 166 Recurrence* rec = event->recurrence();
167 QStringList list; 167 QStringList list;
168 bool writeEndDate = false; 168 bool writeEndDate = false;
169 switch ( rec->doesRecur() ) 169 switch ( rec->doesRecur() )
170 { 170 {
171 case Recurrence::rDaily: // 0 171 case Recurrence::rDaily: // 0
172 list.append( "0" ); 172 list.append( "0" );
173 list.append( QString::number( rec->frequency() ));//12 173 list.append( QString::number( rec->frequency() ));//12
174 list.append( "0" ); 174 list.append( "0" );
175 list.append( "0" ); 175 list.append( "0" );
176 writeEndDate = true; 176 writeEndDate = true;
177 break; 177 break;
178 case Recurrence::rWeekly:// 1 178 case Recurrence::rWeekly:// 1
179 list.append( "1" ); 179 list.append( "1" );
180 list.append( QString::number( rec->frequency()) );//12 180 list.append( QString::number( rec->frequency()) );//12
181 list.append( "0" ); 181 list.append( "0" );
182 { 182 {
183 int days = 0; 183 int days = 0;
184 QBitArray weekDays = rec->days(); 184 QBitArray weekDays = rec->days();
185 int i; 185 int i;
186 for( i = 1; i <= 7; ++i ) { 186 for( i = 1; i <= 7; ++i ) {
187 if ( weekDays[i-1] ) { 187 if ( weekDays[i-1] ) {
188 days += 1 << (i-1); 188 days += 1 << (i-1);
189 } 189 }
190 } 190 }
191 list.append( QString::number( days ) ); 191 list.append( QString::number( days ) );
192 } 192 }
193 //pending weekdays 193 //pending weekdays
194 writeEndDate = true; 194 writeEndDate = true;
195 195
196 break; 196 break;
197 case Recurrence::rMonthlyPos:// 2 197 case Recurrence::rMonthlyPos:// 2
198 list.append( "2" ); 198 list.append( "2" );
199 list.append( QString::number( rec->frequency()) );//12 199 list.append( QString::number( rec->frequency()) );//12
200 200
201 writeEndDate = true; 201 writeEndDate = true;
202 { 202 {
203 int count = 1; 203 int count = 1;
204 QPtrList<Recurrence::rMonthPos> rmp; 204 QPtrList<Recurrence::rMonthPos> rmp;
205 rmp = rec->monthPositions(); 205 rmp = rec->monthPositions();
206 if ( rmp.first()->negative ) 206 if ( rmp.first()->negative )
207 count = 5 - rmp.first()->rPos - 1; 207 count = 5 - rmp.first()->rPos - 1;
208 else 208 else
209 count = rmp.first()->rPos - 1; 209 count = rmp.first()->rPos - 1;
210 list.append( QString::number( count ) ); 210 list.append( QString::number( count ) );
211 211
212 } 212 }
213 213
214 list.append( "0" ); 214 list.append( "0" );
215 break; 215 break;
216 case Recurrence::rMonthlyDay:// 3 216 case Recurrence::rMonthlyDay:// 3
217 list.append( "3" ); 217 list.append( "3" );
218 list.append( QString::number( rec->frequency()) );//12 218 list.append( QString::number( rec->frequency()) );//12
219 list.append( "0" ); 219 list.append( "0" );
220 list.append( "0" ); 220 list.append( "0" );
221 writeEndDate = true; 221 writeEndDate = true;
222 break; 222 break;
223 case Recurrence::rYearlyMonth://4 223 case Recurrence::rYearlyMonth://4
224 list.append( "4" ); 224 list.append( "4" );
225 list.append( QString::number( rec->frequency()) );//12 225 list.append( QString::number( rec->frequency()) );//12
226 list.append( "0" ); 226 list.append( "0" );
227 list.append( "0" ); 227 list.append( "0" );
228 writeEndDate = true; 228 writeEndDate = true;
229 break; 229 break;
230 230
231 default: 231 default:
232 list.append( "255" ); 232 list.append( "255" );
233 list.append( QString() ); 233 list.append( QString() );
234 list.append( "0" ); 234 list.append( "0" );
235 list.append( QString() ); 235 list.append( QString() );
236 list.append( "0" ); 236 list.append( "0" );
237 list.append( "20991231T000000" ); 237 list.append( "20991231T000000" );
238 break; 238 break;
239 } 239 }
240 if ( writeEndDate ) { 240 if ( writeEndDate ) {
241 241
242 if ( rec->endDate().isValid() ) { // 15 + 16 242 if ( rec->endDate().isValid() ) { // 15 + 16
243 list.append( "1" ); 243 list.append( "1" );
244 list.append( PhoneParser::dtToString( rec->endDate()) ); 244 list.append( PhoneParser::dtToString( rec->endDate()) );
245 } else { 245 } else {
246 list.append( "0" ); 246 list.append( "0" );
247 list.append( "20991231T000000" ); 247 list.append( "20991231T000000" );
248 } 248 }
249 249
250 } 250 }
251 attList << list.join(""); 251 attList << list.join("");
252 attList << event->categoriesStr(); 252 attList << event->categoriesStr();
253 //qDebug("csum cat %s", event->categoriesStr().latin1()); 253 //qDebug("csum cat %s", event->categoriesStr().latin1());
254 254
255 attList << event->secrecyStr(); 255 attList << event->secrecyStr();
256 return PhoneFormat::getCsum(attList ); 256 return PhoneFormat::getCsum(attList );
257} 257}
258ulong PhoneFormat::getCsum( const QStringList & attList) 258ulong PhoneFormat::getCsum( const QStringList & attList)
259{ 259{
260 int max = attList.count(); 260 int max = attList.count();
261 ulong cSum = 0; 261 ulong cSum = 0;
262 int j,k,i; 262 int j,k,i;
263 int add; 263 int add;
264 for ( i = 0; i < max ; ++i ) { 264 for ( i = 0; i < max ; ++i ) {
265 QString s = attList[i]; 265 QString s = attList[i];
266 if ( ! s.isEmpty() ){ 266 if ( ! s.isEmpty() ){
267 j = s.length(); 267 j = s.length();
268 for ( k = 0; k < j; ++k ) { 268 for ( k = 0; k < j; ++k ) {
269 int mul = k +1; 269 int mul = k +1;
270 add = s[k].unicode (); 270 add = s[k].unicode ();
271 if ( k < 16 ) 271 if ( k < 16 )
272 mul = mul * mul; 272 mul = mul * mul;
273 int ii = i+1; 273 int ii = i+1;
274 add = add * mul *ii*ii*ii; 274 add = add * mul *ii*ii*ii;
275 cSum += add; 275 cSum += add;
276 } 276 }
277 } 277 }
278 if ( i == 0 )
279 qDebug("csum: i == 0 %d ", cSum);
280 278
281 } 279 }
282 QString dump = attList.join(","); 280 QString dump = attList.join(",");
283 qDebug("csum: %d %s", cSum,dump.latin1()); 281 qDebug("csum: %d %s", cSum,dump.latin1());
284 282
285 return cSum; 283 return cSum;
286 284
287} 285}
288//extern "C" GSM_Error GSM_InitConnection(GSM_StateMachine *s, int ReplyNum); 286//extern "C" GSM_Error GSM_InitConnection(GSM_StateMachine *s, int ReplyNum);
289#include <stdlib.h> 287#include <stdlib.h>
290#define DEBUGMODE false 288#define DEBUGMODE false
291bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal) 289bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal)
292{ 290{
293 291
294 QString fileName; 292 QString fileName;
295#ifdef _WIN32_ 293#ifdef _WIN32_
296 fileName = locateLocal("data", "korganizer") + "\\tempfile.vcs"; 294 fileName = locateLocal("data", "korganizer") + "\\tempfile.vcs";
297#else 295#else
298 fileName = "/tmp/kdepimtemp.vcs"; 296 fileName = "/tmp/kdepimtemp.vcs";
299#endif 297#endif
300 QString command ="./kammu --backup " + fileName + " -yes" ; 298 QString command ="./kammu --backup " + fileName + " -yes" ;
301 int ret = system ( command.latin1() ); 299 int ret = system ( command.latin1() );
302 if ( ret != 0 ) { 300 if ( ret != 0 ) {
303 qDebug("Error::command returned %d", ret); 301 qDebug("Error::command returned %d", ret);
304 return false; 302 return false;
305 } 303 }
306 qDebug("Command returned %d", ret); 304 qDebug("Command returned %d", ret);
307 VCalFormat vfload; 305 VCalFormat vfload;
308 vfload.setLocalTime ( true ); 306 vfload.setLocalTime ( true );
309 qDebug("loading file ..."); 307 qDebug("loading file ...");
310 308
311 if ( ! vfload.load( calendar, fileName ) ) 309 if ( ! vfload.load( calendar, fileName ) )
312 return false; 310 return false;
313 QPtrList<Event> er = calendar->rawEvents(); 311 QPtrList<Event> er = calendar->rawEvents();
314 Event* ev = er.first(); 312 Event* ev = er.first();
315 qDebug("reading events... "); 313 qDebug("reading events... ");
316 while ( ev ) { 314 while ( ev ) {
317 QStringList cat = ev->categories(); 315 QStringList cat = ev->categories();
318 if ( cat.contains( "MeetingDEF" )) { 316 if ( cat.contains( "MeetingDEF" )) {
319 ev->setCategories( QStringList() ); 317 ev->setCategories( QStringList() );
320 } 318 }
321 int id = ev->pilotId(); 319 int id = ev->pilotId();
322 Event *event; 320 Event *event;
323 event = existingCal->event( mProfileName ,QString::number( id ) ); 321 event = existingCal->event( mProfileName ,QString::number( id ) );
324 if ( event ) { 322 if ( event ) {
325 event = (Event*)event->clone(); 323 event = (Event*)event->clone();
326 copyEvent( event, ev ); 324 copyEvent( event, ev );
327 calendar->deleteEvent( ev ); 325 calendar->deleteEvent( ev );
328 calendar->addEvent( event); 326 calendar->addEvent( event);
329 } 327 }
330 else 328 else
331 event = ev; 329 event = ev;
332 uint cSum; 330 uint cSum;
333 cSum = PhoneFormat::getCsumEvent( event ); 331 cSum = PhoneFormat::getCsumEvent( event );
334 event->setCsum( mProfileName, QString::number( cSum )); 332 event->setCsum( mProfileName, QString::number( cSum ));
335 event->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); 333 event->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
336 event->setID( mProfileName,QString::number( id ) ); 334 event->setID( mProfileName,QString::number( id ) );
337 ev = er.next(); 335 ev = er.next();
338 } 336 }
339 { 337 {
340 qDebug("reading todos... "); 338 qDebug("reading todos... ");
341 QPtrList<Todo> tr = calendar->rawTodos(); 339 QPtrList<Todo> tr = calendar->rawTodos();
342 Todo* ev = tr.first(); 340 Todo* ev = tr.first();
343 while ( ev ) { 341 while ( ev ) {
344 342
345 QStringList cat = ev->categories(); 343 QStringList cat = ev->categories();
346 if ( cat.contains( "MeetingDEF" )) { 344 if ( cat.contains( "MeetingDEF" )) {
347 ev->setCategories( QStringList() ); 345 ev->setCategories( QStringList() );
348 } 346 }
349 int id = ev->pilotId(); 347 int id = ev->pilotId();
350 Todo *event; 348 Todo *event;
351 event = existingCal->todo( mProfileName ,QString::number( id ) ); 349 event = existingCal->todo( mProfileName ,QString::number( id ) );
352 if ( event ) { 350 if ( event ) {
353 qDebug("copy todo %s ", event->summary().latin1()); 351 qDebug("copy todo %s ", event->summary().latin1());
354 352
355 event = (Todo*)event->clone(); 353 event = (Todo*)event->clone();
356 copyTodo( event, ev ); 354 copyTodo( event, ev );
357 calendar->deleteTodo( ev ); 355 calendar->deleteTodo( ev );
358 calendar->addTodo( event); 356 calendar->addTodo( event);
359 } 357 }
360 else 358 else
361 event = ev; 359 event = ev;
362 uint cSum; 360 uint cSum;
363 cSum = PhoneFormat::getCsumTodo( event ); 361 cSum = PhoneFormat::getCsumTodo( event );
364 event->setCsum( mProfileName, QString::number( cSum )); 362 event->setCsum( mProfileName, QString::number( cSum ));
365 event->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); 363 event->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
366 event->setID( mProfileName,QString::number( id ) ); 364 event->setID( mProfileName,QString::number( id ) );
367 ev = tr.next(); 365 ev = tr.next();
368 } 366 }
369 } 367 }
370 return true; 368 return true;
371} 369}
372void PhoneFormat::copyEvent( Event* to, Event* from ) 370void PhoneFormat::copyEvent( Event* to, Event* from )
373{ 371{
374 if ( from->dtStart().isValid() ) 372 if ( from->dtStart().isValid() )
375 to->setDtStart( from->dtStart() ); 373 to->setDtStart( from->dtStart() );
376 if ( from->dtEnd().isValid() ) 374 if ( from->dtEnd().isValid() )
377 to->setDtEnd( from->dtEnd() ); 375 to->setDtEnd( from->dtEnd() );
378 if ( !from->location().isEmpty() ) 376 if ( !from->location().isEmpty() )
379 to->setLocation( from->location() ); 377 to->setLocation( from->location() );
380 if ( !from->description().isEmpty() ) 378 if ( !from->description().isEmpty() )
381 to->setDescription( from->description() ); 379 to->setDescription( from->description() );
382 if ( !from->summary().isEmpty() ) 380 if ( !from->summary().isEmpty() )
383 to->setSummary( from->summary() ); 381 to->setSummary( from->summary() );
384 382
385 QPtrListIterator<Alarm> it( from->alarms() ); 383 QPtrListIterator<Alarm> it( from->alarms() );
386 if ( it.current() ) 384 if ( it.current() )
387 to->clearAlarms(); 385 to->clearAlarms();
388 const Alarm *a; 386 const Alarm *a;
389 while( (a = it.current()) ) { 387 while( (a = it.current()) ) {
390 Alarm *b = new Alarm( *a ); 388 Alarm *b = new Alarm( *a );
391 b->setParent( to ); 389 b->setParent( to );
392 to->addAlarm( b ); 390 to->addAlarm( b );
393 ++it; 391 ++it;
394 } 392 }
395 QStringList cat = to->categories(); 393 QStringList cat = to->categories();
396 QStringList catFrom = from->categories(); 394 QStringList catFrom = from->categories();
397 QString nCat; 395 QString nCat;
398 int iii; 396 int iii;
399 for ( iii = 0; iii < catFrom.count();++iii ) { 397 for ( iii = 0; iii < catFrom.count();++iii ) {
400 nCat = catFrom[iii]; 398 nCat = catFrom[iii];
401 if ( !nCat.isEmpty() ) 399 if ( !nCat.isEmpty() )
402 if ( !cat.contains( nCat )) { 400 if ( !cat.contains( nCat )) {
403 cat << nCat; 401 cat << nCat;
404 } 402 }
405 } 403 }
406 to->setCategories( cat ); 404 to->setCategories( cat );
407 Recurrence * r = new Recurrence( *from->recurrence(),to); 405 Recurrence * r = new Recurrence( *from->recurrence(),to);
408 to->setRecurrence( r ) ; 406 to->setRecurrence( r ) ;
409 407
410 408
411} 409}
412void PhoneFormat::copyTodo( Todo* to, Todo* from ) 410void PhoneFormat::copyTodo( Todo* to, Todo* from )
413{ 411{
414 if ( from->dtStart().isValid() ) 412 if ( from->dtStart().isValid() )
415 to->setDtStart( from->dtStart() ); 413 to->setDtStart( from->dtStart() );
416 if ( from->dtDue().isValid() ) 414 if ( from->dtDue().isValid() )
417 to->setDtDue( from->dtDue() ); 415 to->setDtDue( from->dtDue() );
418 if ( !from->location().isEmpty() ) 416 if ( !from->location().isEmpty() )
419 to->setLocation( from->location() ); 417 to->setLocation( from->location() );
420 if ( !from->description().isEmpty() ) 418 if ( !from->description().isEmpty() )
421 to->setDescription( from->description() ); 419 to->setDescription( from->description() );
422 if ( !from->summary().isEmpty() ) 420 if ( !from->summary().isEmpty() )
423 to->setSummary( from->summary() ); 421 to->setSummary( from->summary() );
424 422
425 QPtrListIterator<Alarm> it( from->alarms() ); 423 QPtrListIterator<Alarm> it( from->alarms() );
426 if ( it.current() ) 424 if ( it.current() )
427 to->clearAlarms(); 425 to->clearAlarms();
428 const Alarm *a; 426 const Alarm *a;
429 while( (a = it.current()) ) { 427 while( (a = it.current()) ) {
430 Alarm *b = new Alarm( *a ); 428 Alarm *b = new Alarm( *a );
431 b->setParent( to ); 429 b->setParent( to );
432 to->addAlarm( b ); 430 to->addAlarm( b );
433 ++it; 431 ++it;
434 } 432 }
435 QStringList cat = to->categories(); 433 QStringList cat = to->categories();
436 QStringList catFrom = from->categories(); 434 QStringList catFrom = from->categories();
437 QString nCat; 435 QString nCat;
438 int iii; 436 int iii;
439 for ( iii = 0; iii < catFrom.count();++iii ) { 437 for ( iii = 0; iii < catFrom.count();++iii ) {
440 nCat = catFrom[iii]; 438 nCat = catFrom[iii];
441 if ( !nCat.isEmpty() ) 439 if ( !nCat.isEmpty() )
442 if ( !cat.contains( nCat )) { 440 if ( !cat.contains( nCat )) {
443 cat << nCat; 441 cat << nCat;
444 } 442 }
445 } 443 }
446 to->setCategories( cat ); 444 to->setCategories( cat );
447 if ( from->isCompleted() ) { 445 if ( from->isCompleted() ) {
448 to->setCompleted( true ); 446 to->setCompleted( true );
449 if( from->completed().isValid() ) 447 if( from->completed().isValid() )
450 to->setCompleted( from->completed() ); 448 to->setCompleted( from->completed() );
451 } else { 449 } else {
452 // set percentcomplete only, if to->isCompleted() 450 // set percentcomplete only, if to->isCompleted()
453 if ( to->isCompleted() ) 451 if ( to->isCompleted() )
454 to->setPercentComplete(from->percentComplete()); 452 to->setPercentComplete(from->percentComplete());
455 } 453 }
456 if( to->priority() == 2 && from->priority() == 1 ) 454 if( to->priority() == 2 && from->priority() == 1 )
457 ; //skip 455 ; //skip
458 else if (to->priority() == 4 && from->priority() == 5 ) 456 else if (to->priority() == 4 && from->priority() == 5 )
459 ; 457 ;
460 else 458 else
461 to->setPriority(from->priority()); 459 to->setPriority(from->priority());
462 460
463} 461}
464#include <qcstring.h> 462#include <qcstring.h>
465 463
466void PhoneFormat::afterSave( Incidence* inc) 464void PhoneFormat::afterSave( Incidence* inc)
467{ 465{
468 uint csum; 466 uint csum;
469 inc->removeID( mProfileName ); 467 inc->removeID( mProfileName );
470#if 0
471 if ( inc->type() == "Event") 468 if ( inc->type() == "Event")
472 csum = PhoneFormat::getCsumEvent( (Event*) inc ); 469 csum = PhoneFormat::getCsumEvent( (Event*) inc );
473 else 470 else
474 csum = PhoneFormat::getCsumTodo( (Todo*) inc ); 471 csum = PhoneFormat::getCsumTodo( (Todo*) inc );
475 inc->setCsum( mProfileName, QString::number( csum )); 472 inc->setCsum( mProfileName, QString::number( csum ));
476#endif 473
477 inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); 474 inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
478 475
479} 476}
480bool PhoneFormat::save( Calendar *calendar) 477bool PhoneFormat::save( Calendar *calendar)
481{ 478{
482 QLabel status ( i18n(" Opening device ..."), 0 ); 479 QLabel status ( i18n(" Opening device ..."), 0 );
483 int w = status.sizeHint().width()+20 ; 480 int w = status.sizeHint().width()+20 ;
484 if ( w < 200 ) w = 230; 481 if ( w < 200 ) w = 230;
485 int h = status.sizeHint().height()+20 ; 482 int h = status.sizeHint().height()+20 ;
486 int dw = QApplication::desktop()->width(); 483 int dw = QApplication::desktop()->width();
487 int dh = QApplication::desktop()->height(); 484 int dh = QApplication::desktop()->height();
488 status.setCaption(i18n("Writing to phone...") ); 485 status.setCaption(i18n("Writing to phone...") );
489 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 486 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
490 status.show(); 487 status.show();
491 status.raise(); 488 status.raise();
492 qApp->processEvents(); 489 qApp->processEvents();
493 QString message; 490 QString message;
494#ifdef _WIN32_ 491#ifdef _WIN32_
495 QString fileName = locateLocal("data", "korganizer") + "\\tempfile.vcs"; 492 QString fileName = locateLocal("data", "korganizer") + "\\tempfile.vcs";
496#else 493#else
497 QString fileName = "/tmp/kdepimtemp.vcs"; 494 QString fileName = "/tmp/kdepimtemp.vcs";
498#endif 495#endif
499 496
500 // 1 remove events which should be deleted 497 // 1 remove events which should be deleted
501 QPtrList<Event> er = calendar->rawEvents(); 498 QPtrList<Event> er = calendar->rawEvents();
502 Event* ev = er.first(); 499 Event* ev = er.first();
503 while ( ev ) { 500 while ( ev ) {
504 if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { 501 if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) {
505 calendar->deleteEvent( ev ); 502 calendar->deleteEvent( ev );
506 } else { 503 } else {
507 504
508 } 505 }
509 ev = er.next(); 506 ev = er.next();
510 } 507 }
511 // 2 remove todos which should be deleted 508 // 2 remove todos which should be deleted
512 QPtrList<Todo> tl = calendar->rawTodos(); 509 QPtrList<Todo> tl = calendar->rawTodos();
513 Todo* to = tl.first(); 510 Todo* to = tl.first();
514 while ( to ) { 511 while ( to ) {
515 if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { 512 if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) {
516 calendar->deleteTodo( to ); 513 calendar->deleteTodo( to );
517 } 514 } else {
515 if ( to->isCompleted()) {
516 calendar->deleteTodo( to );
517 }
518 }
518 to = tl.next(); 519 to = tl.next();
519 } 520 }
520 // 3 save file 521 // 3 save file
521 VCalFormat vfsave; 522 VCalFormat vfsave;
522 vfsave.setLocalTime ( true ); 523 vfsave.setLocalTime ( true );
523 if ( ! vfsave.save( calendar, fileName ) ) 524 if ( ! vfsave.save( calendar, fileName ) )
524 return false; 525 return false;
525 // 4 call kammu 526 // 4 call kammu
526 QString command ="./kammu --restore " + fileName ; 527 QString command ="./kammu --restore " + fileName ;
527 int ret; 528 int ret;
528 while ( (ret = system ( command.latin1())) != 0 ) { 529 while ( (ret = system ( command.latin1())) != 0 ) {
529 qDebug("Error S::command returned %d. asking users", ret); 530 qDebug("Error S::command returned %d. asking users", ret);
530 int retval = KMessageBox::warningContinueCancel(0, 531 int retval = KMessageBox::warningContinueCancel(0,
531 i18n("Error accessing device!\nPlease turn on connection\nand retry!"),i18n("KO/Pi phone sync"),i18n("Retry"),i18n("Cancel")); 532 i18n("Error accessing device!\nPlease turn on connection\nand retry!"),i18n("KO/Pi phone sync"),i18n("Retry"),i18n("Cancel"));
532 if ( retval != KMessageBox::Continue ) 533 if ( retval != KMessageBox::Continue )
533 return false; 534 return false;
534 } 535 }
535 if ( ret != 0 ) { 536 if ( ret != 0 ) {
536 qDebug("Error S::command returned %d", ret); 537 qDebug("Error S::command returned %d", ret);
537 return false; 538 return false;
538 } 539 }
539 // 5 reread data 540 // 5 reread data
540 message = i18n(" Rereading all data ... "); 541 message = i18n(" Rereading all data ... ");
541 status.setText ( message ); 542 status.setText ( message );
542 qApp->processEvents(); 543 qApp->processEvents();
543 CalendarLocal* calendarTemp = new CalendarLocal(); 544 CalendarLocal* calendarTemp = new CalendarLocal();
544 calendarTemp->setTimeZoneId( calendar->timeZoneId()); 545 calendarTemp->setTimeZoneId( calendar->timeZoneId());
545 if ( ! load( calendarTemp,calendar) ){ 546 if ( ! load( calendarTemp,calendar) ){
546 qDebug("error reloading calendar "); 547 qDebug("error reloading calendar ");
547 delete calendarTemp; 548 delete calendarTemp;
548 return false; 549 return false;
549 } 550 }
550 // 6 compare data 551 // 6 compare data
551 552
552//algo 6 compare event 553//algo 6 compare event
553 er = calendar->rawEvents(); 554 er = calendar->rawEvents();
554 ev = er.first(); 555 ev = er.first();
555 message = i18n(" Comparing event # "); 556 message = i18n(" Comparing event # ");
556 QPtrList<Event> er1 = calendarTemp->rawEvents(); 557 QPtrList<Event> er1 = calendarTemp->rawEvents();
557 Event* ev1; 558 Event* ev1;
558 int procCount = 0; 559 int procCount = 0;
559 while ( ev ) { 560 while ( ev ) {
560 //qDebug("event new ID %s",ev->summary().latin1()); 561 //qDebug("event new ID %s",ev->summary().latin1());
561 status.setText ( message + QString::number ( ++procCount ) ); 562 status.setText ( message + QString::number ( ++procCount ) );
562 qApp->processEvents(); 563 qApp->processEvents();
563 uint csum; 564 uint csum;
564 csum = PhoneFormat::getCsumEvent( ev ); 565 csum = PhoneFormat::getCsumEvent( ev );
565 QString cSum = QString::number( csum ); 566 QString cSum = QString::number( csum );
566 ev->setCsum( mProfileName, cSum ); 567 //ev->setCsum( mProfileName, cSum );
567 //qDebug("Event cSum %s ", cSum.latin1()); 568 //qDebug("Event cSum %s ", cSum.latin1());
568 ev1 = er1.first(); 569 ev1 = er1.first();
569 while ( ev1 ) { 570 while ( ev1 ) {
570 if ( ev1->getCsum( mProfileName ) == cSum ) { 571 if ( ev1->getCsum( mProfileName ) == cSum ) {
571 er1.remove( ev1 ); 572 er1.remove( ev1 );
572 afterSave( ev ); 573 afterSave( ev );
573 ev->setID(mProfileName, ev1->getID(mProfileName) ); 574 ev->setID(mProfileName, ev1->getID(mProfileName) );
574 //qDebug("Event found on phone for %s ", ev->summary().latin1()); 575 //qDebug("Event found on phone for %s ", ev->summary().latin1());
575 576
576 break; 577 break;
577 } 578 }
578 ev1 = er1.next(); 579 ev1 = er1.next();
579 } 580 }
580 if ( ! ev1 ) { 581 if ( ! ev1 ) {
581 ev->removeID(mProfileName); 582 ev->removeID(mProfileName);
582 qDebug("ERROR: No event found on phone for %s ", ev->summary().latin1()); 583 qDebug("ERROR: No event found on phone for %s ", ev->summary().latin1());
583 } 584 }
584 585
585 586
586 ev = er.next(); 587 ev = er.next();
587 } 588 }
588 //algo 6 compare todo 589 //algo 6 compare todo
589 tl = calendar->rawTodos(); 590 tl = calendar->rawTodos();
590 to = tl.first(); 591 to = tl.first();
591 procCount = 0; 592 procCount = 0;
592 QPtrList<Todo> tl1 = calendarTemp->rawTodos(); 593 QPtrList<Todo> tl1 = calendarTemp->rawTodos();
593 Todo* to1 ; 594 Todo* to1 ;
594 message = i18n(" Comparing todo # "); 595 message = i18n(" Comparing todo # ");
595 while ( to ) { 596 while ( to ) {
596 qDebug("todo2 %d ", procCount); 597 qDebug("todo2 %d ", procCount);
597 status.setText ( message + QString::number ( ++procCount ) ); 598 status.setText ( message + QString::number ( ++procCount ) );
598 qApp->processEvents(); 599 qApp->processEvents();
599 uint csum; 600 uint csum;
600 csum = PhoneFormat::getCsumTodo( to ); 601 csum = PhoneFormat::getCsumTodo( to );
601 QString cSum = QString::number( csum ); 602 QString cSum = QString::number( csum );
602 to->setCsum( mProfileName, cSum ); 603 //to->setCsum( mProfileName, cSum );
603 qDebug("Todo cSum %s ", cSum.latin1()); 604 qDebug("Todo cSum %s ", cSum.latin1());
604 Todo* to1 = tl1.first(); 605 Todo* to1 = tl1.first();
605 while ( to1 ) { 606 while ( to1 ) {
606 if ( to1->getCsum( mProfileName ) == cSum ) { 607 if ( to1->getCsum( mProfileName ) == cSum ) {
607 tl1.remove( to1 ); 608 tl1.remove( to1 );
608 afterSave( to ); 609 afterSave( to );
609 to->setID(mProfileName, to1->getID(mProfileName) ); 610 to->setID(mProfileName, to1->getID(mProfileName) );
610 break; 611 break;
611 } 612 }
612 to1 = tl1.next(); 613 to1 = tl1.next();
613 } 614 }
614 if ( ! to1 ) { 615 if ( ! to1 ) {
615 to->removeID(mProfileName); 616 to->removeID(mProfileName);
616 qDebug("ERROR: No todo found on phone for %s ", to->summary().latin1()); 617 qDebug("ERROR: No todo found on phone for %s ", to->summary().latin1());
617 } 618 }
618 619
619 to = tl.next(); 620 to = tl.next();
620 } 621 }
621 delete calendarTemp; 622 delete calendarTemp;
622 return true; 623 return true;
623 624
624 625
625 626
626} 627}
627 628
628 629
629QString PhoneFormat::toString( Calendar * ) 630QString PhoneFormat::toString( Calendar * )
630{ 631{
631 return QString::null; 632 return QString::null;
632} 633}
633bool PhoneFormat::fromString( Calendar *calendar, const QString & text) 634bool PhoneFormat::fromString( Calendar *calendar, const QString & text)
634{ 635{
635 return false; 636 return false;
636} 637}