summaryrefslogtreecommitdiffabout
path: root/korganizer/koagendaview.cpp
Unidiff
Diffstat (limited to 'korganizer/koagendaview.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/koagendaview.cpp17
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
1017void KOAgendaView::showDates( const QDate &start, const QDate &end ) 1030void 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
1034void KOAgendaView::showEvents(QPtrList<Event>) 1047void 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 }