-rw-r--r-- | korganizer/koagendaview.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/korganizer/koagendaview.cpp b/korganizer/koagendaview.cpp index 13d8398..4ff6899 100644 --- a/korganizer/koagendaview.cpp +++ b/korganizer/koagendaview.cpp | |||
@@ -970,65 +970,78 @@ void KOAgendaView::updateEventDates(KOAgendaItem *item, int type) | |||
970 | endDt = startDt.addSecs(lenInSecs); | 970 | endDt = startDt.addSecs(lenInSecs); |
971 | 971 | ||
972 | } else if ( type == KOAgenda::RESIZEBOTTOM ) { | 972 | } else if ( type == KOAgenda::RESIZEBOTTOM ) { |
973 | if (item->lastMultiItem()) { | 973 | if (item->lastMultiItem()) { |
974 | endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); | 974 | endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); |
975 | endDt.setDate(startDate. | 975 | endDt.setDate(startDate. |
976 | addDays(item->lastMultiItem()->cellX() - item->cellX())); | 976 | addDays(item->lastMultiItem()->cellX() - item->cellX())); |
977 | } else { | 977 | } else { |
978 | endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); | 978 | endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); |
979 | endDt.setDate(startDate); | 979 | endDt.setDate(startDate); |
980 | } | 980 | } |
981 | } | 981 | } |
982 | } else { | 982 | } else { |
983 | // todo | 983 | // todo |
984 | if (item->lastMultiItem()) { | 984 | if (item->lastMultiItem()) { |
985 | endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); | 985 | endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); |
986 | endDt.setDate(startDate. | 986 | endDt.setDate(startDate. |
987 | addDays(item->lastMultiItem()->cellX() - item->cellX())); | 987 | addDays(item->lastMultiItem()->cellX() - item->cellX())); |
988 | } else { | 988 | } else { |
989 | //qDebug("tem->cellYBottom() %d",item->cellYBottom() ); | 989 | //qDebug("tem->cellYBottom() %d",item->cellYBottom() ); |
990 | if ( item->cellYBottom() > 0 ) | 990 | if ( item->cellYBottom() > 0 ) |
991 | endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); | 991 | endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); |
992 | else | 992 | else |
993 | endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time()); | 993 | endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time()); |
994 | endDt.setDate(startDate); | 994 | endDt.setDate(startDate); |
995 | } | 995 | } |
996 | } | 996 | } |
997 | } | 997 | } |
998 | if ( item->incidence()->type() == "Event" ) { | 998 | if ( item->incidence()->type() == "Event" ) { |
999 | item->incidence()->setDtStart(startDt); | 999 | item->incidence()->setDtStart(startDt); |
1000 | (static_cast<Event*>(item->incidence()))->setDtEnd(endDt); | 1000 | (static_cast<Event*>(item->incidence()))->setDtEnd(endDt); |
1001 | } else if ( item->incidence()->type() == "Todo" ) { | 1001 | } else if ( item->incidence()->type() == "Todo" ) { |
1002 | (static_cast<Todo*>(item->incidence()))->setDtDue(endDt); | 1002 | Todo* to = static_cast<Todo*>(item->incidence()); |
1003 | |||
1004 | int len = 0; | ||
1005 | if ( to->hasStartDate() && to->hasDueDate() ) | ||
1006 | len = to->dtStart().secsTo( to->dtDue()); | ||
1007 | to->setDtDue(endDt); | ||
1008 | if ( to->hasStartDate() ) { | ||
1009 | if ( len>0 ) | ||
1010 | to->setDtStart(to->dtDue().addSecs( -len )); | ||
1011 | else | ||
1012 | if (to->dtStart() > to->dtDue() ) | ||
1013 | to->setDtStart(to->dtDue().addDays( -3 )); | ||
1014 | } | ||
1015 | |||
1003 | } | 1016 | } |
1004 | //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() ); | 1017 | //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() ); |
1005 | item->incidence()->setRevision(item->incidence()->revision()+1); | 1018 | item->incidence()->setRevision(item->incidence()->revision()+1); |
1006 | item->setItemDate(startDt.date()); | 1019 | item->setItemDate(startDt.date()); |
1007 | //item->updateItem(); | 1020 | //item->updateItem(); |
1008 | if ( item->incidence()->type() == "Todo" ) { | 1021 | if ( item->incidence()->type() == "Todo" ) { |
1009 | emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED ); | 1022 | emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED ); |
1010 | 1023 | ||
1011 | } | 1024 | } |
1012 | else | 1025 | else |
1013 | emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED); | 1026 | emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED); |
1014 | item->updateItem(); | 1027 | item->updateItem(); |
1015 | } | 1028 | } |
1016 | 1029 | ||
1017 | void KOAgendaView::showDates( const QDate &start, const QDate &end ) | 1030 | void KOAgendaView::showDates( const QDate &start, const QDate &end ) |
1018 | { | 1031 | { |
1019 | // kdDebug() << "KOAgendaView::selectDates" << endl; | 1032 | // kdDebug() << "KOAgendaView::selectDates" << endl; |
1020 | 1033 | ||
1021 | mSelectedDates.clear(); | 1034 | mSelectedDates.clear(); |
1022 | // qDebug("KOAgendaView::showDates "); | 1035 | // qDebug("KOAgendaView::showDates "); |
1023 | QDate d = start; | 1036 | QDate d = start; |
1024 | while (d <= end) { | 1037 | while (d <= end) { |
1025 | mSelectedDates.append(d); | 1038 | mSelectedDates.append(d); |
1026 | d = d.addDays( 1 ); | 1039 | d = d.addDays( 1 ); |
1027 | } | 1040 | } |
1028 | 1041 | ||
1029 | // and update the view | 1042 | // and update the view |
1030 | fillAgenda(); | 1043 | fillAgenda(); |
1031 | } | 1044 | } |
1032 | 1045 | ||
1033 | 1046 | ||
1034 | void KOAgendaView::showEvents(QPtrList<Event>) | 1047 | void KOAgendaView::showEvents(QPtrList<Event>) |
@@ -1151,65 +1164,65 @@ void KOAgendaView::fillAgenda() | |||
1151 | int startY = mAgenda->timeToY(event->dtStart().time()); | 1164 | int startY = mAgenda->timeToY(event->dtStart().time()); |
1152 | int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; | 1165 | int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; |
1153 | //qDebug("insert %d %d %d %d %d ",beginX,endX,startY,endY , curCol ); | 1166 | //qDebug("insert %d %d %d %d %d ",beginX,endX,startY,endY , curCol ); |
1154 | if ((beginX <= 0 && curCol == 0) || beginX == curCol) { | 1167 | if ((beginX <= 0 && curCol == 0) || beginX == curCol) { |
1155 | //qDebug("insert!!! "); | 1168 | //qDebug("insert!!! "); |
1156 | mAgenda->insertMultiItem(event,currentDate,beginX,endX,startY,endY); | 1169 | mAgenda->insertMultiItem(event,currentDate,beginX,endX,startY,endY); |
1157 | } | 1170 | } |
1158 | if (beginX == curCol) { | 1171 | if (beginX == curCol) { |
1159 | mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); | 1172 | mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); |
1160 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; | 1173 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; |
1161 | } else if (endX == curCol) { | 1174 | } else if (endX == curCol) { |
1162 | mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); | 1175 | mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); |
1163 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; | 1176 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; |
1164 | } else { | 1177 | } else { |
1165 | mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); | 1178 | mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); |
1166 | mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); | 1179 | mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); |
1167 | } | 1180 | } |
1168 | } else { | 1181 | } else { |
1169 | int startY = mAgenda->timeToY(event->dtStart().time()); | 1182 | int startY = mAgenda->timeToY(event->dtStart().time()); |
1170 | int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; | 1183 | int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; |
1171 | if (endY < startY) endY = startY; | 1184 | if (endY < startY) endY = startY; |
1172 | mAgenda->insertItem(event,currentDate,curCol,startY,endY); | 1185 | mAgenda->insertItem(event,currentDate,curCol,startY,endY); |
1173 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; | 1186 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; |
1174 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; | 1187 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; |
1175 | } | 1188 | } |
1176 | } | 1189 | } |
1177 | // ---------- [display Todos -------------- | 1190 | // ---------- [display Todos -------------- |
1178 | unsigned int numTodo; | 1191 | unsigned int numTodo; |
1179 | for (numTodo = 0; numTodo < todos.count(); ++numTodo) { | 1192 | for (numTodo = 0; numTodo < todos.count(); ++numTodo) { |
1180 | Todo *todo = todos.at(numTodo); | 1193 | Todo *todo = todos.at(numTodo); |
1181 | 1194 | ||
1182 | if ( ! todo->hasDueDate() && !todo->hasCompletedDate()) continue; // todo shall not be displayed if it has no date | 1195 | if ( ! todo->hasDueDate() && !todo->hasCompletedDate()) continue; // todo shall not be displayed if it has no date |
1183 | 1196 | ||
1184 | // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. | 1197 | // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. |
1185 | // Already completed items can be displayed on their original due date | 1198 | // Already completed items can be displayed on their original due date |
1186 | //if not KOPrefs::instance()->mShowTodoInAgenda, show overdue in agenda | 1199 | //if not KOPrefs::instance()->mShowTodoInAgenda, show overdue in agenda |
1187 | bool overdue = (!todo->isCompleted()) && (todo->dtDue() < today) && KOPrefs::instance()->mShowTodoInAgenda; | 1200 | bool overdue = (!todo->isCompleted()) && (todo->dtDue() < today) && KOPrefs::instance()->mShowTodoInAgenda; |
1188 | bool fillIn = false; | 1201 | bool fillIn = false; |
1189 | if ( todo->hasCompletedDate() && todo->completed().date() == currentDate ) | 1202 | if ( todo->hasCompletedDate() && todo->completed().date() == currentDate ) |
1190 | fillIn = true; | 1203 | fillIn = true; |
1191 | if ( ! fillIn && !todo->hasCompletedDate() ) | 1204 | if ( ! fillIn && !todo->hasCompletedDate() ) |
1192 | fillIn = ((todo->dtDue().date() == currentDate) && !overdue) || ((currentDate == today) && overdue); | 1205 | fillIn = ((todo->dtDue().date() == currentDate) && !overdue) || ((currentDate == today) && overdue); |
1193 | if ( fillIn ) { | 1206 | if ( fillIn ) { |
1194 | if ( (todo->doesFloat() || overdue ) && !todo->hasCompletedDate() ) { // Todo has no due-time set or is already overdue | 1207 | if ( (todo->doesFloat() || overdue ) && !todo->hasCompletedDate() ) { // Todo has no due-time set or is already overdue |
1195 | if ( KOPrefs::instance()->mShowTodoInAgenda ) | 1208 | if ( KOPrefs::instance()->mShowTodoInAgenda ) |
1196 | mAllDayAgenda->insertAllDayItem(todo, currentDate, curCol, curCol); | 1209 | mAllDayAgenda->insertAllDayItem(todo, currentDate, curCol, curCol); |
1197 | } | 1210 | } |
1198 | else { | 1211 | else { |
1199 | QDateTime dt; | 1212 | QDateTime dt; |
1200 | if ( todo->hasCompletedDate() ) | 1213 | if ( todo->hasCompletedDate() ) |
1201 | dt = todo->completed(); | 1214 | dt = todo->completed(); |
1202 | else | 1215 | else |
1203 | dt = todo->dtDue();; | 1216 | dt = todo->dtDue();; |
1204 | 1217 | ||
1205 | 1218 | ||
1206 | int endY = mAgenda->timeToY(dt.time()) - 1; | 1219 | int endY = mAgenda->timeToY(dt.time()) - 1; |
1207 | int hi = (18/KOPrefs::instance()->mHourSize); | 1220 | int hi = (18/KOPrefs::instance()->mHourSize); |
1208 | //qDebug("hei %d ",KOPrefs::instance()->mHourSize); | 1221 | //qDebug("hei %d ",KOPrefs::instance()->mHourSize); |
1209 | int startY = endY -hi; | 1222 | int startY = endY -hi; |
1210 | 1223 | ||
1211 | mAgenda->insertItem(todo,currentDate,curCol,startY,endY); | 1224 | mAgenda->insertItem(todo,currentDate,curCol,startY,endY); |
1212 | 1225 | ||
1213 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; | 1226 | if (startY < mMinY[curCol]) mMinY[curCol] = startY; |
1214 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; | 1227 | if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; |
1215 | } | 1228 | } |