summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/kolistview.cpp102
1 files changed, 50 insertions, 52 deletions
diff --git a/korganizer/kolistview.cpp b/korganizer/kolistview.cpp
index 4c815d8..1b4397f 100644
--- a/korganizer/kolistview.cpp
+++ b/korganizer/kolistview.cpp
@@ -426,153 +426,139 @@ void KOListView::setCalendar( int c )
426 mCalendar->setDefaultCalendar( cal->mCalNumber ); 426 mCalendar->setDefaultCalendar( cal->mCalNumber );
427 cal = calendars.next(); 427 cal = calendars.next();
428 } 428 }
429 mCalendar->setSyncEventsReadOnly(); 429 mCalendar->setSyncEventsReadOnly();
430 mCalendar->reInitAlarmSettings(); 430 mCalendar->reInitAlarmSettings();
431 431
432} 432}
433void KOListView::populateCalPopup() 433void KOListView::populateCalPopup()
434{ 434{
435 mCalPopup->clear(); 435 mCalPopup->clear();
436 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 436 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
437 while ( kkf ) { 437 while ( kkf ) {
438 int index = mCalPopup->insertItem( kkf->mName+"...", kkf->mCalNumber); 438 int index = mCalPopup->insertItem( kkf->mName+"...", kkf->mCalNumber);
439 if ( kkf->mErrorOnLoad || kkf->isReadOnly ) 439 if ( kkf->mErrorOnLoad || kkf->isReadOnly )
440 mCalPopup->setItemEnabled( index, false ); 440 mCalPopup->setItemEnabled( index, false );
441 kkf = KOPrefs::instance()->mCalendars.next(); 441 kkf = KOPrefs::instance()->mCalendars.next();
442 } 442 }
443} 443}
444void KOListView::updateList() 444void KOListView::updateList()
445{ 445{
446 // qDebug(" KOListView::updateList() "); 446 // qDebug(" KOListView::updateList() ");
447 447
448} 448}
449 449
450void KOListView::clearList() 450void KOListView::clearList()
451{ 451{
452 clear (); 452 clear ();
453} 453}
454 454
455void KOListView::setCat() 455void KOListView::setCat()
456{ 456{
457 457
458 bool set = true; 458 bool set = true;
459 int result = KMessageBox::warningYesNoCancel(this, 459 int result = KMessageBox::warningYesNoCancel(this,
460 i18n("Do you want to <b>add</b> categories to the selected items or <b>reset</b> the list (i.e. remove current categories)?"), 460 i18n("Do you want to <b>add</b> categories to the selected items or <b>reset</b> the list (i.e. remove current categories)?"),
461 i18n("Set categories"), 461 i18n("Set categories"),
462 i18n("Add"), 462 i18n("Add"),
463 i18n("Reset")); 463 i18n("Reset"));
464 if (result == KMessageBox::Cancel) return; 464 if (result == KMessageBox::Cancel) return;
465 if (result == KMessageBox::Yes) set = false; 465 if (result == KMessageBox::Yes) set = false;
466 setCategories( set ); 466 setCategories( set );
467} 467}
468 468
469void KOListView::setAlarm() 469void KOListView::setAlarm()
470{ 470{
471 KOAlarmPrefs kap( this); 471 KOAlarmPrefs kap( this);
472 if ( !kap.exec() ) 472 if ( !kap.exec() )
473 return; 473 return;
474 QPtrList<KOListViewItem> sel ; 474 QPtrList<Incidence> delSel = getSelectedIncidences( true, true, false, true ); // no journals, only due todos
475 QListViewItem *qitem = mListView->firstChild (); 475 Incidence* inc = delSel.first();
476 while ( qitem ) {
477 if ( qitem->isSelected() ) {
478 Incidence* inc = ((KOListViewItem *) qitem)->data();
479 if ( inc->typeID() != journalID ) {
480 if ( inc->typeID() == todoID ) {
481 if ( ((Todo*)inc)->hasDueDate() )
482 sel.append(((KOListViewItem *)qitem));
483 } else
484 sel.append(((KOListViewItem *)qitem));
485 }
486 }
487 qitem = qitem->nextSibling();
488 }
489 int count = 0; 476 int count = 0;
490 KOListViewItem * item, *temp; 477 while ( inc ) {
491 item = sel.first(); 478 ++count;
492 Incidence* inc; 479 if (kap.mAlarmButton->isChecked()) {
493 while ( item ) { 480 if (inc->alarms().count() == 0)
494 inc = item->data(); 481 inc->newAlarm();
495 ++count; 482 QPtrList<Alarm> alarms = inc->alarms();
496 if (kap.mAlarmButton->isChecked()) { 483 Alarm *alarm;
497 if (inc->alarms().count() == 0) 484 for (alarm = alarms.first(); alarm; alarm = alarms.next() ) {
498 inc->newAlarm(); 485 alarm->setEnabled(true);
499 QPtrList<Alarm> alarms = inc->alarms(); 486 int j = kap.mAlarmTimeEdit->value()* -60;
500 Alarm *alarm; 487 if (kap.mAlarmIncrCombo->currentItem() == 1)
501 for (alarm = alarms.first(); alarm; alarm = alarms.next() ) { 488 j = j * 60;
502 alarm->setEnabled(true); 489 else if (kap.mAlarmIncrCombo->currentItem() == 2)
503 int j = kap.mAlarmTimeEdit->value()* -60; 490 j = j * (60 * 24);
504 if (kap.mAlarmIncrCombo->currentItem() == 1) 491 alarm->setStartOffset( j );
505 j = j * 60; 492
506 else if (kap.mAlarmIncrCombo->currentItem() == 2) 493 if (!kap.mAlarmProgram.isEmpty() && kap.mAlarmProgramButton->isOn()) {
507 j = j * (60 * 24); 494 alarm->setProcedureAlarm(kap.mAlarmProgram);
508 alarm->setStartOffset( j );
509
510 if (!kap.mAlarmProgram.isEmpty() && kap.mAlarmProgramButton->isOn()) {
511 alarm->setProcedureAlarm(kap.mAlarmProgram);
512 }
513 else if (!kap.mAlarmSound.isEmpty() && kap.mAlarmSoundButton->isOn())
514 alarm->setAudioAlarm(kap.mAlarmSound);
515 else
516 alarm->setType(Alarm::Invalid);
517 //alarm->setAudioAlarm("default");
518 // TODO: Deal with multiple alarms
519 break; // For now, stop after the first alarm
520 } 495 }
521 } else { 496 else if (!kap.mAlarmSound.isEmpty() && kap.mAlarmSoundButton->isOn())
522 Alarm* alarm = inc->alarms().first(); 497 alarm->setAudioAlarm(kap.mAlarmSound);
523 if ( alarm ) { 498 else
524 alarm->setEnabled(false);
525 alarm->setType(Alarm::Invalid); 499 alarm->setType(Alarm::Invalid);
526 } 500 //alarm->setAudioAlarm("default");
501 // TODO: Deal with multiple alarms
502 break; // For now, stop after the first alarm
527 } 503 }
504 } else {
505 Alarm* alarm = inc->alarms().first();
506 if ( alarm ) {
507 alarm->setEnabled(false);
508 alarm->setType(Alarm::Invalid);
509 }
510 }
511 KOListViewItem* item = getItemForEvent(inc);
512 if (item) {
528 ListItemVisitor v(item, mStartDate ); 513 ListItemVisitor v(item, mStartDate );
529 inc->accept(v); 514 inc->accept(v);
530 item = sel.next(); 515 }
516 inc = delSel.next();
531 } 517 }
532 topLevelWidget()->setCaption( i18n("Changed alarm for %1 items").arg( count ) ); 518 topLevelWidget()->setCaption( i18n("Changed alarm for %1 items").arg( count ) );
533 qDebug("KO: Set alarm for %d items", count); 519 qDebug("KO: Set alarm for %d items", count);
534 calendar()->reInitAlarmSettings(); 520 calendar()->reInitAlarmSettings();
535 QTimer::singleShot( 1, this, SLOT ( resetFocus() ) ); 521 QTimer::singleShot( 1, this, SLOT ( resetFocus() ) );
536} 522}
537void KOListView::setCategories( bool removeOld ) 523void KOListView::setCategories( bool removeOld )
538{ 524{
539 525
540 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 ); 526 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 );
541 csd->setColorEnabled(); 527 csd->setColorEnabled();
542 if (! csd->exec()) { 528 if (! csd->exec()) {
543 delete csd; 529 delete csd;
544 return; 530 return;
545 } 531 }
546 QStringList catList = csd->selectedCategories(); 532 QStringList catList = csd->selectedCategories();
547 delete csd; 533 delete csd;
548 QPtrList<Incidence> delSel = getSelectedIncidences(); // all inc allowed; 534 QPtrList<Incidence> delSel = getSelectedIncidences(); // all inc allowed;
549 Incidence* inc = delSel.first(); 535 Incidence* inc = delSel.first();
550 while ( inc ) { 536 while ( inc ) {
551 if ( removeOld ) { 537 if ( removeOld ) {
552 inc->setCategories( catList, false ); 538 inc->setCategories( catList, false );
553 } else { 539 } else {
554 inc->addCategories( catList, false ); 540 inc->addCategories( catList, false );
555 } 541 }
556 KOListViewItem* item = getItemForEvent(inc); 542 KOListViewItem* item = getItemForEvent(inc);
557 if (item) { 543 if (item) {
558 ListItemVisitor v(item, mStartDate ); 544 ListItemVisitor v(item, mStartDate );
559 inc->accept(v); 545 inc->accept(v);
560 } 546 }
561 inc = delSel.next(); 547 inc = delSel.next();
562 } 548 }
563 QTimer::singleShot( 1, this, SLOT ( resetFocus() ) ); 549 QTimer::singleShot( 1, this, SLOT ( resetFocus() ) );
564} 550}
565 551
566void KOListView::beamSelected() 552void KOListView::beamSelected()
567{ 553{
568 QPtrList<Incidence> delSel = getSelectedIncidences() ; 554 QPtrList<Incidence> delSel = getSelectedIncidences() ;
569 if ( delSel.count() ) 555 if ( delSel.count() )
570 emit beamIncidenceList( delSel ); 556 emit beamIncidenceList( delSel );
571} 557}
572 558
573void KOListView::saveDescriptionToFile() 559void KOListView::saveDescriptionToFile()
574{ 560{
575 561
576 int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"), 562 int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"),
577 i18n("This saves the text/details of selected\nJournals and Events/Todos\nto a text file."), 563 i18n("This saves the text/details of selected\nJournals and Events/Todos\nto a text file."),
578 i18n("Continue"), i18n("Cancel"), 0, 564 i18n("Continue"), i18n("Cancel"), 0,
@@ -654,97 +640,109 @@ void KOListView::saveDescriptionToFile()
654} 640}
655void KOListView::saveToFileVCS() 641void KOListView::saveToFileVCS()
656{ 642{
657 writeToFile( false ); 643 writeToFile( false );
658} 644}
659void KOListView::saveToFile() 645void KOListView::saveToFile()
660{ 646{
661 writeToFile( true ); 647 writeToFile( true );
662} 648}
663QPtrList<Incidence> KOListView::getSelectedIncidences( bool includeEvents, bool includeTodos, bool includeJournals, bool onlyDueTodos ) 649QPtrList<Incidence> KOListView::getSelectedIncidences( bool includeEvents, bool includeTodos, bool includeJournals, bool onlyDueTodos )
664{ 650{
665 QPtrList<Incidence> delSel ; 651 QPtrList<Incidence> delSel ;
666 bool addSubTodos = false; 652 bool addSubTodos = false;
667 bool askSubTodos = true; 653 bool askSubTodos = true;
668 QListViewItem *item = mListView->firstChild (); 654 QListViewItem *item = mListView->firstChild ();
669 while ( item ) { 655 while ( item ) {
670 if ( item->isSelected() ) { 656 if ( item->isSelected() ) {
671 Incidence* inc = ((KOListViewItem *)item)->data(); 657 Incidence* inc = ((KOListViewItem *)item)->data();
672 if ( ( addSubTodos && delSel.findRef( inc ) == -1) || !addSubTodos ) { 658 if ( ( addSubTodos && delSel.findRef( inc ) == -1) || !addSubTodos ) {
673 if ( (inc->typeID() == todoID && includeTodos) || 659 if ( (inc->typeID() == todoID && includeTodos) ||
674 (inc->typeID() == eventID && includeEvents) || 660 (inc->typeID() == eventID && includeEvents) ||
675 (inc->typeID() == journalID && includeJournals) ) { 661 (inc->typeID() == journalID && includeJournals) ) {
676 if ( inc->typeID() == todoID && onlyDueTodos ) { 662 if ( inc->typeID() == todoID && onlyDueTodos ) {
677 if ( ((Todo*)inc)->hasDueDate() ) 663 if ( ((Todo*)inc)->hasDueDate() )
678 delSel.append( inc ); 664 delSel.append( inc );
679 } else 665 } else
680 delSel.append( inc ); 666 delSel.append( inc );
681 667
682 } 668 }
683 } 669 }
684 if ( inc->typeID() == todoID ) { 670 if ( inc->typeID() == todoID ) {
685 Todo * todo = (Todo*) inc; 671 Todo * todo = (Todo*) inc;
686 if ( todo->relations().count() ) { 672 if ( todo->relations().count() ) {
687 if ( askSubTodos ) { 673 if ( askSubTodos ) {
688 int result = KMessageBox::warningYesNoCancel(this, 674 int result = KMessageBox::warningYesNoCancel(this,
689 i18n("One (or more) selected\ntodo has subtodos!\nDo you want to select\nall subtodos of all\nselected todos as well?"), 675 i18n("One (or more) selected\ntodo has subtodos!\nDo you want to select\nall subtodos of all\nselected todos as well?"),
690 i18n("Todo has subtodos"), 676 i18n("Todo has subtodos"),
691 i18n("Yes"), 677 i18n("Yes"),
692 i18n("No")); 678 i18n("No"));
693 if ( result == KMessageBox::Cancel ) { 679 if ( result == KMessageBox::Cancel ) {
694 delSel.clear(); 680 delSel.clear();
695 return delSel; 681 return delSel;
696 } 682 }
697 if (result == KMessageBox::Yes) 683 if (result == KMessageBox::Yes)
698 addSubTodos = true; 684 addSubTodos = true;
699 askSubTodos = false; 685 askSubTodos = false;
700 } 686 }
701 if ( addSubTodos ) { 687 if ( addSubTodos ) {
702 inc->addRelationsToList( &delSel ); 688 QPtrList<Incidence> tempSel ;
689 inc->addRelationsToList( &tempSel );
690 Incidence* tempinc = tempSel.first();
691 while ( tempinc ) {
692 if ( delSel.findRef( tempinc ) == -1 ) {
693 if ( tempinc->typeID() == todoID && onlyDueTodos ) {
694 if ( ((Todo*)tempinc)->hasDueDate() )
695 delSel.append( tempinc );
696 } else
697 delSel.append( tempinc );
698 }
699 tempinc = tempSel.next();
700 }
703 } 701 }
704 } 702 }
705 } 703 }
706 } 704 }
707 item = item->nextSibling(); 705 item = item->nextSibling();
708 } 706 }
709 return delSel; 707 return delSel;
710} 708}
711 709
712void KOListView::writeToFile( bool iCal ) 710void KOListView::writeToFile( bool iCal )
713{ 711{
714 QPtrList<Incidence> delSel = getSelectedIncidences(); // all inc allowed; 712 QPtrList<Incidence> delSel = getSelectedIncidences(); // all inc allowed;
715 if ( !iCal ) { 713 if ( !iCal ) {
716 bool journal = false; 714 bool journal = false;
717 Incidence *incidence = delSel.first(); 715 Incidence *incidence = delSel.first();
718 while ( incidence ) { 716 while ( incidence ) {
719 if ( incidence->typeID() == journalID ) { 717 if ( incidence->typeID() == journalID ) {
720 journal = true; 718 journal = true;
721 break; 719 break;
722 } 720 }
723 incidence = delSel.next(); 721 incidence = delSel.next();
724 } 722 }
725 if ( journal ) { 723 if ( journal ) {
726 int result = KMessageBox::warningContinueCancel(this, 724 int result = KMessageBox::warningContinueCancel(this,
727 i18n("The journal entries can not be\nexported to a vCalendar file."), 725 i18n("The journal entries can not be\nexported to a vCalendar file."),
728 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 726 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
729 true); 727 true);
730 if (result != KMessageBox::Continue) return; 728 if (result != KMessageBox::Continue) return;
731 } 729 }
732 } 730 }
733 if ( delSel.count() ) { 731 if ( delSel.count() ) {
734 QString fn = KOPrefs::instance()->mLastSaveFile; 732 QString fn = KOPrefs::instance()->mLastSaveFile;
735 QString extension; 733 QString extension;
736 if ( iCal ) { 734 if ( iCal ) {
737 if ( fn.right( 4 ).lower() == ".vcs" ) { 735 if ( fn.right( 4 ).lower() == ".vcs" ) {
738 fn = fn.left( fn.length() -3) + "ics"; 736 fn = fn.left( fn.length() -3) + "ics";
739 } 737 }
740 } else { 738 } else {
741 if ( fn.right( 4 ).lower() == ".ics" ) { 739 if ( fn.right( 4 ).lower() == ".ics" ) {
742 fn = fn.left( fn.length() -3) + "vcs"; 740 fn = fn.left( fn.length() -3) + "vcs";
743 } 741 }
744 } 742 }
745 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this ); 743 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this );
746 744
747 if ( fn == "" ) 745 if ( fn == "" )
748 return; 746 return;
749 QFileInfo info; 747 QFileInfo info;
750 info.setFile( fn ); 748 info.setFile( fn );