-rw-r--r-- | korganizer/kotodoview.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp index c5b9a21..03a8f1c 100644 --- a/korganizer/kotodoview.cpp +++ b/korganizer/kotodoview.cpp | |||
@@ -566,256 +566,260 @@ void KOTodoView::jumpToDate () | |||
566 | // if (mActiveItem) { | 566 | // if (mActiveItem) { |
567 | // mActiveItem->todo()); | 567 | // mActiveItem->todo()); |
568 | // if ( mActiveItem->todo()->hasDueDate() ) | 568 | // if ( mActiveItem->todo()->hasDueDate() ) |
569 | // emit mActiveItem->todo()jumpToTime( mTodo->dtDue().date() ); | 569 | // emit mActiveItem->todo()jumpToTime( mTodo->dtDue().date() ); |
570 | } | 570 | } |
571 | void KOTodoView::paintNeeded() | 571 | void KOTodoView::paintNeeded() |
572 | { | 572 | { |
573 | if ( mPendingUpdateBeforeRepaint ) { | 573 | if ( mPendingUpdateBeforeRepaint ) { |
574 | updateView(); | 574 | updateView(); |
575 | mPendingUpdateBeforeRepaint = false; | 575 | mPendingUpdateBeforeRepaint = false; |
576 | } | 576 | } |
577 | } | 577 | } |
578 | void KOTodoView::paintEvent(QPaintEvent * pevent) | 578 | void KOTodoView::paintEvent(QPaintEvent * pevent) |
579 | { | 579 | { |
580 | if ( mPendingUpdateBeforeRepaint ) { | 580 | if ( mPendingUpdateBeforeRepaint ) { |
581 | updateView(); | 581 | updateView(); |
582 | mPendingUpdateBeforeRepaint = false; | 582 | mPendingUpdateBeforeRepaint = false; |
583 | } | 583 | } |
584 | KOrg::BaseView::paintEvent( pevent); | 584 | KOrg::BaseView::paintEvent( pevent); |
585 | } | 585 | } |
586 | 586 | ||
587 | void KOTodoView::updateView() | 587 | void KOTodoView::updateView() |
588 | { | 588 | { |
589 | pendingSubtodo = 0; | 589 | pendingSubtodo = 0; |
590 | if ( mBlockUpdate ) { | 590 | if ( mBlockUpdate ) { |
591 | return; | 591 | return; |
592 | } | 592 | } |
593 | if ( !isVisible() ) { | 593 | if ( !isVisible() ) { |
594 | mPendingUpdateBeforeRepaint = true; | 594 | mPendingUpdateBeforeRepaint = true; |
595 | return; | 595 | return; |
596 | } | 596 | } |
597 | //qDebug("KOTodoView::updateView() %x", this); | 597 | //qDebug("KOTodoView::updateView() %x", this); |
598 | if ( isFlatDisplay ) { | 598 | if ( isFlatDisplay ) { |
599 | setAllFlat(); | 599 | setAllFlat(); |
600 | return; | 600 | return; |
601 | } | 601 | } |
602 | //qDebug("update "); | 602 | //qDebug("update "); |
603 | // kdDebug() << "KOTodoView::updateView()" << endl; | 603 | // kdDebug() << "KOTodoView::updateView()" << endl; |
604 | QFont fo = KOPrefs::instance()->mTodoViewFont; | 604 | QFont fo = KOPrefs::instance()->mTodoViewFont; |
605 | mTodoListView->clear(); | 605 | mTodoListView->clear(); |
606 | if ( mName == "todolistsmall" ) { | 606 | if ( mName == "todolistsmall" ) { |
607 | if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) { | 607 | if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) { |
608 | int ps = fo.pointSize() -2; | 608 | int ps = fo.pointSize() -2; |
609 | if ( ps > 12 ) | 609 | if ( ps > 12 ) |
610 | ps -= 2; | 610 | ps -= 2; |
611 | fo.setPointSize( ps ); | 611 | fo.setPointSize( ps ); |
612 | } | 612 | } |
613 | } | 613 | } |
614 | 614 | ||
615 | mTodoListView->setFont( fo ); | 615 | mTodoListView->setFont( fo ); |
616 | // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont ); | 616 | // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont ); |
617 | //mTodoListView->header()->setMaximumHeight(fm.height()); | 617 | //mTodoListView->header()->setMaximumHeight(fm.height()); |
618 | QPtrList<Todo> todoList = calendar()->todos(); | 618 | QPtrList<Todo> todoList = calendar()->todos(); |
619 | 619 | ||
620 | /* | 620 | /* |
621 | kdDebug() << "KOTodoView::updateView(): Todo List:" << endl; | 621 | kdDebug() << "KOTodoView::updateView(): Todo List:" << endl; |
622 | Event *t; | 622 | Event *t; |
623 | for(t = todoList.first(); t; t = todoList.next()) { | 623 | for(t = todoList.first(); t; t = todoList.next()) { |
624 | kdDebug() << " " << t->getSummary() << endl; | 624 | kdDebug() << " " << t->getSummary() << endl; |
625 | 625 | ||
626 | if (t->getRelatedTo()) { | 626 | if (t->getRelatedTo()) { |
627 | kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl; | 627 | kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl; |
628 | } | 628 | } |
629 | 629 | ||
630 | QPtrList<Event> l = t->getRelations(); | 630 | QPtrList<Event> l = t->getRelations(); |
631 | Event *c; | 631 | Event *c; |
632 | for(c=l.first();c;c=l.next()) { | 632 | for(c=l.first();c;c=l.next()) { |
633 | kdDebug() << " - relation: " << c->getSummary() << endl; | 633 | kdDebug() << " - relation: " << c->getSummary() << endl; |
634 | } | 634 | } |
635 | } | 635 | } |
636 | */ | 636 | */ |
637 | 637 | ||
638 | // Put for each Event a KOTodoViewItem in the list view. Don't rely on a | 638 | // Put for each Event a KOTodoViewItem in the list view. Don't rely on a |
639 | // specific order of events. That means that we have to generate parent items | 639 | // specific order of events. That means that we have to generate parent items |
640 | // recursively for proper hierarchical display of Todos. | 640 | // recursively for proper hierarchical display of Todos. |
641 | mTodoMap.clear(); | 641 | mTodoMap.clear(); |
642 | Todo *todo; | 642 | Todo *todo; |
643 | todo = todoList.first();// todo; todo = todoList.next()) { | 643 | todo = todoList.first();// todo; todo = todoList.next()) { |
644 | while ( todo ) { | 644 | while ( todo ) { |
645 | bool next = true; | 645 | bool next = true; |
646 | // qDebug("todo %s ", todo->summary().latin1()); | 646 | // qDebug("todo %s ", todo->summary().latin1()); |
647 | Incidence *incidence = todo->relatedTo(); | 647 | Incidence *incidence = todo->relatedTo(); |
648 | while ( incidence ) { | 648 | while ( incidence ) { |
649 | if ( incidence->type() == "Todo") { | 649 | if ( incidence->type() == "Todo") { |
650 | //qDebug("related %s ",incidence->summary().latin1() ); | 650 | //qDebug("related %s ",incidence->summary().latin1() ); |
651 | if ( !(todoList.contains ( ((Todo* )incidence ) ) )) { | 651 | if ( !(todoList.contains ( ((Todo* )incidence ) ) )) { |
652 | //qDebug("related not found "); | 652 | //qDebug("related not found "); |
653 | todoList.remove( ); | 653 | todoList.remove( ); |
654 | todo = todoList.current(); | 654 | todo = todoList.current(); |
655 | next = false; | 655 | next = false; |
656 | incidence = 0; | 656 | incidence = 0; |
657 | 657 | ||
658 | } else { | 658 | } else { |
659 | //qDebug("related found "); | 659 | //qDebug("related found "); |
660 | incidence = incidence->relatedTo(); | 660 | incidence = incidence->relatedTo(); |
661 | } | 661 | } |
662 | } else | 662 | } else |
663 | incidence = 0; | 663 | incidence = 0; |
664 | } | 664 | } |
665 | if ( next ) | 665 | if ( next ) |
666 | todo = todoList.next(); | 666 | todo = todoList.next(); |
667 | } | 667 | } |
668 | // qDebug("again .... "); | 668 | // qDebug("again .... "); |
669 | // for(todo = todoList.first(); todo; todo = todoList.next()) { | 669 | // for(todo = todoList.first(); todo; todo = todoList.next()) { |
670 | 670 | ||
671 | // qDebug("yytodo %s ", todo->summary().latin1()); | 671 | // qDebug("yytodo %s ", todo->summary().latin1()); |
672 | // } | 672 | // } |
673 | //qDebug("for "); | 673 | //qDebug("for "); |
674 | for(todo = todoList.first(); todo; todo = todoList.next()) { | 674 | for(todo = todoList.first(); todo; todo = todoList.next()) { |
675 | if (!mTodoMap.contains(todo) && checkTodo( todo ) ) | 675 | if (!mTodoMap.contains(todo) && checkTodo( todo ) ) |
676 | { | 676 | { |
677 | insertTodoItem(todo); | 677 | insertTodoItem(todo); |
678 | } | 678 | } |
679 | } | 679 | } |
680 | //qDebug("for end "); | 680 | //qDebug("for end "); |
681 | // Restore opened/closed state | 681 | // Restore opened/closed state |
682 | mTodoListView->blockSignals( true ); | 682 | mTodoListView->blockSignals( true ); |
683 | if( mDocPrefs ) restoreItemState( mTodoListView->firstChild() ); | 683 | if( mDocPrefs ) restoreItemState( mTodoListView->firstChild() ); |
684 | mTodoListView->blockSignals( false ); | 684 | mTodoListView->blockSignals( false ); |
685 | mTodoListView->setFocus(); | 685 | mTodoListView->setFocus(); |
686 | processSelectionChange(); | 686 | processSelectionChange(); |
687 | } | 687 | } |
688 | 688 | ||
689 | bool KOTodoView::checkTodo( Todo * todo ) | 689 | bool KOTodoView::checkTodo( Todo * todo ) |
690 | { | 690 | { |
691 | 691 | ||
692 | if ( !KOPrefs::instance()->mShowCompletedTodo && todo->isCompleted() ) | 692 | if ( !KOPrefs::instance()->mShowCompletedTodo && todo->isCompleted() ) |
693 | return false; | 693 | return false; |
694 | if ( !todo->isCompleted() ) { | ||
695 | if ( todo->hasDueDate() && todo->dtDue().date() <= QDate::currentDate() ) | ||
696 | return true; | ||
697 | } | ||
694 | if ( KOPrefs::instance()->mHideNonStartedTodos && mNavigator ) { | 698 | if ( KOPrefs::instance()->mHideNonStartedTodos && mNavigator ) { |
695 | if ( todo->hasStartDate() ) | 699 | if ( todo->hasStartDate() ) |
696 | if ( mNavigator->selectedDates().last() < todo->dtStart().date() ) | 700 | if ( mNavigator->selectedDates().last() < todo->dtStart().date() ) |
697 | return false; | 701 | return false; |
698 | if ( todo->hasDueDate() ) | 702 | if ( todo->hasDueDate() ) |
699 | if ( mNavigator->selectedDates().first() > todo->dtDue().date() ) | 703 | if ( mNavigator->selectedDates().first() > todo->dtDue().date() ) |
700 | return false; | 704 | return false; |
701 | } | 705 | } |
702 | return true; | 706 | return true; |
703 | } | 707 | } |
704 | 708 | ||
705 | void KOTodoView::restoreItemState( QListViewItem *item ) | 709 | void KOTodoView::restoreItemState( QListViewItem *item ) |
706 | { | 710 | { |
707 | pendingSubtodo = 0; | 711 | pendingSubtodo = 0; |
708 | while( item ) { | 712 | while( item ) { |
709 | KOTodoViewItem *todoItem = (KOTodoViewItem *)item; | 713 | KOTodoViewItem *todoItem = (KOTodoViewItem *)item; |
710 | todoItem->setOpen( mDocPrefs->readBoolEntry( todoItem->todo()->uid() ) ); | 714 | todoItem->setOpen( mDocPrefs->readBoolEntry( todoItem->todo()->uid() ) ); |
711 | if( item->childCount() > 0 ) restoreItemState( item->firstChild() ); | 715 | if( item->childCount() > 0 ) restoreItemState( item->firstChild() ); |
712 | item = item->nextSibling(); | 716 | item = item->nextSibling(); |
713 | } | 717 | } |
714 | } | 718 | } |
715 | 719 | ||
716 | 720 | ||
717 | QMap<Todo *,KOTodoViewItem *>::ConstIterator | 721 | QMap<Todo *,KOTodoViewItem *>::ConstIterator |
718 | KOTodoView::insertTodoItem(Todo *todo) | 722 | KOTodoView::insertTodoItem(Todo *todo) |
719 | { | 723 | { |
720 | 724 | ||
721 | // kdDebug() << "KOTodoView::insertTodoItem(): " << todo->getSummary() << endl; | 725 | // kdDebug() << "KOTodoView::insertTodoItem(): " << todo->getSummary() << endl; |
722 | // TODO: Check, if dynmaic cast is necessary | 726 | // TODO: Check, if dynmaic cast is necessary |
723 | 727 | ||
724 | pendingSubtodo = 0; | 728 | pendingSubtodo = 0; |
725 | Incidence *incidence = todo->relatedTo(); | 729 | Incidence *incidence = todo->relatedTo(); |
726 | if (incidence && incidence->type() == "Todo") { | 730 | if (incidence && incidence->type() == "Todo") { |
727 | Todo *relatedTodo = static_cast<Todo *>(incidence); | 731 | Todo *relatedTodo = static_cast<Todo *>(incidence); |
728 | 732 | ||
729 | // kdDebug() << " has Related" << endl; | 733 | // kdDebug() << " has Related" << endl; |
730 | QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator; | 734 | QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator; |
731 | itemIterator = mTodoMap.find(relatedTodo); | 735 | itemIterator = mTodoMap.find(relatedTodo); |
732 | if (itemIterator == mTodoMap.end()) { | 736 | if (itemIterator == mTodoMap.end()) { |
733 | // kdDebug() << " related not yet in list" << endl; | 737 | // kdDebug() << " related not yet in list" << endl; |
734 | itemIterator = insertTodoItem (relatedTodo); | 738 | itemIterator = insertTodoItem (relatedTodo); |
735 | } | 739 | } |
736 | // isn't this pretty stupid? We give one Todo to the KOTodoViewItem | 740 | // isn't this pretty stupid? We give one Todo to the KOTodoViewItem |
737 | // and one into the map. Sure finding is more easy but why? -zecke | 741 | // and one into the map. Sure finding is more easy but why? -zecke |
738 | KOTodoViewItem *todoItem = new KOTodoViewItem(*itemIterator,todo,this); | 742 | KOTodoViewItem *todoItem = new KOTodoViewItem(*itemIterator,todo,this); |
739 | return mTodoMap.insert(todo,todoItem); | 743 | return mTodoMap.insert(todo,todoItem); |
740 | } else { | 744 | } else { |
741 | // kdDebug() << " no Related" << endl; | 745 | // kdDebug() << " no Related" << endl; |
742 | // see above -zecke | 746 | // see above -zecke |
743 | KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this); | 747 | KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this); |
744 | return mTodoMap.insert(todo,todoItem); | 748 | return mTodoMap.insert(todo,todoItem); |
745 | } | 749 | } |
746 | } | 750 | } |
747 | 751 | ||
748 | 752 | ||
749 | void KOTodoView::updateConfig() | 753 | void KOTodoView::updateConfig() |
750 | { | 754 | { |
751 | updateView(); | 755 | updateView(); |
752 | mTodoListView->repaintContents(); | 756 | mTodoListView->repaintContents(); |
753 | } | 757 | } |
754 | 758 | ||
755 | QPtrList<Incidence> KOTodoView::selectedIncidences() | 759 | QPtrList<Incidence> KOTodoView::selectedIncidences() |
756 | { | 760 | { |
757 | QPtrList<Incidence> selected; | 761 | QPtrList<Incidence> selected; |
758 | 762 | ||
759 | KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); | 763 | KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); |
760 | // if (!item) item = mActiveItem; | 764 | // if (!item) item = mActiveItem; |
761 | if (item) selected.append(item->todo()); | 765 | if (item) selected.append(item->todo()); |
762 | 766 | ||
763 | return selected; | 767 | return selected; |
764 | } | 768 | } |
765 | 769 | ||
766 | QPtrList<Todo> KOTodoView::selectedTodos() | 770 | QPtrList<Todo> KOTodoView::selectedTodos() |
767 | { | 771 | { |
768 | QPtrList<Todo> selected; | 772 | QPtrList<Todo> selected; |
769 | 773 | ||
770 | KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); | 774 | KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); |
771 | // if (!item) item = mActiveItem; | 775 | // if (!item) item = mActiveItem; |
772 | if (item) selected.append(item->todo()); | 776 | if (item) selected.append(item->todo()); |
773 | 777 | ||
774 | return selected; | 778 | return selected; |
775 | } | 779 | } |
776 | 780 | ||
777 | void KOTodoView::changeEventDisplay(Event *, int) | 781 | void KOTodoView::changeEventDisplay(Event *, int) |
778 | { | 782 | { |
779 | updateView(); | 783 | updateView(); |
780 | } | 784 | } |
781 | 785 | ||
782 | void KOTodoView::showDates(const QDate &, const QDate &) | 786 | void KOTodoView::showDates(const QDate &, const QDate &) |
783 | { | 787 | { |
784 | } | 788 | } |
785 | 789 | ||
786 | void KOTodoView::showEvents(QPtrList<Event>) | 790 | void KOTodoView::showEvents(QPtrList<Event>) |
787 | { | 791 | { |
788 | kdDebug() << "KOTodoView::selectEvents(): not yet implemented" << endl; | 792 | kdDebug() << "KOTodoView::selectEvents(): not yet implemented" << endl; |
789 | } | 793 | } |
790 | 794 | ||
791 | void KOTodoView::printPreview(CalPrinter *calPrinter, const QDate &fd, | 795 | void KOTodoView::printPreview(CalPrinter *calPrinter, const QDate &fd, |
792 | const QDate &td) | 796 | const QDate &td) |
793 | { | 797 | { |
794 | #ifndef KORG_NOPRINTER | 798 | #ifndef KORG_NOPRINTER |
795 | calPrinter->preview(CalPrinter::Todolist, fd, td); | 799 | calPrinter->preview(CalPrinter::Todolist, fd, td); |
796 | #endif | 800 | #endif |
797 | } | 801 | } |
798 | 802 | ||
799 | void KOTodoView::editItem(QListViewItem *item ) | 803 | void KOTodoView::editItem(QListViewItem *item ) |
800 | { | 804 | { |
801 | // qDebug("editItem(QListViewItem *item ) "); | 805 | // qDebug("editItem(QListViewItem *item ) "); |
802 | emit editTodoSignal(((KOTodoViewItem *)item)->todo()); | 806 | emit editTodoSignal(((KOTodoViewItem *)item)->todo()); |
803 | } | 807 | } |
804 | 808 | ||
805 | void KOTodoView::showItem(QListViewItem *item,const QPoint &,int) | 809 | void KOTodoView::showItem(QListViewItem *item,const QPoint &,int) |
806 | { | 810 | { |
807 | emit showTodoSignal(((KOTodoViewItem *)item)->todo()); | 811 | emit showTodoSignal(((KOTodoViewItem *)item)->todo()); |
808 | } | 812 | } |
809 | 813 | ||
810 | void KOTodoView::popupMenu(QListViewItem *item,const QPoint &p,int column) | 814 | void KOTodoView::popupMenu(QListViewItem *item,const QPoint &p,int column) |
811 | { | 815 | { |
812 | pendingSubtodo = 0; | 816 | pendingSubtodo = 0; |
813 | mActiveItem = (KOTodoViewItem *)item; | 817 | mActiveItem = (KOTodoViewItem *)item; |
814 | if (item) { | 818 | if (item) { |
815 | switch (column){ | 819 | switch (column){ |
816 | case 1: | 820 | case 1: |
817 | mPriorityPopupMenu->popup(QCursor::pos ()); break; | 821 | mPriorityPopupMenu->popup(QCursor::pos ()); break; |
818 | case 2: | 822 | case 2: |
819 | mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break; | 823 | mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break; |
820 | case 3: | 824 | case 3: |
821 | moveTodo(); | 825 | moveTodo(); |