summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/kotodoview.cpp4
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}
571void KOTodoView::paintNeeded() 571void KOTodoView::paintNeeded()
572{ 572{
573 if ( mPendingUpdateBeforeRepaint ) { 573 if ( mPendingUpdateBeforeRepaint ) {
574 updateView(); 574 updateView();
575 mPendingUpdateBeforeRepaint = false; 575 mPendingUpdateBeforeRepaint = false;
576 } 576 }
577} 577}
578void KOTodoView::paintEvent(QPaintEvent * pevent) 578void 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
587void KOTodoView::updateView() 587void 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
689bool KOTodoView::checkTodo( Todo * todo ) 689bool 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
705void KOTodoView::restoreItemState( QListViewItem *item ) 709void 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
717QMap<Todo *,KOTodoViewItem *>::ConstIterator 721QMap<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
749void KOTodoView::updateConfig() 753void KOTodoView::updateConfig()
750{ 754{
751 updateView(); 755 updateView();
752 mTodoListView->repaintContents(); 756 mTodoListView->repaintContents();
753} 757}
754 758
755QPtrList<Incidence> KOTodoView::selectedIncidences() 759QPtrList<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
766QPtrList<Todo> KOTodoView::selectedTodos() 770QPtrList<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
777void KOTodoView::changeEventDisplay(Event *, int) 781void KOTodoView::changeEventDisplay(Event *, int)
778{ 782{
779 updateView(); 783 updateView();
780} 784}
781 785
782void KOTodoView::showDates(const QDate &, const QDate &) 786void KOTodoView::showDates(const QDate &, const QDate &)
783{ 787{
784} 788}
785 789
786void KOTodoView::showEvents(QPtrList<Event>) 790void 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
791void KOTodoView::printPreview(CalPrinter *calPrinter, const QDate &fd, 795void 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
799void KOTodoView::editItem(QListViewItem *item ) 803void 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
805void KOTodoView::showItem(QListViewItem *item,const QPoint &,int) 809void 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
810void KOTodoView::popupMenu(QListViewItem *item,const QPoint &p,int column) 814void 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();