summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp204
-rw-r--r--korganizer/calendarview.h1
2 files changed, 202 insertions, 3 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index a1b1d71..8269910 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -335,1083 +335,1281 @@ class KOCatPrefs : public QDialog
335 bool addCat() { return addCatBut->isChecked(); } 335 bool addCat() { return addCatBut->isChecked(); }
336private: 336private:
337 QRadioButton* addCatBut; 337 QRadioButton* addCatBut;
338}; 338};
339 339
340 340
341 341
342CalendarView::CalendarView( CalendarResources *calendar, 342CalendarView::CalendarView( CalendarResources *calendar,
343 QWidget *parent, const char *name ) 343 QWidget *parent, const char *name )
344 : CalendarViewBase( parent, name ), 344 : CalendarViewBase( parent, name ),
345 mCalendar( calendar ), 345 mCalendar( calendar ),
346 mResourceManager( calendar->resourceManager() ) 346 mResourceManager( calendar->resourceManager() )
347{ 347{
348 348
349 mEventEditor = 0; 349 mEventEditor = 0;
350 mTodoEditor = 0; 350 mTodoEditor = 0;
351 351
352 init(); 352 init();
353} 353}
354 354
355CalendarView::CalendarView( Calendar *calendar, 355CalendarView::CalendarView( Calendar *calendar,
356 QWidget *parent, const char *name ) 356 QWidget *parent, const char *name )
357 : CalendarViewBase( parent, name ), 357 : CalendarViewBase( parent, name ),
358 mCalendar( calendar ), 358 mCalendar( calendar ),
359 mResourceManager( 0 ) 359 mResourceManager( 0 )
360{ 360{
361 361
362 mEventEditor = 0; 362 mEventEditor = 0;
363 mTodoEditor = 0; 363 mTodoEditor = 0;
364 init(); 364 init();
365} 365}
366 366
367void CalendarView::init() 367void CalendarView::init()
368{ 368{
369 mNextAlarmDateTime = QDateTime::currentDateTime(); 369 mNextAlarmDateTime = QDateTime::currentDateTime();
370 setFocusPolicy (NoFocus ); 370 setFocusPolicy (NoFocus );
371 mViewerCallerIsSearchDialog = false; 371 mViewerCallerIsSearchDialog = false;
372 mBlockShowDates = false; 372 mBlockShowDates = false;
373 mConflictingEvent = 0; 373 mConflictingEvent = 0;
374 mDatePickerMode = 0; 374 mDatePickerMode = 0;
375 mCurrentSyncDevice = ""; 375 mCurrentSyncDevice = "";
376 mViewManager = new KOViewManager( this ); 376 mViewManager = new KOViewManager( this );
377 mDialogManager = new KODialogManager( this ); 377 mDialogManager = new KODialogManager( this );
378 mEventViewerDialog = 0; 378 mEventViewerDialog = 0;
379 mModified = false; 379 mModified = false;
380 mReadOnly = false; 380 mReadOnly = false;
381 mSelectedIncidence = 0; 381 mSelectedIncidence = 0;
382 mCalPrinter = 0; 382 mCalPrinter = 0;
383 mFilters.setAutoDelete(true); 383 mFilters.setAutoDelete(true);
384 384
385 mCalendar->registerObserver( this ); 385 mCalendar->registerObserver( this );
386 // TODO: Make sure that view is updated, when calendar is changed. 386 // TODO: Make sure that view is updated, when calendar is changed.
387 387
388 mStorage = new FileStorage( mCalendar ); 388 mStorage = new FileStorage( mCalendar );
389 mNavigator = new DateNavigator( this, "datevav", mViewManager ); 389 mNavigator = new DateNavigator( this, "datevav", mViewManager );
390 390
391 QBoxLayout *topLayout = (QBoxLayout*)layout(); 391 QBoxLayout *topLayout = (QBoxLayout*)layout();
392#ifndef KORG_NOSPLITTER 392#ifndef KORG_NOSPLITTER
393 // create the main layout frames. 393 // create the main layout frames.
394 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); 394 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner");
395 topLayout->addWidget(mPanner); 395 topLayout->addWidget(mPanner);
396 396
397 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, 397 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner,
398 "CalendarView::LeftFrame"); 398 "CalendarView::LeftFrame");
399 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); 399 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize);
400 400
401 mDateNavigator = new DateNavigatorContainer( mLeftSplitter, 401 mDateNavigator = new DateNavigatorContainer( mLeftSplitter,
402 "CalendarView::DateNavigator" ); 402 "CalendarView::DateNavigator" );
403 403
404 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); 404 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize);
405 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); 405 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2");
406 mTodoList->setNavigator( mNavigator ); 406 mTodoList->setNavigator( mNavigator );
407 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); 407 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView");
408 408
409#ifdef KORG_NORESOURCEVIEW 409#ifdef KORG_NORESOURCEVIEW
410 mResourceView = 0; 410 mResourceView = 0;
411#else 411#else
412 if ( mResourceManager ) { 412 if ( mResourceManager ) {
413 mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); 413 mResourceView = new ResourceView( mResourceManager, mLeftSplitter );
414 mResourceView->updateView(); 414 mResourceView->updateView();
415 connect( mResourceView, SIGNAL( resourcesChanged() ), 415 connect( mResourceView, SIGNAL( resourcesChanged() ),
416 SLOT( updateView() ) ); 416 SLOT( updateView() ) );
417 } else { 417 } else {
418 mResourceView = 0; 418 mResourceView = 0;
419 } 419 }
420#endif 420#endif
421 QWidget *rightBox = new QWidget( mPanner ); 421 QWidget *rightBox = new QWidget( mPanner );
422 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 422 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
423 423
424 mRightFrame = new QWidgetStack( rightBox ); 424 mRightFrame = new QWidgetStack( rightBox );
425 rightLayout->addWidget( mRightFrame, 1 ); 425 rightLayout->addWidget( mRightFrame, 1 );
426 426
427 mLeftFrame = mLeftSplitter; 427 mLeftFrame = mLeftSplitter;
428#else 428#else
429 //QWidget *mainBox = new QWidget( this ); 429 //QWidget *mainBox = new QWidget( this );
430 //QWidget *leftFrame = new QWidget( mainBox ); 430 //QWidget *leftFrame = new QWidget( mainBox );
431 //QBoxLayout * mainBoxLayout; 431 //QBoxLayout * mainBoxLayout;
432 if ( KOPrefs::instance()->mVerticalScreen ) { 432 if ( KOPrefs::instance()->mVerticalScreen ) {
433 //mainBoxLayout = new QVBoxLayout(mainBox); 433 //mainBoxLayout = new QVBoxLayout(mainBox);
434 //leftFrameLayout = new QHBoxLayout(leftFrame ); 434 //leftFrameLayout = new QHBoxLayout(leftFrame );
435 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this ); 435 mMainFrame = new KDGanttMinimizeSplitter( Qt::Vertical, this );
436 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 436 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
437 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);; 437 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, mMainFrame);;
438 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 438 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
439 } else { 439 } else {
440 //mainBoxLayout = new QHBoxLayout(mainBox); 440 //mainBoxLayout = new QHBoxLayout(mainBox);
441 //leftFrameLayout = new QVBoxLayout(leftFrame ); 441 //leftFrameLayout = new QVBoxLayout(leftFrame );
442 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 442 mMainFrame = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
443 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left); 443 mMainFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Left);
444 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame); 444 mLeftFrame = new KDGanttMinimizeSplitter( Qt::Vertical, mMainFrame);
445 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 445 mLeftFrame->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
446 } 446 }
447 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) ); 447 mMainFrame->setSizePolicy( QSizePolicy (QSizePolicy::Expanding,QSizePolicy::Expanding) );
448 //QBoxLayout * leftFrameLayout; 448 //QBoxLayout * leftFrameLayout;
449 topLayout->addWidget( mMainFrame ); 449 topLayout->addWidget( mMainFrame );
450#ifdef DESKTOP_VERSION 450#ifdef DESKTOP_VERSION
451 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this ); 451 mDateScrollBar = new QScrollBar ( 1, 365, 1,30, 200,QScrollBar::Horizontal, this );
452 topLayout->addWidget( mDateScrollBar ); 452 topLayout->addWidget( mDateScrollBar );
453 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) ); 453 connect( mDateScrollBar, SIGNAL( valueChanged ( int ) ),this, SLOT( scrollBarValue( int )) );
454 if ( QApplication::desktop()->width() < 800 ) 454 if ( QApplication::desktop()->width() < 800 )
455 mDateScrollBar->hide(); 455 mDateScrollBar->hide();
456#endif 456#endif
457 //mainBoxLayout->addWidget (mLeftFrame); 457 //mainBoxLayout->addWidget (mLeftFrame);
458 mDateNavigator = new DateNavigatorContainer( mLeftFrame, 458 mDateNavigator = new DateNavigatorContainer( mLeftFrame,
459 "CalendarView::DateNavigator" ); 459 "CalendarView::DateNavigator" );
460#if 0 460#if 0
461 // FIXME 461 // FIXME
462 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE, 462 mDateNavigator = new KDateNavigator(mLeftFrame, mCalendar, TRUE,
463 "CalendarView::DateNavigator", QDate::currentDate()); 463 "CalendarView::DateNavigator", QDate::currentDate());
464#endif 464#endif
465 // mDateNavigator->blockSignals( true ); 465 // mDateNavigator->blockSignals( true );
466 //leftFrameLayout->addWidget( mDateNavigator ); 466 //leftFrameLayout->addWidget( mDateNavigator );
467 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall"); 467 mTodoList = new KOTodoView(mCalendar, mLeftFrame, "todolistsmall");
468 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView"); 468 mFilterView = new KOFilterView(&mFilters,mLeftFrame,"CalendarView::FilterView");
469 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView"); 469 mCalEditView = new KOCalEditView(mLeftFrame,"CalendarView::CaleditView");
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 static bool block = false; 662 static bool block = false;
663 if ( block ) return; 663 if ( block ) return;
664 block = true; 664 block = true;
665 QPtrList<Event> testlist = mCalendar->events(); 665 QPtrList<Event> testlist = mCalendar->events();
666 Event * test = testlist.first(); 666 Event * test = testlist.first();
667 while ( test ) { 667 while ( test ) {
668 test->setTagged( false ); 668 test->setTagged( false );
669 test = testlist.next(); 669 test = testlist.next();
670 } 670 }
671 QTime st ( 0,0,0); 671 QTime st ( 0,0,0);
672 if ( mViewManager->currentView() == mViewManager->agendaView() ) 672 if ( mViewManager->currentView() == mViewManager->agendaView() )
673 st = mViewManager->agendaView()->agenda()->getEndTime(); 673 st = mViewManager->agendaView()->agenda()->getEndTime();
674 //qDebug("time %s ", st.toString().latin1()); 674 //qDebug("time %s ", st.toString().latin1());
675 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st); 675 QDateTime startDT = QDateTime (mNavigator->selectedDates().first(),st);
676 QDateTime conflict; 676 QDateTime conflict;
677 QDateTime retVal; 677 QDateTime retVal;
678 bool found = false; 678 bool found = false;
679 Event * cE = 0; 679 Event * cE = 0;
680 Event * cE2 = 0; 680 Event * cE2 = 0;
681 QPtrList<Event> testlist2 = testlist; 681 QPtrList<Event> testlist2 = testlist;
682 test = testlist.first(); 682 test = testlist.first();
683 bool skip = false; 683 bool skip = false;
684 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); 684 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
685 //QTime tm; 685 //QTime tm;
686 //tm.start(); 686 //tm.start();
687 while ( test ) { 687 while ( test ) {
688 qApp->processEvents(); 688 qApp->processEvents();
689 skip = false; 689 skip = false;
690 if ( !all ) skip = ( allday != test->doesFloat() ); 690 if ( !all ) skip = ( allday != test->doesFloat() );
691 if ( !skip ) { 691 if ( !skip ) {
692 if ( found ) 692 if ( found )
693 skip = !test->matchTime( &startDT, &conflict ); 693 skip = !test->matchTime( &startDT, &conflict );
694 else 694 else
695 skip = !test->matchTime( &startDT, 0 ); 695 skip = !test->matchTime( &startDT, 0 );
696 } 696 }
697 if ( !skip ) { 697 if ( !skip ) {
698 Event * test2 = testlist2.first(); 698 Event * test2 = testlist2.first();
699 while ( test2 ) { 699 while ( test2 ) {
700 skip = test2->isTagged(); 700 skip = test2->isTagged();
701 if ( !skip && !all ) skip = ( allday != test2->doesFloat() ); 701 if ( !skip && !all ) skip = ( allday != test2->doesFloat() );
702 if ( !skip ) { 702 if ( !skip ) {
703 if ( found ) 703 if ( found )
704 skip = !test2->matchTime( &startDT, &conflict ); 704 skip = !test2->matchTime( &startDT, &conflict );
705 else 705 else
706 skip = !test2->matchTime( &startDT, 0 ); 706 skip = !test2->matchTime( &startDT, 0 );
707 } 707 }
708 if ( !skip ) { 708 if ( !skip ) {
709 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) { 709 if ( test->isOverlapping ( test2, &retVal, &startDT ) ) {
710 //qDebug("overlap "); 710 //qDebug("overlap ");
711 if ( ! found ) { 711 if ( ! found ) {
712 if ( retVal >= startDT ) { 712 if ( retVal >= startDT ) {
713 conflict = retVal; 713 conflict = retVal;
714 cE = test; 714 cE = test;
715 cE2 = test2; 715 cE2 = test2;
716 found = true; 716 found = true;
717 } 717 }
718 } else { 718 } else {
719 if ( retVal >= startDT && retVal < conflict ) { 719 if ( retVal >= startDT && retVal < conflict ) {
720 conflict = retVal; 720 conflict = retVal;
721 cE = test; 721 cE = test;
722 cE2 = test2; 722 cE2 = test2;
723 } 723 }
724 } 724 }
725 } 725 }
726 } 726 }
727 test2 = testlist2.next(); 727 test2 = testlist2.next();
728 } 728 }
729 } 729 }
730 test->setTagged( true ); 730 test->setTagged( true );
731 test = testlist.next(); 731 test = testlist.next();
732 } 732 }
733 //qDebug("Search time : %d", tm.elapsed()); 733 //qDebug("Search time : %d", tm.elapsed());
734 if ( found ) { 734 if ( found ) {
735 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 735 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
736 mViewManager->showDayView(); 736 mViewManager->showDayView();
737 mNavigator->slotDaySelect( conflict.date() ); 737 mNavigator->slotDaySelect( conflict.date() );
738 int hour = conflict.time().hour(); 738 int hour = conflict.time().hour();
739 mViewManager->agendaView()->setStartHour( hour ); 739 mViewManager->agendaView()->setStartHour( hour );
740 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; 741 block = false;
742 return; 742 return;
743 } 743 }
744 744
745 topLevelWidget()->setCaption( i18n("No conflict found") ); 745 topLevelWidget()->setCaption( i18n("No conflict found") );
746 //qDebug("No conflict found "); 746 //qDebug("No conflict found ");
747 block = false; 747 block = false;
748 return; 748 return;
749} 749}
750 750
751void CalendarView::conflictAll() 751void CalendarView::conflictAll()
752{ 752{
753 nextConflict ( true, true ); 753 nextConflict ( true, true );
754} 754}
755void CalendarView::conflictAllday() 755void CalendarView::conflictAllday()
756{ 756{
757 nextConflict ( false, true ); 757 nextConflict ( false, true );
758} 758}
759void CalendarView::conflictNotAll() 759void CalendarView::conflictNotAll()
760{ 760{
761 nextConflict ( false, false ); 761 nextConflict ( false, false );
762} 762}
763 763
764void CalendarView::setCalReadOnly( int id, bool readO ) 764void CalendarView::setCalReadOnly( int id, bool readO )
765{ 765{
766 if ( readO ) { 766 if ( readO ) {
767 emit save(); 767 emit save();
768 } 768 }
769 mCalendar->setReadOnly( id, readO ); 769 mCalendar->setReadOnly( id, readO );
770} 770}
771void CalendarView::setScrollBarStep(int val ) 771void CalendarView::setScrollBarStep(int val )
772{ 772{
773#ifdef DESKTOP_VERSION 773#ifdef DESKTOP_VERSION
774 mDateScrollBar->setLineStep ( val ); 774 mDateScrollBar->setLineStep ( val );
775#endif 775#endif
776} 776}
777void CalendarView::scrollBarValue(int val ) 777void CalendarView::scrollBarValue(int val )
778{ 778{
779#ifdef DESKTOP_VERSION 779#ifdef DESKTOP_VERSION
780 if ( QApplication::desktop()->width() < 800 ) return; 780 if ( QApplication::desktop()->width() < 800 ) return;
781 static bool block = false; 781 static bool block = false;
782 if ( block ) return; 782 if ( block ) return;
783 block = true; 783 block = true;
784 int count = mNavigator->selectedDates().count(); 784 int count = mNavigator->selectedDates().count();
785 int day = mNavigator->selectedDates().first().dayOfYear(); 785 int day = mNavigator->selectedDates().first().dayOfYear();
786 int stepdays = val; 786 int stepdays = val;
787 if ( mDateScrollBar->lineStep () <= count ) { 787 if ( mDateScrollBar->lineStep () <= count ) {
788 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 788 //val = val/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
789 //qDebug("VAL %d ",val ); 789 //qDebug("VAL %d ",val );
790 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep(); 790 stepdays = (val-day)/mDateScrollBar->lineStep ()*mDateScrollBar->lineStep();
791 stepdays = day+stepdays; 791 stepdays = day+stepdays;
792 if ( stepdays < 0 ) stepdays = 0; 792 if ( stepdays < 0 ) stepdays = 0;
793 } 793 }
794 if ( stepdays == day ) { 794 if ( stepdays == day ) {
795 block = false; 795 block = false;
796 return; 796 return;
797 } 797 }
798 int year = mNavigator->selectedDates().first().year(); 798 int year = mNavigator->selectedDates().first().year();
799 QDate d ( year,1,1 ); 799 QDate d ( year,1,1 );
800 mNavigator->selectDates( d.addDays( stepdays-1) , count ); 800 mNavigator->selectDates( d.addDays( stepdays-1) , count );
801 block = false; 801 block = false;
802#endif 802#endif
803 803
804} 804}
805void CalendarView::updateView(const QDate &start, const QDate &end) 805void CalendarView::updateView(const QDate &start, const QDate &end)
806{ 806{
807#ifdef DESKTOP_VERSION 807#ifdef DESKTOP_VERSION
808 if ( ! mDateScrollBar->draggingSlider () ) { 808 if ( ! mDateScrollBar->draggingSlider () ) {
809 int dof = start.dayOfYear(); 809 int dof = start.dayOfYear();
810 //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() );
811 if ( dof != mDateScrollBar->value() ) { 811 if ( dof != mDateScrollBar->value() ) {
812 mDateScrollBar->blockSignals( true ); 812 mDateScrollBar->blockSignals( true );
813 mDateScrollBar->setValue( start.dayOfYear()); 813 mDateScrollBar->setValue( start.dayOfYear());
814 mDateScrollBar->blockSignals( false ); 814 mDateScrollBar->blockSignals( false );
815 } 815 }
816 } 816 }
817#endif 817#endif
818 mTodoList->updateView(); 818 mTodoList->updateView();
819 mViewManager->updateView(start, end); 819 mViewManager->updateView(start, end);
820 //mDateNavigator->updateView(); 820 //mDateNavigator->updateView();
821} 821}
822 822
823 823
824 824
825void CalendarView::checkFiles() 825void CalendarView::checkFiles()
826{ 826{
827 QString message; 827 QString message;
828 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 828 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
829 KopiCalendarFile * cal = calendars.first(); 829 KopiCalendarFile * cal = calendars.first();
830 while ( cal ) { 830 while ( cal ) {
831 if ( cal->mErrorOnLoad ) { 831 if ( cal->mErrorOnLoad ) {
832 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";
833 } 833 }
834 cal = calendars.next(); 834 cal = calendars.next();
835 } 835 }
836 if ( !message.isEmpty() ) { 836 if ( !message.isEmpty() ) {
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); 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);
838 KMessageBox::error(this,message, i18n("Loding of calendar(s) failed")); 838 KMessageBox::error(this,message, i18n("Loding of calendar(s) failed"));
839 } 839 }
840 static bool firstTime = true; 840 static bool firstTime = true;
841 if ( firstTime ) { 841 if ( firstTime ) {
842 firstTime = false; 842 firstTime = false;
843 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() )); 843 QTimer::singleShot( 2000, this, SLOT ( checkAlarms() ));
844 } 844 }
845} 845}
846void CalendarView::checkAlarms() 846void CalendarView::checkAlarms()
847{ 847{
848
849
850 KConfig *config = KOGlobals::config(); 848 KConfig *config = KOGlobals::config();
851 config->setGroup( "AppRun" ); 849 config->setGroup( "AppRun" );
852 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 850 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
853 int daysto = dt.daysTo( QDate::currentDate() ); 851 int daysto = dt.daysTo( QDate::currentDate() );
854 int days = config->readNumEntry( "LatestProgramStopDays" , daysto); 852 int days = config->readNumEntry( "LatestProgramStopDays" , daysto);
855 dt = dt.addDays( days ); 853 dt = dt.addDays( days );
856 int secto = dt.secsTo( QDateTime::currentDateTime() ); 854 int secto = dt.secsTo( QDateTime::currentDateTime() );
857 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30; 855 int secs = config->readNumEntry( "LatestProgramStopSecs" , secto) - 30;
858 //qDebug("KO: Reading program stop %d ", secs); 856 //qDebug("KO: Reading program stop %d ", secs);
859 //secs -= ( 3600 * 24*3 ); // debug only 857 //secs -= ( 3600 * 24*3 ); // debug only
860 QDateTime latest = dt.addSecs ( secs ); 858 QDateTime latest = dt.addSecs ( secs );
861 qDebug("KO: Last termination on %s ", latest.toString().latin1()); 859 qDebug("KO: Last termination on %s ", latest.toString().latin1());
862 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 860 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
863 QPtrList<Incidence> el = mCalendar->rawIncidences(); 861 QPtrList<Incidence> el = mCalendar->rawIncidences();
864 QPtrList<Incidence> al; 862 QPtrList<Incidence> al;
865 Incidence* inL = el.first(); 863 Incidence* inL = el.first();
866 QDateTime cur = QDateTime::currentDateTime().addSecs(-59); 864 QDateTime cur = QDateTime::currentDateTime().addSecs(-59);
867 qDebug("KO: Checking alarm until %s ", cur.toString().latin1()); 865 qDebug("KO: Checking alarm until %s ", cur.toString().latin1());
868 while ( inL ) { 866 while ( inL ) {
869 bool ok = false; 867 bool ok = false;
870 int offset = 0; 868 int offset = 0;
871 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ; 869 QDateTime next = inL->getNextAlarmDateTime(& ok, &offset, latest ) ;
872 if ( ok ) { 870 if ( ok ) {
873 //qDebug("OK %s",next.toString().latin1()); 871 //qDebug("OK %s",next.toString().latin1());
874 if ( next < cur ) { 872 if ( next < cur ) {
875 al.append( inL ); 873 al.append( inL );
876 //qDebug("found missed alarm: %s ", inL->summary().latin1() ); 874 //qDebug("found missed alarm: %s ", inL->summary().latin1() );
877 } 875 }
878 } 876 }
879 inL = el.next(); 877 inL = el.next();
880 } 878 }
881 if ( al.count() ) { 879 if ( al.count() ) {
882 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop ); 880 QDialog* dia = new QDialog( this, "huhu", false, WDestructiveClose | WStyle_StaysOnTop );
883 dia->setCaption( i18n("KO/Pi: Missing alarms!") ); 881 dia->setCaption( i18n("KO/Pi: Missing alarms!") );
884 QVBoxLayout* lay = new QVBoxLayout( dia ); 882 QVBoxLayout* lay = new QVBoxLayout( dia );
885 lay->setSpacing( 0 ); 883 lay->setSpacing( 0 );
886 lay->setMargin( 0 ); 884 lay->setMargin( 0 );
887 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest ); 885 MissedAlarmTextBrowser* matb = new MissedAlarmTextBrowser ( dia, al, latest );
888 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 886 connect( matb, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
889 lay->addWidget( matb ); 887 lay->addWidget( matb );
890 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) { 888 if ( QApplication::desktop()->width() == 480 || QApplication::desktop()->width() == 640 ) {
891 int wid = 210; 889 int wid = 210;
892 int x = QApplication::desktop()->width() - wid - 7; 890 int x = QApplication::desktop()->width() - wid - 7;
893 int y = QApplication::desktop()->height() - wid - 70; 891 int y = QApplication::desktop()->height() - wid - 70;
894 dia->setGeometry ( x,y,wid,wid); 892 dia->setGeometry ( x,y,wid,wid);
895 } else { 893 } else {
896 int si = 220; 894 int si = 220;
897 if ( QApplication::desktop()->width() > 470 ) 895 if ( QApplication::desktop()->width() > 470 )
898 si = 400; 896 si = 400;
899 dia->resize(si,si/2); 897 dia->resize(si,si/2);
900 } 898 }
901 dia->setBackgroundColor( QColor( 255, 255, 255 ) ); 899 dia->setBackgroundColor( QColor( 255, 255, 255 ) );
902 dia->show(); 900 dia->show();
903 901
904 } 902 }
903#if 0
904 // for creating timetracker test data
905 qDebug("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc ");
906 Todo * nt;
907 mCalendar->close();
908 {
909 Todo * root1 = new Todo;
910 mCalendar->addTodo( root1 );
911 root1->setSummary( "Project_1");
912 root1->setPriority( 1 );
913 root1->setDescription( "This is a test description of a root Project" );
914 root1->setPercentComplete( 20 );
915 updateView();
916 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) );
917 QDateTime end = QDateTime ( QDate( 2005,8,1), QTime ( 0,0,0) );
918
919 nt = new Todo;
920 mCalendar->addTodo( nt );
921 nt->setSummary( "Planning_Project_1");
922 nt->setPriority( 1 );
923 nt->setDescription( "This is a test description of Planning_Project_1" );
924 nt->setPercentComplete( 20 );
925
926
927 Todo * sub1 = nt;
928 sub1->setRelatedTo( root1 );
929
930 nt = new Todo;
931 mCalendar->addTodo( nt );
932 nt->setSummary( "Planning_Project_1: Lutz");
933 nt->setPriority( 1 );
934 nt->setDescription( "This todo counts the actual work of a person on a project" );
935 nt->setPercentComplete( 20 );
936 Todo * workLutz11 = nt;
937 workLutz11->setRelatedTo( sub1 );
938
939 nt = new Todo;
940 mCalendar->addTodo( nt );
941 nt->setSummary( "Planning_Project_1: Norbert");
942 nt->setPriority( 1 );
943 nt->setDescription( "This todo counts the actual work of a person on a project" );
944 nt->setPercentComplete( 20 );
945 Todo * workNorbert11 = nt;
946 workNorbert11->setRelatedTo( sub1 );
947
948 nt = new Todo;
949 mCalendar->addTodo( nt );
950 nt->setSummary( "Work on 1");
951 nt->setPriority( 1 );
952 nt->setDescription( "This is a test description of Work Project_1" );
953 nt->setPercentComplete( 20 );
954
955 Todo * sub2 = nt;
956 sub2->setRelatedTo( root1 );
957
958
959 nt = new Todo;
960 mCalendar->addTodo( nt );
961 nt->setSummary( "Work on 1: Lutz");
962 nt->setPriority( 1 );
963 nt->setDescription( "This todo counts the actual work of a person on a project" );
964 nt->setPercentComplete( 20 );
965 Todo * workLutz12 = nt;
966 workLutz12->setRelatedTo( sub2 );
967
968 nt = new Todo;
969 mCalendar->addTodo( nt );
970 nt->setSummary( "Work on 1: Norbert");
971 nt->setPriority( 1 );
972 nt->setDescription( "This todo counts the actual work of a person on a project" );
973 nt->setPercentComplete( 20 );
974 Todo * workNorbert12 = nt;
975 workNorbert12->setRelatedTo( sub2 );
976
977 int secLenRunning = 7200;
978 int secLenPausing = 3600 * 3;
979 int dayInterval = 1;
980 //createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, dayInterval );
981 createRunningDate4Todo( root1, start, end, secLenRunning*24, secLenPausing, 14 );
982 createRunningDate4Todo( sub1, start.addSecs( secLenRunning ), start.addDays( 10 ), secLenRunning*4, secLenPausing, 1);
983 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*4, secLenPausing, 3);
984 createRunningDate4Todo( workLutz11, start, start.addDays( 8 ), secLenRunning, secLenPausing, 0);
985 createRunningDate4Todo( workNorbert11, start, start.addDays( 8 ), secLenRunning*2, secLenPausing, 1);
986 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning*5, secLenPausing, 3);
987 createRunningDate4Todo( workNorbert11, start.addDays( 8 ), end, secLenRunning, secLenPausing*3, 0);
988
989 }
990
991 {
992 Todo * root1 = new Todo;
993 mCalendar->addTodo( root1 );
994 root1->setSummary( "Project_2");
995 root1->setPriority( 1 );
996 root1->setDescription( "This is a test description of a root Project 2" );
997 root1->setPercentComplete( 20 );
998 updateView();
999 QDateTime start = QDateTime ( QDate( 2004,11,1), QTime ( 7,30,0) );
1000 QDateTime end = QDateTime ( QDate( 2005,8,1), QTime ( 0,0,0) );
1001 int secLenRunning = 7200;
1002 int secLenPausing = 3600 * 3;
1003 int dayInterval = 1;
1004
1005 nt = new Todo;
1006 mCalendar->addTodo( nt );
1007 nt->setSummary( "Planning_Project_2");
1008 nt->setPriority( 1 );
1009 nt->setDescription( "This is a test description of Planning_Project_2" );
1010 nt->setPercentComplete( 20 );
1011
1012
1013 Todo * sub1 = nt;
1014 sub1->setRelatedTo( root1 );
1015
1016 nt = new Todo;
1017 mCalendar->addTodo( nt );
1018 nt->setSummary( "Planning_Project_2: Lutz");
1019 nt->setPriority( 1 );
1020 nt->setDescription( "This todo counts the actual work of a person on a project" );
1021 nt->setPercentComplete( 20 );
1022 Todo * workLutz11 = nt;
1023 workLutz11->setRelatedTo( sub1 );
1024
1025 nt = new Todo;
1026 mCalendar->addTodo( nt );
1027 nt->setSummary( "Planning_Project_2: Norbert");
1028 nt->setPriority( 1 );
1029 nt->setDescription( "This todo counts the actual work of a person on a project" );
1030 nt->setPercentComplete( 20 );
1031 Todo * workNorbert11 = nt;
1032 workNorbert11->setRelatedTo( sub1 );
1033
1034 nt = new Todo;
1035 mCalendar->addTodo( nt );
1036 nt->setSummary( "Work on 2");
1037 nt->setPriority( 1 );
1038 nt->setDescription( "This is a test description of Work Project_2" );
1039 nt->setPercentComplete( 20 );
1040
1041 Todo * sub2 = nt;
1042 sub2->setRelatedTo( root1 );
1043
1044
1045 nt = new Todo;
1046 mCalendar->addTodo( nt );
1047 nt->setSummary( "Work on 2: Lutz");
1048 nt->setPriority( 1 );
1049 nt->setDescription( "This todo counts the actual work of a person on a project" );
1050 nt->setPercentComplete( 20 );
1051 Todo * workLutz12 = nt;
1052 workLutz12->setRelatedTo( sub2 );
1053
1054 nt = new Todo;
1055 mCalendar->addTodo( nt );
1056 nt->setSummary( "Work on 2: Norbert");
1057 nt->setPriority( 1 );
1058 nt->setDescription( "This todo counts the actual work of a person on a project" );
1059 nt->setPercentComplete( 20 );
1060 Todo * workNorbert12 = nt;
1061 workNorbert12->setRelatedTo( sub2 );
1062 createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, 10 );
1063 createRunningDate4Todo( sub1, start.addSecs( secLenRunning*3 ), start.addDays( 20 ), secLenRunning*2, secLenPausing, 2);
1064 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*3, secLenPausing, 7);
1065 createRunningDate4Todo( workLutz11, start, start.addDays( 18 ), secLenRunning/2, secLenPausing*5, 0);
1066 createRunningDate4Todo( workNorbert11, start.addDays( 8 ), start.addDays( 18 ), secLenRunning*5, secLenPausing*5, 1);
1067 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning, secLenPausing*8, 0);
1068 createRunningDate4Todo( workNorbert11, start.addDays( 28 ), end, secLenRunning/8, secLenPausing*6, 0);
1069 }
1070 updateView();
1071#endif
1072}
1073void CalendarView::createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval )
1074{
1075 static int ccc = 0;
1076 ++ccc;
1077 QDateTime t_start = start;
1078 runT->setPriority( 5 );
1079 runT->setPercentComplete( 0 );
1080 int count = 0;
1081 int prio = 5;
1082 int complete = 0;
1083 while ( t_start < end ) {
1084 ++count;
1085 if ( count > ccc ) {
1086 count = 0;
1087 --prio;
1088 if ( prio == 0 ) prio = 5;
1089 complete += 20;
1090 if ( complete > 100 ) complete = 0;
1091 runT->setPriority( prio );
1092 runT->setPercentComplete( complete );
1093 }
1094 runT->setRunning( true );
1095 runT->saveRunningInfo( "Additional tt comment: running on "+ t_start.toString(), t_start, t_start.addSecs( secLenRunning ) );
1096 if ( dayInterval )
1097 t_start = t_start.addDays( dayInterval );
1098 else {
1099 t_start = t_start.addSecs( secLenRunning + secLenPausing );
1100 }
1101 }
905} 1102}
1103
906void CalendarView::showDay( QDate d ) 1104void CalendarView::showDay( QDate d )
907{ 1105{
908 dateNavigator()->blockSignals( true ); 1106 dateNavigator()->blockSignals( true );
909 dateNavigator()->selectDate( d ); 1107 dateNavigator()->selectDate( d );
910 dateNavigator()->blockSignals( false ); 1108 dateNavigator()->blockSignals( false );
911 mViewManager->showDayView(); 1109 mViewManager->showDayView();
912 //dateNavigator()->selectDate( d ); 1110 //dateNavigator()->selectDate( d );
913} 1111}
914void CalendarView::timerAlarm() 1112void CalendarView::timerAlarm()
915{ 1113{
916 //qDebug("CalendarView::timerAlarm() "); 1114 //qDebug("CalendarView::timerAlarm() ");
917 computeAlarm(mAlarmNotification ); 1115 computeAlarm(mAlarmNotification );
918} 1116}
919 1117
920void CalendarView::suspendAlarm() 1118void CalendarView::suspendAlarm()
921{ 1119{
922 //qDebug(" CalendarView::suspendAlarm() "); 1120 //qDebug(" CalendarView::suspendAlarm() ");
923 computeAlarm(mSuspendAlarmNotification ); 1121 computeAlarm(mSuspendAlarmNotification );
924 1122
925} 1123}
926 1124
927void CalendarView::startAlarm( QString mess , QString filename) 1125void CalendarView::startAlarm( QString mess , QString filename)
928{ 1126{
929 1127
930 topLevelWidget()->showNormal(); 1128 topLevelWidget()->showNormal();
931 topLevelWidget()->setActiveWindow(); 1129 topLevelWidget()->setActiveWindow();
932 topLevelWidget()->raise(); 1130 topLevelWidget()->raise();
933 1131
934 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 1132 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
935 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) ); 1133 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) );
936 1134
937} 1135}
938 1136
939void CalendarView::checkNextTimerAlarm() 1137void CalendarView::checkNextTimerAlarm()
940{ 1138{
941 mCalendar->checkAlarmForIncidence( 0, true ); 1139 mCalendar->checkAlarmForIncidence( 0, true );
942} 1140}
943 1141
944void CalendarView::computeAlarm( QString msg ) 1142void CalendarView::computeAlarm( QString msg )
945{ 1143{
946 1144
947 QString mess = msg; 1145 QString mess = msg;
948 QString mAlarmMessage = mess.mid( 9 ); 1146 QString mAlarmMessage = mess.mid( 9 );
949 QString filename = MainWindow::resourcePath(); 1147 QString filename = MainWindow::resourcePath();
950 filename += "koalarm.wav"; 1148 filename += "koalarm.wav";
951 QString tempfilename; 1149 QString tempfilename;
952 if ( mess.left( 13 ) == "suspend_alarm") { 1150 if ( mess.left( 13 ) == "suspend_alarm") {
953 bool error = false; 1151 bool error = false;
954 int len = mess.mid( 13 ).find("+++"); 1152 int len = mess.mid( 13 ).find("+++");
955 if ( len < 2 ) 1153 if ( len < 2 )
956 error = true; 1154 error = true;
957 else { 1155 else {
958 tempfilename = mess.mid( 13, len ); 1156 tempfilename = mess.mid( 13, len );
959 if ( !QFile::exists( tempfilename ) ) 1157 if ( !QFile::exists( tempfilename ) )
960 error = true; 1158 error = true;
961 } 1159 }
962 if ( ! error ) { 1160 if ( ! error ) {
963 filename = tempfilename; 1161 filename = tempfilename;
964 } 1162 }
965 mAlarmMessage = mess.mid( 13+len+3 ); 1163 mAlarmMessage = mess.mid( 13+len+3 );
966 //qDebug("suspend file %s ",tempfilename.latin1() ); 1164 //qDebug("suspend file %s ",tempfilename.latin1() );
967 startAlarm( mAlarmMessage, filename); 1165 startAlarm( mAlarmMessage, filename);
968 return; 1166 return;
969 } 1167 }
970 if ( mess.left( 11 ) == "timer_alarm") { 1168 if ( mess.left( 11 ) == "timer_alarm") {
971 //mTimerTime = 0; 1169 //mTimerTime = 0;
972 startAlarm( mess.mid( 11 ), filename ); 1170 startAlarm( mess.mid( 11 ), filename );
973 return; 1171 return;
974 } 1172 }
975 if ( mess.left( 10 ) == "proc_alarm") { 1173 if ( mess.left( 10 ) == "proc_alarm") {
976 bool error = false; 1174 bool error = false;
977 int len = mess.mid( 10 ).find("+++"); 1175 int len = mess.mid( 10 ).find("+++");
978 if ( len < 2 ) 1176 if ( len < 2 )
979 error = true; 1177 error = true;
980 else { 1178 else {
981 tempfilename = mess.mid( 10, len ); 1179 tempfilename = mess.mid( 10, len );
982 if ( !QFile::exists( tempfilename ) ) 1180 if ( !QFile::exists( tempfilename ) )
983 error = true; 1181 error = true;
984 } 1182 }
985 if ( error ) { 1183 if ( error ) {
986 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 1184 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
987 mAlarmMessage += mess.mid( 10+len+3+9 ); 1185 mAlarmMessage += mess.mid( 10+len+3+9 );
988 } else { 1186 } else {
989 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 1187 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
990 //qDebug("-----system command %s ",tempfilename.latin1() ); 1188 //qDebug("-----system command %s ",tempfilename.latin1() );
991#ifndef _WIN32_ 1189#ifndef _WIN32_
992 if ( vfork () == 0 ) { 1190 if ( vfork () == 0 ) {
993 execl ( tempfilename.latin1(), 0 ); 1191 execl ( tempfilename.latin1(), 0 );
994 return; 1192 return;
995 } 1193 }
996#else 1194#else
997 QProcess* p = new QProcess(); 1195 QProcess* p = new QProcess();
998 p->addArgument( tempfilename.latin1() ); 1196 p->addArgument( tempfilename.latin1() );
999 p->start(); 1197 p->start();
1000 return; 1198 return;
1001#endif 1199#endif
1002 1200
1003 return; 1201 return;
1004 } 1202 }
1005 1203
1006 //qDebug("+++++++system command %s ",tempfilename.latin1() ); 1204 //qDebug("+++++++system command %s ",tempfilename.latin1() );
1007 } 1205 }
1008 if ( mess.left( 11 ) == "audio_alarm") { 1206 if ( mess.left( 11 ) == "audio_alarm") {
1009 bool error = false; 1207 bool error = false;
1010 int len = mess.mid( 11 ).find("+++"); 1208 int len = mess.mid( 11 ).find("+++");
1011 if ( len < 2 ) 1209 if ( len < 2 )
1012 error = true; 1210 error = true;
1013 else { 1211 else {
1014 tempfilename = mess.mid( 11, len ); 1212 tempfilename = mess.mid( 11, len );
1015 if ( !QFile::exists( tempfilename ) ) 1213 if ( !QFile::exists( tempfilename ) )
1016 error = true; 1214 error = true;
1017 } 1215 }
1018 if ( ! error ) { 1216 if ( ! error ) {
1019 filename = tempfilename; 1217 filename = tempfilename;
1020 } 1218 }
1021 mAlarmMessage = mess.mid( 11+len+3+9 ); 1219 mAlarmMessage = mess.mid( 11+len+3+9 );
1022 //qDebug("audio file command %s ",tempfilename.latin1() ); 1220 //qDebug("audio file command %s ",tempfilename.latin1() );
1023 } 1221 }
1024 if ( mess.left( 9 ) == "cal_alarm") { 1222 if ( mess.left( 9 ) == "cal_alarm") {
1025 mAlarmMessage = mess.mid( 9 ) ; 1223 mAlarmMessage = mess.mid( 9 ) ;
1026 } 1224 }
1027 1225
1028 startAlarm( mAlarmMessage, filename ); 1226 startAlarm( mAlarmMessage, filename );
1029 1227
1030 1228
1031} 1229}
1032 1230
1033void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti ) 1231void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti )
1034{ 1232{
1035 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1233 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1036 1234
1037 mSuspendAlarmNotification = noti; 1235 mSuspendAlarmNotification = noti;
1038 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; 1236 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000;
1039 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); 1237 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000);
1040 mSuspendTimer->start( ms , true ); 1238 mSuspendTimer->start( ms , true );
1041 1239
1042} 1240}
1043 1241
1044void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti ) 1242void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti )
1045{ 1243{
1046 mNextAlarmDateTime = qdt; 1244 mNextAlarmDateTime = qdt;
1047 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1245 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1048 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1246 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1049#ifndef DESKTOP_VERSION 1247#ifndef DESKTOP_VERSION
1050 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() ); 1248 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() );
1051#endif 1249#endif
1052 return; 1250 return;
1053 } 1251 }
1054 int maxSec; 1252 int maxSec;
1055 //maxSec = 5; //testing only 1253 //maxSec = 5; //testing only
1056 maxSec = 86400+3600; // one day+1hour 1254 maxSec = 86400+3600; // one day+1hour
1057 mAlarmNotification = noti; 1255 mAlarmNotification = noti;
1058 int sec = QDateTime::currentDateTime().secsTo( qdt ); 1256 int sec = QDateTime::currentDateTime().secsTo( qdt );
1059 if ( sec > maxSec ) { 1257 if ( sec > maxSec ) {
1060 mRecheckAlarmTimer->start( maxSec * 1000 ); 1258 mRecheckAlarmTimer->start( maxSec * 1000 );
1061 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec ); 1259 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec );
1062 return; 1260 return;
1063 } else { 1261 } else {
1064 mRecheckAlarmTimer->stop(); 1262 mRecheckAlarmTimer->stop();
1065 } 1263 }
1066 //qDebug("Alarm timer started with secs: %d ", sec); 1264 //qDebug("Alarm timer started with secs: %d ", sec);
1067 mAlarmTimer->start( sec *1000 , true ); 1265 mAlarmTimer->start( sec *1000 , true );
1068 1266
1069} 1267}
1070// called by mRecheckAlarmTimer to get next alarm 1268// called by mRecheckAlarmTimer to get next alarm
1071// we need this, because a QTimer has only a max range of 25 days 1269// we need this, because a QTimer has only a max range of 25 days
1072void CalendarView::recheckTimerAlarm() 1270void CalendarView::recheckTimerAlarm()
1073{ 1271{
1074 mAlarmTimer->stop(); 1272 mAlarmTimer->stop();
1075 mRecheckAlarmTimer->stop(); 1273 mRecheckAlarmTimer->stop();
1076 mCalendar->checkAlarmForIncidence( 0, true ); 1274 mCalendar->checkAlarmForIncidence( 0, true );
1077} 1275}
1078#ifndef DESKTOP_VERSION 1276#ifndef DESKTOP_VERSION
1079void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti ) 1277void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti )
1080#else 1278#else
1081void CalendarView::removeAlarm(const QDateTime &, const QString & ) 1279void CalendarView::removeAlarm(const QDateTime &, const QString & )
1082#endif 1280#endif
1083{ 1281{
1084 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1282 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1085 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1283 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1086#ifndef DESKTOP_VERSION 1284#ifndef DESKTOP_VERSION
1087 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() ); 1285 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() );
1088#endif 1286#endif
1089 return; 1287 return;
1090 } 1288 }
1091 mAlarmTimer->stop(); 1289 mAlarmTimer->stop();
1092} 1290}
1093void CalendarView::selectWeekNum ( int num ) 1291void CalendarView::selectWeekNum ( int num )
1094{ 1292{
1095 dateNavigator()->blockSignals( true ); 1293 dateNavigator()->blockSignals( true );
1096 dateNavigator()->selectWeek( num ); 1294 dateNavigator()->selectWeek( num );
1097 dateNavigator()->blockSignals( false ); 1295 dateNavigator()->blockSignals( false );
1098 mViewManager->showWeekView(); 1296 mViewManager->showWeekView();
1099} 1297}
1100KOViewManager *CalendarView::viewManager() 1298KOViewManager *CalendarView::viewManager()
1101{ 1299{
1102 return mViewManager; 1300 return mViewManager;
1103} 1301}
1104 1302
1105KODialogManager *CalendarView::dialogManager() 1303KODialogManager *CalendarView::dialogManager()
1106{ 1304{
1107 return mDialogManager; 1305 return mDialogManager;
1108} 1306}
1109 1307
1110QDate CalendarView::startDate() 1308QDate CalendarView::startDate()
1111{ 1309{
1112 DateList dates = mNavigator->selectedDates(); 1310 DateList dates = mNavigator->selectedDates();
1113 1311
1114 return dates.first(); 1312 return dates.first();
1115} 1313}
1116 1314
1117QDate CalendarView::endDate() 1315QDate CalendarView::endDate()
1118{ 1316{
1119 DateList dates = mNavigator->selectedDates(); 1317 DateList dates = mNavigator->selectedDates();
1120 1318
1121 return dates.last(); 1319 return dates.last();
1122} 1320}
1123 1321
1124 1322
1125void CalendarView::createPrinter() 1323void CalendarView::createPrinter()
1126{ 1324{
1127#ifndef KORG_NOPRINTER 1325#ifndef KORG_NOPRINTER
1128 if (!mCalPrinter) { 1326 if (!mCalPrinter) {
1129 mCalPrinter = new CalPrinter(this, mCalendar); 1327 mCalPrinter = new CalPrinter(this, mCalendar);
1130 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); 1328 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig()));
1131 } 1329 }
1132#endif 1330#endif
1133} 1331}
1134 1332
1135 1333
1136//KOPrefs::instance()->mWriteBackFile 1334//KOPrefs::instance()->mWriteBackFile
1137//KOPrefs::instance()->mWriteBackExistingOnly 1335//KOPrefs::instance()->mWriteBackExistingOnly
1138 1336
1139// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); 1337// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict"));
1140// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); 1338// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict"));
1141// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); 1339// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict"));
1142// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); 1340// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict"));
1143// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); 1341// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always"));
1144// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); 1342// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always"));
1145 1343
1146int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) 1344int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full )
1147{ 1345{
1148 1346
1149 // 0 equal 1347 // 0 equal
1150 // 1 take local 1348 // 1 take local
1151 // 2 take remote 1349 // 2 take remote
1152 // 3 cancel 1350 // 3 cancel
1153 QDateTime lastSync = mLastCalendarSync; 1351 QDateTime lastSync = mLastCalendarSync;
1154 QDateTime localMod = local->lastModified(); 1352 QDateTime localMod = local->lastModified();
1155 QDateTime remoteMod = remote->lastModified(); 1353 QDateTime remoteMod = remote->lastModified();
1156 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1354 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1157 bool remCh, locCh; 1355 bool remCh, locCh;
1158 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 1356 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
1159 //if ( remCh ) 1357 //if ( remCh )
1160 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 1358 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
1161 locCh = ( localMod > mLastCalendarSync ); 1359 locCh = ( localMod > mLastCalendarSync );
1162 if ( !remCh && ! locCh ) { 1360 if ( !remCh && ! locCh ) {
1163 //qDebug("both not changed "); 1361 //qDebug("both not changed ");
1164 lastSync = localMod.addDays(1); 1362 lastSync = localMod.addDays(1);
1165 if ( mode <= SYNC_PREF_ASK ) 1363 if ( mode <= SYNC_PREF_ASK )
1166 return 0; 1364 return 0;
1167 } else { 1365 } else {
1168 if ( locCh ) { 1366 if ( locCh ) {
1169 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1()); 1367 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1());
1170 lastSync = localMod.addDays( -1 ); 1368 lastSync = localMod.addDays( -1 );
1171 if ( !remCh ) 1369 if ( !remCh )
1172 remoteMod = ( lastSync.addDays( -1 ) ); 1370 remoteMod = ( lastSync.addDays( -1 ) );
1173 } else { 1371 } else {
1174 //qDebug(" not loc changed "); 1372 //qDebug(" not loc changed ");
1175 lastSync = localMod.addDays( 1 ); 1373 lastSync = localMod.addDays( 1 );
1176 if ( remCh ) 1374 if ( remCh )
1177 remoteMod =( lastSync.addDays( 1 ) ); 1375 remoteMod =( lastSync.addDays( 1 ) );
1178 1376
1179 } 1377 }
1180 } 1378 }
1181 full = true; 1379 full = true;
1182 if ( mode < SYNC_PREF_ASK ) 1380 if ( mode < SYNC_PREF_ASK )
1183 mode = SYNC_PREF_ASK; 1381 mode = SYNC_PREF_ASK;
1184 } else { 1382 } else {
1185 if ( localMod == remoteMod ) 1383 if ( localMod == remoteMod )
1186 // if ( local->revision() == remote->revision() ) 1384 // if ( local->revision() == remote->revision() )
1187 return 0; 1385 return 0;
1188 1386
1189 } 1387 }
1190 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 1388 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
1191 1389
1192 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision()); 1390 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision());
1193 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() ); 1391 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() );
1194 //full = true; //debug only 1392 //full = true; //debug only
1195 if ( full ) { 1393 if ( full ) {
1196 bool equ = false; 1394 bool equ = false;
1197 if ( local->typeID() == eventID ) { 1395 if ( local->typeID() == eventID ) {
1198 equ = (*((Event*) local) == *((Event*) remote)); 1396 equ = (*((Event*) local) == *((Event*) remote));
1199 } 1397 }
1200 else if ( local->typeID() == todoID ) 1398 else if ( local->typeID() == todoID )
1201 equ = (*((Todo*) local) == (*(Todo*) remote)); 1399 equ = (*((Todo*) local) == (*(Todo*) remote));
1202 else if ( local->typeID() == journalID ) 1400 else if ( local->typeID() == journalID )
1203 equ = (*((Journal*) local) == *((Journal*) remote)); 1401 equ = (*((Journal*) local) == *((Journal*) remote));
1204 if ( equ ) { 1402 if ( equ ) {
1205 //qDebug("equal "); 1403 //qDebug("equal ");
1206 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1404 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1207 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 1405 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
1208 } 1406 }
1209 if ( mode < SYNC_PREF_FORCE_LOCAL ) 1407 if ( mode < SYNC_PREF_FORCE_LOCAL )
1210 return 0; 1408 return 0;
1211 1409
1212 }//else //debug only 1410 }//else //debug only
1213 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 1411 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
1214 } 1412 }
1215 int result; 1413 int result;
1216 bool localIsNew; 1414 bool localIsNew;
1217 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() ); 1415 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() );
1218 1416
1219 1417
1220 // ************************************************ 1418 // ************************************************
1221 // ************************************************ 1419 // ************************************************
1222 // ************************************************ 1420 // ************************************************
1223 // We may have that lastSync > remoteMod AND lastSync > localMod 1421 // We may have that lastSync > remoteMod AND lastSync > localMod
1224 // BUT remoteMod != localMod 1422 // BUT remoteMod != localMod
1225 1423
1226 1424
1227 if ( full && mode < SYNC_PREF_NEWEST ) 1425 if ( full && mode < SYNC_PREF_NEWEST )
1228 mode = SYNC_PREF_ASK; 1426 mode = SYNC_PREF_ASK;
1229 1427
1230 switch( mode ) { 1428 switch( mode ) {
1231 case SYNC_PREF_LOCAL: 1429 case SYNC_PREF_LOCAL:
1232 if ( lastSync > remoteMod ) 1430 if ( lastSync > remoteMod )
1233 return 1; 1431 return 1;
1234 if ( lastSync > localMod ) 1432 if ( lastSync > localMod )
1235 return 2; 1433 return 2;
1236 return 1; 1434 return 1;
1237 break; 1435 break;
1238 case SYNC_PREF_REMOTE: 1436 case SYNC_PREF_REMOTE:
1239 if ( lastSync > localMod ) 1437 if ( lastSync > localMod )
1240 return 2; 1438 return 2;
1241 if ( lastSync > remoteMod ) 1439 if ( lastSync > remoteMod )
1242 return 1; 1440 return 1;
1243 return 2; 1441 return 2;
1244 break; 1442 break;
1245 case SYNC_PREF_NEWEST: 1443 case SYNC_PREF_NEWEST:
1246 if ( localMod >= remoteMod ) 1444 if ( localMod >= remoteMod )
1247 return 1; 1445 return 1;
1248 else 1446 else
1249 return 2; 1447 return 2;
1250 break; 1448 break;
1251 case SYNC_PREF_ASK: 1449 case SYNC_PREF_ASK:
1252 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1450 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1253 if ( lastSync > remoteMod && lastSync > localMod) 1451 if ( lastSync > remoteMod && lastSync > localMod)
1254 return 0; 1452 return 0;
1255 if ( lastSync > remoteMod ) 1453 if ( lastSync > remoteMod )
1256 return 1; 1454 return 1;
1257 if ( lastSync > localMod ) 1455 if ( lastSync > localMod )
1258 return 2; 1456 return 2;
1259 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1457 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1260 localIsNew = localMod >= remoteMod; 1458 localIsNew = localMod >= remoteMod;
1261 if ( localIsNew ) 1459 if ( localIsNew )
1262 getEventViewerDialog()->setColorMode( 1 ); 1460 getEventViewerDialog()->setColorMode( 1 );
1263 else 1461 else
1264 getEventViewerDialog()->setColorMode( 2 ); 1462 getEventViewerDialog()->setColorMode( 2 );
1265 getEventViewerDialog()->setIncidence(local); 1463 getEventViewerDialog()->setIncidence(local);
1266 if ( localIsNew ) 1464 if ( localIsNew )
1267 getEventViewerDialog()->setColorMode( 2 ); 1465 getEventViewerDialog()->setColorMode( 2 );
1268 else 1466 else
1269 getEventViewerDialog()->setColorMode( 1 ); 1467 getEventViewerDialog()->setColorMode( 1 );
1270 getEventViewerDialog()->addIncidence(remote); 1468 getEventViewerDialog()->addIncidence(remote);
1271 getEventViewerDialog()->setColorMode( 0 ); 1469 getEventViewerDialog()->setColorMode( 0 );
1272 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 1470 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
1273 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 1471 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
1274 getEventViewerDialog()->showMe(); 1472 getEventViewerDialog()->showMe();
1275 result = getEventViewerDialog()->executeS( localIsNew ); 1473 result = getEventViewerDialog()->executeS( localIsNew );
1276 return result; 1474 return result;
1277 1475
1278 break; 1476 break;
1279 case SYNC_PREF_FORCE_LOCAL: 1477 case SYNC_PREF_FORCE_LOCAL:
1280 return 1; 1478 return 1;
1281 break; 1479 break;
1282 case SYNC_PREF_FORCE_REMOTE: 1480 case SYNC_PREF_FORCE_REMOTE:
1283 return 2; 1481 return 2;
1284 break; 1482 break;
1285 1483
1286 default: 1484 default:
1287 // SYNC_PREF_TAKE_BOTH not implemented 1485 // SYNC_PREF_TAKE_BOTH not implemented
1288 break; 1486 break;
1289 } 1487 }
1290 return 0; 1488 return 0;
1291} 1489}
1292Event* CalendarView::getLastSyncEvent() 1490Event* CalendarView::getLastSyncEvent()
1293{ 1491{
1294 Event* lse; 1492 Event* lse;
1295 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 1493 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
1296 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 1494 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
1297 if (!lse) { 1495 if (!lse) {
1298 lse = new Event(); 1496 lse = new Event();
1299 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 1497 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
1300 QString sum = ""; 1498 QString sum = "";
1301 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 1499 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
1302 sum = "E: "; 1500 sum = "E: ";
1303 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 1501 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
1304 lse->setDtStart( mLastCalendarSync ); 1502 lse->setDtStart( mLastCalendarSync );
1305 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1503 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1306 lse->setCategories( i18n("SyncEvent") ); 1504 lse->setCategories( i18n("SyncEvent") );
1307 lse->setReadOnly( true ); 1505 lse->setReadOnly( true );
1308 mCalendar->addEvent( lse ); 1506 mCalendar->addEvent( lse );
1309 } 1507 }
1310 1508
1311 return lse; 1509 return lse;
1312 1510
1313} 1511}
1314 1512
1315// we check, if the to delete event has a id for a profile 1513// we check, if the to delete event has a id for a profile
1316// if yes, we set this id in the profile to delete 1514// if yes, we set this id in the profile to delete
1317void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 1515void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
1318{ 1516{
1319 if ( lastSync.count() == 0 ) { 1517 if ( lastSync.count() == 0 ) {
1320 //qDebug(" lastSync.count() == 0"); 1518 //qDebug(" lastSync.count() == 0");
1321 return; 1519 return;
1322 } 1520 }
1323 if ( toDelete->typeID() == journalID ) 1521 if ( toDelete->typeID() == journalID )
1324 return; 1522 return;
1325 1523
1326 Event* eve = lastSync.first(); 1524 Event* eve = lastSync.first();
1327 1525
1328 while ( eve ) { 1526 while ( eve ) {
1329 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 1527 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
1330 if ( !id.isEmpty() ) { 1528 if ( !id.isEmpty() ) {
1331 QString des = eve->description(); 1529 QString des = eve->description();
1332 QString pref = "e"; 1530 QString pref = "e";
1333 if ( toDelete->typeID() == todoID ) 1531 if ( toDelete->typeID() == todoID )
1334 pref = "t"; 1532 pref = "t";
1335 des += pref+ id + ","; 1533 des += pref+ id + ",";
1336 eve->setReadOnly( false ); 1534 eve->setReadOnly( false );
1337 eve->setDescription( des ); 1535 eve->setDescription( des );
1338 //qDebug("setdes %s ", des.latin1()); 1536 //qDebug("setdes %s ", des.latin1());
1339 eve->setReadOnly( true ); 1537 eve->setReadOnly( true );
1340 } 1538 }
1341 eve = lastSync.next(); 1539 eve = lastSync.next();
1342 } 1540 }
1343 1541
1344} 1542}
1345void CalendarView::checkExternalId( Incidence * inc ) 1543void CalendarView::checkExternalId( Incidence * inc )
1346{ 1544{
1347 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 1545 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
1348 checkExternSyncEvent( lastSync, inc ); 1546 checkExternSyncEvent( lastSync, inc );
1349 1547
1350} 1548}
1351bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 1549bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
1352{ 1550{
1353 bool syncOK = true; 1551 bool syncOK = true;
1354 int addedEvent = 0; 1552 int addedEvent = 0;
1355 int addedEventR = 0; 1553 int addedEventR = 0;
1356 int deletedEventR = 0; 1554 int deletedEventR = 0;
1357 int deletedEventL = 0; 1555 int deletedEventL = 0;
1358 int changedLocal = 0; 1556 int changedLocal = 0;
1359 int changedRemote = 0; 1557 int changedRemote = 0;
1360 int filteredIN = 0; 1558 int filteredIN = 0;
1361 int filteredOUT = 0; 1559 int filteredOUT = 0;
1362 //QPtrList<Event> el = local->rawEvents(); 1560 //QPtrList<Event> el = local->rawEvents();
1363 Event* eventR; 1561 Event* eventR;
1364 QString uid; 1562 QString uid;
1365 int take; 1563 int take;
1366 Event* eventRSync; 1564 Event* eventRSync;
1367 Event* eventLSync; 1565 Event* eventLSync;
1368 clearAllViews(); 1566 clearAllViews();
1369 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 1567 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
1370 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 1568 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
1371 bool fullDateRange = false; 1569 bool fullDateRange = false;
1372 local->resetTempSyncStat(); 1570 local->resetTempSyncStat();
1373 mLastCalendarSync = QDateTime::currentDateTime(); 1571 mLastCalendarSync = QDateTime::currentDateTime();
1374 if ( mSyncManager->syncWithDesktop() ) { 1572 if ( mSyncManager->syncWithDesktop() ) {
1375 remote->resetPilotStat(1); 1573 remote->resetPilotStat(1);
1376 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1574 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1377 mLastCalendarSync = KSyncManager::mRequestedSyncEvent; 1575 mLastCalendarSync = KSyncManager::mRequestedSyncEvent;
1378 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() ); 1576 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() );
1379 } else { 1577 } else {
1380 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime "); 1578 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime ");
1381 } 1579 }
1382 } 1580 }
1383 QDateTime modifiedCalendar = mLastCalendarSync; 1581 QDateTime modifiedCalendar = mLastCalendarSync;
1384 eventLSync = getLastSyncEvent(); 1582 eventLSync = getLastSyncEvent();
1385 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 1583 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
1386 if ( eventR ) { 1584 if ( eventR ) {
1387 qDebug("last-syncEvent on remote found "); 1585 qDebug("last-syncEvent on remote found ");
1388 eventRSync = (Event*) eventR->clone(); 1586 eventRSync = (Event*) eventR->clone();
1389 remote->deleteEvent(eventR ); 1587 remote->deleteEvent(eventR );
1390 1588
1391 } else { 1589 } else {
1392 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) { 1590 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) {
1393 eventRSync = (Event*)eventLSync->clone(); 1591 eventRSync = (Event*)eventLSync->clone();
1394 } else { 1592 } else {
1395 fullDateRange = true; 1593 fullDateRange = true;
1396 eventRSync = new Event(); 1594 eventRSync = new Event();
1397 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 1595 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
1398 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 1596 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
1399 eventRSync->setDtStart( mLastCalendarSync ); 1597 eventRSync->setDtStart( mLastCalendarSync );
1400 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1598 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1401 eventRSync->setCategories( i18n("SyncEvent") ); 1599 eventRSync->setCategories( i18n("SyncEvent") );
1402 } 1600 }
1403 } 1601 }
1404 if ( eventLSync->dtStart() == mLastCalendarSync ) 1602 if ( eventLSync->dtStart() == mLastCalendarSync )
1405 fullDateRange = true; 1603 fullDateRange = true;
1406 1604
1407 if ( ! fullDateRange ) { 1605 if ( ! fullDateRange ) {
1408 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 1606 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
1409 1607
1410 qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 1608 qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
1411 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 1609 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
1412 fullDateRange = true; 1610 fullDateRange = true;
1413 } 1611 }
1414 } 1612 }
1415 if ( mSyncManager->syncWithDesktop() ) { 1613 if ( mSyncManager->syncWithDesktop() ) {
1416 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync ); 1614 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync );
1417 } 1615 }
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index 1debef7..b223315 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -3,665 +3,666 @@
3 Copyright (c) 2000, 2001 3 Copyright (c) 2000, 2001
4 Cornelius Schumacher <schumacher@kde.org> 4 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program 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 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24#ifndef CALENDARVIEW_H 24#ifndef CALENDARVIEW_H
25#define CALENDARVIEW_H 25#define CALENDARVIEW_H
26 26
27#include <qframe.h> 27#include <qframe.h>
28#include <qlayout.h> 28#include <qlayout.h>
29#include <qwidget.h> 29#include <qwidget.h>
30#include <qptrlist.h> 30#include <qptrlist.h>
31#include <qvbox.h> 31#include <qvbox.h>
32#include <qmap.h> 32#include <qmap.h>
33#include <qscrollbar.h> 33#include <qscrollbar.h>
34#ifndef DESKTOP_VERSION 34#ifndef DESKTOP_VERSION
35#include <qtopia/ir.h> 35#include <qtopia/ir.h>
36#else 36#else
37#define Ir char 37#define Ir char
38#endif 38#endif
39#include <libkcal/calendar.h> 39#include <libkcal/calendar.h>
40#include <libkcal/scheduler.h> 40#include <libkcal/scheduler.h>
41#include <libkcal/calendarresources.h> 41#include <libkcal/calendarresources.h>
42#include <libkcal/resourcecalendar.h> 42#include <libkcal/resourcecalendar.h>
43#include <KDGanttMinimizeSplitter.h> 43#include <KDGanttMinimizeSplitter.h>
44 44
45#include <korganizer/calendarviewbase.h> 45#include <korganizer/calendarviewbase.h>
46 46
47#include <ksyncmanager.h> 47#include <ksyncmanager.h>
48//#include <koprefs.h> 48//#include <koprefs.h>
49 49
50class QWidgetStack; 50class QWidgetStack;
51class QSplitter; 51class QSplitter;
52class KopiCalendarFile; 52class KopiCalendarFile;
53class CalPrinter; 53class CalPrinter;
54class KOFilterView; 54class KOFilterView;
55class KOCalEditView; 55class KOCalEditView;
56class KOViewManager; 56class KOViewManager;
57class KODialogManager; 57class KODialogManager;
58class KOTodoView; 58class KOTodoView;
59class KDateNavigator; 59class KDateNavigator;
60class DateNavigatorContainer; 60class DateNavigatorContainer;
61class DateNavigator; 61class DateNavigator;
62class KOIncidenceEditor; 62class KOIncidenceEditor;
63class KDatePicker; 63class KDatePicker;
64class ResourceView; 64class ResourceView;
65class KOEventEditor; 65class KOEventEditor;
66class KOTodoEditor ; 66class KOTodoEditor ;
67class KOEventViewerDialog; 67class KOEventViewerDialog;
68class KOBeamPrefs; 68class KOBeamPrefs;
69class KSyncProfile; 69class KSyncProfile;
70class AlarmDialog; 70class AlarmDialog;
71class KCal::Attendee; 71class KCal::Attendee;
72 72
73namespace KCal { class FileStorage; } 73namespace KCal { class FileStorage; }
74 74
75using namespace KCal; 75using namespace KCal;
76 76
77/** 77/**
78 This is the main calendar widget. It provides the different vies on t he 78 This is the main calendar widget. It provides the different vies on t he
79 calendar data as well as the date navigator. It also handles synchronisation 79 calendar data as well as the date navigator. It also handles synchronisation
80 of the different views and controls the different dialogs like preferences, 80 of the different views and controls the different dialogs like preferences,
81 event editor, search dialog etc. 81 event editor, search dialog etc.
82 82
83 @short main calendar view widget 83 @short main calendar view widget
84 @author Cornelius Schumacher 84 @author Cornelius Schumacher
85*/ 85*/
86 86
87#include <qtextbrowser.h> 87#include <qtextbrowser.h>
88#include <qtextcodec.h> 88#include <qtextcodec.h>
89 89
90class MissedAlarmTextBrowser : public QTextBrowser { 90class MissedAlarmTextBrowser : public QTextBrowser {
91 Q_OBJECT 91 Q_OBJECT
92 public: 92 public:
93 MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms ,QDateTime start); 93 MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms ,QDateTime start);
94 ~MissedAlarmTextBrowser(); 94 ~MissedAlarmTextBrowser();
95 void setSource(const QString & n); 95 void setSource(const QString & n);
96 96
97 private: 97 private:
98 Incidence * getNextInc(QDateTime start ); 98 Incidence * getNextInc(QDateTime start );
99 QPtrList<Incidence> mAlarms; 99 QPtrList<Incidence> mAlarms;
100 signals: 100 signals:
101 void showIncidence( QString uid); 101 void showIncidence( QString uid);
102}; 102};
103 103
104 104
105class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface 105class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface
106{ 106{
107 Q_OBJECT 107 Q_OBJECT
108 public: 108 public:
109 /** 109 /**
110 Constructs a new calendar view widget. 110 Constructs a new calendar view widget.
111 111
112 @param calendar calendar document 112 @param calendar calendar document
113 @param parent parent window 113 @param parent parent window
114 @param name Qt internal widget object name 114 @param name Qt internal widget object name
115 */ 115 */
116 CalendarView( CalendarResources *calendar, QWidget *parent = 0, 116 CalendarView( CalendarResources *calendar, QWidget *parent = 0,
117 const char *name = 0 ); 117 const char *name = 0 );
118 CalendarView( Calendar *calendar, QWidget *parent = 0, 118 CalendarView( Calendar *calendar, QWidget *parent = 0,
119 const char *name = 0 ); 119 const char *name = 0 );
120 virtual ~CalendarView(); 120 virtual ~CalendarView();
121 121
122 Calendar *calendar() { return mCalendar; } 122 Calendar *calendar() { return mCalendar; }
123 123
124 KOViewManager *viewManager(); 124 KOViewManager *viewManager();
125 KODialogManager *dialogManager(); 125 KODialogManager *dialogManager();
126 126
127 QDate startDate(); 127 QDate startDate();
128 QDate endDate(); 128 QDate endDate();
129 129
130 QWidgetStack *viewStack(); 130 QWidgetStack *viewStack();
131 QWidget *leftFrame(); 131 QWidget *leftFrame();
132 132
133 DateNavigator *dateNavigator(); 133 DateNavigator *dateNavigator();
134 KDateNavigator *dateNavigatorWidget(); 134 KDateNavigator *dateNavigatorWidget();
135 135
136 void addView(KOrg::BaseView *); 136 void addView(KOrg::BaseView *);
137 void showView(KOrg::BaseView *); 137 void showView(KOrg::BaseView *);
138 KOEventViewerDialog* getEventViewerDialog(); 138 KOEventViewerDialog* getEventViewerDialog();
139 Incidence *currentSelection(); 139 Incidence *currentSelection();
140 void checkSuspendAlarm(); 140 void checkSuspendAlarm();
141 void mergeFile( QString fn ); 141 void mergeFile( QString fn );
142 142
143 signals: 143 signals:
144 void save (); 144 void save ();
145 void saveStopTimer (); 145 void saveStopTimer ();
146 void tempDisableBR(bool); 146 void tempDisableBR(bool);
147 /** This todo has been modified */ 147 /** This todo has been modified */
148 void todoModified(Todo *, int); 148 void todoModified(Todo *, int);
149 149
150 /** when change is made to options dialog, the topwidget will catch this 150 /** when change is made to options dialog, the topwidget will catch this
151 * and emit this signal which notifies all widgets which have registered 151 * and emit this signal which notifies all widgets which have registered
152 * for notification to update their settings. */ 152 * for notification to update their settings. */
153 void configChanged(); 153 void configChanged();
154 /** emitted when the topwidget is closing down, so that any attached 154 /** emitted when the topwidget is closing down, so that any attached
155 child windows can also close. */ 155 child windows can also close. */
156 void closingDown(); 156 void closingDown();
157 /** emitted right before we die */ 157 /** emitted right before we die */
158 void closed(QWidget *); 158 void closed(QWidget *);
159 159
160 /** Emitted when state of modified flag changes */ 160 /** Emitted when state of modified flag changes */
161 void modifiedChanged(bool); 161 void modifiedChanged(bool);
162 void signalmodified(); 162 void signalmodified();
163 163
164 /** Emitted when state of read-only flag changes */ 164 /** Emitted when state of read-only flag changes */
165 void readOnlyChanged(bool); 165 void readOnlyChanged(bool);
166 166
167 /** Emitted when the unit of navigation changes */ 167 /** Emitted when the unit of navigation changes */
168 void changeNavStringPrev(const QString &); 168 void changeNavStringPrev(const QString &);
169 void changeNavStringNext(const QString &); 169 void changeNavStringNext(const QString &);
170 170
171 /** Emitted when state of events selection has changed and user is organizer*/ 171 /** Emitted when state of events selection has changed and user is organizer*/
172 void organizerEventsSelected(bool); 172 void organizerEventsSelected(bool);
173 /** Emitted when state of events selection has changed and user is attendee*/ 173 /** Emitted when state of events selection has changed and user is attendee*/
174 void groupEventsSelected(bool); 174 void groupEventsSelected(bool);
175 /** 175 /**
176 Emitted when an incidence gets selected. If the selection is cleared the 176 Emitted when an incidence gets selected. If the selection is cleared the
177 signal is emitted with 0 as argument. 177 signal is emitted with 0 as argument.
178 */ 178 */
179 void incidenceSelected( Incidence * ); 179 void incidenceSelected( Incidence * );
180 /** Emitted, when a todoitem is selected or deselected. */ 180 /** Emitted, when a todoitem is selected or deselected. */
181 void todoSelected( bool ); 181 void todoSelected( bool );
182 182
183 /** 183 /**
184 Emitted, when clipboard content changes. Parameter indicates if paste 184 Emitted, when clipboard content changes. Parameter indicates if paste
185 is possible or not. 185 is possible or not.
186 */ 186 */
187 void pasteEnabled(bool); 187 void pasteEnabled(bool);
188 188
189 /** Emitted, when the number of incoming messages has changed. */ 189 /** Emitted, when the number of incoming messages has changed. */
190 void numIncomingChanged(int); 190 void numIncomingChanged(int);
191 191
192 /** Emitted, when the number of outgoing messages has changed. */ 192 /** Emitted, when the number of outgoing messages has changed. */
193 void numOutgoingChanged(int); 193 void numOutgoingChanged(int);
194 194
195 /** Send status message, which can e.g. be displayed in the status bar. */ 195 /** Send status message, which can e.g. be displayed in the status bar. */
196 void statusMessage(const QString &); 196 void statusMessage(const QString &);
197 197
198 void calendarViewExpanded( bool ); 198 void calendarViewExpanded( bool );
199 void updateSearchDialog(); 199 void updateSearchDialog();
200 void filtersUpdated(); 200 void filtersUpdated();
201 201
202 202
203 public slots: 203 public slots:
204 void nextConflict( bool all, bool allday ); 204 void nextConflict( bool all, bool allday );
205 void conflictAll(); 205 void conflictAll();
206 void conflictAllday(); 206 void conflictAllday();
207 void conflictNotAll(); 207 void conflictNotAll();
208 void setCalReadOnly( int id, bool readO ); 208 void setCalReadOnly( int id, bool readO );
209 void checkAlarms(); 209 void checkAlarms();
210 void checkFiles(); 210 void checkFiles();
211 void slotprintSelInc(); 211 void slotprintSelInc();
212 void showNextAlarms(); 212 void showNextAlarms();
213 void showOpenError(); 213 void showOpenError();
214 void watchSavedFile(); 214 void watchSavedFile();
215 void recheckTimerAlarm(); 215 void recheckTimerAlarm();
216 void checkNextTimerAlarm(); 216 void checkNextTimerAlarm();
217 void addAlarm(const QDateTime &qdt, const QString &noti ); 217 void addAlarm(const QDateTime &qdt, const QString &noti );
218 void addSuspendAlarm(const QDateTime &qdt, const QString &noti ); 218 void addSuspendAlarm(const QDateTime &qdt, const QString &noti );
219 void removeAlarm(const QDateTime &qdt, const QString &noti ); 219 void removeAlarm(const QDateTime &qdt, const QString &noti );
220 220
221 /** options dialog made a changed to the configuration. we catch this 221 /** options dialog made a changed to the configuration. we catch this
222 * and notify all widgets which need to update their configuration. */ 222 * and notify all widgets which need to update their configuration. */
223 void updateConfig(); 223 void updateConfig();
224 224
225 void insertBirthdays(const QString& uid, const QStringList& birthdayList, 225 void insertBirthdays(const QString& uid, const QStringList& birthdayList,
226 const QStringList& anniversaryList, const QStringList& realNameList, 226 const QStringList& anniversaryList, const QStringList& realNameList,
227 const QStringList& emailList, const QStringList& assembledNameList, 227 const QStringList& emailList, const QStringList& assembledNameList,
228 const QStringList& uidList); 228 const QStringList& uidList);
229 229
230 /** 230 /**
231 Load calendar from file \a filename. If \a merge is true, load 231 Load calendar from file \a filename. If \a merge is true, load
232 calendar into existing one, if it is false, clear calendar, before 232 calendar into existing one, if it is false, clear calendar, before
233 loading. Return true, if calendar could be successfully loaded. 233 loading. Return true, if calendar could be successfully loaded.
234 */ 234 */
235 bool openCalendar(QString filename, bool merge=false); 235 bool openCalendar(QString filename, bool merge=false);
236 bool loadCalendars(); 236 bool loadCalendars();
237 bool saveCalendars(); 237 bool saveCalendars();
238 bool restoreCalendarSettings(); 238 bool restoreCalendarSettings();
239 bool addCalendar( KopiCalendarFile * ); 239 bool addCalendar( KopiCalendarFile * );
240 void addCalendarId( int id ); 240 void addCalendarId( int id );
241 bool syncCalendar(QString filename,int mode = 0 ); 241 bool syncCalendar(QString filename,int mode = 0 );
242 242
243 /** 243 /**
244 Save calendar data to file. Return true if calendar could be 244 Save calendar data to file. Return true if calendar could be
245 successfully saved. 245 successfully saved.
246 */ 246 */
247 bool saveCalendar(QString filename); 247 bool saveCalendar(QString filename);
248 248
249 /** 249 /**
250 Close calendar. Clear calendar data and reset views to display an empty 250 Close calendar. Clear calendar data and reset views to display an empty
251 calendar. 251 calendar.
252 */ 252 */
253 void closeCalendar(); 253 void closeCalendar();
254 254
255 /** Archive old events of calendar */ 255 /** Archive old events of calendar */
256 void archiveCalendar(); 256 void archiveCalendar();
257 257
258 void showIncidence(); 258 void showIncidence();
259 void editIncidence(); 259 void editIncidence();
260 void editIncidenceDescription(); 260 void editIncidenceDescription();
261 void deleteIncidence(); 261 void deleteIncidence();
262 void cloneIncidence(); 262 void cloneIncidence();
263 void moveIncidence(); 263 void moveIncidence();
264 void beamIncidence(); 264 void beamIncidence();
265 void toggleCancelIncidence(); 265 void toggleCancelIncidence();
266 266
267 /** create an editeventwin with supplied date/time, and if bool is true, 267 /** create an editeventwin with supplied date/time, and if bool is true,
268 * make the event take all day. */ 268 * make the event take all day. */
269 void newEvent(QDateTime, QDateTime, bool allDay ); 269 void newEvent(QDateTime, QDateTime, bool allDay );
270 void newEvent(QDateTime, QDateTime); 270 void newEvent(QDateTime, QDateTime);
271 void newEvent(QDateTime fh); 271 void newEvent(QDateTime fh);
272 void newEvent(QDate dt); 272 void newEvent(QDate dt);
273 /** create new event without having a date hint. Takes current date as 273 /** create new event without having a date hint. Takes current date as
274 default hint. */ 274 default hint. */
275 void newEvent(); 275 void newEvent();
276 void newFloatingEvent(); 276 void newFloatingEvent();
277 277
278 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/ 278 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/
279 void showIncidence(Incidence *); 279 void showIncidence(Incidence *);
280 void showIncidence(QString uid); 280 void showIncidence(QString uid);
281 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/ 281 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/
282 void editIncidence(Incidence *); 282 void editIncidence(Incidence *);
283 /** Delete the supplied incidence. It calls the correct deleteXXX method*/ 283 /** Delete the supplied incidence. It calls the correct deleteXXX method*/
284 void deleteIncidence(Incidence *); 284 void deleteIncidence(Incidence *);
285 void cloneIncidence(Incidence *); 285 void cloneIncidence(Incidence *);
286 void cancelIncidence(Incidence *); 286 void cancelIncidence(Incidence *);
287 /** Create an editor for the supplied event. */ 287 /** Create an editor for the supplied event. */
288 void editEvent(Event *); 288 void editEvent(Event *);
289 /** Delete the supplied event. */ 289 /** Delete the supplied event. */
290 void deleteEvent(Event *); 290 void deleteEvent(Event *);
291 /** Delete the event with the given unique ID. Returns false, if event wasn't 291 /** Delete the event with the given unique ID. Returns false, if event wasn't
292 found. */ 292 found. */
293 bool deleteEvent(const QString &uid); 293 bool deleteEvent(const QString &uid);
294 /** Create a read-only viewer dialog for the supplied event. */ 294 /** Create a read-only viewer dialog for the supplied event. */
295 void showEvent(Event *); 295 void showEvent(Event *);
296 296
297 void editJournal(Journal *); 297 void editJournal(Journal *);
298 void showJournal(Journal *); 298 void showJournal(Journal *);
299 void deleteJournal(Journal *); 299 void deleteJournal(Journal *);
300 /** Create an editor dialog for a todo */ 300 /** Create an editor dialog for a todo */
301 void editTodo(Todo *); 301 void editTodo(Todo *);
302 /** Create a read-only viewer dialog for the supplied todo */ 302 /** Create a read-only viewer dialog for the supplied todo */
303 void showTodo(Todo *); 303 void showTodo(Todo *);
304 /** create new todo */ 304 /** create new todo */
305 void newTodo(); 305 void newTodo();
306 void newTodoDateTime(QDateTime, bool allday); 306 void newTodoDateTime(QDateTime, bool allday);
307 /** create new todo with a parent todo */ 307 /** create new todo with a parent todo */
308 void newSubTodo(); 308 void newSubTodo();
309 /** create new todo with a parent todo */ 309 /** create new todo with a parent todo */
310 void newSubTodo(Todo *); 310 void newSubTodo(Todo *);
311 /** Delete todo */ 311 /** Delete todo */
312 void deleteTodo(Todo *); 312 void deleteTodo(Todo *);
313 313
314 314
315 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is 315 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is
316 * emitted as result. */ 316 * emitted as result. */
317 void checkClipboard(); 317 void checkClipboard();
318 318
319 /** using the KConfig associated with the kapp variable, read in the 319 /** using the KConfig associated with the kapp variable, read in the
320 * settings from the config file. 320 * settings from the config file.
321 */ 321 */
322 void readSettings(); 322 void readSettings();
323 323
324 /** write current state to config file. */ 324 /** write current state to config file. */
325 void writeSettings(); 325 void writeSettings();
326 326
327 /** read settings for calendar filters */ 327 /** read settings for calendar filters */
328 void readFilterSettings(KConfig *config); 328 void readFilterSettings(KConfig *config);
329 329
330 /** write settings for calendar filters */ 330 /** write settings for calendar filters */
331 void writeFilterSettings(KConfig *config); 331 void writeFilterSettings(KConfig *config);
332 332
333 /** passes on the message that an event has changed to the currently 333 /** passes on the message that an event has changed to the currently
334 * activated view so that it can make appropriate display changes. */ 334 * activated view so that it can make appropriate display changes. */
335 void changeEventDisplay(Event *, int); 335 void changeEventDisplay(Event *, int);
336 void changeIncidenceDisplay(Incidence *, int); 336 void changeIncidenceDisplay(Incidence *, int);
337 void changeTodoDisplay(Todo *, int); 337 void changeTodoDisplay(Todo *, int);
338 338
339 void eventAdded(Event *); 339 void eventAdded(Event *);
340 void eventChanged(Event *); 340 void eventChanged(Event *);
341 void eventToBeDeleted(Event *); 341 void eventToBeDeleted(Event *);
342 void eventDeleted(); 342 void eventDeleted();
343 343
344 void todoAdded(Todo *); 344 void todoAdded(Todo *);
345 void todoChanged(Todo *); 345 void todoChanged(Todo *);
346 void todoToBeDeleted(Todo *); 346 void todoToBeDeleted(Todo *);
347 void todoDeleted(); 347 void todoDeleted();
348 348
349 void updateView(const QDate &start, const QDate &end); 349 void updateView(const QDate &start, const QDate &end);
350 void updateView(); 350 void updateView();
351 void clearAllViews(); 351 void clearAllViews();
352 352
353 /** Full update of visible todo views */ 353 /** Full update of visible todo views */
354 void updateTodoViews(); 354 void updateTodoViews();
355 355
356 void updateUnmanagedViews(); 356 void updateUnmanagedViews();
357 357
358 /** cut the current appointment to the clipboard */ 358 /** cut the current appointment to the clipboard */
359 void edit_cut(); 359 void edit_cut();
360 360
361 /** copy the current appointment(s) to the clipboard */ 361 /** copy the current appointment(s) to the clipboard */
362 void edit_copy(); 362 void edit_copy();
363 363
364 /** paste the current vobject(s) in the clipboard buffer into calendar */ 364 /** paste the current vobject(s) in the clipboard buffer into calendar */
365 void edit_paste(); 365 void edit_paste();
366 366
367 /** edit viewing and configuration options. */ 367 /** edit viewing and configuration options. */
368 void edit_options(); 368 void edit_options();
369 void edit_global_options(); 369 void edit_global_options();
370 /** 370 /**
371 Functions for printing, previewing a print, and setting up printing 371 Functions for printing, previewing a print, and setting up printing
372 parameters. 372 parameters.
373 */ 373 */
374 void print(); 374 void print();
375 void printSetup(); 375 void printSetup();
376 void printPreview(); 376 void printPreview();
377 377
378 /** Export as iCalendar file */ 378 /** Export as iCalendar file */
379 void exportICalendar(); 379 void exportICalendar();
380 380
381 /** Export as vCalendar file */ 381 /** Export as vCalendar file */
382 bool exportVCalendar( QString fn); 382 bool exportVCalendar( QString fn);
383 383
384 /** pop up a dialog to show an existing appointment. */ 384 /** pop up a dialog to show an existing appointment. */
385 void appointment_show(); 385 void appointment_show();
386 /** 386 /**
387 * pop up an Appointment Dialog to edit an existing appointment.Get 387 * pop up an Appointment Dialog to edit an existing appointment.Get
388 * information on the appointment from the list of unique IDs that is 388 * information on the appointment from the list of unique IDs that is
389 * currently in the View, called currIds. 389 * currently in the View, called currIds.
390 */ 390 */
391 void appointment_edit(); 391 void appointment_edit();
392 /** 392 /**
393 * pop up dialog confirming deletion of currently selected event in the 393 * pop up dialog confirming deletion of currently selected event in the
394 * View. 394 * View.
395 */ 395 */
396 void appointment_delete(); 396 void appointment_delete();
397 397
398 /** mails the currently selected event to a particular user as a vCalendar 398 /** mails the currently selected event to a particular user as a vCalendar
399 attachment. */ 399 attachment. */
400 void action_mail(); 400 void action_mail();
401 401
402 /* frees a subtodo from it's relation */ 402 /* frees a subtodo from it's relation */
403 void todo_unsub( Todo * ); 403 void todo_unsub( Todo * );
404 void todo_resub( Todo * parent, Todo * sub ); 404 void todo_resub( Todo * parent, Todo * sub );
405 405
406 /** Take ownership of selected event. */ 406 /** Take ownership of selected event. */
407 void takeOverEvent(); 407 void takeOverEvent();
408 408
409 /** Take ownership of all events in calendar. */ 409 /** Take ownership of all events in calendar. */
410 void takeOverCalendar(); 410 void takeOverCalendar();
411 411
412 /** query whether or not the calendar is "dirty". */ 412 /** query whether or not the calendar is "dirty". */
413 bool isModified(); 413 bool isModified();
414 /** set the state of calendar. Modified means "dirty", i.e. needing a save. */ 414 /** set the state of calendar. Modified means "dirty", i.e. needing a save. */
415 void setModified(bool modified=true); 415 void setModified(bool modified=true);
416 416
417 /** query if the calendar is read-only. */ 417 /** query if the calendar is read-only. */
418 bool isReadOnly(); 418 bool isReadOnly();
419 /** set state of calendar to read-only */ 419 /** set state of calendar to read-only */
420 void setReadOnly(bool readOnly=true); 420 void setReadOnly(bool readOnly=true);
421 421
422 void eventUpdated(Incidence *); 422 void eventUpdated(Incidence *);
423 423
424 /* iTIP scheduling actions */ 424 /* iTIP scheduling actions */
425 void schedule_publish(Incidence *incidence = 0); 425 void schedule_publish(Incidence *incidence = 0);
426 void schedule_request(Incidence *incidence = 0); 426 void schedule_request(Incidence *incidence = 0);
427 void schedule_refresh(Incidence *incidence = 0); 427 void schedule_refresh(Incidence *incidence = 0);
428 void schedule_cancel(Incidence *incidence = 0); 428 void schedule_cancel(Incidence *incidence = 0);
429 void schedule_add(Incidence *incidence = 0); 429 void schedule_add(Incidence *incidence = 0);
430 void schedule_reply(Incidence *incidence = 0); 430 void schedule_reply(Incidence *incidence = 0);
431 void schedule_counter(Incidence *incidence = 0); 431 void schedule_counter(Incidence *incidence = 0);
432 void schedule_declinecounter(Incidence *incidence = 0); 432 void schedule_declinecounter(Incidence *incidence = 0);
433 void schedule_publish_freebusy(int daysToPublish = 30); 433 void schedule_publish_freebusy(int daysToPublish = 30);
434 434
435 void openAddressbook(); 435 void openAddressbook();
436 436
437 void editFilters(); 437 void editFilters();
438 void toggleFilerEnabled(); 438 void toggleFilerEnabled();
439 QPtrList<CalFilter> filters(); 439 QPtrList<CalFilter> filters();
440 void toggleFilter(); 440 void toggleFilter();
441 void showFilter(bool visible); 441 void showFilter(bool visible);
442 void updateFilter(); 442 void updateFilter();
443 void filterEdited(); 443 void filterEdited();
444 void selectFilter( int ); 444 void selectFilter( int );
445 KOFilterView *filterView(); 445 KOFilterView *filterView();
446 446
447 void showIntro(); 447 void showIntro();
448 448
449 /** Move the curdatepient view date to today */ 449 /** Move the curdatepient view date to today */
450 void goToday(); 450 void goToday();
451 451
452 /** Move to the next date(s) in the current view */ 452 /** Move to the next date(s) in the current view */
453 void goNext(); 453 void goNext();
454 454
455 /** Move to the previous date(s) in the current view */ 455 /** Move to the previous date(s) in the current view */
456 void goPrevious(); 456 void goPrevious();
457 /** Move to the next date(s) in the current view */ 457 /** Move to the next date(s) in the current view */
458 void goNextMonth(); 458 void goNextMonth();
459 459
460 /** Move to the previous date(s) in the current view */ 460 /** Move to the previous date(s) in the current view */
461 void goPreviousMonth(); 461 void goPreviousMonth();
462 462
463 void toggleExpand(); 463 void toggleExpand();
464 void toggleDateNavigatorWidget(); 464 void toggleDateNavigatorWidget();
465 void toggleAllDaySize(); 465 void toggleAllDaySize();
466 466
467 /** Look for new messages in the inbox */ 467 /** Look for new messages in the inbox */
468 void lookForIncomingMessages(); 468 void lookForIncomingMessages();
469 /** Look for new messages in the outbox */ 469 /** Look for new messages in the outbox */
470 void lookForOutgoingMessages(); 470 void lookForOutgoingMessages();
471 471
472 void processMainViewSelection( Incidence * ); 472 void processMainViewSelection( Incidence * );
473 void processTodoListSelection( Incidence * ); 473 void processTodoListSelection( Incidence * );
474 474
475 void processIncidenceSelection( Incidence * ); 475 void processIncidenceSelection( Incidence * );
476 476
477 void purgeCompleted(); 477 void purgeCompleted();
478 bool removeCompletedSubTodos( Todo* ); 478 bool removeCompletedSubTodos( Todo* );
479 void slotCalendarChanged(); 479 void slotCalendarChanged();
480 bool importBday(); 480 bool importBday();
481 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday ); 481 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday );
482 bool importQtopia( const QString &categoriesFile, 482 bool importQtopia( const QString &categoriesFile,
483 const QString &datebookFile, 483 const QString &datebookFile,
484 const QString &tasklistFile ); 484 const QString &tasklistFile );
485 void syncExternal( int mode ); 485 void syncExternal( int mode );
486 void slotSelectPickerDate( QDate ) ; 486 void slotSelectPickerDate( QDate ) ;
487 void showDatePicker() ; 487 void showDatePicker() ;
488 void showDatePickerPopup() ; 488 void showDatePickerPopup() ;
489 void moveIncidence(Incidence *) ; 489 void moveIncidence(Incidence *) ;
490 void beamIncidence(Incidence *) ; 490 void beamIncidence(Incidence *) ;
491 void beamCalendar() ; 491 void beamCalendar() ;
492 void beamFilteredCalendar() ; 492 void beamFilteredCalendar() ;
493 void beamIncidenceList(QPtrList<Incidence>) ; 493 void beamIncidenceList(QPtrList<Incidence>) ;
494 void manageCategories(); 494 void manageCategories();
495 void editCategories(); 495 void editCategories();
496 int addCategories(); 496 int addCategories();
497 void removeCategories(); 497 void removeCategories();
498 void setSyncDevice( QString ); 498 void setSyncDevice( QString );
499 void setSyncName( QString ); 499 void setSyncName( QString );
500 void showDay( QDate ); 500 void showDay( QDate );
501 void undo_delete(); 501 void undo_delete();
502 protected slots: 502 protected slots:
503 void resetFocus(); 503 void resetFocus();
504 void scrollBarValue(int); 504 void scrollBarValue(int);
505 void slotViewerClosed(); 505 void slotViewerClosed();
506 void timerAlarm(); 506 void timerAlarm();
507 void suspendAlarm(); 507 void suspendAlarm();
508 void beamDone( Ir *ir ); 508 void beamDone( Ir *ir );
509 /** Select a view or adapt the current view to display the specified dates. */ 509 /** Select a view or adapt the current view to display the specified dates. */
510 void showDates( const KCal::DateList & ); 510 void showDates( const KCal::DateList & );
511 void selectWeekNum ( int ); 511 void selectWeekNum ( int );
512 void checkConflictForEvent(); 512 void checkConflictForEvent();
513 513
514 public: 514 public:
515 void createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval );
515 // show a standard warning 516 // show a standard warning
516 // returns KMsgBox::yesNoCancel() 517 // returns KMsgBox::yesNoCancel()
517 int msgCalModified(); 518 int msgCalModified();
518 virtual bool sync(KSyncManager* manager, QString filename, int mode); 519 virtual bool sync(KSyncManager* manager, QString filename, int mode);
519 520
520 virtual bool syncExternal(KSyncManager* manager, QString resource); 521 virtual bool syncExternal(KSyncManager* manager, QString resource);
521 virtual void removeSyncInfo( QString syncProfile); 522 virtual void removeSyncInfo( QString syncProfile);
522 void setSyncManager(KSyncManager* manager); 523 void setSyncManager(KSyncManager* manager);
523 void setLoadedFileVersion(QDateTime); 524 void setLoadedFileVersion(QDateTime);
524 bool checkFileVersion(QString fn); 525 bool checkFileVersion(QString fn);
525 bool checkAllFileVersions(); 526 bool checkAllFileVersions();
526 bool checkFileChanged(QString fn); 527 bool checkFileChanged(QString fn);
527 Event* getLastSyncEvent(); 528 Event* getLastSyncEvent();
528 /** Adapt navigation units correpsonding to step size of navigation of the 529 /** Adapt navigation units correpsonding to step size of navigation of the
529 * current view. 530 * current view.
530 */ 531 */
531 void adaptNavigationUnits(); 532 void adaptNavigationUnits();
532 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode ); 533 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode );
533 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false ); 534 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false );
534 //Attendee* getYourAttendee(Event *event); 535 //Attendee* getYourAttendee(Event *event);
535 void setBlockShowDates( bool b ) { mBlockShowDates = b ;} 536 void setBlockShowDates( bool b ) { mBlockShowDates = b ;}
536 void setScrollBarStep(int val ); 537 void setScrollBarStep(int val );
537 538
538 protected: 539 protected:
539 Event *mConflictingEvent; 540 Event *mConflictingEvent;
540 void schedule(Scheduler::Method, Incidence *incidence = 0); 541 void schedule(Scheduler::Method, Incidence *incidence = 0);
541 542
542 // returns KMsgBox::OKCandel() 543 // returns KMsgBox::OKCandel()
543 int msgItemDelete(const QString name); 544 int msgItemDelete(const QString name);
544 void showEventEditor(); 545 void showEventEditor();
545 void showTodoEditor(); 546 void showTodoEditor();
546 Todo *selectedTodo(); 547 Todo *selectedTodo();
547 private: 548 private:
548#ifdef DESKTOP_VERSION 549#ifdef DESKTOP_VERSION
549 QScrollBar * mDateScrollBar; 550 QScrollBar * mDateScrollBar;
550#endif 551#endif
551 QDateTime mNextAlarmDateTime; 552 QDateTime mNextAlarmDateTime;
552 bool mViewerCallerIsSearchDialog; 553 bool mViewerCallerIsSearchDialog;
553 bool mBlockShowDates; 554 bool mBlockShowDates;
554 KSyncManager* mSyncManager; 555 KSyncManager* mSyncManager;
555 AlarmDialog * mAlarmDialog; 556 AlarmDialog * mAlarmDialog;
556 QString mAlarmNotification; 557 QString mAlarmNotification;
557 QString mSuspendAlarmNotification; 558 QString mSuspendAlarmNotification;
558 QTimer* mSuspendTimer; 559 QTimer* mSuspendTimer;
559 QTimer* mAlarmTimer; 560 QTimer* mAlarmTimer;
560 QTimer* mRecheckAlarmTimer; 561 QTimer* mRecheckAlarmTimer;
561 void computeAlarm( QString ); 562 void computeAlarm( QString );
562 void startAlarm( QString, QString ); 563 void startAlarm( QString, QString );
563 void setSyncEventsReadOnly(); 564 void setSyncEventsReadOnly();
564 565
565 QDateTime loadedFileVersion; 566 QDateTime loadedFileVersion;
566 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ); 567 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete );
567 void checkExternalId( Incidence * inc ); 568 void checkExternalId( Incidence * inc );
568 int mGlobalSyncMode; 569 int mGlobalSyncMode;
569 QString mCurrentSyncDevice; 570 QString mCurrentSyncDevice;
570 QString mCurrentSyncName; 571 QString mCurrentSyncName;
571 void init(); 572 void init();
572 int mDatePickerMode; 573 int mDatePickerMode;
573 bool mFlagEditDescription; 574 bool mFlagEditDescription;
574 QDateTime mLastCalendarSync; 575 QDateTime mLastCalendarSync;
575 void createPrinter(); 576 void createPrinter();
576 577
577 void calendarModified( bool, Calendar * ); 578 void calendarModified( bool, Calendar * );
578 579
579 CalPrinter *mCalPrinter; 580 CalPrinter *mCalPrinter;
580 581
581 QSplitter *mPanner; 582 QSplitter *mPanner;
582 QSplitter *mLeftSplitter; 583 QSplitter *mLeftSplitter;
583 KDGanttMinimizeSplitter *mLeftFrame, *mMainFrame; 584 KDGanttMinimizeSplitter *mLeftFrame, *mMainFrame;
584 QWidgetStack *mRightFrame; 585 QWidgetStack *mRightFrame;
585 586
586 KDatePicker* mDatePicker; 587 KDatePicker* mDatePicker;
587 QVBox* mDateFrame; 588 QVBox* mDateFrame;
588 589
589 DateNavigatorContainer *mDateNavigator; // widget showing small month view. 590 DateNavigatorContainer *mDateNavigator; // widget showing small month view.
590 591
591 KOFilterView *mFilterView; 592 KOFilterView *mFilterView;
592 KOCalEditView *mCalEditView; 593 KOCalEditView *mCalEditView;
593 594
594 ResourceView *mResourceView; 595 ResourceView *mResourceView;
595 596
596 // calendar object for this viewing instance 597 // calendar object for this viewing instance
597 Calendar *mCalendar; 598 Calendar *mCalendar;
598 599
599 CalendarResourceManager *mResourceManager; 600 CalendarResourceManager *mResourceManager;
600 601
601 FileStorage *mStorage; 602 FileStorage *mStorage;
602 603
603 DateNavigator *mNavigator; 604 DateNavigator *mNavigator;
604 605
605 KOViewManager *mViewManager; 606 KOViewManager *mViewManager;
606 KODialogManager *mDialogManager; 607 KODialogManager *mDialogManager;
607 608
608 // Calendar filters 609 // Calendar filters
609 QPtrList<CalFilter> mFilters; 610 QPtrList<CalFilter> mFilters;
610 611
611 // various housekeeping variables. 612 // various housekeeping variables.
612 bool mModified; // flag indicating if calendar is modified 613 bool mModified; // flag indicating if calendar is modified
613 bool mReadOnly; // flag indicating if calendar is read-only 614 bool mReadOnly; // flag indicating if calendar is read-only
614 QDate mSaveSingleDate; 615 QDate mSaveSingleDate;
615 616
616 Incidence *mSelectedIncidence; 617 Incidence *mSelectedIncidence;
617 Incidence *mMoveIncidence; 618 Incidence *mMoveIncidence;
618 QDate mMoveIncidenceOldDate; 619 QDate mMoveIncidenceOldDate;
619 KOTodoView *mTodoList; 620 KOTodoView *mTodoList;
620 KOEventEditor * mEventEditor; 621 KOEventEditor * mEventEditor;
621 KOTodoEditor * mTodoEditor; 622 KOTodoEditor * mTodoEditor;
622 KOEventViewerDialog * mEventViewerDialog; 623 KOEventViewerDialog * mEventViewerDialog;
623 void keyPressEvent ( QKeyEvent *e) ; 624 void keyPressEvent ( QKeyEvent *e) ;
624 //QMap<Incidence*,KOIncidenceEditor*> mDialogList; 625 //QMap<Incidence*,KOIncidenceEditor*> mDialogList;
625}; 626};
626 627
627 628
628class CalendarViewVisitor : public Incidence::Visitor 629class CalendarViewVisitor : public Incidence::Visitor
629{ 630{
630 public: 631 public:
631 CalendarViewVisitor() : mView( 0 ) {} 632 CalendarViewVisitor() : mView( 0 ) {}
632 633
633 bool act( Incidence *incidence, CalendarView *view ) 634 bool act( Incidence *incidence, CalendarView *view )
634 { 635 {
635 mView = view; 636 mView = view;
636 return incidence->accept( *this ); 637 return incidence->accept( *this );
637 } 638 }
638 639
639 protected: 640 protected:
640 CalendarView *mView; 641 CalendarView *mView;
641}; 642};
642 643
643class ShowIncidenceVisitor : public CalendarViewVisitor 644class ShowIncidenceVisitor : public CalendarViewVisitor
644{ 645{
645 protected: 646 protected:
646 bool visit( Event *event ) { mView->showEvent( event ); return true; } 647 bool visit( Event *event ) { mView->showEvent( event ); return true; }
647 bool visit( Todo *todo ) { mView->showTodo( todo ); return true; } 648 bool visit( Todo *todo ) { mView->showTodo( todo ); return true; }
648 bool visit( Journal * j ) { mView->showJournal( j );return true; } 649 bool visit( Journal * j ) { mView->showJournal( j );return true; }
649}; 650};
650 651
651class EditIncidenceVisitor : public CalendarViewVisitor 652class EditIncidenceVisitor : public CalendarViewVisitor
652{ 653{
653 protected: 654 protected:
654 bool visit( Event *event ) { mView->editEvent( event ); return true; } 655 bool visit( Event *event ) { mView->editEvent( event ); return true; }
655 bool visit( Todo *todo ) { mView->editTodo( todo ); return true; } 656 bool visit( Todo *todo ) { mView->editTodo( todo ); return true; }
656 bool visit( Journal *j ) { mView->editJournal( j); return true; } 657 bool visit( Journal *j ) { mView->editJournal( j); return true; }
657}; 658};
658 659
659class DeleteIncidenceVisitor : public CalendarViewVisitor 660class DeleteIncidenceVisitor : public CalendarViewVisitor
660{ 661{
661 protected: 662 protected:
662 bool visit( Event *event ) { mView->deleteEvent( event ); return true; } 663 bool visit( Event *event ) { mView->deleteEvent( event ); return true; }
663 bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; } 664 bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; }
664 bool visit( Journal * j) {mView->deleteJournal( j ); return true; } 665 bool visit( Journal * j) {mView->deleteJournal( j ); return true; }
665}; 666};
666 667
667#endif 668#endif