summaryrefslogtreecommitdiffabout
path: root/korganizer/kotodoview.cpp
Unidiff
Diffstat (limited to 'korganizer/kotodoview.cpp') (more/less context) (show whitespace changes)
-rw-r--r--korganizer/kotodoview.cpp88
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
@@ -202,24 +202,25 @@ void KOTodoListView::contentsMousePressEvent(QMouseEvent* e)
202 p.x() < header()->sectionPos(header()->mapToIndex(0))) { 202 p.x() < header()->sectionPos(header()->mapToIndex(0))) {
203 if (e->button()==Qt::LeftButton) { 203 if (e->button()==Qt::LeftButton) {
204 mPressPos = e->pos(); 204 mPressPos = e->pos();
205 mMousePressed = true; 205 mMousePressed = true;
206 } 206 }
207 } 207 }
208 } 208 }
209#endif 209#endif
210} 210}
211 211
212void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e) 212void 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) {
222// kdDebug() << "Start Drag for item " << item->text(0) << endl; 223// kdDebug() << "Start Drag for item " << item->text(0) << endl;
223 DndFactory factory( mCalendar ); 224 DndFactory factory( mCalendar );
224 ICalDrag *vd = factory.createDragTodo( 225 ICalDrag *vd = factory.createDragTodo(
225 ((KOTodoViewItem *)item)->todo(),viewport()); 226 ((KOTodoViewItem *)item)->todo(),viewport());
@@ -265,24 +266,26 @@ void KOTodoListView::keyPressEvent ( QKeyEvent * e )
265 } 266 }
266 267
267 // qDebug("KOTodoListView::keyPressEvent "); 268 // qDebug("KOTodoListView::keyPressEvent ");
268 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) { 269 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) {
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();
285} 288}
286void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e) 289void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e)
287{ 290{
288 QListView::contentsMouseReleaseEvent(e); 291 QListView::contentsMouseReleaseEvent(e);
@@ -405,52 +408,59 @@ KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) :
405 SLOT (moveTodo())); 408 SLOT (moveTodo()));
406 mItemPopupMenu->insertItem( i18n("Beam..."), this, 409 mItemPopupMenu->insertItem( i18n("Beam..."), this,
407 SLOT (beamTodo())); 410 SLOT (beamTodo()));
408 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this, 411 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this,
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
426 mPopupMenu = new QPopupMenu(this); 431 mPopupMenu = new QPopupMenu(this);
427 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this, 432 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this,
428 SLOT (newTodo()),0,1); 433 SLOT (newTodo()),0,1);
429 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"), 434 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"),
430 this, SLOT(purgeCompleted()),0,2); 435 this, SLOT(purgeCompleted()),0,2);
431 mPopupMenu->insertItem(i18n("Show Completed"), 436 mPopupMenu->insertItem(i18n("Show Completed"),
432 this, SLOT( toggleCompleted() ),0,3 ); 437 this, SLOT( toggleCompleted() ),0,3 );
433 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 438 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
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 * ) ) );
453 connect( mTodoListView, SIGNAL( collapsed( QListViewItem * ) ), 463 connect( mTodoListView, SIGNAL( collapsed( QListViewItem * ) ),
454 SLOT( itemStateChanged( QListViewItem * ) ) ); 464 SLOT( itemStateChanged( QListViewItem * ) ) );
455 465
456#if 0 466#if 0
@@ -686,25 +696,24 @@ void KOTodoView::editItem(QListViewItem *item )
686{ 696{
687 // qDebug("editItem(QListViewItem *item ) "); 697 // qDebug("editItem(QListViewItem *item ) ");
688 emit editTodoSignal(((KOTodoViewItem *)item)->todo()); 698 emit editTodoSignal(((KOTodoViewItem *)item)->todo());
689} 699}
690 700
691void KOTodoView::showItem(QListViewItem *item,const QPoint &,int) 701void 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
696void KOTodoView::popupMenu(QListViewItem *item,const QPoint &,int column) 706void 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:
707 moveTodo(); 716 moveTodo();
708 break; 717 break;
709 case 6: 718 case 6:
710 getCategoryPopupMenu((KOTodoViewItem *)item)->popup(QCursor::pos ()); break; 719 getCategoryPopupMenu((KOTodoViewItem *)item)->popup(QCursor::pos ()); break;
@@ -721,24 +730,33 @@ void KOTodoView::newTodo()
721void KOTodoView::newSubTodo() 730void KOTodoView::newSubTodo()
722{ 731{
723 if (mActiveItem) { 732 if (mActiveItem) {
724 emit newSubTodoSignal(mActiveItem->todo()); 733 emit newSubTodoSignal(mActiveItem->todo());
725 } 734 }
726} 735}
727void KOTodoView::unparentTodo() 736void 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
743void KOTodoView::reparentTodo()
744{
745 if (mActiveItem) {
746 qDebug("KOTodoView::reparentTodo() ");
747 topLevelWidget()->setCaption(i18n("Click on new parent item"));
748 pendingSubtodo = mActiveItem;
749 }
750}
733void KOTodoView::editTodo() 751void KOTodoView::editTodo()
734{ 752{
735 if (mActiveItem) { 753 if (mActiveItem) {
736 emit editTodoSignal(mActiveItem->todo()); 754 emit editTodoSignal(mActiveItem->todo());
737 } 755 }
738} 756}
739void KOTodoView::cloneTodo() 757void KOTodoView::cloneTodo()
740{ 758{
741 if (mActiveItem) { 759 if (mActiveItem) {
742 emit cloneTodoSignal((Incidence*)mActiveItem->todo()); 760 emit cloneTodoSignal((Incidence*)mActiveItem->todo());
743 } 761 }
744} 762}
@@ -834,40 +852,70 @@ void KOTodoView::changedCategories(int index)
834 categories.remove (mCategory[index]); 852 categories.remove (mCategory[index]);
835 else 853 else
836 categories.insert (categories.end(), mCategory[index]); 854 categories.insert (categories.end(), mCategory[index]);
837 categories.sort (); 855 categories.sort ();
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}
844void KOTodoView::itemDoubleClicked(QListViewItem *item) 862void 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}
855void KOTodoView::itemClicked(QListViewItem *item) 877void 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) {
870 todoItem->todo()->setCompleted(false); 918 todoItem->todo()->setCompleted(false);
871 } 919 }
872 } 920 }
873} 921}
@@ -965,34 +1013,66 @@ void KOTodoView::addQuickTodo()
965 if ( cf->isEnabled() ) 1013 if ( cf->isEnabled() )
966 todo->setSecrecy( cf->getSecrecy()); 1014 todo->setSecrecy( cf->getSecrecy());
967 } 1015 }
968 mCalendar->addTodo(todo); 1016 mCalendar->addTodo(todo);
969 mQuickAdd->setText(""); 1017 mQuickAdd->setText("");
970 todoModified (todo, KOGlobals::EVENTADDED ); 1018 todoModified (todo, KOGlobals::EVENTADDED );
971 updateView(); 1019 updateView();
972} 1020}
973void KOTodoView::keyPressEvent ( QKeyEvent * e ) 1021void 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 ) {
995 mActiveItem = cn; 1075 mActiveItem = cn;
996 KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); 1076 KOTodoViewItem* ci = (KOTodoViewItem*)( cn );
997 if ( ci ){ 1077 if ( ci ){
998 showTodo(); 1078 showTodo();