summaryrefslogtreecommitdiffabout
path: root/korganizer
authorzautrix <zautrix>2005-07-10 20:11:56 (UTC)
committer zautrix <zautrix>2005-07-10 20:11:56 (UTC)
commitf06311e58cb5887fd673eb1c2c48acf7cd987ad9 (patch) (unidiff)
tree301c74302cdddaa3716d79117023228005ebd265 /korganizer
parentcb784d21ad22ab72a4e3231974f67816185675fd (diff)
downloadkdepimpi-f06311e58cb5887fd673eb1c2c48acf7cd987ad9.zip
kdepimpi-f06311e58cb5887fd673eb1c2c48acf7cd987ad9.tar.gz
kdepimpi-f06311e58cb5887fd673eb1c2c48acf7cd987ad9.tar.bz2
smarter faster conflict search
Diffstat (limited to 'korganizer') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp72
1 files changed, 49 insertions, 23 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index a9e402e..427d71b 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -470,453 +470,470 @@ void CalendarView::init()
470 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) ); 470 connect( mCalEditView, SIGNAL( calendarEnabled (int,bool) ),mCalendar, SLOT( setCalendarEnabled(int,bool)) );
471 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) ); 471 connect( mCalEditView, SIGNAL( alarmEnabled(int,bool) ),mCalendar, SLOT( setAlarmEnabled(int,bool)) );
472 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) ); 472 connect( mCalEditView, SIGNAL( calendarReadonly(int,bool) ),this, SLOT( setCalReadOnly(int,bool)) );
473 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) ); 473 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mCalendar, SLOT( setDefaultCalendar(int)) );
474 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) ); 474 connect( mCalEditView, SIGNAL( setCalendarDefault(int) ),mViewManager, SLOT( setDefaultCalendar(int)) );
475 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) ); 475 connect( mCalEditView, SIGNAL( removeCalendar(int) ),mCalendar, SLOT( setCalendarRemove(int)) );
476 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) ); 476 connect( mCalEditView, SIGNAL( calendarAdded(int) ),this, SLOT( addCalendarId(int)) );
477 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) ); 477 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateView()) );
478 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() )); 478 connect( mCalEditView, SIGNAL( checkCalendar() ),this, SLOT( checkFiles() ));
479 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) ); 479 connect( mCalEditView, SIGNAL( needsUpdate() ),this, SLOT( updateUnmanagedViews()) );
480 480
481 mTodoList->setNavigator( mNavigator ); 481 mTodoList->setNavigator( mNavigator );
482#if 0 482#if 0
483 if ( QApplication::desktop()->width() < 480 ) { 483 if ( QApplication::desktop()->width() < 480 ) {
484 leftFrameLayout->addWidget(mFilterView); 484 leftFrameLayout->addWidget(mFilterView);
485 leftFrameLayout->addWidget(mTodoList, 2 ); 485 leftFrameLayout->addWidget(mTodoList, 2 );
486 486
487 } else { 487 } else {
488 leftFrameLayout->addWidget(mTodoList,2 ); 488 leftFrameLayout->addWidget(mTodoList,2 );
489 leftFrameLayout->addWidget(mFilterView ); 489 leftFrameLayout->addWidget(mFilterView );
490 } 490 }
491#endif 491#endif
492 mFilterView->hide(); 492 mFilterView->hide();
493 mCalEditView->hide(); 493 mCalEditView->hide();
494 QWidget *rightBox = new QWidget( mMainFrame ); 494 QWidget *rightBox = new QWidget( mMainFrame );
495 //mainBoxLayout->addWidget ( rightBox, 10 ); 495 //mainBoxLayout->addWidget ( rightBox, 10 );
496 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 496 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
497 mRightFrame = new QWidgetStack( rightBox ); 497 mRightFrame = new QWidgetStack( rightBox );
498 rightLayout->addWidget( mRightFrame, 10 ); 498 rightLayout->addWidget( mRightFrame, 10 );
499 499
500 //mLeftFrame = (QWidget *)leftFrame; 500 //mLeftFrame = (QWidget *)leftFrame;
501 if ( KOPrefs::instance()->mVerticalScreen ) { 501 if ( KOPrefs::instance()->mVerticalScreen ) {
502 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() ); 502 //mDateNavigator->setFixedHeight( mDateNavigator->sizeHint().height() );
503 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() ); 503 //mDateNavigator->setMinimumWidth( mDateNavigator->sizeHint().width() );
504 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); 504 //mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() );
505 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); 505 //leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() );
506 } else { 506 } else {
507 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() ); 507 //mDateNavigator->setFixedWidth( mDateNavigator->sizeHint().width() );
508 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); 508 //mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() );
509 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); 509 //leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() );
510 } 510 }
511 if ( !KOPrefs::instance()->mShowDateNavigator) 511 if ( !KOPrefs::instance()->mShowDateNavigator)
512 mDateNavigator->hide(); 512 mDateNavigator->hide();
513 //qDebug("Calendarview Size %d %d ", width(), height()); 513 //qDebug("Calendarview Size %d %d ", width(), height());
514#endif 514#endif
515 515
516 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 516 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
517 SLOT( showDates( const KCal::DateList & ) ) ); 517 SLOT( showDates( const KCal::DateList & ) ) );
518 518
519 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 519 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
520 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 520 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
521 521
522 522
523 523
524 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ), 524 connect( mDateNavigator, SIGNAL( showMonth( const QDate & ) ),
525 mViewManager, SLOT( showMonth( const QDate & ) ) ); 525 mViewManager, SLOT( showMonth( const QDate & ) ) );
526 526
527 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), 527 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ),
528 mNavigator, SLOT( selectWeek( const QDate & ) ) ); 528 mNavigator, SLOT( selectWeek( const QDate & ) ) );
529 529
530 connect( mDateNavigator, SIGNAL( goPrevYear() ), 530 connect( mDateNavigator, SIGNAL( goPrevYear() ),
531 mNavigator, SLOT( selectPreviousYear() ) ); 531 mNavigator, SLOT( selectPreviousYear() ) );
532 connect( mDateNavigator, SIGNAL( goNextYear() ), 532 connect( mDateNavigator, SIGNAL( goNextYear() ),
533 mNavigator, SLOT( selectNextYear() ) ); 533 mNavigator, SLOT( selectNextYear() ) );
534 connect( mDateNavigator, SIGNAL( goPrevMonth() ), 534 connect( mDateNavigator, SIGNAL( goPrevMonth() ),
535 mNavigator, SLOT( selectPreviousMonth() ) ); 535 mNavigator, SLOT( selectPreviousMonth() ) );
536 connect( mDateNavigator, SIGNAL( goNextMonth() ), 536 connect( mDateNavigator, SIGNAL( goNextMonth() ),
537 mNavigator, SLOT( selectNextMonth() ) ); 537 mNavigator, SLOT( selectNextMonth() ) );
538 538
539 connect( mDateNavigator, SIGNAL( goPrevious() ), 539 connect( mDateNavigator, SIGNAL( goPrevious() ),
540 mNavigator, SLOT( selectPrevious() ) ); 540 mNavigator, SLOT( selectPrevious() ) );
541 connect( mDateNavigator, SIGNAL( goNext() ), 541 connect( mDateNavigator, SIGNAL( goNext() ),
542 mNavigator, SLOT( selectNext() ) ); 542 mNavigator, SLOT( selectNext() ) );
543 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), 543 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ),
544 mNavigator, SLOT( slotMonthSelect( int ) ) ); 544 mNavigator, SLOT( slotMonthSelect( int ) ) );
545 545
546 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 546 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
547 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 547 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
548#if 0 548#if 0
549 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ), 549 connect( mDateNavigator, SIGNAL( incidenceDropped( Incidence * ) ),
550 SLOT( incidenceAdded( Incidence *) ) ); 550 SLOT( incidenceAdded( Incidence *) ) );
551#endif 551#endif
552 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); 552 // connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView()));
553 553
554 connect( this, SIGNAL( configChanged() ), 554 connect( this, SIGNAL( configChanged() ),
555 mDateNavigator, SLOT( updateConfig() ) ); 555 mDateNavigator, SLOT( updateConfig() ) );
556 556
557 connect( mTodoList, SIGNAL( newTodoSignal() ), 557 connect( mTodoList, SIGNAL( newTodoSignal() ),
558 SLOT( newTodo() ) ); 558 SLOT( newTodo() ) );
559 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), 559 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ),
560 SLOT( newSubTodo( Todo * ) ) ); 560 SLOT( newSubTodo( Todo * ) ) );
561 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), 561 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ),
562 SLOT( editTodo( Todo * ) ) ); 562 SLOT( editTodo( Todo * ) ) );
563 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), 563 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ),
564 SLOT( showTodo( Todo *) ) ); 564 SLOT( showTodo( Todo *) ) );
565 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), 565 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ),
566 SLOT( deleteTodo( Todo *) ) ); 566 SLOT( deleteTodo( Todo *) ) );
567 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); 567 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) );
568 connect( mTodoList, SIGNAL( purgeCompletedSignal() ), 568 connect( mTodoList, SIGNAL( purgeCompletedSignal() ),
569 SLOT( purgeCompleted() ) ); 569 SLOT( purgeCompleted() ) );
570 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), 570 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ),
571 SIGNAL( todoModified( Todo *, int ) ) ); 571 SIGNAL( todoModified( Todo *, int ) ) );
572 572
573 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), 573 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ),
574 this, SLOT ( cloneIncidence( Incidence * ) ) ); 574 this, SLOT ( cloneIncidence( Incidence * ) ) );
575 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), 575 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ),
576 this, SLOT (cancelIncidence( Incidence * ) ) ); 576 this, SLOT (cancelIncidence( Incidence * ) ) );
577 577
578 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), 578 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ),
579 this, SLOT ( moveIncidence( Incidence * ) ) ); 579 this, SLOT ( moveIncidence( Incidence * ) ) );
580 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), 580 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ),
581 this, SLOT ( beamIncidence( Incidence * ) ) ); 581 this, SLOT ( beamIncidence( Incidence * ) ) );
582 582
583 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), 583 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ),
584 this, SLOT ( todo_unsub( Todo * ) ) ); 584 this, SLOT ( todo_unsub( Todo * ) ) );
585 585
586 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ), 586 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ),
587 this, SLOT ( todo_resub( Todo *,Todo * ) ) ); 587 this, SLOT ( todo_resub( Todo *,Todo * ) ) );
588 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, 588 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList,
589 SLOT( updateTodo( Todo *, int ) ) ); 589 SLOT( updateTodo( Todo *, int ) ) );
590 connect( this, SIGNAL( todoModified( Todo *, int )), this, 590 connect( this, SIGNAL( todoModified( Todo *, int )), this,
591 SLOT( changeTodoDisplay( Todo *, int ) ) ); 591 SLOT( changeTodoDisplay( Todo *, int ) ) );
592 592
593 593
594 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); 594 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) );
595 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); 595 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) );
596 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); 596 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) );
597 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); 597 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) );
598 598
599 599
600 600
601 601
602 602
603 connect(QApplication::clipboard(),SIGNAL(dataChanged()), 603 connect(QApplication::clipboard(),SIGNAL(dataChanged()),
604 SLOT(checkClipboard())); 604 SLOT(checkClipboard()));
605 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), 605 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ),
606 SLOT( processTodoListSelection( Incidence * ) ) ); 606 SLOT( processTodoListSelection( Incidence * ) ) );
607 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); 607 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool)));
608 608
609 // kdDebug() << "CalendarView::CalendarView() done" << endl; 609 // kdDebug() << "CalendarView::CalendarView() done" << endl;
610 610
611 mDateFrame = new QVBox(0,0,WType_Popup); 611 mDateFrame = new QVBox(0,0,WType_Popup);
612 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 612 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
613 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 613 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
614 mDateFrame->setLineWidth(3); 614 mDateFrame->setLineWidth(3);
615 mDateFrame->hide(); 615 mDateFrame->hide();
616 mDateFrame->setCaption( i18n( "Pick a date to display")); 616 mDateFrame->setCaption( i18n( "Pick a date to display"));
617 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); 617 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() );
618 618
619 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); 619 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate)));
620 620
621 mEventEditor = mDialogManager->getEventEditor(); 621 mEventEditor = mDialogManager->getEventEditor();
622 mTodoEditor = mDialogManager->getTodoEditor(); 622 mTodoEditor = mDialogManager->getTodoEditor();
623 623
624 mFlagEditDescription = false; 624 mFlagEditDescription = false;
625 625
626 mSuspendTimer = new QTimer( this ); 626 mSuspendTimer = new QTimer( this );
627 mAlarmTimer = new QTimer( this ); 627 mAlarmTimer = new QTimer( this );
628 mRecheckAlarmTimer = new QTimer( this ); 628 mRecheckAlarmTimer = new QTimer( this );
629 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); 629 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
630 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); 630 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
631 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); 631 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
632 mAlarmDialog = new AlarmDialog( this ); 632 mAlarmDialog = new AlarmDialog( this );
633 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); 633 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
634 mAlarmDialog->setServerNotification( false ); 634 mAlarmDialog->setServerNotification( false );
635 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); 635 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
636 636
637 637
638#ifndef DESKTOP_VERSION 638#ifndef DESKTOP_VERSION
639//US listen for arriving address resultsets 639//US listen for arriving address resultsets
640 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), 640 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)),
641 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&))); 641 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)));
642#endif 642#endif
643 mDateNavigator->setCalendar( mCalendar ); 643 mDateNavigator->setCalendar( mCalendar );
644} 644}
645 645
646 646
647CalendarView::~CalendarView() 647CalendarView::~CalendarView()
648{ 648{
649 // kdDebug() << "~CalendarView()" << endl; 649 // kdDebug() << "~CalendarView()" << endl;
650 //qDebug("CalendarView::~CalendarView() "); 650 //qDebug("CalendarView::~CalendarView() ");
651 delete mDialogManager; 651 delete mDialogManager;
652 delete mViewManager; 652 delete mViewManager;
653 delete mStorage; 653 delete mStorage;
654 delete mDateFrame ; 654 delete mDateFrame ;
655 delete mEventViewerDialog; 655 delete mEventViewerDialog;
656 //kdDebug() << "~CalendarView() done" << endl; 656 //kdDebug() << "~CalendarView() done" << endl;
657} 657}
658 658
659 659
660void CalendarView::nextConflict( bool all, bool allday ) 660void CalendarView::nextConflict( bool all, bool allday )
661{ 661{
662 662 static bool block = false;
663 if ( block ) return;
664 block = true;
663 QPtrList<Event> testlist = mCalendar->events(); 665 QPtrList<Event> testlist = mCalendar->events();
664 Event * test = testlist.first(); 666 Event * test = testlist.first();
665 while ( test ) { 667 while ( test ) {
666 test->setTagged( false ); 668 test->setTagged( false );
667 test = testlist.next(); 669 test = testlist.next();
668 } 670 }
669 QTime st ( 0,0,0); 671 QTime st ( 0,0,0);
670 if ( mViewManager->currentView() == mViewManager->agendaView() ) 672 if ( mViewManager->currentView() == mViewManager->agendaView() )
671 st = mViewManager->agendaView()->agenda()->getEndTime(); 673 st = mViewManager->agendaView()->agenda()->getEndTime();
672 //qDebug("time %s ", st.toString().latin1()); 674 //qDebug("time %s ", st.toString().latin1());
673 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st); 675 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st);
674 QDateTime conflict; 676 QDateTime conflict;
675 QDateTime retVal; 677 QDateTime retVal;
676 bool found = false; 678 bool found = false;
677 Event * cE = 0; 679 Event * cE = 0;
678 Event * cE2 = 0; 680 Event * cE2 = 0;
679 QPtrList<Event> testlist2 = testlist; 681 QPtrList<Event> testlist2 = testlist;
680 test = testlist.first(); 682 test = testlist.first();
681 bool skip = false; 683 bool skip = false;
682 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); 684 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
685 //QTime tm;
686 //tm.start();
683 while ( test ) { 687 while ( test ) {
684 qApp->processEvents(); 688 qApp->processEvents();
685 skip = false; 689 skip = false;
686 if ( !all ) skip = ( allday != test->doesFloat() ); 690 if ( !all ) skip = ( allday != test->doesFloat() );
687 if ( !skip ) { 691 if ( !skip ) {
692 if ( found )
693 skip = !test->matchTime( &startDT, &conflict );
694 else
695 skip = !test->matchTime( &startDT, 0 );
696 }
697 if ( !skip ) {
688 Event * test2 = testlist2.first(); 698 Event * test2 = testlist2.first();
689 while ( test2 ) { 699 while ( test2 ) {
690 skip = false; 700 skip = test2->isTagged();
691 if ( !all ) skip = ( allday != test2->doesFloat() ); 701 if ( !skip && !all ) skip = ( allday != test2->doesFloat() );
702 if ( !skip ) {
703 if ( found )
704 skip = !test2->matchTime( &startDT, &conflict );
705 else
706 skip = !test2->matchTime( &startDT, 0 );
707 }
692 if ( !skip ) { 708 if ( !skip ) {
693 if ( !test2->isTagged() ) { 709 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) {
694 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) { 710 //qDebug("overlap ");
695 //qDebug("overlap "); 711 if ( ! found ) {
696 if ( ! found ) { 712 if ( retVal >= startDT ) {
697 if ( retVal >= startDT ) { 713 conflict = retVal;
698 conflict = retVal; 714 cE = test;
699 cE = test; 715 cE2 = test2;
700 cE2 = test2; 716 found = true;
701 found = true; 717 }
702 } 718 } else {
703 } else { 719 if ( retVal >= startDT && retVal < conflict ) {
704 if ( retVal >= startDT && retVal < conflict ) { 720 conflict = retVal;
705 conflict = retVal; 721 cE = test;
706 cE = test; 722 cE2 = test2;
707 cE2 = test2;
708 }
709 } 723 }
710 } 724 }
711 } 725 }
712 } 726 }
713 test2 = testlist2.next(); 727 test2 = testlist2.next();
714 } 728 }
715 } 729 }
716 test->setTagged( true ); 730 test->setTagged( true );
717 test = testlist.next(); 731 test = testlist.next();
718 } 732 }
733 //qDebug("Search time : %d", tm.elapsed());
719 if ( found ) { 734 if ( found ) {
720 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 735 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
721 mViewManager->showDayView(); 736 mViewManager->showDayView();
722 mNavigator->slotDaySelect( conflict.date() ); 737 mNavigator->slotDaySelect( conflict.date() );
723 int hour = conflict.time().hour(); 738 int hour = conflict.time().hour();
724 mViewManager->agendaView()->setStartHour( hour ); 739 mViewManager->agendaView()->setStartHour( hour );
725 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) ); 740 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( cE->summary().left( 20 ) ).arg( cE2->summary().left( 20 ) ) );
741 block = false;
726 return; 742 return;
727 } 743 }
728 744
729 topLevelWidget()->setCaption( i18n("No conflict found") ); 745 topLevelWidget()->setCaption( i18n("No conflict found") );
730 qDebug("No conflict found "); 746 qDebug("No conflict found ");
747 block = false;
731 return; 748 return;
732} 749}
733 750
734void CalendarView::conflictAll() 751void CalendarView::conflictAll()
735{ 752{
736 nextConflict ( true, true ); 753 nextConflict ( true, true );
737} 754}
738void CalendarView::conflictAllday() 755void CalendarView::conflictAllday()
739{ 756{
740 nextConflict ( false, true ); 757 nextConflict ( false, true );
741} 758}
742void CalendarView::conflictNotAll() 759void CalendarView::conflictNotAll()
743{ 760{
744 nextConflict ( false, false ); 761 nextConflict ( false, false );
745} 762}
746 763
747void CalendarView::setCalReadOnly( int id, bool readO ) 764void CalendarView::setCalReadOnly( int id, bool readO )
748{ 765{
749 if ( readO ) { 766 if ( readO ) {
750 emit save(); 767 emit save();
751 } 768 }
752 mCalendar->setReadOnly( id, readO ); 769 mCalendar->setReadOnly( id, readO );
753} 770}
754void CalendarView::setScrollBarStep(int val ) 771void CalendarView::setScrollBarStep(int val )
755{ 772{
756#ifdef DESKTOP_VERSION 773#ifdef DESKTOP_VERSION
757 mDateScrollBar->setLineStep ( val ); 774 mDateScrollBar->setLineStep ( val );
758#endif 775#endif
759} 776}
760void CalendarView::scrollBarValue(int val ) 777void CalendarView::scrollBarValue(int val )
761{ 778{
762#ifdef DESKTOP_VERSION 779#ifdef DESKTOP_VERSION
763 if ( QApplication::desktop()->width() < 800 ) return; 780 if ( QApplication::desktop()->width() < 800 ) return;
764 static bool block = false; 781 static bool block = false;
765 if ( block ) return; 782 if ( block ) return;
766 block = true; 783 block = true;
767 int count = mNavigator->selectedDates().count(); 784 int count = mNavigator->selectedDates().count();
768 int day = mNavigator->selectedDates().first().dayOfYear(); 785 int day = mNavigator->selectedDates().first().dayOfYear();
769 int stepdays = val; 786 int stepdays = val;
770 if ( mDateScrollBar->lineStep () <= count ) { 787 if ( mDateScrollBar->lineStep () <= count ) {
771 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 788 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
772 //qDebug("VAL %d ",val ); 789 //qDebug("VAL %d ",val );
773 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 790 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
774 stepdays = day+stepdays; 791 stepdays = day+stepdays;
775 if ( stepdays < 0 ) stepdays = 0; 792 if ( stepdays < 0 ) stepdays = 0;
776 } 793 }
777 if ( stepdays == day ) { 794 if ( stepdays == day ) {
778 block = false; 795 block = false;
779 return; 796 return;
780 } 797 }
781 int year = mNavigator->selectedDates().first().year(); 798 int year = mNavigator->selectedDates().first().year();
782 QDate d ( year,1,1 ); 799 QDate d ( year,1,1 );
783 mNavigator->selectDates( d.addDays( stepdays-1) , count ); 800 mNavigator->selectDates( d.addDays( stepdays-1) , count );
784 block = false; 801 block = false;
785#endif 802#endif
786 803
787} 804}
788void CalendarView::updateView(const QDate &start, const QDate &end) 805void CalendarView::updateView(const QDate &start, const QDate &end)
789{ 806{
790#ifdef DESKTOP_VERSION 807#ifdef DESKTOP_VERSION
791 if ( ! mDateScrollBar->draggingSlider () ) { 808 if ( ! mDateScrollBar->draggingSlider () ) {
792 int dof = start.dayOfYear(); 809 int dof = start.dayOfYear();
793 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() ); 810 //qDebug("dof %d day %d val %d ", dof, start.dayOfYear(),mDateScrollBar->value() );
794 if ( dof != mDateScrollBar->value() ) { 811 if ( dof != mDateScrollBar->value() ) {
795 mDateScrollBar->blockSignals( true ); 812 mDateScrollBar->blockSignals( true );
796 mDateScrollBar->setValue( start.dayOfYear()); 813 mDateScrollBar->setValue( start.dayOfYear());
797 mDateScrollBar->blockSignals( false ); 814 mDateScrollBar->blockSignals( false );
798 } 815 }
799 } 816 }
800#endif 817#endif
801 mTodoList->updateView(); 818 mTodoList->updateView();
802 mViewManager->updateView(start, end); 819 mViewManager->updateView(start, end);
803 //mDateNavigator->updateView(); 820 //mDateNavigator->updateView();
804} 821}
805 822
806 823
807 824
808void CalendarView::checkFiles() 825void CalendarView::checkFiles()
809{ 826{
810 QString message; 827 QString message;
811 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 828 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
812 KopiCalendarFile * cal = calendars.first(); 829 KopiCalendarFile * cal = calendars.first();
813 while ( cal ) { 830 while ( cal ) {
814 if ( cal->mErrorOnLoad ) { 831 if ( cal->mErrorOnLoad ) {
815 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n"; 832 message += cal->mName +"\n"+KGlobal::formatMessage ( "(" +i18n( "Filepath: ")+ cal->mFileName+")" ,0 )+"\n";
816 } 833 }
817 cal = calendars.next(); 834 cal = calendars.next();
818 } 835 }
819 if ( !message.isEmpty() ) { 836 if ( !message.isEmpty() ) {
820 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0); 837 message = KGlobal::formatMessage( i18n("Calendar(s) not loaded:"),0 )+"\n" + message +KGlobal::formatMessage(i18n("You can try to reload the calendar in the Resource View!"),0);
821 KMessageBox::error(this,message, i18n("Loding of calendar(s) failed")); 838 KMessageBox::error(this,message, i18n("Loding of calendar(s) failed"));
822 } 839 }
823 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() )); 840 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() ));
824} 841}
825void CalendarView::checkAlarms() 842void CalendarView::checkAlarms()
826{ 843{
827 844
828 845
829 KConfig *config = KOGlobals::config(); 846 KConfig *config = KOGlobals::config();
830 config->setGroup( "AppRun" ); 847 config->setGroup( "AppRun" );
831 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 848 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
832 int daysto = dt.daysTo( QDate::currentDate() ); 849 int daysto = dt.daysTo( QDate::currentDate() );
833 int days = config->readNumEntry( "LatestProgramStopDays" , daysto); 850 int days = config->readNumEntry( "LatestProgramStopDays" , daysto);
834 dt = dt.addDays( days ); 851 dt = dt.addDays( days );
835 int secto = dt.secsTo( QDateTime::currentDateTime() ); 852 int secto = dt.secsTo( QDateTime::currentDateTime() );
836 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30; 853 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30;
837 //qDebug("KO: Reading program stop %d ", secs); 854 //qDebug("KO: Reading program stop %d ", secs);
838 //secs -= ( 3600 * 24*3 ); // debug only 855 //secs -= ( 3600 * 24*3 ); // debug only
839 QDateTime latest = dt.addSecs ( secs ); 856 QDateTime latest = dt.addSecs ( secs );
840 qDebug("KO: Last termination on %s ", latest.toString().latin1()); 857 qDebug("KO: Last termination on %s ", latest.toString().latin1());
841 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 858 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
842 QPtrList<Incidence> el = mCalendar->rawIncidences(); 859 QPtrList<Incidence> el = mCalendar->rawIncidences();
843 QPtrList<Incidence> al; 860 QPtrList<Incidence> al;
844 Incidence* inL = el.first(); 861 Incidence* inL = el.first();
845 QDateTime cur = QDateTime::currentDateTime().addSecs(-59); 862 QDateTime cur = QDateTime::currentDateTime().addSecs(-59);
846 qDebug("KO: Checking alarm until %s ", cur.toString().latin1()); 863 qDebug("KO: Checking alarm until %s ", cur.toString().latin1());
847 while ( inL ) { 864 while ( inL ) {
848 bool ok = false; 865 bool ok = false;
849 int offset = 0; 866 int offset = 0;
850 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ; 867 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ;
851 if ( ok ) { 868 if ( ok ) {
852 //qDebug("OK %s",next.toString().latin1()); 869 //qDebug("OK %s",next.toString().latin1());
853 if ( next < cur ) { 870 if ( next < cur ) {
854 al.append( inL ); 871 al.append( inL );
855 //qDebug("found missed alarm: %s ", inL->summary().latin1() ); 872 //qDebug("found missed alarm: %s ", inL->summary().latin1() );
856 } 873 }
857 } 874 }
858 inL = el.next(); 875 inL = el.next();
859 } 876 }
860 if ( al.count() ) { 877 if ( al.count() ) {
861 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop ); 878 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop );
862 dia->setCaption( i18n("KO/Pi: Missing alarms!") ); 879 dia->setCaption( i18n("KO/Pi: Missing alarms!") );
863 QVBoxLayout* lay = new QVBoxLayout( dia ); 880 QVBoxLayout* lay = new QVBoxLayout( dia );
864 lay->setSpacing( 0 ); 881 lay->setSpacing( 0 );
865 lay->setMargin( 0 ); 882 lay->setMargin( 0 );
866 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest ); 883 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest );
867 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 884 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
868 lay->addWidget( matb ); 885 lay->addWidget( matb );
869 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) { 886 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) {
870 int wid = 210; 887 int wid = 210;
871 int x = QApplication::desktop()->width() - wid - 7; 888 int x = QApplication::desktop()->width() - wid - 7;
872 int y = QApplication::desktop()->height() - wid - 70; 889 int y = QApplication::desktop()->height() - wid - 70;
873 dia->setGeometry ( x,y,wid,wid); 890 dia->setGeometry ( x,y,wid,wid);
874 } else { 891 } else {
875 int si = 220; 892 int si = 220;
876 if ( QApplication::desktop()->width() > 470 ) 893 if ( QApplication::desktop()->width() > 470 )
877 si = 400; 894 si = 400;
878 dia->resize(si,si/2); 895 dia->resize(si,si/2);
879 } 896 }
880 dia->setBackgroundColor( QColor( 255, 255, 255 ) ); 897 dia->setBackgroundColor( QColor( 255, 255, 255 ) );
881 dia->show(); 898 dia->show();
882 899
883 } 900 }
884} 901}
885void CalendarView::showDay( QDate d ) 902void CalendarView::showDay( QDate d )
886{ 903{
887 dateNavigator()->blockSignals( true ); 904 dateNavigator()->blockSignals( true );
888 dateNavigator()->selectDate( d ); 905 dateNavigator()->selectDate( d );
889 dateNavigator()->blockSignals( false ); 906 dateNavigator()->blockSignals( false );
890 mViewManager->showDayView(); 907 mViewManager->showDayView();
891 //dateNavigator()->selectDate( d ); 908 //dateNavigator()->selectDate( d );
892} 909}
893void CalendarView::timerAlarm() 910void CalendarView::timerAlarm()
894{ 911{
895 //qDebug("CalendarView::timerAlarm() "); 912 //qDebug("CalendarView::timerAlarm() ");
896 computeAlarm(mAlarmNotification ); 913 computeAlarm(mAlarmNotification );
897} 914}
898 915
899void CalendarView::suspendAlarm() 916void CalendarView::suspendAlarm()
900{ 917{
901 //qDebug(" CalendarView::suspendAlarm() "); 918 //qDebug(" CalendarView::suspendAlarm() ");
902 computeAlarm(mSuspendAlarmNotification ); 919 computeAlarm(mSuspendAlarmNotification );
903 920
904} 921}
905 922
906void CalendarView::startAlarm( QString mess , QString filename) 923void CalendarView::startAlarm( QString mess , QString filename)
907{ 924{
908 925
909 topLevelWidget()->showNormal(); 926 topLevelWidget()->showNormal();
910 topLevelWidget()->setActiveWindow(); 927 topLevelWidget()->setActiveWindow();
911 topLevelWidget()->raise(); 928 topLevelWidget()->raise();
912 929
913 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 930 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
914 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) ); 931 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) );
915 932
916} 933}
917 934
918void CalendarView::checkNextTimerAlarm() 935void CalendarView::checkNextTimerAlarm()
919{ 936{
920 mCalendar->checkAlarmForIncidence( 0, true ); 937 mCalendar->checkAlarmForIncidence( 0, true );
921} 938}
922 939
@@ -2583,395 +2600,404 @@ void CalendarView::writeSettings()
2583 2600
2584 config->sync(); 2601 config->sync();
2585} 2602}
2586 2603
2587void CalendarView::readFilterSettings(KConfig *config) 2604void CalendarView::readFilterSettings(KConfig *config)
2588{ 2605{
2589 // kdDebug() << "CalendarView::readFilterSettings()" << endl; 2606 // kdDebug() << "CalendarView::readFilterSettings()" << endl;
2590 2607
2591 mFilters.clear(); 2608 mFilters.clear();
2592 2609
2593 config->setGroup("General"); 2610 config->setGroup("General");
2594 QStringList filterList = config->readListEntry("CalendarFilters"); 2611 QStringList filterList = config->readListEntry("CalendarFilters");
2595 2612
2596 QStringList::ConstIterator it = filterList.begin(); 2613 QStringList::ConstIterator it = filterList.begin();
2597 QStringList::ConstIterator end = filterList.end(); 2614 QStringList::ConstIterator end = filterList.end();
2598 while(it != end) { 2615 while(it != end) {
2599 // kdDebug() << " filter: " << (*it) << endl; 2616 // kdDebug() << " filter: " << (*it) << endl;
2600 2617
2601 CalFilter *filter; 2618 CalFilter *filter;
2602 filter = new CalFilter(*it); 2619 filter = new CalFilter(*it);
2603 config->setGroup("Filter_" + (*it).utf8()); 2620 config->setGroup("Filter_" + (*it).utf8());
2604 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); 2621 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) );
2605 filter->setCriteria(config->readNumEntry("Criteria",0)); 2622 filter->setCriteria(config->readNumEntry("Criteria",0));
2606 filter->setCategoryList(config->readListEntry("CategoryList")); 2623 filter->setCategoryList(config->readListEntry("CategoryList"));
2607 mFilters.append(filter); 2624 mFilters.append(filter);
2608 2625
2609 ++it; 2626 ++it;
2610 } 2627 }
2611 2628
2612 if (mFilters.count() == 0) { 2629 if (mFilters.count() == 0) {
2613 CalFilter *filter = new CalFilter(i18n("Default")); 2630 CalFilter *filter = new CalFilter(i18n("Default"));
2614 mFilters.append(filter); 2631 mFilters.append(filter);
2615 } 2632 }
2616 mFilterView->updateFilters(); 2633 mFilterView->updateFilters();
2617 config->setGroup("FilterView"); 2634 config->setGroup("FilterView");
2618 2635
2619 mFilterView->blockSignals(true); 2636 mFilterView->blockSignals(true);
2620 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); 2637 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled"));
2621 mFilterView->setSelectedFilter(config->readEntry("Current Filter")); 2638 mFilterView->setSelectedFilter(config->readEntry("Current Filter"));
2622 mFilterView->blockSignals(false); 2639 mFilterView->blockSignals(false);
2623 // We do it manually to avoid it being done twice by the above calls 2640 // We do it manually to avoid it being done twice by the above calls
2624 updateFilter(); 2641 updateFilter();
2625} 2642}
2626 2643
2627void CalendarView::writeFilterSettings(KConfig *config) 2644void CalendarView::writeFilterSettings(KConfig *config)
2628{ 2645{
2629 // kdDebug() << "CalendarView::writeFilterSettings()" << endl; 2646 // kdDebug() << "CalendarView::writeFilterSettings()" << endl;
2630 2647
2631 QStringList filterList; 2648 QStringList filterList;
2632 2649
2633 CalFilter *filter = mFilters.first(); 2650 CalFilter *filter = mFilters.first();
2634 while(filter) { 2651 while(filter) {
2635 // kdDebug() << " fn: " << filter->name() << endl; 2652 // kdDebug() << " fn: " << filter->name() << endl;
2636 filterList << filter->name(); 2653 filterList << filter->name();
2637 config->setGroup("Filter_" + filter->name().utf8()); 2654 config->setGroup("Filter_" + filter->name().utf8());
2638 config->writeEntry("Criteria",filter->criteria()); 2655 config->writeEntry("Criteria",filter->criteria());
2639 config->writeEntry("CategoryList",filter->categoryList()); 2656 config->writeEntry("CategoryList",filter->categoryList());
2640 filter = mFilters.next(); 2657 filter = mFilters.next();
2641 } 2658 }
2642 config->setGroup("General"); 2659 config->setGroup("General");
2643 config->writeEntry("CalendarFilters",filterList); 2660 config->writeEntry("CalendarFilters",filterList);
2644 2661
2645 config->setGroup("FilterView"); 2662 config->setGroup("FilterView");
2646 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); 2663 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled());
2647 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); 2664 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name());
2648} 2665}
2649 2666
2650 2667
2651void CalendarView::goToday() 2668void CalendarView::goToday()
2652{ 2669{
2653 if ( mViewManager->currentView()->isMonthView() ) 2670 if ( mViewManager->currentView()->isMonthView() )
2654 mNavigator->selectTodayMonth(); 2671 mNavigator->selectTodayMonth();
2655 else 2672 else
2656 mNavigator->selectToday(); 2673 mNavigator->selectToday();
2657} 2674}
2658 2675
2659void CalendarView::goNext() 2676void CalendarView::goNext()
2660{ 2677{
2661 mNavigator->selectNext(); 2678 mNavigator->selectNext();
2662} 2679}
2663 2680
2664void CalendarView::goPrevious() 2681void CalendarView::goPrevious()
2665{ 2682{
2666 mNavigator->selectPrevious(); 2683 mNavigator->selectPrevious();
2667} 2684}
2668void CalendarView::goNextMonth() 2685void CalendarView::goNextMonth()
2669{ 2686{
2670 mNavigator->selectNextMonth(); 2687 mNavigator->selectNextMonth();
2671} 2688}
2672 2689
2673void CalendarView::goPreviousMonth() 2690void CalendarView::goPreviousMonth()
2674{ 2691{
2675 mNavigator->selectPreviousMonth(); 2692 mNavigator->selectPreviousMonth();
2676} 2693}
2677 2694
2678void CalendarView::updateConfig() 2695void CalendarView::updateConfig()
2679{ 2696{
2680 if ( KOPrefs::instance()->mUseAppColors ) 2697 if ( KOPrefs::instance()->mUseAppColors )
2681 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 2698 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
2682 emit configChanged(); 2699 emit configChanged();
2683 mTodoList->updateConfig(); 2700 mTodoList->updateConfig();
2684 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); 2701 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont);
2685 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2702 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2686 // To make the "fill window" configurations work 2703 // To make the "fill window" configurations work
2687 //mViewManager->raiseCurrentView(); 2704 //mViewManager->raiseCurrentView();
2688} 2705}
2689 2706
2690 2707
2691void CalendarView::eventChanged(Event *event) 2708void CalendarView::eventChanged(Event *event)
2692{ 2709{
2693 changeEventDisplay(event,KOGlobals::EVENTEDITED); 2710 changeEventDisplay(event,KOGlobals::EVENTEDITED);
2694 //updateUnmanagedViews(); 2711 //updateUnmanagedViews();
2695} 2712}
2696 2713
2697void CalendarView::eventAdded(Event *event) 2714void CalendarView::eventAdded(Event *event)
2698{ 2715{
2699 changeEventDisplay(event,KOGlobals::EVENTADDED); 2716 changeEventDisplay(event,KOGlobals::EVENTADDED);
2700} 2717}
2701 2718
2702void CalendarView::eventToBeDeleted(Event *) 2719void CalendarView::eventToBeDeleted(Event *)
2703{ 2720{
2704 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 2721 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
2705} 2722}
2706 2723
2707void CalendarView::eventDeleted() 2724void CalendarView::eventDeleted()
2708{ 2725{
2709 changeEventDisplay(0,KOGlobals::EVENTDELETED); 2726 changeEventDisplay(0,KOGlobals::EVENTDELETED);
2710} 2727}
2711void CalendarView::changeTodoDisplay(Todo *which, int action) 2728void CalendarView::changeTodoDisplay(Todo *which, int action)
2712{ 2729{
2713 changeIncidenceDisplay((Incidence *)which, action); 2730 changeIncidenceDisplay((Incidence *)which, action);
2714 mDateNavigator->updateView(); //LR 2731 mDateNavigator->updateView(); //LR
2715 //mDialogManager->updateSearchDialog(); 2732 //mDialogManager->updateSearchDialog();
2716 2733
2717 if (which) { 2734 if (which) {
2718 mViewManager->updateWNview(); 2735 mViewManager->updateWNview();
2719 //mTodoList->updateView(); 2736 //mTodoList->updateView();
2720 } 2737 }
2721 2738
2722} 2739}
2723 2740
2724void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 2741void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
2725{ 2742{
2726 updateUnmanagedViews(); 2743 updateUnmanagedViews();
2727 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 2744 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
2728 if ( action == KOGlobals::EVENTDELETED ) { //delete 2745 if ( action == KOGlobals::EVENTDELETED ) { //delete
2729 mCalendar->checkAlarmForIncidence( 0, true ); 2746 mCalendar->checkAlarmForIncidence( 0, true );
2730 if ( mEventViewerDialog ) 2747 if ( mEventViewerDialog )
2731 mEventViewerDialog->hide(); 2748 mEventViewerDialog->hide();
2732 } 2749 }
2733 else 2750 else
2734 mCalendar->checkAlarmForIncidence( which , false ); 2751 mCalendar->checkAlarmForIncidence( which , false );
2735} 2752}
2736 2753
2737// most of the changeEventDisplays() right now just call the view's 2754// most of the changeEventDisplays() right now just call the view's
2738// total update mode, but they SHOULD be recoded to be more refresh-efficient. 2755// total update mode, but they SHOULD be recoded to be more refresh-efficient.
2739void CalendarView::changeEventDisplay(Event *which, int action) 2756void CalendarView::changeEventDisplay(Event *which, int action)
2740{ 2757{
2741 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 2758 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
2742 changeIncidenceDisplay((Incidence *)which, action); 2759 changeIncidenceDisplay((Incidence *)which, action);
2743 static bool clearallviews = false; 2760 static bool clearallviews = false;
2744 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 2761 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
2745 if ( clearallviews ) { 2762 if ( clearallviews ) {
2746 clearAllViews(); 2763 clearAllViews();
2747 clearallviews = false; 2764 clearallviews = false;
2748 } 2765 }
2749 return; 2766 return;
2750 } 2767 }
2751 clearallviews = true; 2768 clearallviews = true;
2752 mDateNavigator->updateView(); 2769 mDateNavigator->updateView();
2753 //mDialogManager->updateSearchDialog(); 2770 //mDialogManager->updateSearchDialog();
2754 if (which) { 2771 if (which) {
2755 // If there is an event view visible update the display 2772 // If there is an event view visible update the display
2756 mViewManager->currentView()->changeEventDisplay(which,action); 2773 mViewManager->currentView()->changeEventDisplay(which,action);
2757 // TODO: check, if update needed 2774 // TODO: check, if update needed
2758 // if (which->getTodoStatus()) { 2775 // if (which->getTodoStatus()) {
2759 mTodoList->updateView(); 2776 mTodoList->updateView();
2760 if ( action != KOGlobals::EVENTDELETED ) { 2777 if ( action != KOGlobals::EVENTDELETED ) {
2761 mConflictingEvent = which ; 2778 mConflictingEvent = which ;
2762 QTimer::singleShot( 1000, this, SLOT ( checkConflictForEvent() ) ); 2779 QTimer::singleShot( 1000, this, SLOT ( checkConflictForEvent() ) );
2763 } 2780 }
2764 // } 2781 // }
2765 } else { 2782 } else {
2766 mViewManager->currentView()->updateView(); 2783 mViewManager->currentView()->updateView();
2767 } 2784 }
2768} 2785}
2769void CalendarView::checkConflictForEvent() 2786void CalendarView::checkConflictForEvent()
2770{ 2787{
2771 2788
2772 if (!KOPrefs::instance()->mConfirm) 2789 if (!KOPrefs::instance()->mConfirm)
2773 return; 2790 return;
2774 if ( ! mConflictingEvent ) return; 2791 if ( ! mConflictingEvent ) return;
2775 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); 2792 QDateTime current = QDateTime::currentDateTime();
2793 if ( ! mConflictingEvent->matchTime( &current, 0 ) ) {
2794 mConflictingEvent = 0;
2795 return;
2796 }
2776 QPtrList<Event> testlist = mCalendar->events(); 2797 QPtrList<Event> testlist = mCalendar->events();
2777 Event * test = testlist.first(); 2798 Event * test = testlist.first();
2778 QDateTime conflict; 2799 QDateTime conflict;
2779 QDateTime retVal; 2800 QDateTime retVal;
2780 bool found = false; 2801 bool found = false;
2781 Event * cE = 0; 2802 Event * cE = 0;
2782 QDateTime current = QDateTime::currentDateTime(); 2803 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
2783 while ( test ) { 2804 while ( test ) {
2784 qApp->processEvents(); 2805 qApp->processEvents();
2785 if ( !test->doesFloat() ) { 2806 bool skip = false;
2807 if ( found )
2808 skip = !test->matchTime( &current, &conflict );
2809 else
2810 skip = !test->matchTime( &current, 0 );
2811 if ( !skip && !test->doesFloat() ) {
2786 if ( mConflictingEvent->isOverlapping ( test, &retVal, &current ) ) { 2812 if ( mConflictingEvent->isOverlapping ( test, &retVal, &current ) ) {
2787 if ( ! found ) { 2813 if ( ! found ) {
2788 conflict = retVal; 2814 conflict = retVal;
2789 cE = test; 2815 cE = test;
2790 } else { 2816 } else {
2791 if ( retVal < conflict ) { 2817 if ( retVal < conflict ) {
2792 conflict = retVal; 2818 conflict = retVal;
2793 cE = test; 2819 cE = test;
2794 } 2820 }
2795 } 2821 }
2796 found = true; 2822 found = true;
2797 } 2823 }
2798 } 2824 }
2799 test = testlist.next(); 2825 test = testlist.next();
2800 } 2826 }
2801 if ( found ) { 2827 if ( found ) {
2802 QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( mConflictingEvent->summary(),0 ) ).arg( KGlobal::formatMessage ( cE->summary(),0 )).arg(KGlobal::locale()->formatDate(conflict.date()) ) ; 2828 QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( mConflictingEvent->summary(),0 ) ).arg( KGlobal::formatMessage ( cE->summary(),0 )).arg(KGlobal::locale()->formatDate(conflict.date()) ) ;
2803 qApp->processEvents(); 2829 qApp->processEvents();
2804 int km = KMessageBox::warningContinueCancel(this,mess, 2830 int km = KMessageBox::warningContinueCancel(this,mess,
2805 i18n("KO/Pi Conflict delected"),i18n("Show date"),i18n("No problem!")); 2831 i18n("KO/Pi Conflict delected"),i18n("Show date"),i18n("No problem!"));
2806 if ( km != KMessageBox::Continue ) 2832 if ( km != KMessageBox::Continue )
2807 return; 2833 return;
2808 2834
2809 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 2835 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
2810 mViewManager->showDayView(); 2836 mViewManager->showDayView();
2811 mNavigator->slotDaySelect( conflict.date() ); 2837 mNavigator->slotDaySelect( conflict.date() );
2812 int hour = conflict.time().hour(); 2838 int hour = conflict.time().hour();
2813 mViewManager->agendaView()->setStartHour( hour ); 2839 mViewManager->agendaView()->setStartHour( hour );
2814 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( mConflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) ); 2840 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( mConflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) );
2815 } else 2841 } else
2816 topLevelWidget()->setCaption( i18n("No conflict found") ); 2842 topLevelWidget()->setCaption( i18n("No conflict found") );
2817 mConflictingEvent = 0; 2843 mConflictingEvent = 0;
2818 return; 2844 return;
2819 2845
2820} 2846}
2821 2847
2822void CalendarView::updateTodoViews() 2848void CalendarView::updateTodoViews()
2823{ 2849{
2824 mTodoList->updateView(); 2850 mTodoList->updateView();
2825 mViewManager->currentView()->updateView(); 2851 mViewManager->currentView()->updateView();
2826 2852
2827} 2853}
2828 2854
2829 2855
2830 2856
2831void CalendarView::clearAllViews() 2857void CalendarView::clearAllViews()
2832{ 2858{
2833 mTodoList->clearList(); 2859 mTodoList->clearList();
2834 mViewManager->clearAllViews(); 2860 mViewManager->clearAllViews();
2835 SearchDialog * sd = mDialogManager->getSearchDialog(); 2861 SearchDialog * sd = mDialogManager->getSearchDialog();
2836 if ( sd ) { 2862 if ( sd ) {
2837 KOListView* kol = sd->listview(); 2863 KOListView* kol = sd->listview();
2838 if ( kol ) 2864 if ( kol )
2839 kol->clearList(); 2865 kol->clearList();
2840 } 2866 }
2841} 2867}
2842void CalendarView::updateView() 2868void CalendarView::updateView()
2843{ 2869{
2844 static bool clearallviews = false; 2870 static bool clearallviews = false;
2845 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 2871 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
2846 if ( clearallviews ) { 2872 if ( clearallviews ) {
2847 clearAllViews(); 2873 clearAllViews();
2848 clearallviews = false; 2874 clearallviews = false;
2849 } 2875 }
2850 return; 2876 return;
2851 } 2877 }
2852 clearallviews = true; 2878 clearallviews = true;
2853 DateList tmpList = mNavigator->selectedDates(); 2879 DateList tmpList = mNavigator->selectedDates();
2854 2880
2855 if ( KOPrefs::instance()->mHideNonStartedTodos ) 2881 if ( KOPrefs::instance()->mHideNonStartedTodos )
2856 mTodoList->updateView(); 2882 mTodoList->updateView();
2857 // We assume that the navigator only selects consecutive days. 2883 // We assume that the navigator only selects consecutive days.
2858 updateView( tmpList.first(), tmpList.last() ); 2884 updateView( tmpList.first(), tmpList.last() );
2859} 2885}
2860 2886
2861void CalendarView::updateUnmanagedViews() 2887void CalendarView::updateUnmanagedViews()
2862{ 2888{
2863 mDateNavigator->updateDayMatrix(); 2889 mDateNavigator->updateDayMatrix();
2864} 2890}
2865 2891
2866int CalendarView::msgItemDelete(const QString name) 2892int CalendarView::msgItemDelete(const QString name)
2867{ 2893{
2868 return KMessageBox::warningContinueCancel(this,name +"\n\n"+ 2894 return KMessageBox::warningContinueCancel(this,name +"\n\n"+
2869 i18n("This item will be\npermanently deleted."), 2895 i18n("This item will be\npermanently deleted."),
2870 i18n("KO/Pi Confirmation"),i18n("Delete")); 2896 i18n("KO/Pi Confirmation"),i18n("Delete"));
2871} 2897}
2872 2898
2873 2899
2874void CalendarView::edit_cut() 2900void CalendarView::edit_cut()
2875{ 2901{
2876 Event *anEvent=0; 2902 Event *anEvent=0;
2877 2903
2878 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2904 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2879 2905
2880 if (mViewManager->currentView()->isEventView()) { 2906 if (mViewManager->currentView()->isEventView()) {
2881 if ( incidence && incidence->typeID() == eventID ) { 2907 if ( incidence && incidence->typeID() == eventID ) {
2882 anEvent = static_cast<Event *>(incidence); 2908 anEvent = static_cast<Event *>(incidence);
2883 } 2909 }
2884 } 2910 }
2885 2911
2886 if (!anEvent) { 2912 if (!anEvent) {
2887 KNotifyClient::beep(); 2913 KNotifyClient::beep();
2888 return; 2914 return;
2889 } 2915 }
2890 DndFactory factory( mCalendar ); 2916 DndFactory factory( mCalendar );
2891 factory.cutIncidence(anEvent); 2917 factory.cutIncidence(anEvent);
2892 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2918 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2893} 2919}
2894 2920
2895void CalendarView::edit_copy() 2921void CalendarView::edit_copy()
2896{ 2922{
2897 Event *anEvent=0; 2923 Event *anEvent=0;
2898 2924
2899 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2925 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2900 2926
2901 if (mViewManager->currentView()->isEventView()) { 2927 if (mViewManager->currentView()->isEventView()) {
2902 if ( incidence && incidence->typeID() == eventID ) { 2928 if ( incidence && incidence->typeID() == eventID ) {
2903 anEvent = static_cast<Event *>(incidence); 2929 anEvent = static_cast<Event *>(incidence);
2904 } 2930 }
2905 } 2931 }
2906 2932
2907 if (!anEvent) { 2933 if (!anEvent) {
2908 KNotifyClient::beep(); 2934 KNotifyClient::beep();
2909 return; 2935 return;
2910 } 2936 }
2911 DndFactory factory( mCalendar ); 2937 DndFactory factory( mCalendar );
2912 factory.copyIncidence(anEvent); 2938 factory.copyIncidence(anEvent);
2913} 2939}
2914 2940
2915void CalendarView::edit_paste() 2941void CalendarView::edit_paste()
2916{ 2942{
2917 QDate date = mNavigator->selectedDates().first(); 2943 QDate date = mNavigator->selectedDates().first();
2918 2944
2919 DndFactory factory( mCalendar ); 2945 DndFactory factory( mCalendar );
2920 Event *pastedEvent = (Event *)factory.pasteIncidence( date ); 2946 Event *pastedEvent = (Event *)factory.pasteIncidence( date );
2921 2947
2922 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 2948 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
2923} 2949}
2924void CalendarView::edit_global_options() 2950void CalendarView::edit_global_options()
2925{ 2951{
2926 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId; 2952 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId;
2927 emit save(); 2953 emit save();
2928 emit saveStopTimer(); 2954 emit saveStopTimer();
2929 mDialogManager->showGlobalOptionsDialog(); 2955 mDialogManager->showGlobalOptionsDialog();
2930 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) { 2956 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) {
2931 emit saveStopTimer(); 2957 emit saveStopTimer();
2932 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"), 2958 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"),
2933 i18n("Timezone settings"),i18n("Reload"))) { 2959 i18n("Timezone settings"),i18n("Reload"))) {
2934 qDebug("KO: TZ reload cancelled "); 2960 qDebug("KO: TZ reload cancelled ");
2935 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2961 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2936 return; 2962 return;
2937 } 2963 }
2938 qDebug("KO: Timezone change "); 2964 qDebug("KO: Timezone change ");
2939 loadCalendars(); 2965 loadCalendars();
2940 setModified(true); 2966 setModified(true);
2941 } 2967 }
2942 else 2968 else
2943 qDebug("KO: No tz change "); 2969 qDebug("KO: No tz change ");
2944} 2970}
2945void CalendarView::edit_options() 2971void CalendarView::edit_options()
2946{ 2972{
2947 mDialogManager->showOptionsDialog(); 2973 mDialogManager->showOptionsDialog();
2948} 2974}
2949 2975
2950 2976
2951void CalendarView::slotSelectPickerDate( QDate d) 2977void CalendarView::slotSelectPickerDate( QDate d)
2952{ 2978{
2953 mDateFrame->hide(); 2979 mDateFrame->hide();
2954 if ( mDatePickerMode == 1 ) { 2980 if ( mDatePickerMode == 1 ) {
2955 mNavigator->slotDaySelect( d ); 2981 mNavigator->slotDaySelect( d );
2956 } else if ( mDatePickerMode == 2 ) { 2982 } else if ( mDatePickerMode == 2 ) {
2957 if ( mMoveIncidence->typeID() == todoID ) { 2983 if ( mMoveIncidence->typeID() == todoID ) {
2958 Todo * to = (Todo *) mMoveIncidence; 2984 Todo * to = (Todo *) mMoveIncidence;
2959 QTime tim; 2985 QTime tim;
2960 int len = 0; 2986 int len = 0;
2961 if ( to->hasStartDate() && to->hasDueDate() ) 2987 if ( to->hasStartDate() && to->hasDueDate() )
2962 len = to->dtStart().secsTo( to->dtDue()); 2988 len = to->dtStart().secsTo( to->dtDue());
2963 if ( to->hasDueDate() ) 2989 if ( to->hasDueDate() )
2964 tim = to->dtDue().time(); 2990 tim = to->dtDue().time();
2965 else { 2991 else {
2966 tim = QTime ( 0,0,0 ); 2992 tim = QTime ( 0,0,0 );
2967 to->setFloats( true ); 2993 to->setFloats( true );
2968 to->setHasDueDate( true ); 2994 to->setHasDueDate( true );
2969 } 2995 }
2970 QDateTime dt ( d,tim ); 2996 QDateTime dt ( d,tim );
2971 to->setDtDue( dt ); 2997 to->setDtDue( dt );
2972 2998
2973 if ( to->hasStartDate() ) { 2999 if ( to->hasStartDate() ) {
2974 if ( len>0 ) 3000 if ( len>0 )
2975 to->setDtStart(to->dtDue().addSecs( -len )); 3001 to->setDtStart(to->dtDue().addSecs( -len ));
2976 else 3002 else
2977 if (to->dtStart() > to->dtDue() ) 3003 if (to->dtStart() > to->dtDue() )