author | zautrix <zautrix> | 2004-10-16 13:36:11 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-10-16 13:36:11 (UTC) |
commit | c3325ebbb92a2814fcb622caaf71316cfa0c2908 (patch) (unidiff) | |
tree | b53545c39f84fc6ce694f371509b4a9fe2ddd743 /korganizer/kotodoview.cpp | |
parent | 023b3c542a6dd4d1c4b53dba6bb2c68f605a7917 (diff) | |
download | kdepimpi-c3325ebbb92a2814fcb622caaf71316cfa0c2908.zip kdepimpi-c3325ebbb92a2814fcb622caaf71316cfa0c2908.tar.gz kdepimpi-c3325ebbb92a2814fcb622caaf71316cfa0c2908.tar.bz2 |
made todos reparentable
-rw-r--r-- | korganizer/kotodoview.cpp | 88 |
1 files changed, 84 insertions, 4 deletions
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp index ca5eadd..a8143a0 100644 --- a/korganizer/kotodoview.cpp +++ b/korganizer/kotodoview.cpp | |||
@@ -206,16 +206,17 @@ void KOTodoListView::contentsMousePressEvent(QMouseEvent* e) | |||
206 | } | 206 | } |
207 | } | 207 | } |
208 | } | 208 | } |
209 | #endif | 209 | #endif |
210 | } | 210 | } |
211 | 211 | ||
212 | void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e) | 212 | void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e) |
213 | { | 213 | { |
214 | |||
214 | #ifndef KORG_NODND | 215 | #ifndef KORG_NODND |
215 | // kdDebug() << "KOTodoListView::contentsMouseMoveEvent()" << endl; | 216 | // kdDebug() << "KOTodoListView::contentsMouseMoveEvent()" << endl; |
216 | QListView::contentsMouseMoveEvent(e); | 217 | QListView::contentsMouseMoveEvent(e); |
217 | if (mMousePressed && (mPressPos - e->pos()).manhattanLength() > | 218 | if (mMousePressed && (mPressPos - e->pos()).manhattanLength() > |
218 | QApplication::startDragDistance()) { | 219 | QApplication::startDragDistance()) { |
219 | mMousePressed = false; | 220 | mMousePressed = false; |
220 | QListViewItem *item = itemAt(contentsToViewport(mPressPos)); | 221 | QListViewItem *item = itemAt(contentsToViewport(mPressPos)); |
221 | if (item) { | 222 | if (item) { |
@@ -269,16 +270,18 @@ void KOTodoListView::keyPressEvent ( QKeyEvent * e ) | |||
269 | switch ( e->key() ) { | 270 | switch ( e->key() ) { |
270 | case Qt::Key_Down: | 271 | case Qt::Key_Down: |
271 | case Qt::Key_Up: | 272 | case Qt::Key_Up: |
272 | QListView::keyPressEvent ( e ); | 273 | QListView::keyPressEvent ( e ); |
273 | break; | 274 | break; |
274 | case Qt::Key_Left: | 275 | case Qt::Key_Left: |
275 | case Qt::Key_Right: | 276 | case Qt::Key_Right: |
276 | QListView::keyPressEvent ( e ); | 277 | QListView::keyPressEvent ( e ); |
278 | e->accept(); | ||
279 | return; | ||
277 | break; | 280 | break; |
278 | default: | 281 | default: |
279 | e->ignore(); | 282 | e->ignore(); |
280 | break; | 283 | break; |
281 | } | 284 | } |
282 | return; | 285 | return; |
283 | } | 286 | } |
284 | e->ignore(); | 287 | e->ignore(); |
@@ -409,17 +412,19 @@ KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) : | |||
409 | SLOT (cancelTodo())); | 412 | SLOT (cancelTodo())); |
410 | mItemPopupMenu->insertSeparator(); | 413 | mItemPopupMenu->insertSeparator(); |
411 | 414 | ||
412 | mItemPopupMenu->insertItem( i18n("New Todo..."), this, | 415 | mItemPopupMenu->insertItem( i18n("New Todo..."), this, |
413 | SLOT (newTodo())); | 416 | SLOT (newTodo())); |
414 | mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this, | 417 | mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this, |
415 | SLOT (newSubTodo())); | 418 | SLOT (newSubTodo())); |
416 | mItemPopupMenu->insertItem(i18n("Unparent Todo"), this, | 419 | mItemPopupMenu->insertItem(i18n("Unparent Todo"), this, |
417 | SLOT (unparentTodo())); | 420 | SLOT (unparentTodo()),0,21); |
421 | mItemPopupMenu->insertItem(i18n("Reparent Todo"), this, | ||
422 | SLOT (reparentTodo()),0,22); | ||
418 | mItemPopupMenu->insertSeparator(); | 423 | mItemPopupMenu->insertSeparator(); |
419 | mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"), | 424 | mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"), |
420 | this, SLOT( purgeCompleted() ) ); | 425 | this, SLOT( purgeCompleted() ) ); |
421 | mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"), | 426 | mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"), |
422 | this, SLOT( toggleCompleted() ),0, 33 ); | 427 | this, SLOT( toggleCompleted() ),0, 33 ); |
423 | mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), | 428 | mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), |
424 | this, SLOT( toggleQuickTodo() ),0, 34 ); | 429 | this, SLOT( toggleQuickTodo() ),0, 34 ); |
425 | 430 | ||
@@ -434,19 +439,24 @@ KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) : | |||
434 | this, SLOT( toggleQuickTodo() ),0,4 ); | 439 | this, SLOT( toggleQuickTodo() ),0,4 ); |
435 | mDocPrefs = new DocPrefs( name ); | 440 | mDocPrefs = new DocPrefs( name ); |
436 | 441 | ||
437 | mPopupMenu->setCheckable( true ); | 442 | mPopupMenu->setCheckable( true ); |
438 | mItemPopupMenu->setCheckable( true ); | 443 | mItemPopupMenu->setCheckable( true ); |
439 | // Double clicking conflicts with opening/closing the subtree | 444 | // Double clicking conflicts with opening/closing the subtree |
440 | connect( mTodoListView, SIGNAL( doubleClicked( QListViewItem *) ), | 445 | connect( mTodoListView, SIGNAL( doubleClicked( QListViewItem *) ), |
441 | SLOT( editItem( QListViewItem *) ) ); | 446 | SLOT( editItem( QListViewItem *) ) ); |
447 | /* | ||
442 | connect( mTodoListView, SIGNAL( rightButtonClicked ( QListViewItem *, | 448 | connect( mTodoListView, SIGNAL( rightButtonClicked ( QListViewItem *, |
443 | const QPoint &,int ) ), | 449 | const QPoint &,int ) ), |
444 | SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) ); | 450 | SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) ); |
451 | */ | ||
452 | connect( mTodoListView, SIGNAL( contextRequest ( QListViewItem *, | ||
453 | const QPoint &,int ) ), | ||
454 | SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) ); | ||
445 | connect( mTodoListView, SIGNAL( clicked( QListViewItem * ) ), | 455 | connect( mTodoListView, SIGNAL( clicked( QListViewItem * ) ), |
446 | SLOT( itemClicked( QListViewItem * ) ) ); | 456 | SLOT( itemClicked( QListViewItem * ) ) ); |
447 | connect( mTodoListView, SIGNAL( double_Clicked( QListViewItem * ) ), | 457 | connect( mTodoListView, SIGNAL( double_Clicked( QListViewItem * ) ), |
448 | SLOT( itemDoubleClicked( QListViewItem * ) ) ); | 458 | SLOT( itemDoubleClicked( QListViewItem * ) ) ); |
449 | connect( mTodoListView, SIGNAL( todoDropped( Todo * ) ), | 459 | connect( mTodoListView, SIGNAL( todoDropped( Todo * ) ), |
450 | SLOT( updateView() ) ); | 460 | SLOT( updateView() ) ); |
451 | connect( mTodoListView, SIGNAL( expanded( QListViewItem * ) ), | 461 | connect( mTodoListView, SIGNAL( expanded( QListViewItem * ) ), |
452 | SLOT( itemStateChanged( QListViewItem * ) ) ); | 462 | SLOT( itemStateChanged( QListViewItem * ) ) ); |
@@ -690,17 +700,16 @@ void KOTodoView::editItem(QListViewItem *item ) | |||
690 | 700 | ||
691 | void KOTodoView::showItem(QListViewItem *item,const QPoint &,int) | 701 | void KOTodoView::showItem(QListViewItem *item,const QPoint &,int) |
692 | { | 702 | { |
693 | emit showTodoSignal(((KOTodoViewItem *)item)->todo()); | 703 | emit showTodoSignal(((KOTodoViewItem *)item)->todo()); |
694 | } | 704 | } |
695 | 705 | ||
696 | void KOTodoView::popupMenu(QListViewItem *item,const QPoint &,int column) | 706 | void KOTodoView::popupMenu(QListViewItem *item,const QPoint &,int column) |
697 | { | 707 | { |
698 | |||
699 | mActiveItem = (KOTodoViewItem *)item; | 708 | mActiveItem = (KOTodoViewItem *)item; |
700 | if (item) { | 709 | if (item) { |
701 | switch (column){ | 710 | switch (column){ |
702 | case 1: | 711 | case 1: |
703 | mPriorityPopupMenu->popup(QCursor::pos ()); break; | 712 | mPriorityPopupMenu->popup(QCursor::pos ()); break; |
704 | case 2: | 713 | case 2: |
705 | mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break; | 714 | mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break; |
706 | case 3: | 715 | case 3: |
@@ -725,16 +734,25 @@ void KOTodoView::newSubTodo() | |||
725 | } | 734 | } |
726 | } | 735 | } |
727 | void KOTodoView::unparentTodo() | 736 | void KOTodoView::unparentTodo() |
728 | { | 737 | { |
729 | if (mActiveItem) { | 738 | if (mActiveItem) { |
730 | emit unparentTodoSignal(mActiveItem->todo()); | 739 | emit unparentTodoSignal(mActiveItem->todo()); |
731 | } | 740 | } |
732 | } | 741 | } |
742 | |||
743 | void KOTodoView::reparentTodo() | ||
744 | { | ||
745 | if (mActiveItem) { | ||
746 | qDebug("KOTodoView::reparentTodo() "); | ||
747 | topLevelWidget()->setCaption(i18n("Click on new parent item")); | ||
748 | pendingSubtodo = mActiveItem; | ||
749 | } | ||
750 | } | ||
733 | void KOTodoView::editTodo() | 751 | void KOTodoView::editTodo() |
734 | { | 752 | { |
735 | if (mActiveItem) { | 753 | if (mActiveItem) { |
736 | emit editTodoSignal(mActiveItem->todo()); | 754 | emit editTodoSignal(mActiveItem->todo()); |
737 | } | 755 | } |
738 | } | 756 | } |
739 | void KOTodoView::cloneTodo() | 757 | void KOTodoView::cloneTodo() |
740 | { | 758 | { |
@@ -838,32 +856,62 @@ void KOTodoView::changedCategories(int index) | |||
838 | mActiveItem->todo()->setCategories (categories); | 856 | mActiveItem->todo()->setCategories (categories); |
839 | mActiveItem->construct(); | 857 | mActiveItem->construct(); |
840 | mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); | 858 | mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); |
841 | todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED); | 859 | todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED); |
842 | } | 860 | } |
843 | } | 861 | } |
844 | void KOTodoView::itemDoubleClicked(QListViewItem *item) | 862 | void KOTodoView::itemDoubleClicked(QListViewItem *item) |
845 | { | 863 | { |
864 | if ( pendingSubtodo != 0 ) { | ||
865 | topLevelWidget()->setCaption(i18n("Reparenting aborted!")); | ||
866 | } | ||
867 | pendingSubtodo = 0; | ||
846 | if (!item) { | 868 | if (!item) { |
847 | newTodo(); | 869 | newTodo(); |
848 | return; | 870 | return; |
849 | } | 871 | } |
850 | if ( KOPrefs::instance()->mEditOnDoubleClick ) | 872 | if ( KOPrefs::instance()->mEditOnDoubleClick ) |
851 | editItem( item ); | 873 | editItem( item ); |
852 | else | 874 | else |
853 | showItem( item , QPoint(), 0 ); | 875 | showItem( item , QPoint(), 0 ); |
854 | } | 876 | } |
855 | void KOTodoView::itemClicked(QListViewItem *item) | 877 | void KOTodoView::itemClicked(QListViewItem *item) |
856 | { | 878 | { |
879 | |||
857 | if (!item) { | 880 | if (!item) { |
881 | if ( pendingSubtodo != 0 ) { | ||
882 | topLevelWidget()->setCaption(i18n("Reparenting aborted!")); | ||
883 | } | ||
884 | pendingSubtodo = 0; | ||
858 | return; | 885 | return; |
859 | } | 886 | } |
860 | |||
861 | KOTodoViewItem *todoItem = (KOTodoViewItem *)item; | 887 | KOTodoViewItem *todoItem = (KOTodoViewItem *)item; |
888 | if ( pendingSubtodo != 0 ) { | ||
889 | bool allowReparent = true; | ||
890 | QListViewItem *par = item; | ||
891 | while ( par ) { | ||
892 | if ( par == pendingSubtodo ) { | ||
893 | allowReparent = false; | ||
894 | break; | ||
895 | } | ||
896 | par = par->parent(); | ||
897 | } | ||
898 | if ( !allowReparent ) { | ||
899 | topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!")); | ||
900 | qDebug("Recursive reparenting not possible "); | ||
901 | pendingSubtodo = 0; | ||
902 | } else { | ||
903 | Todo* newParent = todoItem->todo(); | ||
904 | Todo* newSub = pendingSubtodo->todo(); | ||
905 | pendingSubtodo = 0; | ||
906 | emit reparentTodoSignal( newParent,newSub ); | ||
907 | return; | ||
908 | } | ||
909 | } | ||
862 | int completed = todoItem->todo()->isCompleted(); // Completed or not? | 910 | int completed = todoItem->todo()->isCompleted(); // Completed or not? |
863 | 911 | ||
864 | if (todoItem->isOn()) { | 912 | if (todoItem->isOn()) { |
865 | if (!completed) { | 913 | if (!completed) { |
866 | todoItem->todo()->setCompleted(QDateTime::currentDateTime()); | 914 | todoItem->todo()->setCompleted(QDateTime::currentDateTime()); |
867 | } | 915 | } |
868 | } else { | 916 | } else { |
869 | if (completed) { | 917 | if (completed) { |
@@ -969,26 +1017,58 @@ void KOTodoView::addQuickTodo() | |||
969 | mQuickAdd->setText(""); | 1017 | mQuickAdd->setText(""); |
970 | todoModified (todo, KOGlobals::EVENTADDED ); | 1018 | todoModified (todo, KOGlobals::EVENTADDED ); |
971 | updateView(); | 1019 | updateView(); |
972 | } | 1020 | } |
973 | void KOTodoView::keyPressEvent ( QKeyEvent * e ) | 1021 | void KOTodoView::keyPressEvent ( QKeyEvent * e ) |
974 | { | 1022 | { |
975 | // e->ignore(); | 1023 | // e->ignore(); |
976 | //return; | 1024 | //return; |
1025 | //qDebug("KOTodoView::keyPressEvent "); | ||
977 | switch ( e->key() ) { | 1026 | switch ( e->key() ) { |
978 | case Qt::Key_Down: | 1027 | case Qt::Key_Down: |
979 | case Qt::Key_Up: | 1028 | case Qt::Key_Up: |
980 | QWidget::keyPressEvent ( e ); | 1029 | QWidget::keyPressEvent ( e ); |
981 | break; | 1030 | break; |
982 | 1031 | ||
983 | case Qt::Key_Q: | 1032 | case Qt::Key_Q: |
984 | toggleQuickTodo(); | 1033 | toggleQuickTodo(); |
985 | break; | 1034 | break; |
986 | 1035 | case Qt::Key_U: | |
1036 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { | ||
1037 | mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); | ||
1038 | unparentTodo(); | ||
1039 | e->accept(); | ||
1040 | } else | ||
1041 | e->ignore(); | ||
1042 | break; | ||
1043 | case Qt::Key_S: | ||
1044 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { | ||
1045 | mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); | ||
1046 | reparentTodo(); | ||
1047 | e->accept(); | ||
1048 | } else | ||
1049 | e->ignore(); | ||
1050 | break; | ||
1051 | case Qt::Key_P: | ||
1052 | if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { | ||
1053 | mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); | ||
1054 | if ( pendingSubtodo ) | ||
1055 | itemClicked(mActiveItem); | ||
1056 | e->accept(); | ||
1057 | } else | ||
1058 | e->ignore(); | ||
1059 | break; | ||
1060 | case Qt::Key_Escape: | ||
1061 | if ( pendingSubtodo ) { | ||
1062 | itemClicked(0); | ||
1063 | e->accept(); | ||
1064 | } else | ||
1065 | e->ignore(); | ||
1066 | break; | ||
987 | default: | 1067 | default: |
988 | e->ignore(); | 1068 | e->ignore(); |
989 | } | 1069 | } |
990 | 1070 | ||
991 | if ( true ) { | 1071 | if ( true ) { |
992 | if ( e->key() == Qt::Key_I ) { | 1072 | if ( e->key() == Qt::Key_I ) { |
993 | KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem(); | 1073 | KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem(); |
994 | if ( cn ) { | 1074 | if ( cn ) { |