-rw-r--r-- | korganizer/koagenda.cpp | 11 | ||||
-rw-r--r-- | korganizer/koagendaview.cpp | 33 | ||||
-rw-r--r-- | korganizer/koeventviewer.cpp | 18 | ||||
-rw-r--r-- | korganizer/kotodoview.cpp | 13 | ||||
-rw-r--r-- | korganizer/kotodoviewitem.cpp | 7 |
5 files changed, 54 insertions, 28 deletions
diff --git a/korganizer/koagenda.cpp b/korganizer/koagenda.cpp index 002234d..7c41cab 100644 --- a/korganizer/koagenda.cpp +++ b/korganizer/koagenda.cpp | |||
@@ -1373,155 +1373,160 @@ void KOAgenda::hideUnused() | |||
1373 | // experimental only | 1373 | // experimental only |
1374 | // return; | 1374 | // return; |
1375 | KOAgendaItem *item; | 1375 | KOAgendaItem *item; |
1376 | for ( item=mUnusedItems.first(); item != 0; item=mUnusedItems.next() ) { | 1376 | for ( item=mUnusedItems.first(); item != 0; item=mUnusedItems.next() ) { |
1377 | item->hide(); | 1377 | item->hide(); |
1378 | } | 1378 | } |
1379 | } | 1379 | } |
1380 | 1380 | ||
1381 | 1381 | ||
1382 | KOAgendaItem *KOAgenda::getNewItem(Incidence * event,QDate qd, QWidget* view) | 1382 | KOAgendaItem *KOAgenda::getNewItem(Incidence * event,QDate qd, QWidget* view) |
1383 | { | 1383 | { |
1384 | 1384 | ||
1385 | KOAgendaItem *fi; | 1385 | KOAgendaItem *fi; |
1386 | for ( fi=mUnusedItems.first(); fi != 0; fi=mUnusedItems.next() ) { | 1386 | for ( fi=mUnusedItems.first(); fi != 0; fi=mUnusedItems.next() ) { |
1387 | if ( fi->incidence() == event ) { | 1387 | if ( fi->incidence() == event ) { |
1388 | mUnusedItems.remove(); | 1388 | mUnusedItems.remove(); |
1389 | fi->init( event, qd ); | 1389 | fi->init( event, qd ); |
1390 | return fi; | 1390 | return fi; |
1391 | } | 1391 | } |
1392 | } | 1392 | } |
1393 | fi=mUnusedItems.first(); | 1393 | fi=mUnusedItems.first(); |
1394 | if ( fi ) { | 1394 | if ( fi ) { |
1395 | mUnusedItems.remove(); | 1395 | mUnusedItems.remove(); |
1396 | fi->init( event, qd ); | 1396 | fi->init( event, qd ); |
1397 | return fi; | 1397 | return fi; |
1398 | } | 1398 | } |
1399 | // qDebug("new KOAgendaItem "); | 1399 | // qDebug("new KOAgendaItem "); |
1400 | 1400 | ||
1401 | KOAgendaItem* agendaItem = new KOAgendaItem( event, qd, view, mAllDayMode ); | 1401 | KOAgendaItem* agendaItem = new KOAgendaItem( event, qd, view, mAllDayMode ); |
1402 | agendaItem->installEventFilter(this); | 1402 | agendaItem->installEventFilter(this); |
1403 | addChild(agendaItem,0,0); | 1403 | addChild(agendaItem,0,0); |
1404 | return agendaItem; | 1404 | return agendaItem; |
1405 | } | 1405 | } |
1406 | KOAgendaItem * KOAgenda::getItemForTodo ( Todo * todo ) | 1406 | KOAgendaItem * KOAgenda::getItemForTodo ( Todo * todo ) |
1407 | { | 1407 | { |
1408 | KOAgendaItem *item; | 1408 | KOAgendaItem *item; |
1409 | for ( item=mItems.first(); item != 0; item=mItems.next() ) { | 1409 | for ( item=mItems.first(); item != 0; item=mItems.next() ) { |
1410 | if ( item->incidence() == todo ) { | 1410 | if ( item->incidence() == todo ) { |
1411 | mItems.remove(); | 1411 | mItems.remove(); |
1412 | return item; | 1412 | return item; |
1413 | } | 1413 | } |
1414 | } | 1414 | } |
1415 | return 0; | 1415 | return 0; |
1416 | } | 1416 | } |
1417 | 1417 | ||
1418 | 1418 | ||
1419 | void KOAgenda::updateTodo( Todo * todo, int days, bool remove) | 1419 | void KOAgenda::updateTodo( Todo * todo, int days, bool remove) |
1420 | { | 1420 | { |
1421 | 1421 | // ( todo->hasCompletedDate() && todo->completed().date() == currentDate )|| | |
1422 | KOAgendaItem *item; | 1422 | KOAgendaItem *item; |
1423 | item = getItemForTodo ( todo ); | 1423 | item = getItemForTodo ( todo ); |
1424 | //qDebug("KOAgenda::updateTodo %d %d %d %d", this, todo, days, remove); | 1424 | //qDebug("KOAgenda::updateTodo %d %d %d %d", this, todo, days, remove); |
1425 | if ( item ) { | 1425 | if ( item ) { |
1426 | blockSignals( true ); | 1426 | blockSignals( true ); |
1427 | //qDebug("item found "); | 1427 | //qDebug("item found "); |
1428 | item->hide(); | 1428 | item->hide(); |
1429 | item->setCellX(-2, -1 ); | 1429 | item->setCellX(-2, -1 ); |
1430 | item->select(false); | 1430 | item->select(false); |
1431 | mUnusedItems.append( item ); | 1431 | mUnusedItems.append( item ); |
1432 | mItems.remove( item ); | 1432 | mItems.remove( item ); |
1433 | QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems(); | 1433 | QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems(); |
1434 | KOAgendaItem *itemit; | 1434 | KOAgendaItem *itemit; |
1435 | //globalFlagBlockAgendaItemPaint = 1; | 1435 | //globalFlagBlockAgendaItemPaint = 1; |
1436 | for ( itemit=oldconflictItems.first(); itemit != 0; | 1436 | for ( itemit=oldconflictItems.first(); itemit != 0; |
1437 | itemit=oldconflictItems.next() ) { | 1437 | itemit=oldconflictItems.next() ) { |
1438 | if ( itemit != item ) | 1438 | if ( itemit != item ) |
1439 | placeSubCells(itemit); | 1439 | placeSubCells(itemit); |
1440 | } | 1440 | } |
1441 | qApp->processEvents(); | 1441 | qApp->processEvents(); |
1442 | //globalFlagBlockAgendaItemPaint = 0; | 1442 | //globalFlagBlockAgendaItemPaint = 0; |
1443 | for ( itemit=oldconflictItems.first(); itemit != 0; | 1443 | for ( itemit=oldconflictItems.first(); itemit != 0; |
1444 | itemit=oldconflictItems.next() ) { | 1444 | itemit=oldconflictItems.next() ) { |
1445 | globalFlagBlockAgendaItemUpdate = 0; | 1445 | globalFlagBlockAgendaItemUpdate = 0; |
1446 | if ( itemit != item ) | 1446 | if ( itemit != item ) |
1447 | itemit->repaintMe(); | 1447 | itemit->repaintMe(); |
1448 | globalFlagBlockAgendaItemUpdate = 1; | 1448 | globalFlagBlockAgendaItemUpdate = 1; |
1449 | itemit->repaint(); | 1449 | itemit->repaint(); |
1450 | } | 1450 | } |
1451 | blockSignals( false ); | 1451 | blockSignals( false ); |
1452 | } | 1452 | } |
1453 | if ( remove ) { | 1453 | if ( remove ) { |
1454 | //qDebug("remove****************************************** "); | 1454 | //qDebug("remove****************************************** "); |
1455 | return; | 1455 | return; |
1456 | } | 1456 | } |
1457 | //qDebug("updateTodo+++++++++++++++++++++++++++++++++++++ "); | 1457 | //qDebug("updateTodo+++++++++++++++++++++++++++++++++++++ "); |
1458 | bool overdue = (!todo->isCompleted()) && (todo->dtDue() < QDate::currentDate())&& ( KOPrefs::instance()->mShowTodoInAgenda ); | 1458 | bool overdue = (!todo->isCompleted()) && (todo->dtDue() < QDate::currentDate())&& ( KOPrefs::instance()->mShowTodoInAgenda ); |
1459 | QDate currentDate; | 1459 | QDate currentDate; |
1460 | QDateTime dt; | ||
1461 | if ( todo->hasCompletedDate() ) | ||
1462 | dt = todo->completed(); | ||
1463 | else | ||
1464 | dt = todo->dtDue(); | ||
1460 | if ( overdue ) { | 1465 | if ( overdue ) { |
1461 | currentDate = QDate::currentDate(); | 1466 | currentDate = QDate::currentDate(); |
1462 | days += todo->dtDue().date().daysTo( currentDate ); | 1467 | days += todo->dtDue().date().daysTo( currentDate ); |
1463 | } | 1468 | } |
1464 | else | 1469 | else |
1465 | currentDate = todo->dtDue().date(); | 1470 | currentDate = dt.date(); |
1466 | 1471 | ||
1467 | if ( todo->doesFloat() || overdue ) { | 1472 | if ( todo->doesFloat() || overdue ) { |
1468 | if ( ! mAllDayMode ) return; | 1473 | if ( ! mAllDayMode ) return; |
1469 | // aldayagenda | 1474 | // aldayagenda |
1470 | globalFlagBlockAgendaItemPaint = 1; | 1475 | globalFlagBlockAgendaItemPaint = 1; |
1471 | item = insertAllDayItem(todo, currentDate,days, days); | 1476 | item = insertAllDayItem(todo, currentDate,days, days); |
1472 | item->show(); | 1477 | item->show(); |
1473 | 1478 | ||
1474 | } | 1479 | } |
1475 | else { | 1480 | else { |
1476 | if ( mAllDayMode ) return; | 1481 | if ( mAllDayMode ) return; |
1477 | // mAgenda | 1482 | // mAgenda |
1478 | globalFlagBlockAgendaItemPaint = 1; | 1483 | globalFlagBlockAgendaItemPaint = 1; |
1479 | int endY = timeToY(todo->dtDue().time()) - 1; | 1484 | int endY = timeToY(dt.time()) - 1; |
1480 | int hi = 12/KOPrefs::instance()->mHourSize; | 1485 | int hi = 12/KOPrefs::instance()->mHourSize; |
1481 | int startY = endY - 1-hi; | 1486 | int startY = endY - 1-hi; |
1482 | item = insertItem(todo,currentDate,days,startY,endY); | 1487 | item = insertItem(todo,currentDate,days,startY,endY); |
1483 | item->show(); | 1488 | item->show(); |
1484 | } | 1489 | } |
1485 | qApp->processEvents(); | 1490 | qApp->processEvents(); |
1486 | globalFlagBlockAgendaItemPaint = 0; | 1491 | globalFlagBlockAgendaItemPaint = 0; |
1487 | QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems(); | 1492 | QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems(); |
1488 | KOAgendaItem *itemit; | 1493 | KOAgendaItem *itemit; |
1489 | for ( itemit=oldconflictItems.first(); itemit != 0; | 1494 | for ( itemit=oldconflictItems.first(); itemit != 0; |
1490 | itemit=oldconflictItems.next() ) { | 1495 | itemit=oldconflictItems.next() ) { |
1491 | globalFlagBlockAgendaItemUpdate = 0; | 1496 | globalFlagBlockAgendaItemUpdate = 0; |
1492 | itemit->repaintMe(); | 1497 | itemit->repaintMe(); |
1493 | globalFlagBlockAgendaItemUpdate = 1; | 1498 | globalFlagBlockAgendaItemUpdate = 1; |
1494 | itemit->repaint(); | 1499 | itemit->repaint(); |
1495 | } | 1500 | } |
1496 | globalFlagBlockAgendaItemUpdate = 0; | 1501 | globalFlagBlockAgendaItemUpdate = 0; |
1497 | item->repaintMe(); | 1502 | item->repaintMe(); |
1498 | globalFlagBlockAgendaItemUpdate = 1; | 1503 | globalFlagBlockAgendaItemUpdate = 1; |
1499 | item->repaint(); | 1504 | item->repaint(); |
1500 | } | 1505 | } |
1501 | /* | 1506 | /* |
1502 | Insert KOAgendaItem into agenda. | 1507 | Insert KOAgendaItem into agenda. |
1503 | */ | 1508 | */ |
1504 | KOAgendaItem *KOAgenda::insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom) | 1509 | KOAgendaItem *KOAgenda::insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom) |
1505 | { | 1510 | { |
1506 | //kdDebug() << "KOAgenda::insertItem:" << event->summary() << "-" << qd.toString() << " ;top, bottom:" << YTop << "," << YBottom << endl; | 1511 | //kdDebug() << "KOAgenda::insertItem:" << event->summary() << "-" << qd.toString() << " ;top, bottom:" << YTop << "," << YBottom << endl; |
1507 | 1512 | ||
1508 | if (mAllDayMode) { | 1513 | if (mAllDayMode) { |
1509 | kdDebug() << "KOAgenda: calling insertItem in all-day mode is illegal." << endl; | 1514 | kdDebug() << "KOAgenda: calling insertItem in all-day mode is illegal." << endl; |
1510 | return 0; | 1515 | return 0; |
1511 | } | 1516 | } |
1512 | 1517 | ||
1513 | KOAgendaItem *agendaItem = getNewItem(event,qd,viewport()); | 1518 | KOAgendaItem *agendaItem = getNewItem(event,qd,viewport()); |
1514 | //agendaItem->setFrameStyle(WinPanel|Raised); | 1519 | //agendaItem->setFrameStyle(WinPanel|Raised); |
1515 | 1520 | ||
1516 | int YSize = YBottom - YTop + 1; | 1521 | int YSize = YBottom - YTop + 1; |
1517 | if (YSize < 0) { | 1522 | if (YSize < 0) { |
1518 | kdDebug() << "KOAgenda::insertItem(): Text: " << agendaItem->text() << " YSize<0" << endl; | 1523 | kdDebug() << "KOAgenda::insertItem(): Text: " << agendaItem->text() << " YSize<0" << endl; |
1519 | YSize = 1; | 1524 | YSize = 1; |
1520 | } | 1525 | } |
1521 | int iheight = mGridSpacingY * YSize; | 1526 | int iheight = mGridSpacingY * YSize; |
1522 | 1527 | ||
1523 | agendaItem->resize(mGridSpacingX,iheight ); | 1528 | agendaItem->resize(mGridSpacingX,iheight ); |
1524 | agendaItem->setCellXY(X,YTop,YBottom); | 1529 | agendaItem->setCellXY(X,YTop,YBottom); |
1525 | agendaItem->setCellXWidth(X); | 1530 | agendaItem->setCellXWidth(X); |
1526 | 1531 | ||
1527 | //addChild(agendaItem,X*mGridSpacingX,YTop*mGridSpacingY); | 1532 | //addChild(agendaItem,X*mGridSpacingX,YTop*mGridSpacingY); |
diff --git a/korganizer/koagendaview.cpp b/korganizer/koagendaview.cpp index 1864e22..bbc43e4 100644 --- a/korganizer/koagendaview.cpp +++ b/korganizer/koagendaview.cpp | |||
@@ -905,202 +905,203 @@ void KOAgendaView::updateEventDates(KOAgendaItem *item, int type) | |||
905 | QDate startDate; | 905 | QDate startDate; |
906 | int lenInSecs; | 906 | int lenInSecs; |
907 | // if ( type == KOAgenda::RESIZETOP ) | 907 | // if ( type == KOAgenda::RESIZETOP ) |
908 | // qDebug("RESIZETOP "); | 908 | // qDebug("RESIZETOP "); |
909 | // if ( type == KOAgenda::RESIZEBOTTOM ) | 909 | // if ( type == KOAgenda::RESIZEBOTTOM ) |
910 | // qDebug("RESIZEBOTTOM "); | 910 | // qDebug("RESIZEBOTTOM "); |
911 | // if ( type == KOAgenda::MOVE ) | 911 | // if ( type == KOAgenda::MOVE ) |
912 | // qDebug("MOVE "); | 912 | // qDebug("MOVE "); |
913 | if ( item->incidence()->type() == "Event" ) { | 913 | if ( item->incidence()->type() == "Event" ) { |
914 | startDt =item->incidence()->dtStart(); | 914 | startDt =item->incidence()->dtStart(); |
915 | endDt = item->incidence()->dtEnd(); | 915 | endDt = item->incidence()->dtEnd(); |
916 | lenInSecs = startDt.secsTo( endDt ); | 916 | lenInSecs = startDt.secsTo( endDt ); |
917 | } | 917 | } |
918 | 918 | ||
919 | // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED ); | 919 | // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED ); |
920 | 920 | ||
921 | if ( item->incidence()->type()=="Todo" && item->mLastMoveXPos > 0 ) { | 921 | if ( item->incidence()->type()=="Todo" && item->mLastMoveXPos > 0 ) { |
922 | startDate = mSelectedDates[item->mLastMoveXPos]; | 922 | startDate = mSelectedDates[item->mLastMoveXPos]; |
923 | } else { | 923 | } else { |
924 | if (item->cellX() < 0) { | 924 | if (item->cellX() < 0) { |
925 | startDate = (mSelectedDates.first()).addDays(item->cellX()); | 925 | startDate = (mSelectedDates.first()).addDays(item->cellX()); |
926 | } else { | 926 | } else { |
927 | startDate = mSelectedDates[item->cellX()]; | 927 | startDate = mSelectedDates[item->cellX()]; |
928 | } | 928 | } |
929 | } | 929 | } |
930 | startDt.setDate(startDate); | 930 | startDt.setDate(startDate); |
931 | 931 | ||
932 | if (item->incidence()->doesFloat()) { | 932 | if (item->incidence()->doesFloat()) { |
933 | endDt.setDate(startDate.addDays(item->cellWidth() - 1)); | 933 | endDt.setDate(startDate.addDays(item->cellWidth() - 1)); |
934 | } else { | 934 | } else { |
935 | if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE ) | 935 | if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE ) |
936 | startDt.setTime(mAgenda->gyToTime(item->cellYTop())); | 936 | startDt.setTime(mAgenda->gyToTime(item->cellYTop())); |
937 | if ( item->incidence()->type() == "Event" ) { | 937 | if ( item->incidence()->type() == "Event" ) { |
938 | if ( type == KOAgenda::MOVE ) { | 938 | if ( type == KOAgenda::MOVE ) { |
939 | endDt = startDt.addSecs(lenInSecs); | 939 | endDt = startDt.addSecs(lenInSecs); |
940 | 940 | ||
941 | } else if ( type == KOAgenda::RESIZEBOTTOM ) { | 941 | } else if ( type == KOAgenda::RESIZEBOTTOM ) { |
942 | if (item->lastMultiItem()) { | 942 | if (item->lastMultiItem()) { |
943 | endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); | 943 | endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); |
944 | endDt.setDate(startDate. | 944 | endDt.setDate(startDate. |
945 | addDays(item->lastMultiItem()->cellX() - item->cellX())); | 945 | addDays(item->lastMultiItem()->cellX() - item->cellX())); |
946 | } else { | 946 | } else { |
947 | endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); | 947 | endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); |
948 | endDt.setDate(startDate); | 948 | endDt.setDate(startDate); |
949 | } | 949 | } |
950 | } | 950 | } |
951 | } else { | 951 | } else { |
952 | // todo | 952 | // todo |
953 | qDebug("tooooodoooooo "); | ||
953 | if (item->lastMultiItem()) { | 954 | if (item->lastMultiItem()) { |
954 | endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); | 955 | endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); |
955 | endDt.setDate(startDate. | 956 | endDt.setDate(startDate. |
956 | addDays(item->lastMultiItem()->cellX() - item->cellX())); | 957 | addDays(item->lastMultiItem()->cellX() - item->cellX())); |
957 | } else { | 958 | } else { |
958 | //qDebug("tem->cellYBottom() %d",item->cellYBottom() ); | 959 | //qDebug("tem->cellYBottom() %d",item->cellYBottom() ); |
959 | if ( item->cellYBottom() > 0 ) | 960 | if ( item->cellYBottom() > 0 ) |
960 | endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); | 961 | endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); |
961 | else | 962 | else |
962 | endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time()); | 963 | endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time()); |
963 | endDt.setDate(startDate); | 964 | endDt.setDate(startDate); |
964 | } | 965 | } |
965 | } | 966 | } |
966 | } | 967 | } |
967 | 968 | ||
968 | 969 | qDebug("to888"); | |
969 | if ( item->incidence()->type() == "Event" ) { | 970 | if ( item->incidence()->type() == "Event" ) { |
970 | item->incidence()->setDtStart(startDt); | 971 | item->incidence()->setDtStart(startDt); |
971 | (static_cast<Event*>(item->incidence()))->setDtEnd(endDt); | 972 | (static_cast<Event*>(item->incidence()))->setDtEnd(endDt); |
972 | } else if ( item->incidence()->type() == "Todo" ) { | 973 | } else if ( item->incidence()->type() == "Todo" ) { |
973 | (static_cast<Todo*>(item->incidence()))->setDtDue(endDt); | 974 | (static_cast<Todo*>(item->incidence()))->setDtDue(endDt); |
974 | } | 975 | } |
975 | //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() ); | 976 | //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() ); |
976 | item->incidence()->setRevision(item->incidence()->revision()+1); | 977 | item->incidence()->setRevision(item->incidence()->revision()+1); |
977 | item->setItemDate(startDt.date()); | 978 | item->setItemDate(startDt.date()); |
978 | //item->updateItem(); | 979 | //item->updateItem(); |
979 | if ( item->incidence()->type() == "Todo" ) { | 980 | if ( item->incidence()->type() == "Todo" ) { |
980 | emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED ); | 981 | emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED ); |
981 | 982 | ||
982 | } | 983 | } |
983 | else | 984 | else |
984 | emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED); | 985 | emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED); |
985 | item->updateItem(); | 986 | item->updateItem(); |
986 | } | 987 | } |
987 | 988 | ||
988 | void KOAgendaView::showDates( const QDate &start, const QDate &end ) | 989 | void KOAgendaView::showDates( const QDate &start, const QDate &end ) |
989 | { | 990 | { |
990 | // kdDebug() << "KOAgendaView::selectDates" << endl; | 991 | // kdDebug() << "KOAgendaView::selectDates" << endl; |
991 | 992 | ||
992 | mSelectedDates.clear(); | 993 | mSelectedDates.clear(); |
993 | // qDebug("KOAgendaView::showDates "); | 994 | // qDebug("KOAgendaView::showDates "); |
994 | QDate d = start; | 995 | QDate d = start; |
995 | while (d <= end) { | 996 | while (d <= end) { |
996 | mSelectedDates.append(d); | 997 | mSelectedDates.append(d); |
997 | d = d.addDays( 1 ); | 998 | d = d.addDays( 1 ); |
998 | } | 999 | } |
999 | 1000 | ||
1000 | // and update the view | 1001 | // and update the view |
1001 | fillAgenda(); | 1002 | fillAgenda(); |
1002 | } | 1003 | } |
1003 | 1004 | ||
1004 | 1005 | ||
1005 | void KOAgendaView::showEvents(QPtrList<Event>) | 1006 | void KOAgendaView::showEvents(QPtrList<Event>) |
1006 | { | 1007 | { |
1007 | kdDebug() << "KOAgendaView::showEvents() is not yet implemented" << endl; | 1008 | kdDebug() << "KOAgendaView::showEvents() is not yet implemented" << endl; |
1008 | } | 1009 | } |
1009 | 1010 | ||
1010 | void KOAgendaView::changeEventDisplay(Event *, int) | 1011 | void KOAgendaView::changeEventDisplay(Event *, int) |
1011 | { | 1012 | { |
1012 | // qDebug("KOAgendaView::changeEventDisplay "); | 1013 | // qDebug("KOAgendaView::changeEventDisplay "); |
1013 | // kdDebug() << "KOAgendaView::changeEventDisplay" << endl; | 1014 | // kdDebug() << "KOAgendaView::changeEventDisplay" << endl; |
1014 | // this should be re-written to be MUCH smarter. Right now we | 1015 | // this should be re-written to be MUCH smarter. Right now we |
1015 | // are just playing dumb. | 1016 | // are just playing dumb. |
1016 | fillAgenda(); | 1017 | fillAgenda(); |
1017 | } | 1018 | } |
1018 | 1019 | ||
1019 | void KOAgendaView::fillAgenda(const QDate &) | 1020 | void KOAgendaView::fillAgenda(const QDate &) |
1020 | { | 1021 | { |
1021 | // qDebug("KOAgendaView::fillAgenda "); | 1022 | // qDebug("KOAgendaView::fillAgenda "); |
1022 | fillAgenda(); | 1023 | fillAgenda(); |
1023 | } | 1024 | } |
1024 | 1025 | ||
1025 | void KOAgendaView::fillAgenda() | 1026 | void KOAgendaView::fillAgenda() |
1026 | { | 1027 | { |
1027 | if ( globalFlagBlockStartup ) | 1028 | if ( globalFlagBlockStartup ) |
1028 | return; | 1029 | return; |
1029 | if ( globalFlagBlockAgenda == 1 ) | 1030 | if ( globalFlagBlockAgenda == 1 ) |
1030 | return; | 1031 | return; |
1031 | //if ( globalFlagBlockAgenda == 2 ) | 1032 | //if ( globalFlagBlockAgenda == 2 ) |
1032 | //globalFlagBlockAgenda = 0; | 1033 | //globalFlagBlockAgenda = 0; |
1033 | // globalFlagBlockPainting = false; | 1034 | // globalFlagBlockPainting = false; |
1034 | if ( globalFlagBlockAgenda == 0 ) | 1035 | if ( globalFlagBlockAgenda == 0 ) |
1035 | globalFlagBlockAgenda = 1; | 1036 | globalFlagBlockAgenda = 1; |
1036 | // clearView(); | 1037 | // clearView(); |
1037 | //qDebug("fillAgenda()++++ "); | 1038 | //qDebug("fillAgenda()++++ "); |
1038 | globalFlagBlockAgendaItemPaint = 1; | 1039 | globalFlagBlockAgendaItemPaint = 1; |
1039 | mAllDayAgenda->changeColumns(mSelectedDates.count()); | 1040 | mAllDayAgenda->changeColumns(mSelectedDates.count()); |
1040 | mAgenda->changeColumns(mSelectedDates.count()); | 1041 | mAgenda->changeColumns(mSelectedDates.count()); |
1041 | qApp->processEvents(); | 1042 | qApp->processEvents(); |
1042 | mEventIndicatorTop->changeColumns(mSelectedDates.count()); | 1043 | mEventIndicatorTop->changeColumns(mSelectedDates.count()); |
1043 | mEventIndicatorBottom->changeColumns(mSelectedDates.count()); | 1044 | mEventIndicatorBottom->changeColumns(mSelectedDates.count()); |
1044 | setHolidayMasks(); | 1045 | setHolidayMasks(); |
1045 | 1046 | ||
1046 | //mAgenda->hideUnused(); | 1047 | //mAgenda->hideUnused(); |
1047 | //mAllDayAgenda->hideUnused(); | 1048 | //mAllDayAgenda->hideUnused(); |
1048 | 1049 | ||
1049 | // mAgenda->blockNextRepaint( false ); | 1050 | // mAgenda->blockNextRepaint( false ); |
1050 | // mAgenda->viewport()->repaint(); | 1051 | // mAgenda->viewport()->repaint(); |
1051 | // mAgenda->blockNextRepaint( true ); | 1052 | // mAgenda->blockNextRepaint( true ); |
1052 | mMinY.resize(mSelectedDates.count()); | 1053 | mMinY.resize(mSelectedDates.count()); |
1053 | mMaxY.resize(mSelectedDates.count()); | 1054 | mMaxY.resize(mSelectedDates.count()); |
1054 | 1055 | ||
1055 | QPtrList<Event> dayEvents; | 1056 | QPtrList<Event> dayEvents; |
1056 | 1057 | ||
1057 | // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. | 1058 | // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. |
1058 | // Therefore, get all of them. | 1059 | // Therefore, gtodoset all of them. |
1059 | QPtrList<Todo> todos = calendar()->todos(); | 1060 | QPtrList<Todo> todos = calendar()->todos(); |
1060 | 1061 | ||
1061 | mAgenda->setDateList(mSelectedDates); | 1062 | mAgenda->setDateList(mSelectedDates); |
1062 | 1063 | ||
1063 | QDate today = QDate::currentDate(); | 1064 | QDate today = QDate::currentDate(); |
1064 | 1065 | ||
1065 | DateList::ConstIterator dit; | 1066 | DateList::ConstIterator dit; |
1066 | int curCol = 0; | 1067 | int curCol = 0; |
1067 | for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { | 1068 | for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { |
1068 | QDate currentDate = *dit; | 1069 | QDate currentDate = *dit; |
1069 | // kdDebug() << "KOAgendaView::fillAgenda(): " << currentDate.toString() | 1070 | // kdDebug() << "KOAgendaView::fillAgenda(): " << currentDate.toString() |
1070 | // << endl; | 1071 | // << endl; |
1071 | 1072 | ||
1072 | dayEvents = calendar()->events(currentDate,true); | 1073 | dayEvents = calendar()->events(currentDate,true); |
1073 | 1074 | ||
1074 | // Default values, which can never be reached | 1075 | // Default values, which can never be reached |
1075 | mMinY[curCol] = mAgenda->timeToY(QTime(23,59)) + 1; | 1076 | mMinY[curCol] = mAgenda->timeToY(QTime(23,59)) + 1; |
1076 | mMaxY[curCol] = mAgenda->timeToY(QTime(0,0)) - 1; | 1077 | mMaxY[curCol] = mAgenda->timeToY(QTime(0,0)) - 1; |
1077 | 1078 | ||
1078 | unsigned int numEvent; | 1079 | unsigned int numEvent; |
1079 | for(numEvent=0;numEvent<dayEvents.count();++numEvent) { | 1080 | for(numEvent=0;numEvent<dayEvents.count();++numEvent) { |
1080 | Event *event = dayEvents.at(numEvent); | 1081 | Event *event = dayEvents.at(numEvent); |
1081 | if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") ) | 1082 | if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") ) |
1082 | if ( event->uid().left(15) == QString("last-syncEvent-") ) | 1083 | if ( event->uid().left(15) == QString("last-syncEvent-") ) |
1083 | continue; | 1084 | continue; |
1084 | // kdDebug() << " Event: " << event->summary() << endl; | 1085 | // kdDebug() << " Event: " << event->summary() << endl; |
1085 | 1086 | ||
1086 | int beginX = currentDate.daysTo(event->dtStart().date()) + curCol; | 1087 | int beginX = currentDate.daysTo(event->dtStart().date()) + curCol; |
1087 | int endX = currentDate.daysTo(event->dtEnd().date()) + curCol; | 1088 | int endX = currentDate.daysTo(event->dtEnd().date()) + curCol; |
1088 | 1089 | ||
1089 | // kdDebug() << " beginX: " << beginX << " endX: " << endX << endl; | 1090 | // kdDebug() << " beginX: " << beginX << " endX: " << endX << endl; |
1090 | 1091 | ||
1091 | if (event->doesFloat()) { | 1092 | if (event->doesFloat()) { |
1092 | if (event->recurrence()->doesRecur()) { | 1093 | if (event->recurrence()->doesRecur()) { |
1093 | mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol); | 1094 | mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol); |
1094 | } else { | 1095 | } else { |
1095 | if (beginX <= 0 && curCol == 0) { | 1096 | if (beginX <= 0 && curCol == 0) { |
1096 | mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); | 1097 | mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); |
1097 | } else if (beginX == curCol) { | 1098 | } else if (beginX == curCol) { |
1098 | mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); | 1099 | mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); |
1099 | } | 1100 | } |
1100 | } | 1101 | } |
1101 | } else if (event->isMultiDay()) { | 1102 | } else if (event->isMultiDay()) { |
1102 | if ( event->doesRecur () ) { | 1103 | if ( event->doesRecur () ) { |
1103 | QDate dateit = currentDate; | 1104 | QDate dateit = currentDate; |
1104 | int count = 0; | 1105 | int count = 0; |
1105 | int max = event->dtStart().daysTo( event->dtEnd() ) +2; | 1106 | int max = event->dtStart().daysTo( event->dtEnd() ) +2; |
1106 | while (! event->recursOn( dateit ) && count <= max ) { | 1107 | while (! event->recursOn( dateit ) && count <= max ) { |
@@ -1110,99 +1111,103 @@ void KOAgendaView::fillAgenda() | |||
1110 | bool ok; | 1111 | bool ok; |
1111 | QDateTime nextOcstart = event->getNextOccurence( QDateTime(dateit) ,&ok ); | 1112 | QDateTime nextOcstart = event->getNextOccurence( QDateTime(dateit) ,&ok ); |
1112 | if ( ok ) | 1113 | if ( ok ) |
1113 | { | 1114 | { |
1114 | int secs = event->dtStart().secsTo( event->dtEnd() ); | 1115 | int secs = event->dtStart().secsTo( event->dtEnd() ); |
1115 | QDateTime nextOcend =nextOcstart.addSecs( secs ); ; | 1116 | QDateTime nextOcend =nextOcstart.addSecs( secs ); ; |
1116 | beginX = currentDate.daysTo(nextOcstart.date()) + curCol; | 1117 | beginX = currentDate.daysTo(nextOcstart.date()) + curCol; |
1117 | endX = currentDate.daysTo(nextOcend.date()) + curCol; | 1118 | endX = currentDate.daysTo(nextOcend.date()) + curCol; |
1118 | 1119 | ||
1119 | } | 1120 | } |
1120 | } | 1121 | } |
1121 | int startY = mAgenda->timeToY(event->dtStart().time()); | 1122 | int startY = mAgenda->timeToY(event->dtStart().time()); |
1122 | int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; | 1123 | int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; |
1123 | //qDebug("insert %d %d %d %d %d ",beginX,endX,startY,endY , curCol ); | 1124 | //qDebug("insert %d %d %d %d %d ",beginX,endX,startY,endY , curCol ); |
1124 | if ((beginX <= 0 && curCol == 0) || beginX == curCol) { | 1125 | if ((beginX <= 0 && curCol == 0) || beginX == curCol) { |
1125 | //qDebug("insert!!! "); | 1126 | //qDebug("insert!!! "); |
1126 | mAgenda->insertMultiItem(event,currentDate,beginX,endX,startY,endY); | 1127 | mAgenda->insertMultiItem(event,currentDate,beginX,endX,startY,endY); |
1127 | } | 1128 | } |
1128 | if (beginX == curCol) { | 1129 | if (beginX == curCol) { |
1129 | mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); | 1130 | mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); |
1130 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; | 1131 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; |
1131 | } else if (endX == curCol) { | 1132 | } else if (endX == curCol) { |
1132 | mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); | 1133 | mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); |
1133 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; | 1134 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; |
1134 | } else { | 1135 | } else { |
1135 | mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); | 1136 | mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); |
1136 | mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); | 1137 | mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); |
1137 | } | 1138 | } |
1138 | } else { | 1139 | } else { |
1139 | int startY = mAgenda->timeToY(event->dtStart().time()); | 1140 | int startY = mAgenda->timeToY(event->dtStart().time()); |
1140 | int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; | 1141 | int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; |
1141 | if (endY < startY) endY = startY; | 1142 | if (endY < startY) endY = startY; |
1142 | mAgenda->insertItem(event,currentDate,curCol,startY,endY); | 1143 | mAgenda->insertItem(event,currentDate,curCol,startY,endY); |
1143 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; | 1144 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; |
1144 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; | 1145 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; |
1145 | } | 1146 | } |
1146 | } | 1147 | } |
1147 | // ---------- [display Todos -------------- | 1148 | // ---------- [display Todos -------------- |
1148 | unsigned int numTodo; | 1149 | unsigned int numTodo; |
1149 | for (numTodo = 0; numTodo < todos.count(); ++numTodo) { | 1150 | for (numTodo = 0; numTodo < todos.count(); ++numTodo) { |
1150 | Todo *todo = todos.at(numTodo); | 1151 | Todo *todo = todos.at(numTodo); |
1151 | 1152 | ||
1152 | if ( ! todo->hasDueDate() && !todo->hasCompletedDate()) continue; // todo shall not be displayed if it has no date | 1153 | if ( ! todo->hasDueDate() && !todo->hasCompletedDate()) continue; // todo shall not be displayed if it has no date |
1153 | 1154 | ||
1154 | // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. | 1155 | // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. |
1155 | // Already completed items can be displayed on their original due date | 1156 | // Already completed items can be displayed on their original due date |
1156 | //if not KOPrefs::instance()->mShowTodoInAgenda, show overdue in agenda | 1157 | //if not KOPrefs::instance()->mShowTodoInAgenda, show overdue in agenda |
1157 | bool overdue = (!todo->isCompleted()) && (todo->dtDue() < today) && KOPrefs::instance()->mShowTodoInAgenda; | 1158 | bool overdue = (!todo->isCompleted()) && (todo->dtDue() < today) && KOPrefs::instance()->mShowTodoInAgenda; |
1158 | 1159 | bool fillIn = false; | |
1159 | if ( ((todo->dtDue().date() == currentDate) && !overdue) || ( todo->hasCompletedDate() && todo->completed().date() == currentDate )|| | 1160 | if ( todo->hasCompletedDate() && todo->completed().date() == currentDate ) |
1160 | ((currentDate == today) && overdue) ) { | 1161 | fillIn = true; |
1162 | if ( ! fillIn && !todo->hasCompletedDate() ) | ||
1163 | fillIn = ((todo->dtDue().date() == currentDate) && !overdue) || ((currentDate == today) && overdue); | ||
1164 | qDebug("refill todo "); | ||
1165 | if ( fillIn ) { | ||
1161 | if ( (todo->doesFloat() || overdue ) && !todo->hasCompletedDate() ) { // Todo has no due-time set or is already overdue | 1166 | if ( (todo->doesFloat() || overdue ) && !todo->hasCompletedDate() ) { // Todo has no due-time set or is already overdue |
1162 | if ( KOPrefs::instance()->mShowTodoInAgenda ) | 1167 | if ( KOPrefs::instance()->mShowTodoInAgenda ) |
1163 | mAllDayAgenda->insertAllDayItem(todo, currentDate, curCol, curCol); | 1168 | mAllDayAgenda->insertAllDayItem(todo, currentDate, curCol, curCol); |
1164 | } | 1169 | } |
1165 | else { | 1170 | else { |
1166 | QDateTime dt; | 1171 | QDateTime dt; |
1167 | if ( todo->hasCompletedDate() ) | 1172 | if ( todo->hasCompletedDate() ) |
1168 | dt = todo->completed(); | 1173 | dt = todo->completed(); |
1169 | else | 1174 | else |
1170 | dt = todo->dtDue();; | 1175 | dt = todo->dtDue();; |
1171 | 1176 | ||
1172 | 1177 | ||
1173 | int endY = mAgenda->timeToY(dt.time()) - 1; | 1178 | int endY = mAgenda->timeToY(dt.time()) - 1; |
1174 | int hi = (18/KOPrefs::instance()->mHourSize); | 1179 | int hi = (18/KOPrefs::instance()->mHourSize); |
1175 | //qDebug("hei %d ",KOPrefs::instance()->mHourSize); | 1180 | //qDebug("hei %d ",KOPrefs::instance()->mHourSize); |
1176 | int startY = endY -hi; | 1181 | int startY = endY -hi; |
1177 | 1182 | ||
1178 | mAgenda->insertItem(todo,currentDate,curCol,startY,endY); | 1183 | mAgenda->insertItem(todo,currentDate,curCol,startY,endY); |
1179 | 1184 | ||
1180 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; | 1185 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; |
1181 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; | 1186 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; |
1182 | } | 1187 | } |
1183 | } | 1188 | } |
1184 | } | 1189 | } |
1185 | // ---------- display Todos] -------------- | 1190 | // ---------- display Todos] -------------- |
1186 | 1191 | ||
1187 | ++curCol; | 1192 | ++curCol; |
1188 | } | 1193 | } |
1189 | mAgenda->hideUnused(); | 1194 | mAgenda->hideUnused(); |
1190 | mAllDayAgenda->hideUnused(); | 1195 | mAllDayAgenda->hideUnused(); |
1191 | mAgenda->checkScrollBoundaries(); | 1196 | mAgenda->checkScrollBoundaries(); |
1192 | 1197 | ||
1193 | deleteSelectedDateTime(); | 1198 | deleteSelectedDateTime(); |
1194 | 1199 | ||
1195 | createDayLabels(); | 1200 | createDayLabels(); |
1196 | emit incidenceSelected( 0 ); | 1201 | emit incidenceSelected( 0 ); |
1197 | 1202 | ||
1198 | if ( globalFlagBlockAgenda == 2 ) { | 1203 | if ( globalFlagBlockAgenda == 2 ) { |
1199 | if ( KOPrefs::instance()->mSetTimeToDayStartAt ) | 1204 | if ( KOPrefs::instance()->mSetTimeToDayStartAt ) |
1200 | setStartHour( KOPrefs::instance()->mDayBegins ); | 1205 | setStartHour( KOPrefs::instance()->mDayBegins ); |
1201 | else if ( KOPrefs::instance()->mCenterOnCurrentTime ) | 1206 | else if ( KOPrefs::instance()->mCenterOnCurrentTime ) |
1202 | setStartHour( QTime::currentTime ().hour() ); | 1207 | setStartHour( QTime::currentTime ().hour() ); |
1203 | // qApp->processEvents(); | 1208 | // qApp->processEvents(); |
1204 | } | 1209 | } |
1205 | qApp->processEvents(); | 1210 | qApp->processEvents(); |
1206 | //qDebug("qApp->processEvents(); END "); | 1211 | //qDebug("qApp->processEvents(); END "); |
1207 | globalFlagBlockAgenda = 0; | 1212 | globalFlagBlockAgenda = 0; |
1208 | 1213 | ||
@@ -1458,82 +1463,88 @@ void KOAgendaView::newTimeSpanSelected(int gxStart, int gyStart, | |||
1458 | int gxEnd, int gyEnd) | 1463 | int gxEnd, int gyEnd) |
1459 | { | 1464 | { |
1460 | if (!mSelectedDates.count()) return; | 1465 | if (!mSelectedDates.count()) return; |
1461 | 1466 | ||
1462 | QDate dayStart = mSelectedDates[gxStart]; | 1467 | QDate dayStart = mSelectedDates[gxStart]; |
1463 | QDate dayEnd = mSelectedDates[gxEnd]; | 1468 | QDate dayEnd = mSelectedDates[gxEnd]; |
1464 | 1469 | ||
1465 | QTime timeStart = mAgenda->gyToTime(gyStart); | 1470 | QTime timeStart = mAgenda->gyToTime(gyStart); |
1466 | QTime timeEnd = mAgenda->gyToTime( gyEnd + 1 ); | 1471 | QTime timeEnd = mAgenda->gyToTime( gyEnd + 1 ); |
1467 | 1472 | ||
1468 | QDateTime dtStart(dayStart,timeStart); | 1473 | QDateTime dtStart(dayStart,timeStart); |
1469 | QDateTime dtEnd(dayEnd,timeEnd); | 1474 | QDateTime dtEnd(dayEnd,timeEnd); |
1470 | 1475 | ||
1471 | mTimeSpanBegin = dtStart; | 1476 | mTimeSpanBegin = dtStart; |
1472 | mTimeSpanEnd = dtEnd; | 1477 | mTimeSpanEnd = dtEnd; |
1473 | 1478 | ||
1474 | } | 1479 | } |
1475 | 1480 | ||
1476 | void KOAgendaView::deleteSelectedDateTime() | 1481 | void KOAgendaView::deleteSelectedDateTime() |
1477 | { | 1482 | { |
1478 | mTimeSpanBegin.setDate(QDate()); | 1483 | mTimeSpanBegin.setDate(QDate()); |
1479 | mTimeSpanEnd.setDate(QDate()); | 1484 | mTimeSpanEnd.setDate(QDate()); |
1480 | mTimeSpanInAllDay = false; | 1485 | mTimeSpanInAllDay = false; |
1481 | } | 1486 | } |
1482 | 1487 | ||
1483 | void KOAgendaView::keyPressEvent ( QKeyEvent * e ) | 1488 | void KOAgendaView::keyPressEvent ( QKeyEvent * e ) |
1484 | { | 1489 | { |
1485 | e->ignore(); | 1490 | e->ignore(); |
1486 | } | 1491 | } |
1487 | 1492 | ||
1488 | void KOAgendaView::scrollOneHourUp() | 1493 | void KOAgendaView::scrollOneHourUp() |
1489 | { | 1494 | { |
1490 | 1495 | ||
1491 | mAgenda->scrollBy ( 0, -mAgenda->contentsHeight () / 24 ); | 1496 | mAgenda->scrollBy ( 0, -mAgenda->contentsHeight () / 24 ); |
1492 | } | 1497 | } |
1493 | void KOAgendaView::scrollOneHourDown() | 1498 | void KOAgendaView::scrollOneHourDown() |
1494 | { | 1499 | { |
1495 | mAgenda->scrollBy ( 0, mAgenda->contentsHeight () / 24 ); | 1500 | mAgenda->scrollBy ( 0, mAgenda->contentsHeight () / 24 ); |
1496 | } | 1501 | } |
1497 | 1502 | ||
1498 | void KOAgendaView::setStartHour( int h ) | 1503 | void KOAgendaView::setStartHour( int h ) |
1499 | { | 1504 | { |
1500 | mAgenda->setStartHour( h ); | 1505 | mAgenda->setStartHour( h ); |
1501 | 1506 | ||
1502 | } | 1507 | } |
1503 | 1508 | ||
1504 | void KOAgendaView::updateTodo( Todo * t, int ) | 1509 | void KOAgendaView::updateTodo( Todo * t, int ) |
1505 | { | 1510 | { |
1506 | 1511 | ||
1507 | bool remove = false; | 1512 | bool remove = false; |
1508 | bool removeAD = false; | 1513 | bool removeAD = false; |
1509 | if ( ! t->hasDueDate() ) { | 1514 | QDate da; |
1515 | if ( t->hasCompletedDate() ) | ||
1516 | da = t->completed().date(); | ||
1517 | else | ||
1518 | da = t->dtDue().date(); | ||
1519 | if ( ! t->hasDueDate() && !t->hasCompletedDate() ) { | ||
1510 | remove = true; | 1520 | remove = true; |
1511 | removeAD = true; | 1521 | removeAD = true; |
1512 | } | 1522 | } |
1513 | else { | 1523 | else { |
1514 | bool overdue = (!t->isCompleted()) && (t->dtDue() < QDate::currentDate()) && KOPrefs::instance()->mShowTodoInAgenda ; | 1524 | bool overdue = (!t->isCompleted()) && (t->dtDue() < QDate::currentDate()) && KOPrefs::instance()->mShowTodoInAgenda ; |
1515 | if ( overdue && | 1525 | if ( overdue && |
1516 | QDate::currentDate() >= mSelectedDates.first() && | 1526 | QDate::currentDate() >= mSelectedDates.first() && |
1517 | QDate::currentDate() <= mSelectedDates.last()) { | 1527 | QDate::currentDate() <= mSelectedDates.last()) { |
1518 | removeAD = false; | 1528 | removeAD = false; |
1519 | remove = true; | 1529 | remove = true; |
1520 | } | 1530 | } |
1521 | else { | 1531 | else { |
1522 | if ( t->dtDue().date() < mSelectedDates.first() || | 1532 | |
1523 | t->dtDue().date() > mSelectedDates.last() ) { | 1533 | if ( da < mSelectedDates.first() || |
1534 | da > mSelectedDates.last() ) { | ||
1524 | remove = true; | 1535 | remove = true; |
1525 | removeAD = true; | 1536 | removeAD = true; |
1526 | } else { | 1537 | } else { |
1527 | remove = t->doesFloat(); | 1538 | remove = t->doesFloat() && !t->hasCompletedDate(); |
1528 | removeAD = !remove; | 1539 | removeAD = !remove; |
1529 | } | 1540 | } |
1530 | } | 1541 | } |
1531 | } | 1542 | } |
1532 | int days = mSelectedDates.first().daysTo( t->dtDue().date() ); | 1543 | int days = mSelectedDates.first().daysTo( da ); |
1533 | // qDebug("daysto %d ", days ); | 1544 | // qDebug("daysto %d ", days ); |
1534 | mAgenda->updateTodo( t , days, remove); | 1545 | mAgenda->updateTodo( t , days, remove); |
1535 | if ( KOPrefs::instance()->mShowTodoInAgenda ) | 1546 | if ( KOPrefs::instance()->mShowTodoInAgenda ) |
1536 | mAllDayAgenda->updateTodo( t , days, removeAD); | 1547 | mAllDayAgenda->updateTodo( t , days, removeAD); |
1537 | //qDebug("KOAgendaView::updateTodo( Todo *, int ) "); | 1548 | //qDebug("KOAgendaView::updateTodo( Todo *, int ) "); |
1538 | 1549 | ||
1539 | } | 1550 | } |
diff --git a/korganizer/koeventviewer.cpp b/korganizer/koeventviewer.cpp index 36a2947..7dc1880 100644 --- a/korganizer/koeventviewer.cpp +++ b/korganizer/koeventviewer.cpp | |||
@@ -302,136 +302,138 @@ void KOEventViewer::appendEvent(Event *event, int mode ) | |||
302 | QString s =i18n("( %1 min before )").arg( min ); | 302 | QString s =i18n("( %1 min before )").arg( min ); |
303 | addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); | 303 | addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); |
304 | addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); | 304 | addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); |
305 | //addTag("p",s); | 305 | //addTag("p",s); |
306 | } | 306 | } |
307 | 307 | ||
308 | addTag("b",i18n("Access: ")); | 308 | addTag("b",i18n("Access: ")); |
309 | mText.append(event->secrecyStr()+"<br>"); | 309 | mText.append(event->secrecyStr()+"<br>"); |
310 | if (!event->description().isEmpty()) { | 310 | if (!event->description().isEmpty()) { |
311 | addTag("p",i18n("<b>Details: </b>")); | 311 | addTag("p",i18n("<b>Details: </b>")); |
312 | addTag("p",event->description()); | 312 | addTag("p",event->description()); |
313 | } | 313 | } |
314 | 314 | ||
315 | formatCategories(event); | 315 | formatCategories(event); |
316 | 316 | ||
317 | formatReadOnly(event); | 317 | formatReadOnly(event); |
318 | formatAttendees(event); | 318 | formatAttendees(event); |
319 | 319 | ||
320 | setText(mText); | 320 | setText(mText); |
321 | //QWhatsThis::add(this,mText); | 321 | //QWhatsThis::add(this,mText); |
322 | 322 | ||
323 | } | 323 | } |
324 | 324 | ||
325 | void KOEventViewer::appendTodo(Todo *event, int mode ) | 325 | void KOEventViewer::appendTodo(Todo *event, int mode ) |
326 | { | 326 | { |
327 | mMailSubject = ""; | 327 | mMailSubject = ""; |
328 | mCurrentIncidence = event; | 328 | mCurrentIncidence = event; |
329 | topLevelWidget()->setCaption(i18n("Todo Viewer")); | 329 | topLevelWidget()->setCaption(i18n("Todo Viewer")); |
330 | bool shortDate = KOPrefs::instance()->mShortDateInViewer; | 330 | bool shortDate = KOPrefs::instance()->mShortDateInViewer; |
331 | if (mode == 0 ) | 331 | if (mode == 0 ) |
332 | addTag("h2",event->summary()); | 332 | addTag("h2",event->summary()); |
333 | else { | 333 | else { |
334 | if ( mColorMode == 1 ) { | 334 | if ( mColorMode == 1 ) { |
335 | mText +="<font color=\"#00A000\">"; | 335 | mText +="<font color=\"#00A000\">"; |
336 | } | 336 | } |
337 | if ( mColorMode == 2 ) { | 337 | if ( mColorMode == 2 ) { |
338 | mText +="<font color=\"#B00000\">"; | 338 | mText +="<font color=\"#B00000\">"; |
339 | } | 339 | } |
340 | if ( mode == 1 ) { | 340 | if ( mode == 1 ) { |
341 | addTag("h2",i18n( "Local: " ) +event->summary()); | 341 | addTag("h2",i18n( "Local: " ) +event->summary()); |
342 | } else { | 342 | } else { |
343 | addTag("h2",i18n( "Remote: " ) +event->summary()); | 343 | addTag("h2",i18n( "Remote: " ) +event->summary()); |
344 | } | 344 | } |
345 | addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); | 345 | addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); |
346 | if ( mColorMode ) | 346 | if ( mColorMode ) |
347 | mText += "</font>"; | 347 | mText += "</font>"; |
348 | } | 348 | } |
349 | mMailSubject += i18n( "Todo " )+ event->summary(); | 349 | mMailSubject += i18n( "Todo " )+ event->summary(); |
350 | |||
351 | if ( event->percentComplete() == 100 && event->hasCompletedDate() ) { | ||
352 | mText +="<font color=\"#B00000\">"; | ||
353 | addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) ); | ||
354 | mText += "</font>"; | ||
355 | } else { | ||
356 | mText.append(i18n("<p><i>%1 % completed</i></p>") | ||
357 | .arg(event->percentComplete())); | ||
358 | } | ||
359 | |||
350 | if (event->cancelled ()) { | 360 | if (event->cancelled ()) { |
351 | mText +="<font color=\"#B00000\">"; | 361 | mText +="<font color=\"#B00000\">"; |
352 | addTag("i",i18n("This todo has been cancelled!")); | 362 | addTag("i",i18n("This todo has been cancelled!")); |
353 | mText.append("<br>"); | 363 | mText.append("<br>"); |
354 | mText += "</font>"; | 364 | mText += "</font>"; |
355 | mMailSubject += i18n("(cancelled)"); | 365 | mMailSubject += i18n("(cancelled)"); |
356 | } | 366 | } |
357 | 367 | ||
358 | if (!event->location().isEmpty()) { | 368 | if (!event->location().isEmpty()) { |
359 | addTag("b",i18n("Location: ")); | 369 | addTag("b",i18n("Location: ")); |
360 | mText.append(event->location()+"<br>"); | 370 | mText.append(event->location()+"<br>"); |
361 | mMailSubject += i18n(" at ") + event->location(); | 371 | mMailSubject += i18n(" at ") + event->location(); |
362 | } | 372 | } |
363 | if (event->hasStartDate()) { | 373 | if (event->hasStartDate()) { |
364 | mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer))); | 374 | mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer))); |
365 | } | 375 | } |
366 | if (event->hasDueDate()) { | 376 | if (event->hasDueDate()) { |
367 | mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer))); | 377 | mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer))); |
368 | mMailSubject += i18n(" - " )+event->dtDueStr( true ); | 378 | mMailSubject += i18n(" - " )+event->dtDueStr( true ); |
369 | } | 379 | } |
370 | addTag("b",i18n("Access: ")); | 380 | addTag("b",i18n("Access: ")); |
371 | mText.append(event->secrecyStr()+"<br>"); | 381 | mText.append(event->secrecyStr()+"<br>"); |
372 | if (!event->description().isEmpty()) { | 382 | if (!event->description().isEmpty()) { |
373 | addTag("p",i18n("<b>Details: </b>")); | 383 | addTag("p",i18n("<b>Details: </b>")); |
374 | addTag("p",event->description()); | 384 | addTag("p",event->description()); |
375 | } | 385 | } |
376 | 386 | ||
377 | formatCategories(event); | 387 | formatCategories(event); |
378 | 388 | ||
379 | mText.append(i18n("<p><b>Priority:</b> %2</p>") | 389 | mText.append(i18n("<p><b>Priority:</b> %2</p>") |
380 | .arg(QString::number(event->priority()))); | 390 | .arg(QString::number(event->priority()))); |
381 | 391 | ||
382 | if ( event->percentComplete() == 100 && event->hasCompletedDate() ) { | ||
383 | mText.append(i18n("<p><i>Completed on %1</i></p>") | ||
384 | .arg( event->completedStr() )); | ||
385 | } else { | ||
386 | mText.append(i18n("<p><i>%1 % completed</i></p>") | ||
387 | .arg(event->percentComplete())); | ||
388 | } | ||
389 | |||
390 | formatReadOnly(event); | 392 | formatReadOnly(event); |
391 | formatAttendees(event); | 393 | formatAttendees(event); |
392 | if ( event->relatedTo() ) { | 394 | if ( event->relatedTo() ) { |
393 | addTag("b",i18n("Parent todo: ")); | 395 | addTag("b",i18n("Parent todo: ")); |
394 | mText.append(event->relatedTo()->summary()+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>"); | 396 | mText.append(event->relatedTo()->summary()+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>"); |
395 | } | 397 | } |
396 | QPtrList<Incidence> Relations = event->relations(); | 398 | QPtrList<Incidence> Relations = event->relations(); |
397 | Incidence *to; | 399 | Incidence *to; |
398 | if ( Relations.first() ) | 400 | if ( Relations.first() ) |
399 | addTag("b",i18n("Sub todos:<br>")); | 401 | addTag("b",i18n("Sub todos:<br>")); |
400 | for (to=Relations.first();to;to=Relations.next()) { | 402 | for (to=Relations.first();to;to=Relations.next()) { |
401 | mText.append( to->summary()+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>"); | 403 | mText.append( to->summary()+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>"); |
402 | 404 | ||
403 | } | 405 | } |
404 | setText(mText); | 406 | setText(mText); |
405 | } | 407 | } |
406 | 408 | ||
407 | void KOEventViewer::formatCategories(Incidence *event) | 409 | void KOEventViewer::formatCategories(Incidence *event) |
408 | { | 410 | { |
409 | if (!event->categoriesStr().isEmpty()) { | 411 | if (!event->categoriesStr().isEmpty()) { |
410 | if (event->categories().count() == 1) { | 412 | if (event->categories().count() == 1) { |
411 | addTag("h3",i18n("Category")); | 413 | addTag("h3",i18n("Category")); |
412 | } else { | 414 | } else { |
413 | addTag("h3",i18n("Categories")); | 415 | addTag("h3",i18n("Categories")); |
414 | } | 416 | } |
415 | addTag("p",event->categoriesStr()); | 417 | addTag("p",event->categoriesStr()); |
416 | } | 418 | } |
417 | } | 419 | } |
418 | void KOEventViewer::formatAttendees(Incidence *event) | 420 | void KOEventViewer::formatAttendees(Incidence *event) |
419 | { | 421 | { |
420 | QPtrList<Attendee> attendees = event->attendees(); | 422 | QPtrList<Attendee> attendees = event->attendees(); |
421 | if (attendees.count()) { | 423 | if (attendees.count()) { |
422 | 424 | ||
423 | 425 | ||
424 | QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small); | 426 | QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small); |
425 | QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small); | 427 | QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small); |
426 | addTag("h3",i18n("Organizer")); | 428 | addTag("h3",i18n("Organizer")); |
427 | mText.append("<ul><li>"); | 429 | mText.append("<ul><li>"); |
428 | #ifndef KORG_NOKABC | 430 | #ifndef KORG_NOKABC |
429 | 431 | ||
430 | #ifdef DESKTOP_VERSION | 432 | #ifdef DESKTOP_VERSION |
431 | KABC::AddressBook *add_book = KABC::StdAddressBook::self(); | 433 | KABC::AddressBook *add_book = KABC::StdAddressBook::self(); |
432 | KABC::Addressee::List addressList; | 434 | KABC::Addressee::List addressList; |
433 | addressList = add_book->findByEmail(event->organizer()); | 435 | addressList = add_book->findByEmail(event->organizer()); |
434 | KABC::Addressee o = addressList.first(); | 436 | KABC::Addressee o = addressList.first(); |
435 | if (!o.isEmpty() && addressList.size()<2) { | 437 | if (!o.isEmpty() && addressList.size()<2) { |
436 | mText += "<a href=\"uid:" + o.uid() + "\">"; | 438 | mText += "<a href=\"uid:" + o.uid() + "\">"; |
437 | mText += o.formattedName(); | 439 | mText += o.formattedName(); |
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp index 8c1953d..14e8b5c 100644 --- a/korganizer/kotodoview.cpp +++ b/korganizer/kotodoview.cpp | |||
@@ -289,96 +289,97 @@ void KOTodoListView::keyPressEvent ( QKeyEvent * e ) | |||
289 | e->ignore(); | 289 | e->ignore(); |
290 | } | 290 | } |
291 | void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e) | 291 | void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e) |
292 | { | 292 | { |
293 | QListView::contentsMouseReleaseEvent(e); | 293 | QListView::contentsMouseReleaseEvent(e); |
294 | mMousePressed = false; | 294 | mMousePressed = false; |
295 | } | 295 | } |
296 | 296 | ||
297 | void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e) | 297 | void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e) |
298 | { | 298 | { |
299 | if (!e) return; | 299 | if (!e) return; |
300 | 300 | ||
301 | QPoint vp = contentsToViewport(e->pos()); | 301 | QPoint vp = contentsToViewport(e->pos()); |
302 | 302 | ||
303 | QListViewItem *item = itemAt(vp); | 303 | QListViewItem *item = itemAt(vp); |
304 | 304 | ||
305 | emit double_Clicked(item); | 305 | emit double_Clicked(item); |
306 | if (!item) return; | 306 | if (!item) return; |
307 | 307 | ||
308 | emit doubleClicked(item,vp,0); | 308 | emit doubleClicked(item,vp,0); |
309 | } | 309 | } |
310 | 310 | ||
311 | ///////////////////////////////////////////////////////////////////////////// | 311 | ///////////////////////////////////////////////////////////////////////////// |
312 | 312 | ||
313 | KOQuickTodo::KOQuickTodo(QWidget *parent) : | 313 | KOQuickTodo::KOQuickTodo(QWidget *parent) : |
314 | QLineEdit(parent) | 314 | QLineEdit(parent) |
315 | { | 315 | { |
316 | setText(i18n("Click to add a new Todo")); | 316 | setText(i18n("Click to add a new Todo")); |
317 | } | 317 | } |
318 | 318 | ||
319 | void KOQuickTodo::focusInEvent(QFocusEvent *ev) | 319 | void KOQuickTodo::focusInEvent(QFocusEvent *ev) |
320 | { | 320 | { |
321 | if ( text()==i18n("Click to add a new Todo") ) | 321 | if ( text()==i18n("Click to add a new Todo") ) |
322 | setText(""); | 322 | setText(""); |
323 | QLineEdit::focusInEvent(ev); | 323 | QLineEdit::focusInEvent(ev); |
324 | } | 324 | } |
325 | 325 | ||
326 | void KOQuickTodo::focusOutEvent(QFocusEvent *ev) | 326 | void KOQuickTodo::focusOutEvent(QFocusEvent *ev) |
327 | { | 327 | { |
328 | setText(i18n("Click to add a new Todo")); | 328 | setText(i18n("Click to add a new Todo")); |
329 | QLineEdit::focusOutEvent(ev); | 329 | QLineEdit::focusOutEvent(ev); |
330 | } | 330 | } |
331 | 331 | ||
332 | ///////////////////////////////////////////////////////////////////////////// | 332 | ///////////////////////////////////////////////////////////////////////////// |
333 | 333 | ||
334 | KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) : | 334 | KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) : |
335 | KOrg::BaseView(calendar,parent,name) | 335 | KOrg::BaseView(calendar,parent,name) |
336 | { | 336 | { |
337 | isFlatDisplay = false; | ||
337 | mNavigator = 0; | 338 | mNavigator = 0; |
338 | QBoxLayout *topLayout = new QVBoxLayout(this); | 339 | QBoxLayout *topLayout = new QVBoxLayout(this); |
339 | mName = QString ( name ); | 340 | mName = QString ( name ); |
340 | mBlockUpdate = false; | 341 | mBlockUpdate = false; |
341 | mQuickAdd = new KOQuickTodo(this); | 342 | mQuickAdd = new KOQuickTodo(this); |
342 | topLayout->addWidget(mQuickAdd); | 343 | topLayout->addWidget(mQuickAdd); |
343 | 344 | ||
344 | if ( !KOPrefs::instance()->mEnableQuickTodo ) mQuickAdd->hide(); | 345 | if ( !KOPrefs::instance()->mEnableQuickTodo ) mQuickAdd->hide(); |
345 | 346 | ||
346 | mTodoListView = new KOTodoListView(calendar,this, name ); | 347 | mTodoListView = new KOTodoListView(calendar,this, name ); |
347 | topLayout->addWidget(mTodoListView); | 348 | topLayout->addWidget(mTodoListView); |
348 | //mTodoListView->header()->setMaximumHeight(30); | 349 | //mTodoListView->header()->setMaximumHeight(30); |
349 | mTodoListView->setRootIsDecorated(true); | 350 | mTodoListView->setRootIsDecorated(true); |
350 | mTodoListView->setAllColumnsShowFocus(true); | 351 | mTodoListView->setAllColumnsShowFocus(true); |
351 | 352 | ||
352 | mTodoListView->setShowSortIndicator(true); | 353 | mTodoListView->setShowSortIndicator(true); |
353 | 354 | ||
354 | mTodoListView->addColumn(i18n("Todo")); | 355 | mTodoListView->addColumn(i18n("Todo")); |
355 | mTodoListView->addColumn(i18n("Prio")); | 356 | mTodoListView->addColumn(i18n("Prio")); |
356 | mTodoListView->setColumnAlignment(1,AlignHCenter); | 357 | mTodoListView->setColumnAlignment(1,AlignHCenter); |
357 | mTodoListView->addColumn(i18n("Complete")); | 358 | mTodoListView->addColumn(i18n("Complete")); |
358 | mTodoListView->setColumnAlignment(2,AlignCenter); | 359 | mTodoListView->setColumnAlignment(2,AlignCenter); |
359 | 360 | ||
360 | mTodoListView->addColumn(i18n("Due Date")); | 361 | mTodoListView->addColumn(i18n("Due Date")); |
361 | mTodoListView->setColumnAlignment(3,AlignLeft); | 362 | mTodoListView->setColumnAlignment(3,AlignLeft); |
362 | mTodoListView->addColumn(i18n("Due Time")); | 363 | mTodoListView->addColumn(i18n("Due Time")); |
363 | mTodoListView->setColumnAlignment(4,AlignHCenter); | 364 | mTodoListView->setColumnAlignment(4,AlignHCenter); |
364 | 365 | ||
365 | mTodoListView->addColumn(i18n("Start Date")); | 366 | mTodoListView->addColumn(i18n("Start Date")); |
366 | mTodoListView->setColumnAlignment(5,AlignLeft); | 367 | mTodoListView->setColumnAlignment(5,AlignLeft); |
367 | mTodoListView->addColumn(i18n("Start Time")); | 368 | mTodoListView->addColumn(i18n("Start Time")); |
368 | mTodoListView->setColumnAlignment(6,AlignHCenter); | 369 | mTodoListView->setColumnAlignment(6,AlignHCenter); |
369 | 370 | ||
370 | mTodoListView->addColumn(i18n("Cancelled")); | 371 | mTodoListView->addColumn(i18n("Cancelled")); |
371 | mTodoListView->addColumn(i18n("Categories")); | 372 | mTodoListView->addColumn(i18n("Categories")); |
372 | #if 0 | 373 | #if 0 |
373 | mTodoListView->addColumn(i18n("Sort Id")); | 374 | mTodoListView->addColumn(i18n("Sort Id")); |
374 | mTodoListView->setColumnAlignment(4,AlignHCenter); | 375 | mTodoListView->setColumnAlignment(4,AlignHCenter); |
375 | #endif | 376 | #endif |
376 | 377 | ||
377 | mTodoListView->setMinimumHeight( 60 ); | 378 | mTodoListView->setMinimumHeight( 60 ); |
378 | mTodoListView->setItemsRenameable( true ); | 379 | mTodoListView->setItemsRenameable( true ); |
379 | mTodoListView->setRenameable( 0 ); | 380 | mTodoListView->setRenameable( 0 ); |
380 | mTodoListView->setColumnWidth( 0, 120 ); | 381 | mTodoListView->setColumnWidth( 0, 120 ); |
381 | mTodoListView->setColumnWidthMode(0, QListView::Manual); | 382 | mTodoListView->setColumnWidthMode(0, QListView::Manual); |
382 | mTodoListView->setColumnWidthMode(1, QListView::Manual); | 383 | mTodoListView->setColumnWidthMode(1, QListView::Manual); |
383 | mTodoListView->setColumnWidthMode(2, QListView::Manual); | 384 | mTodoListView->setColumnWidthMode(2, QListView::Manual); |
384 | mTodoListView->setColumnWidthMode(3, QListView::Manual); | 385 | mTodoListView->setColumnWidthMode(3, QListView::Manual); |
@@ -907,107 +908,115 @@ void KOTodoView::changedCategories(int index) | |||
907 | void KOTodoView::itemDoubleClicked(QListViewItem *item) | 908 | void KOTodoView::itemDoubleClicked(QListViewItem *item) |
908 | { | 909 | { |
909 | if ( pendingSubtodo != 0 ) { | 910 | if ( pendingSubtodo != 0 ) { |
910 | topLevelWidget()->setCaption(i18n("Reparenting aborted!")); | 911 | topLevelWidget()->setCaption(i18n("Reparenting aborted!")); |
911 | } | 912 | } |
912 | pendingSubtodo = 0; | 913 | pendingSubtodo = 0; |
913 | if (!item) { | 914 | if (!item) { |
914 | newTodo(); | 915 | newTodo(); |
915 | return; | 916 | return; |
916 | } | 917 | } |
917 | if ( KOPrefs::instance()->mEditOnDoubleClick ) | 918 | if ( KOPrefs::instance()->mEditOnDoubleClick ) |
918 | editItem( item ); | 919 | editItem( item ); |
919 | else | 920 | else |
920 | showItem( item , QPoint(), 0 ); | 921 | showItem( item , QPoint(), 0 ); |
921 | } | 922 | } |
922 | void KOTodoView::itemClicked(QListViewItem *item) | 923 | void KOTodoView::itemClicked(QListViewItem *item) |
923 | { | 924 | { |
924 | 925 | ||
925 | if (!item) { | 926 | if (!item) { |
926 | if ( pendingSubtodo != 0 ) { | 927 | if ( pendingSubtodo != 0 ) { |
927 | topLevelWidget()->setCaption(i18n("Reparenting aborted!")); | 928 | topLevelWidget()->setCaption(i18n("Reparenting aborted!")); |
928 | } | 929 | } |
929 | pendingSubtodo = 0; | 930 | pendingSubtodo = 0; |
930 | return; | 931 | return; |
931 | } | 932 | } |
932 | KOTodoViewItem *todoItem = (KOTodoViewItem *)item; | 933 | KOTodoViewItem *todoItem = (KOTodoViewItem *)item; |
933 | if ( pendingSubtodo != 0 ) { | 934 | if ( pendingSubtodo != 0 ) { |
934 | bool allowReparent = true; | 935 | bool allowReparent = true; |
935 | QListViewItem *par = item; | 936 | QListViewItem *par = item; |
936 | while ( par ) { | 937 | while ( par ) { |
937 | if ( par == pendingSubtodo ) { | 938 | if ( par == pendingSubtodo ) { |
938 | allowReparent = false; | 939 | allowReparent = false; |
939 | break; | 940 | break; |
940 | } | 941 | } |
941 | par = par->parent(); | 942 | par = par->parent(); |
942 | } | 943 | } |
943 | if ( !allowReparent ) { | 944 | if ( !allowReparent ) { |
944 | topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!")); | 945 | topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!")); |
945 | qDebug("Recursive reparenting not possible "); | 946 | qDebug("Recursive reparenting not possible "); |
946 | pendingSubtodo = 0; | 947 | pendingSubtodo = 0; |
947 | } else { | 948 | } else { |
948 | Todo* newParent = todoItem->todo(); | 949 | Todo* newParent = todoItem->todo(); |
949 | Todo* newSub = pendingSubtodo->todo(); | 950 | Todo* newSub = pendingSubtodo->todo(); |
950 | pendingSubtodo = 0; | 951 | pendingSubtodo = 0; |
951 | emit reparentTodoSignal( newParent,newSub ); | 952 | emit reparentTodoSignal( newParent,newSub ); |
952 | return; | 953 | return; |
953 | } | 954 | } |
954 | } | 955 | } |
955 | int completed = todoItem->todo()->isCompleted(); // Completed or not? | 956 | #if 0 |
956 | 957 | // handled by the item itself | |
958 | bool completed = todoItem->todo()->isCompleted(); // Completed or not? | ||
959 | qDebug("com %d ",completed ); | ||
960 | qDebug("itemclicked "); | ||
957 | if (todoItem->isOn()) { | 961 | if (todoItem->isOn()) { |
962 | qDebug("on "); | ||
958 | if (!completed) { | 963 | if (!completed) { |
964 | qDebug("set true "); | ||
959 | todoItem->todo()->setCompleted(QDateTime::currentDateTime()); | 965 | todoItem->todo()->setCompleted(QDateTime::currentDateTime()); |
960 | } | 966 | } |
961 | } else { | 967 | } else { |
968 | qDebug("not on "); | ||
962 | if (completed) { | 969 | if (completed) { |
970 | qDebug("set false "); | ||
963 | todoItem->todo()->setCompleted(false); | 971 | todoItem->todo()->setCompleted(false); |
964 | } | 972 | } |
965 | } | 973 | } |
974 | #endif | ||
966 | } | 975 | } |
967 | 976 | ||
968 | void KOTodoView::setDocumentId( const QString &id ) | 977 | void KOTodoView::setDocumentId( const QString &id ) |
969 | { | 978 | { |
970 | kdDebug() << "KOTodoView::setDocumentId()" << endl; | 979 | kdDebug() << "KOTodoView::setDocumentId()" << endl; |
971 | 980 | ||
972 | mDocPrefs->setDoc( id ); | 981 | mDocPrefs->setDoc( id ); |
973 | } | 982 | } |
974 | 983 | ||
975 | void KOTodoView::itemStateChanged( QListViewItem *item ) | 984 | void KOTodoView::itemStateChanged( QListViewItem *item ) |
976 | { | 985 | { |
977 | if (!item) return; | 986 | if (!item) return; |
978 | 987 | ||
979 | KOTodoViewItem *todoItem = (KOTodoViewItem *)item; | 988 | KOTodoViewItem *todoItem = (KOTodoViewItem *)item; |
980 | 989 | ||
981 | // kdDebug() << "KOTodoView::itemStateChanged(): " << todoItem->todo()->summary() << endl; | 990 | // kdDebug() << "KOTodoView::itemStateChanged(): " << todoItem->todo()->summary() << endl; |
982 | 991 | ||
983 | if( mDocPrefs ) mDocPrefs->writeEntry( todoItem->todo()->uid(), todoItem->isOpen() ); | 992 | if( mDocPrefs ) mDocPrefs->writeEntry( todoItem->todo()->uid(), todoItem->isOpen() ); |
984 | } | 993 | } |
985 | 994 | ||
986 | void KOTodoView::saveLayout(KConfig *config, const QString &group) const | 995 | void KOTodoView::saveLayout(KConfig *config, const QString &group) const |
987 | { | 996 | { |
988 | mTodoListView->saveLayout(config,group); | 997 | mTodoListView->saveLayout(config,group); |
989 | } | 998 | } |
990 | 999 | ||
991 | void KOTodoView::restoreLayout(KConfig *config, const QString &group) | 1000 | void KOTodoView::restoreLayout(KConfig *config, const QString &group) |
992 | { | 1001 | { |
993 | mTodoListView->restoreLayout(config,group); | 1002 | mTodoListView->restoreLayout(config,group); |
994 | } | 1003 | } |
995 | 1004 | ||
996 | void KOTodoView::processSelectionChange() | 1005 | void KOTodoView::processSelectionChange() |
997 | { | 1006 | { |
998 | // kdDebug() << "KOTodoView::processSelectionChange()" << endl; | 1007 | // kdDebug() << "KOTodoView::processSelectionChange()" << endl; |
999 | 1008 | ||
1000 | KOTodoViewItem *item = | 1009 | KOTodoViewItem *item = |
1001 | static_cast<KOTodoViewItem *>( mTodoListView->selectedItem() ); | 1010 | static_cast<KOTodoViewItem *>( mTodoListView->selectedItem() ); |
1002 | 1011 | ||
1003 | if ( !item ) { | 1012 | if ( !item ) { |
1004 | emit incidenceSelected( 0 ); | 1013 | emit incidenceSelected( 0 ); |
1005 | } else { | 1014 | } else { |
1006 | emit incidenceSelected( item->todo() ); | 1015 | emit incidenceSelected( item->todo() ); |
1007 | } | 1016 | } |
1008 | } | 1017 | } |
1009 | 1018 | ||
1010 | void KOTodoView::modified(bool b) | 1019 | void KOTodoView::modified(bool b) |
1011 | { | 1020 | { |
1012 | emit isModified(b); | 1021 | emit isModified(b); |
1013 | } | 1022 | } |
diff --git a/korganizer/kotodoviewitem.cpp b/korganizer/kotodoviewitem.cpp index 21ecb73..2822237 100644 --- a/korganizer/kotodoviewitem.cpp +++ b/korganizer/kotodoviewitem.cpp | |||
@@ -158,103 +158,102 @@ void KOTodoViewItem::construct() | |||
158 | } | 158 | } |
159 | #endif | 159 | #endif |
160 | 160 | ||
161 | m_known = false; | 161 | m_known = false; |
162 | m_init = false; | 162 | m_init = false; |
163 | 163 | ||
164 | setMyPixmap(); | 164 | setMyPixmap(); |
165 | 165 | ||
166 | } | 166 | } |
167 | void KOTodoViewItem::setMyPixmap() | 167 | void KOTodoViewItem::setMyPixmap() |
168 | { | 168 | { |
169 | int size = 5; | 169 | int size = 5; |
170 | QPixmap pixi = QPixmap( 1, 1 ); | 170 | QPixmap pixi = QPixmap( 1, 1 ); |
171 | // if ( !mTodo->isCompleted() && mTodo->hasDueDate() && mTodo->dtDue() < QDateTime::currentDateTime() ) { | 171 | // if ( !mTodo->isCompleted() && mTodo->hasDueDate() && mTodo->dtDue() < QDateTime::currentDateTime() ) { |
172 | // pixi = SmallIcon("redcross16"); | 172 | // pixi = SmallIcon("redcross16"); |
173 | // } else { | 173 | // } else { |
174 | QPainter p; | 174 | QPainter p; |
175 | 175 | ||
176 | int pixSize = 0; | 176 | int pixSize = 0; |
177 | QPixmap pPix = QPixmap( size, size ); | 177 | QPixmap pPix = QPixmap( size, size ); |
178 | if ( mTodo->description().length() > 0 ) { | 178 | if ( mTodo->description().length() > 0 ) { |
179 | pixi.resize(size, pixSize+size); | 179 | pixi.resize(size, pixSize+size); |
180 | pPix.fill( Qt::darkGreen ); | 180 | pPix.fill( Qt::darkGreen ); |
181 | p.begin( &pixi ); | 181 | p.begin( &pixi ); |
182 | p. drawPixmap ( 0, pixSize, pPix); | 182 | p. drawPixmap ( 0, pixSize, pPix); |
183 | p.end(); | 183 | p.end(); |
184 | pixSize += size; | 184 | pixSize += size; |
185 | } | 185 | } |
186 | if ( mTodo->isAlarmEnabled() ) { | 186 | if ( mTodo->isAlarmEnabled() ) { |
187 | pixi.resize(size, pixSize+size); | 187 | pixi.resize(size, pixSize+size); |
188 | pPix.fill( Qt::red ); | 188 | pPix.fill( Qt::red ); |
189 | p.begin( &pixi ); | 189 | p.begin( &pixi ); |
190 | p. drawPixmap ( 0, pixSize, pPix); | 190 | p. drawPixmap ( 0, pixSize, pPix); |
191 | p.end(); | 191 | p.end(); |
192 | pixSize += size; | 192 | pixSize += size; |
193 | } | 193 | } |
194 | // } | 194 | // } |
195 | if ( pixi.width() > 1 ) { | 195 | if ( pixi.width() > 1 ) { |
196 | setPixmap ( 0,pixi ) ; | 196 | setPixmap ( 0,pixi ) ; |
197 | } else { | 197 | } else { |
198 | setPixmap ( 0,QPixmap() ) ; | 198 | setPixmap ( 0,QPixmap() ) ; |
199 | } | 199 | } |
200 | } | 200 | } |
201 | void KOTodoViewItem::stateChange(bool state) | 201 | void KOTodoViewItem::stateChange(bool state) |
202 | { | 202 | { |
203 | // qDebug("KOTodoViewItem::stateChange "); | 203 | // qDebug("KOTodoViewItem::stateChange "); |
204 | // do not change setting on startup | 204 | // do not change setting on startup |
205 | if ( m_init ) return; | 205 | if ( m_init ) return; |
206 | 206 | qDebug("KOTodoViewItem::stateChange "); | |
207 | kdDebug() << "State changed, modified " << state << endl; | ||
208 | QString keyd = "=="; | 207 | QString keyd = "=="; |
209 | QString keyt = "=="; | 208 | QString keyt = "=="; |
210 | 209 | ||
211 | if (state) mTodo->setCompleted(state); | 210 | mTodo->setCompleted(state); |
212 | else mTodo->setPercentComplete(0); | 211 | if (state) mTodo->setCompleted(QDateTime::currentDateTime()); |
213 | if (isOn()!=state) { | 212 | if (isOn()!=state) { |
214 | setOn(state); | 213 | setOn(state); |
215 | } | 214 | } |
216 | 215 | ||
217 | if (mTodo->hasDueDate()) { | 216 | if (mTodo->hasDueDate()) { |
218 | setText(3, mTodo->dtDueDateStr()); | 217 | setText(3, mTodo->dtDueDateStr()); |
219 | QDate d = mTodo->dtDue().date(); | 218 | QDate d = mTodo->dtDue().date(); |
220 | keyd.sprintf("%04d%02d%02d",d.year(),d.month(),d.day()); | 219 | keyd.sprintf("%04d%02d%02d",d.year(),d.month(),d.day()); |
221 | setSortKey(3,keyd); | 220 | setSortKey(3,keyd); |
222 | if (mTodo->doesFloat()) { | 221 | if (mTodo->doesFloat()) { |
223 | setText(4,""); | 222 | setText(4,""); |
224 | } | 223 | } |
225 | else { | 224 | else { |
226 | setText(4,mTodo->dtDueTimeStr()); | 225 | setText(4,mTodo->dtDueTimeStr()); |
227 | QTime t = mTodo->dtDue().time(); | 226 | QTime t = mTodo->dtDue().time(); |
228 | keyt.sprintf("%02d%02d",t.hour(),t.minute()); | 227 | keyt.sprintf("%02d%02d",t.hour(),t.minute()); |
229 | setSortKey(4,keyt); | 228 | setSortKey(4,keyt); |
230 | } | 229 | } |
231 | } | 230 | } |
232 | if (mTodo->isCompleted()) setSortKey(1,QString::number(9)+keyd+keyt); | 231 | if (mTodo->isCompleted()) setSortKey(1,QString::number(9)+keyd+keyt); |
233 | else setSortKey(1,QString::number(mTodo->priority())+keyd+keyt); | 232 | else setSortKey(1,QString::number(mTodo->priority())+keyd+keyt); |
234 | 233 | ||
235 | setText(2,i18n("%1 %").arg(QString::number(mTodo->percentComplete()))); | 234 | setText(2,i18n("%1 %").arg(QString::number(mTodo->percentComplete()))); |
236 | if (mTodo->percentComplete()<100) { | 235 | if (mTodo->percentComplete()<100) { |
237 | if (mTodo->isCompleted()) setSortKey(2,QString::number(999)); | 236 | if (mTodo->isCompleted()) setSortKey(2,QString::number(999)); |
238 | else setSortKey(2,QString::number(mTodo->percentComplete())); | 237 | else setSortKey(2,QString::number(mTodo->percentComplete())); |
239 | } | 238 | } |
240 | else { | 239 | else { |
241 | if (mTodo->isCompleted()) setSortKey(2,QString::number(999)); | 240 | if (mTodo->isCompleted()) setSortKey(2,QString::number(999)); |
242 | else setSortKey(2,QString::number(99)); | 241 | else setSortKey(2,QString::number(99)); |
243 | } | 242 | } |
244 | QListViewItem * myChild = firstChild(); | 243 | QListViewItem * myChild = firstChild(); |
245 | KOTodoViewItem *item; | 244 | KOTodoViewItem *item; |
246 | while( myChild ) { | 245 | while( myChild ) { |
247 | item = static_cast<KOTodoViewItem*>(myChild); | 246 | item = static_cast<KOTodoViewItem*>(myChild); |
248 | item->stateChange(state); | 247 | item->stateChange(state); |
249 | myChild = myChild->nextSibling(); | 248 | myChild = myChild->nextSibling(); |
250 | } | 249 | } |
251 | mTodoView->modified(true); | 250 | mTodoView->modified(true); |
252 | setMyPixmap(); | 251 | setMyPixmap(); |
253 | mTodoView->setTodoModified( mTodo ); | 252 | mTodoView->setTodoModified( mTodo ); |
254 | } | 253 | } |
255 | 254 | ||
256 | bool KOTodoViewItem::isAlternate() | 255 | bool KOTodoViewItem::isAlternate() |
257 | { | 256 | { |
258 | #ifndef KORG_NOLVALTERNATION | 257 | #ifndef KORG_NOLVALTERNATION |
259 | KOTodoListView *lv = static_cast<KOTodoListView *>(listView()); | 258 | KOTodoListView *lv = static_cast<KOTodoListView *>(listView()); |
260 | if (lv && lv->alternateBackground().isValid()) | 259 | if (lv && lv->alternateBackground().isValid()) |