-rw-r--r-- | korganizer/koagendaview.cpp | 10 | ||||
-rw-r--r-- | korganizer/kotodoeditor.cpp | 35 |
2 files changed, 10 insertions, 35 deletions
diff --git a/korganizer/koagendaview.cpp b/korganizer/koagendaview.cpp index 4ff6899..db66413 100644 --- a/korganizer/koagendaview.cpp +++ b/korganizer/koagendaview.cpp | |||
@@ -876,266 +876,260 @@ DateList KOAgendaView::selectedDates() | |||
876 | qd = mAllDayAgenda->selectedIncidenceDate(); | 876 | qd = mAllDayAgenda->selectedIncidenceDate(); |
877 | if (qd.isValid()) selected.append(qd); | 877 | if (qd.isValid()) selected.append(qd); |
878 | 878 | ||
879 | return selected; | 879 | return selected; |
880 | } | 880 | } |
881 | 881 | ||
882 | 882 | ||
883 | void KOAgendaView::updateView() | 883 | void KOAgendaView::updateView() |
884 | { | 884 | { |
885 | if ( mBlockUpdating ) | 885 | if ( mBlockUpdating ) |
886 | return; | 886 | return; |
887 | // kdDebug() << "KOAgendaView::updateView()" << endl; | 887 | // kdDebug() << "KOAgendaView::updateView()" << endl; |
888 | fillAgenda(); | 888 | fillAgenda(); |
889 | 889 | ||
890 | } | 890 | } |
891 | 891 | ||
892 | 892 | ||
893 | /* | 893 | /* |
894 | Update configuration settings for the agenda view. This method is not | 894 | Update configuration settings for the agenda view. This method is not |
895 | complete. | 895 | complete. |
896 | */ | 896 | */ |
897 | void KOAgendaView::updateConfig() | 897 | void KOAgendaView::updateConfig() |
898 | { | 898 | { |
899 | if ( mBlockUpdating ) | 899 | if ( mBlockUpdating ) |
900 | return; | 900 | return; |
901 | 901 | ||
902 | 902 | ||
903 | 903 | ||
904 | // update config for children | 904 | // update config for children |
905 | mTimeLabels->updateConfig(); | 905 | mTimeLabels->updateConfig(); |
906 | mAgenda->storePosition(); | 906 | mAgenda->storePosition(); |
907 | mAgenda->updateConfig(); | 907 | mAgenda->updateConfig(); |
908 | mAllDayAgenda->updateConfig(); | 908 | mAllDayAgenda->updateConfig(); |
909 | // widget synchronization | 909 | // widget synchronization |
910 | //TODO: find a better way, maybe signal/slot | 910 | //TODO: find a better way, maybe signal/slot |
911 | mTimeLabels->positionChanged(); | 911 | mTimeLabels->positionChanged(); |
912 | 912 | ||
913 | // for some reason, this needs to be called explicitly | 913 | // for some reason, this needs to be called explicitly |
914 | mTimeLabels->repaint(); | 914 | mTimeLabels->repaint(); |
915 | 915 | ||
916 | mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); | 916 | mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); |
917 | 917 | ||
918 | // ToolTips displaying summary of events | 918 | // ToolTips displaying summary of events |
919 | KOAgendaItem::toolTipGroup()->setEnabled(KOPrefs::instance() | 919 | KOAgendaItem::toolTipGroup()->setEnabled(KOPrefs::instance() |
920 | ->mEnableToolTips); | 920 | ->mEnableToolTips); |
921 | 921 | ||
922 | //setHolidayMasks(); | 922 | //setHolidayMasks(); |
923 | 923 | ||
924 | //createDayLabels(); called by via updateView(); | 924 | //createDayLabels(); called by via updateView(); |
925 | mEventIndicatorTop->setXOffset(mTimeLabels->width() + mAgenda->frameWidth()); | 925 | mEventIndicatorTop->setXOffset(mTimeLabels->width() + mAgenda->frameWidth()); |
926 | updateView(); | 926 | updateView(); |
927 | mAgenda->restorePosition(); | 927 | mAgenda->restorePosition(); |
928 | } | 928 | } |
929 | 929 | ||
930 | 930 | ||
931 | void KOAgendaView::updateEventDates(KOAgendaItem *item, int type) | 931 | void KOAgendaView::updateEventDates(KOAgendaItem *item, int type) |
932 | { | 932 | { |
933 | // kdDebug() << "KOAgendaView::updateEventDates(): " << item->text() << endl; | 933 | // kdDebug() << "KOAgendaView::updateEventDates(): " << item->text() << endl; |
934 | //qDebug("KOAgendaView::updateEventDates "); | 934 | //qDebug("KOAgendaView::updateEventDates "); |
935 | QDateTime startDt,endDt; | 935 | QDateTime startDt,endDt; |
936 | QDate startDate; | 936 | QDate startDate; |
937 | int lenInSecs; | 937 | int lenInSecs; |
938 | // if ( type == KOAgenda::RESIZETOP ) | 938 | // if ( type == KOAgenda::RESIZETOP ) |
939 | // qDebug("RESIZETOP "); | 939 | // qDebug("RESIZETOP "); |
940 | // if ( type == KOAgenda::RESIZEBOTTOM ) | 940 | // if ( type == KOAgenda::RESIZEBOTTOM ) |
941 | // qDebug("RESIZEBOTTOM "); | 941 | // qDebug("RESIZEBOTTOM "); |
942 | // if ( type == KOAgenda::MOVE ) | 942 | // if ( type == KOAgenda::MOVE ) |
943 | // qDebug("MOVE "); | 943 | // qDebug("MOVE "); |
944 | if ( item->incidence()->type() == "Event" ) { | 944 | if ( item->incidence()->type() == "Event" ) { |
945 | startDt =item->incidence()->dtStart(); | 945 | startDt =item->incidence()->dtStart(); |
946 | endDt = item->incidence()->dtEnd(); | 946 | endDt = item->incidence()->dtEnd(); |
947 | lenInSecs = startDt.secsTo( endDt ); | 947 | lenInSecs = startDt.secsTo( endDt ); |
948 | } | 948 | } |
949 | 949 | ||
950 | // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED ); | 950 | // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED ); |
951 | 951 | ||
952 | if ( item->incidence()->type()=="Todo" && item->mLastMoveXPos > 0 ) { | 952 | if ( item->incidence()->type()=="Todo" && item->mLastMoveXPos > 0 ) { |
953 | startDate = mSelectedDates[item->mLastMoveXPos]; | 953 | startDate = mSelectedDates[item->mLastMoveXPos]; |
954 | } else { | 954 | } else { |
955 | if (item->cellX() < 0) { | 955 | if (item->cellX() < 0) { |
956 | startDate = (mSelectedDates.first()).addDays(item->cellX()); | 956 | startDate = (mSelectedDates.first()).addDays(item->cellX()); |
957 | } else { | 957 | } else { |
958 | startDate = mSelectedDates[item->cellX()]; | 958 | startDate = mSelectedDates[item->cellX()]; |
959 | } | 959 | } |
960 | } | 960 | } |
961 | startDt.setDate(startDate); | 961 | startDt.setDate(startDate); |
962 | 962 | ||
963 | if (item->incidence()->doesFloat()) { | 963 | if (item->incidence()->doesFloat()) { |
964 | endDt.setDate(startDate.addDays(item->cellWidth() - 1)); | 964 | endDt.setDate(startDate.addDays(item->cellWidth() - 1)); |
965 | } else { | 965 | } else { |
966 | if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE ) | 966 | if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE ) |
967 | startDt.setTime(mAgenda->gyToTime(item->cellYTop())); | 967 | startDt.setTime(mAgenda->gyToTime(item->cellYTop())); |
968 | if ( item->incidence()->type() == "Event" ) { | 968 | if ( item->incidence()->type() == "Event" ) { |
969 | if ( type == KOAgenda::MOVE ) { | 969 | if ( type == KOAgenda::MOVE ) { |
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 | Todo* to = static_cast<Todo*>(item->incidence()); | 1002 | Todo* to = static_cast<Todo*>(item->incidence()); |
1003 | 1003 | ||
1004 | int len = 0; | ||
1005 | if ( to->hasStartDate() && to->hasDueDate() ) | ||
1006 | len = to->dtStart().secsTo( to->dtDue()); | ||
1007 | to->setDtDue(endDt); | 1004 | to->setDtDue(endDt); |
1008 | if ( to->hasStartDate() ) { | 1005 | if ( to->hasStartDate() ) { |
1009 | if ( len>0 ) | 1006 | if (to->dtStart() >= to->dtDue() ) |
1010 | to->setDtStart(to->dtDue().addSecs( -len )); | 1007 | to->setDtStart(to->dtDue().addDays( -2 )); |
1011 | else | ||
1012 | if (to->dtStart() > to->dtDue() ) | ||
1013 | to->setDtStart(to->dtDue().addDays( -3 )); | ||
1014 | } | 1008 | } |
1015 | 1009 | ||
1016 | } | 1010 | } |
1017 | //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() ); | 1011 | //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() ); |
1018 | item->incidence()->setRevision(item->incidence()->revision()+1); | 1012 | item->incidence()->setRevision(item->incidence()->revision()+1); |
1019 | item->setItemDate(startDt.date()); | 1013 | item->setItemDate(startDt.date()); |
1020 | //item->updateItem(); | 1014 | //item->updateItem(); |
1021 | if ( item->incidence()->type() == "Todo" ) { | 1015 | if ( item->incidence()->type() == "Todo" ) { |
1022 | emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED ); | 1016 | emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED ); |
1023 | 1017 | ||
1024 | } | 1018 | } |
1025 | else | 1019 | else |
1026 | emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED); | 1020 | emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED); |
1027 | item->updateItem(); | 1021 | item->updateItem(); |
1028 | } | 1022 | } |
1029 | 1023 | ||
1030 | void KOAgendaView::showDates( const QDate &start, const QDate &end ) | 1024 | void KOAgendaView::showDates( const QDate &start, const QDate &end ) |
1031 | { | 1025 | { |
1032 | // kdDebug() << "KOAgendaView::selectDates" << endl; | 1026 | // kdDebug() << "KOAgendaView::selectDates" << endl; |
1033 | 1027 | ||
1034 | mSelectedDates.clear(); | 1028 | mSelectedDates.clear(); |
1035 | // qDebug("KOAgendaView::showDates "); | 1029 | // qDebug("KOAgendaView::showDates "); |
1036 | QDate d = start; | 1030 | QDate d = start; |
1037 | while (d <= end) { | 1031 | while (d <= end) { |
1038 | mSelectedDates.append(d); | 1032 | mSelectedDates.append(d); |
1039 | d = d.addDays( 1 ); | 1033 | d = d.addDays( 1 ); |
1040 | } | 1034 | } |
1041 | 1035 | ||
1042 | // and update the view | 1036 | // and update the view |
1043 | fillAgenda(); | 1037 | fillAgenda(); |
1044 | } | 1038 | } |
1045 | 1039 | ||
1046 | 1040 | ||
1047 | void KOAgendaView::showEvents(QPtrList<Event>) | 1041 | void KOAgendaView::showEvents(QPtrList<Event>) |
1048 | { | 1042 | { |
1049 | kdDebug() << "KOAgendaView::showEvents() is not yet implemented" << endl; | 1043 | kdDebug() << "KOAgendaView::showEvents() is not yet implemented" << endl; |
1050 | } | 1044 | } |
1051 | 1045 | ||
1052 | void KOAgendaView::changeEventDisplay(Event *, int) | 1046 | void KOAgendaView::changeEventDisplay(Event *, int) |
1053 | { | 1047 | { |
1054 | // qDebug("KOAgendaView::changeEventDisplay "); | 1048 | // qDebug("KOAgendaView::changeEventDisplay "); |
1055 | // kdDebug() << "KOAgendaView::changeEventDisplay" << endl; | 1049 | // kdDebug() << "KOAgendaView::changeEventDisplay" << endl; |
1056 | // this should be re-written to be MUCH smarter. Right now we | 1050 | // this should be re-written to be MUCH smarter. Right now we |
1057 | // are just playing dumb. | 1051 | // are just playing dumb. |
1058 | fillAgenda(); | 1052 | fillAgenda(); |
1059 | } | 1053 | } |
1060 | 1054 | ||
1061 | void KOAgendaView::fillAgenda(const QDate &) | 1055 | void KOAgendaView::fillAgenda(const QDate &) |
1062 | { | 1056 | { |
1063 | // qDebug("KOAgendaView::fillAgenda "); | 1057 | // qDebug("KOAgendaView::fillAgenda "); |
1064 | fillAgenda(); | 1058 | fillAgenda(); |
1065 | } | 1059 | } |
1066 | 1060 | ||
1067 | void KOAgendaView::fillAgenda() | 1061 | void KOAgendaView::fillAgenda() |
1068 | { | 1062 | { |
1069 | if ( globalFlagBlockStartup ) | 1063 | if ( globalFlagBlockStartup ) |
1070 | return; | 1064 | return; |
1071 | if ( globalFlagBlockAgenda == 1 ) | 1065 | if ( globalFlagBlockAgenda == 1 ) |
1072 | return; | 1066 | return; |
1073 | //if ( globalFlagBlockAgenda == 2 ) | 1067 | //if ( globalFlagBlockAgenda == 2 ) |
1074 | //globalFlagBlockAgenda = 0; | 1068 | //globalFlagBlockAgenda = 0; |
1075 | // globalFlagBlockPainting = false; | 1069 | // globalFlagBlockPainting = false; |
1076 | if ( globalFlagBlockAgenda == 0 ) | 1070 | if ( globalFlagBlockAgenda == 0 ) |
1077 | globalFlagBlockAgenda = 1; | 1071 | globalFlagBlockAgenda = 1; |
1078 | // clearView(); | 1072 | // clearView(); |
1079 | //qDebug("fillAgenda()++++ "); | 1073 | //qDebug("fillAgenda()++++ "); |
1080 | globalFlagBlockAgendaItemPaint = 1; | 1074 | globalFlagBlockAgendaItemPaint = 1; |
1081 | 1075 | ||
1082 | mAllDayAgenda->changeColumns(mSelectedDates.count()); | 1076 | mAllDayAgenda->changeColumns(mSelectedDates.count()); |
1083 | mAgenda->changeColumns(mSelectedDates.count()); | 1077 | mAgenda->changeColumns(mSelectedDates.count()); |
1084 | qApp->processEvents(); | 1078 | qApp->processEvents(); |
1085 | mEventIndicatorTop->changeColumns(mSelectedDates.count()); | 1079 | mEventIndicatorTop->changeColumns(mSelectedDates.count()); |
1086 | mEventIndicatorBottom->changeColumns(mSelectedDates.count()); | 1080 | mEventIndicatorBottom->changeColumns(mSelectedDates.count()); |
1087 | setHolidayMasks(); | 1081 | setHolidayMasks(); |
1088 | 1082 | ||
1089 | //mAgenda->hideUnused(); | 1083 | //mAgenda->hideUnused(); |
1090 | //mAllDayAgenda->hideUnused(); | 1084 | //mAllDayAgenda->hideUnused(); |
1091 | 1085 | ||
1092 | // mAgenda->blockNextRepaint( false ); | 1086 | // mAgenda->blockNextRepaint( false ); |
1093 | // mAgenda->viewport()->repaint(); | 1087 | // mAgenda->viewport()->repaint(); |
1094 | // mAgenda->blockNextRepaint( true ); | 1088 | // mAgenda->blockNextRepaint( true ); |
1095 | mMinY.resize(mSelectedDates.count()); | 1089 | mMinY.resize(mSelectedDates.count()); |
1096 | mMaxY.resize(mSelectedDates.count()); | 1090 | mMaxY.resize(mSelectedDates.count()); |
1097 | 1091 | ||
1098 | QPtrList<Event> dayEvents; | 1092 | QPtrList<Event> dayEvents; |
1099 | 1093 | ||
1100 | // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. | 1094 | // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. |
1101 | // Therefore, gtodoset all of them. | 1095 | // Therefore, gtodoset all of them. |
1102 | QPtrList<Todo> todos = calendar()->todos(); | 1096 | QPtrList<Todo> todos = calendar()->todos(); |
1103 | 1097 | ||
1104 | mAgenda->setDateList(mSelectedDates); | 1098 | mAgenda->setDateList(mSelectedDates); |
1105 | 1099 | ||
1106 | QDate today = QDate::currentDate(); | 1100 | QDate today = QDate::currentDate(); |
1107 | 1101 | ||
1108 | DateList::ConstIterator dit; | 1102 | DateList::ConstIterator dit; |
1109 | int curCol = 0; | 1103 | int curCol = 0; |
1110 | for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { | 1104 | for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { |
1111 | QDate currentDate = *dit; | 1105 | QDate currentDate = *dit; |
1112 | // kdDebug() << "KOAgendaView::fillAgenda(): " << currentDate.toString() | 1106 | // kdDebug() << "KOAgendaView::fillAgenda(): " << currentDate.toString() |
1113 | // << endl; | 1107 | // << endl; |
1114 | 1108 | ||
1115 | dayEvents = calendar()->events(currentDate,true); | 1109 | dayEvents = calendar()->events(currentDate,true); |
1116 | 1110 | ||
1117 | // Default values, which can never be reached | 1111 | // Default values, which can never be reached |
1118 | mMinY[curCol] = mAgenda->timeToY(QTime(23,59)) + 1; | 1112 | mMinY[curCol] = mAgenda->timeToY(QTime(23,59)) + 1; |
1119 | mMaxY[curCol] = mAgenda->timeToY(QTime(0,0)) - 1; | 1113 | mMaxY[curCol] = mAgenda->timeToY(QTime(0,0)) - 1; |
1120 | 1114 | ||
1121 | unsigned int numEvent; | 1115 | unsigned int numEvent; |
1122 | for(numEvent=0;numEvent<dayEvents.count();++numEvent) { | 1116 | for(numEvent=0;numEvent<dayEvents.count();++numEvent) { |
1123 | Event *event = dayEvents.at(numEvent); | 1117 | Event *event = dayEvents.at(numEvent); |
1124 | if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") ) | 1118 | if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") ) |
1125 | if ( event->uid().left(15) == QString("last-syncEvent-") ) | 1119 | if ( event->uid().left(15) == QString("last-syncEvent-") ) |
1126 | continue; | 1120 | continue; |
1127 | // kdDebug() << " Event: " << event->summary() << endl; | 1121 | // kdDebug() << " Event: " << event->summary() << endl; |
1128 | 1122 | ||
1129 | int beginX = currentDate.daysTo(event->dtStart().date()) + curCol; | 1123 | int beginX = currentDate.daysTo(event->dtStart().date()) + curCol; |
1130 | int endX = currentDate.daysTo(event->dtEnd().date()) + curCol; | 1124 | int endX = currentDate.daysTo(event->dtEnd().date()) + curCol; |
1131 | 1125 | ||
1132 | // kdDebug() << " beginX: " << beginX << " endX: " << endX << endl; | 1126 | // kdDebug() << " beginX: " << beginX << " endX: " << endX << endl; |
1133 | 1127 | ||
1134 | if (event->doesFloat()) { | 1128 | if (event->doesFloat()) { |
1135 | if (event->recurrence()->doesRecur()) { | 1129 | if (event->recurrence()->doesRecur()) { |
1136 | mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol); | 1130 | mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol); |
1137 | } else { | 1131 | } else { |
1138 | if (beginX <= 0 && curCol == 0) { | 1132 | if (beginX <= 0 && curCol == 0) { |
1139 | mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); | 1133 | mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); |
1140 | } else if (beginX == curCol) { | 1134 | } else if (beginX == curCol) { |
1141 | mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); | 1135 | mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); |
diff --git a/korganizer/kotodoeditor.cpp b/korganizer/kotodoeditor.cpp index f9f037a..51e2524 100644 --- a/korganizer/kotodoeditor.cpp +++ b/korganizer/kotodoeditor.cpp | |||
@@ -227,229 +227,210 @@ bool KOTodoEditor::processInput( bool emitTime ) | |||
227 | { | 227 | { |
228 | if (!validateInput()) return false; | 228 | if (!validateInput()) return false; |
229 | 229 | ||
230 | Todo *todo = 0; | 230 | Todo *todo = 0; |
231 | 231 | ||
232 | if (mTodo) todo = mTodo; | 232 | if (mTodo) todo = mTodo; |
233 | else { | 233 | else { |
234 | todo = new Todo; | 234 | todo = new Todo; |
235 | todo->setOrganizer(KOPrefs::instance()->email()); | 235 | todo->setOrganizer(KOPrefs::instance()->email()); |
236 | } | 236 | } |
237 | 237 | ||
238 | writeTodo(todo); | 238 | writeTodo(todo); |
239 | if ( emitTime ) { | 239 | if ( emitTime ) { |
240 | globalFlagBlockAgenda = 1; | 240 | globalFlagBlockAgenda = 1; |
241 | emit showAgendaView( false ); | 241 | emit showAgendaView( false ); |
242 | if ( todo->hasDueDate() ) | 242 | if ( todo->hasDueDate() ) |
243 | emit jumpToTime( todo->dtDue().date() ); | 243 | emit jumpToTime( todo->dtDue().date() ); |
244 | globalFlagBlockAgenda = 2; | 244 | globalFlagBlockAgenda = 2; |
245 | } | 245 | } |
246 | if (mTodo) { | 246 | if (mTodo) { |
247 | todo->setRevision(todo->revision()+1); | 247 | todo->setRevision(todo->revision()+1); |
248 | emit todoChanged(todo); | 248 | emit todoChanged(todo); |
249 | } else { | 249 | } else { |
250 | mCalendar->addTodo(todo); | 250 | mCalendar->addTodo(todo); |
251 | mTodo = todo; | 251 | mTodo = todo; |
252 | emit todoAdded(todo); | 252 | emit todoAdded(todo); |
253 | } | 253 | } |
254 | 254 | ||
255 | return true; | 255 | return true; |
256 | } | 256 | } |
257 | 257 | ||
258 | void KOTodoEditor::deleteTodo() | 258 | void KOTodoEditor::deleteTodo() |
259 | { | 259 | { |
260 | if (mTodo) { | 260 | if (mTodo) { |
261 | if (KOPrefs::instance()->mConfirm) { | 261 | if (KOPrefs::instance()->mConfirm) { |
262 | switch (msgItemDelete()) { | 262 | switch (msgItemDelete()) { |
263 | case KMessageBox::Continue: // OK | 263 | case KMessageBox::Continue: // OK |
264 | emit todoToBeDeleted(mTodo); | 264 | emit todoToBeDeleted(mTodo); |
265 | emit dialogClose(mTodo); | 265 | emit dialogClose(mTodo); |
266 | mCalendar->deleteTodo(mTodo); | 266 | mCalendar->deleteTodo(mTodo); |
267 | emit todoDeleted(); | 267 | emit todoDeleted(); |
268 | reject(); | 268 | reject(); |
269 | break; | 269 | break; |
270 | } | 270 | } |
271 | } | 271 | } |
272 | else { | 272 | else { |
273 | emit todoToBeDeleted(mTodo); | 273 | emit todoToBeDeleted(mTodo); |
274 | emit dialogClose(mTodo); | 274 | emit dialogClose(mTodo); |
275 | mCalendar->deleteTodo(mTodo); | 275 | mCalendar->deleteTodo(mTodo); |
276 | emit todoDeleted(); | 276 | emit todoDeleted(); |
277 | reject(); | 277 | reject(); |
278 | } | 278 | } |
279 | } else { | 279 | } else { |
280 | reject(); | 280 | reject(); |
281 | } | 281 | } |
282 | } | 282 | } |
283 | 283 | ||
284 | void KOTodoEditor::setDefaults(QDateTime due,Todo *relatedEvent,bool allDay) | 284 | void KOTodoEditor::setDefaults(QDateTime due,Todo *relatedEvent,bool allDay) |
285 | { | 285 | { |
286 | mRelatedTodo = relatedEvent; | 286 | mRelatedTodo = relatedEvent; |
287 | 287 | ||
288 | mGeneral->setDefaults(due,allDay); | 288 | mGeneral->setDefaults(due,allDay); |
289 | mDetails->setDefaults(); | 289 | mDetails->setDefaults(); |
290 | showPage( 0 ); | 290 | showPage( 0 ); |
291 | if ( mRelatedTodo ) { | 291 | if ( mRelatedTodo ) { |
292 | mGeneral->setCategories (mRelatedTodo->categoriesStr ()); | 292 | mGeneral->setCategories (mRelatedTodo->categoriesStr ()); |
293 | mGeneral->setSecrecy (mRelatedTodo->secrecy ()); | 293 | mGeneral->setSecrecy (mRelatedTodo->secrecy ()); |
294 | if ( mRelatedTodo->priority() < 3 ) | 294 | if ( mRelatedTodo->priority() < 3 ) |
295 | mGeneral->mPriorityCombo->setCurrentItem(mRelatedTodo->priority()-1); | 295 | mGeneral->mPriorityCombo->setCurrentItem(mRelatedTodo->priority()-1); |
296 | mGeneral->mSummaryEdit->lineEdit()->setText(mRelatedTodo->summary()+": "); | 296 | mGeneral->mSummaryEdit->lineEdit()->setText(mRelatedTodo->summary()+": "); |
297 | int len = mRelatedTodo->summary().length(); | 297 | int len = mRelatedTodo->summary().length(); |
298 | mGeneral->mSummaryEdit->lineEdit()->setFocus(); | 298 | mGeneral->mSummaryEdit->lineEdit()->setFocus(); |
299 | mGeneral->mSummaryEdit->lineEdit()->setCursorPosition ( len+2 ); | 299 | mGeneral->mSummaryEdit->lineEdit()->setCursorPosition ( len+2 ); |
300 | mGeneral->mSummaryEdit->lineEdit()->setSelection ( 0, len+2 ); | 300 | mGeneral->mSummaryEdit->lineEdit()->setSelection ( 0, len+2 ); |
301 | 301 | ||
302 | } else | 302 | } else |
303 | mGeneral->setFocusOn( 2 ); | 303 | mGeneral->setFocusOn( 2 ); |
304 | tabWidget()->setTabEnabled ( mRecurrence->parentWidget(), false ); | 304 | tabWidget()->setTabEnabled ( mRecurrence->parentWidget(), false ); |
305 | mRecurrence->setDefaults(QDateTime::currentDateTime(),QDateTime::currentDateTime().addSecs( 3600 ),true); | 305 | mRecurrence->setDefaults(QDateTime::currentDateTime(),QDateTime::currentDateTime().addSecs( 3600 ),true); |
306 | } | 306 | } |
307 | void KOTodoEditor::checkRecurrence() | 307 | void KOTodoEditor::checkRecurrence() |
308 | { | 308 | { |
309 | if ( mGeneral->mDueCheck->isChecked() && mGeneral->mStartCheck->isChecked()) { | 309 | if ( mGeneral->mDueCheck->isChecked() && mGeneral->mStartCheck->isChecked()) { |
310 | tabWidget()->setTabEnabled ( mRecurrence->parentWidget(), true ); | 310 | tabWidget()->setTabEnabled ( mRecurrence->parentWidget(), true ); |
311 | 311 | ||
312 | if ( mTodo ) | 312 | if ( mTodo ) |
313 | mRecurrence->readEvent( mTodo ); | 313 | mRecurrence->readEvent( mTodo ); |
314 | else { | 314 | else { |
315 | bool time = mGeneral->mTimeButton->isChecked(); | 315 | bool time = mGeneral->mTimeButton->isChecked(); |
316 | QDateTime from,to; | 316 | QDateTime from,to; |
317 | if ( time ) { | 317 | if ( time ) { |
318 | to = QDateTime( mGeneral->mDueDateEdit->date(), mGeneral->mDueTimeEdit->getTime() ) ; | 318 | to = QDateTime( mGeneral->mDueDateEdit->date(), mGeneral->mDueTimeEdit->getTime() ) ; |
319 | from = QDateTime( mGeneral->mStartDateEdit->date(),mGeneral->mStartTimeEdit->getTime( )) ; | 319 | from = QDateTime( mGeneral->mStartDateEdit->date(),mGeneral->mStartTimeEdit->getTime( )) ; |
320 | } else { | 320 | } else { |
321 | to = QDateTime( mGeneral->mDueDateEdit->date(), QTime( 0,0,0) ) ; | 321 | to = QDateTime( mGeneral->mDueDateEdit->date(), QTime( 0,0,0) ) ; |
322 | from = QDateTime( mGeneral->mStartDateEdit->date(),QTime( 0,0,0) ) ; | 322 | from = QDateTime( mGeneral->mStartDateEdit->date(),QTime( 0,0,0) ) ; |
323 | } | 323 | } |
324 | if ( to < from ) | 324 | if ( to < from ) |
325 | to = from; | 325 | to = from; |
326 | mRecurrence->setDefaults(from,to,!time); | 326 | mRecurrence->setDefaults(from,to,!time); |
327 | } | 327 | } |
328 | } else { | 328 | } else { |
329 | tabWidget()->setTabEnabled ( mRecurrence->parentWidget(), false ); | 329 | tabWidget()->setTabEnabled ( mRecurrence->parentWidget(), false ); |
330 | mRecurrence->setDefaults(QDateTime::currentDateTime(),QDateTime::currentDateTime().addSecs( 3600 ),true); | 330 | mRecurrence->setDefaults(QDateTime::currentDateTime(),QDateTime::currentDateTime().addSecs( 3600 ),true); |
331 | } | 331 | } |
332 | } | 332 | } |
333 | void KOTodoEditor::readTodo(Todo *todo) | 333 | void KOTodoEditor::readTodo(Todo *todo) |
334 | { | 334 | { |
335 | mGeneral->readTodo(todo); | 335 | mGeneral->readTodo(todo); |
336 | mDetails->readEvent(todo); | 336 | mDetails->readEvent(todo); |
337 | mRelatedTodo = 0;//todo->relatedTo(); | 337 | mRelatedTodo = 0;//todo->relatedTo(); |
338 | // categories | 338 | // categories |
339 | // mCategoryDialog->setSelected(todo->categories()); | 339 | // mCategoryDialog->setSelected(todo->categories()); |
340 | 340 | ||
341 | // We should handle read-only events here. | 341 | // We should handle read-only events here. |
342 | } | 342 | } |
343 | 343 | ||
344 | void KOTodoEditor::writeTodo(Todo *event) | 344 | void KOTodoEditor::writeTodo(Todo *event) |
345 | { | 345 | { |
346 | mGeneral->writeTodo(event); | 346 | mGeneral->writeTodo(event); |
347 | mDetails->writeEvent(event); | 347 | mDetails->writeEvent(event); |
348 | 348 | ||
349 | // set related event, i.e. parent to-do in this case. | 349 | // set related event, i.e. parent to-do in this case. |
350 | if (mRelatedTodo) { | 350 | if (mRelatedTodo) { |
351 | event->setRelatedTo(mRelatedTodo); | 351 | event->setRelatedTo(mRelatedTodo); |
352 | } | 352 | } |
353 | if ( mGeneral->mDueCheck->isChecked() && mGeneral->mStartCheck->isChecked()) { | 353 | if ( mGeneral->mDueCheck->isChecked() && mGeneral->mStartCheck->isChecked()) { |
354 | mRecurrence->writeEvent(event); | 354 | mRecurrence->writeEvent(event); |
355 | event->setRecurrenceID( event->dtStart().addSecs(-1) ); | 355 | if ( event->doesRecur() ) { |
356 | event->setRecurDates(); | 356 | event->setRecurrenceID( event->dtStart().addSecs(-1) ); |
357 | #if 0 | 357 | event->setRecurDates(); |
358 | bool ok; | 358 | } else { |
359 | QDateTime next = event->getNextOccurence( event->dtStart().addSecs(-1), &ok ); | ||
360 | if ( ok ) { | ||
361 | QDateTime from,to; | ||
362 | bool time = mGeneral->mTimeButton->isChecked(); | ||
363 | if ( time ) { | ||
364 | to = QDateTime( mGeneral->mDueDateEdit->date(), mGeneral->mDueTimeEdit->getTime() ) ; | ||
365 | from = QDateTime( mGeneral->mStartDateEdit->date(),mGeneral->mStartTimeEdit->getTime( )) ; | ||
366 | } else { | ||
367 | to = QDateTime( mGeneral->mDueDateEdit->date(), QTime( 0,0,0) ) ; | ||
368 | from = QDateTime( mGeneral->mStartDateEdit->date(),QTime( 0,0,0) ) ; | ||
369 | } | ||
370 | if ( to < from ) | ||
371 | to = from; | ||
372 | int secs = from.secsTo( to ); | ||
373 | event->setRecurrenceID( next ); | ||
374 | event->setDtStart( next ); | ||
375 | event->setDtDue( next.addSecs( secs ) ); | ||
376 | } | ||
377 | else { | ||
378 | event->setHasRecurrenceID( false ); | 359 | event->setHasRecurrenceID( false ); |
379 | event->recurrence()->unsetRecurs(); | ||
380 | } | 360 | } |
381 | #endif | 361 | } else { |
382 | } else | 362 | event->setHasRecurrenceID( false ); |
383 | event->recurrence()->unsetRecurs(); | 363 | event->recurrence()->unsetRecurs(); |
364 | } | ||
384 | } | 365 | } |
385 | 366 | ||
386 | bool KOTodoEditor::validateInput() | 367 | bool KOTodoEditor::validateInput() |
387 | { | 368 | { |
388 | if (!mGeneral->validateInput()) return false; | 369 | if (!mGeneral->validateInput()) return false; |
389 | if (!mDetails->validateInput()) return false; | 370 | if (!mDetails->validateInput()) return false; |
390 | return true; | 371 | return true; |
391 | } | 372 | } |
392 | 373 | ||
393 | int KOTodoEditor::msgItemDelete() | 374 | int KOTodoEditor::msgItemDelete() |
394 | { | 375 | { |
395 | return KMessageBox::warningContinueCancel(this, | 376 | return KMessageBox::warningContinueCancel(this, |
396 | i18n("This item will be permanently deleted."), | 377 | i18n("This item will be permanently deleted."), |
397 | i18n("KOrganizer Confirmation"),i18n("Delete")); | 378 | i18n("KOrganizer Confirmation"),i18n("Delete")); |
398 | } | 379 | } |
399 | 380 | ||
400 | void KOTodoEditor::modified (int modification) | 381 | void KOTodoEditor::modified (int modification) |
401 | { | 382 | { |
402 | if (modification == KOGlobals::CATEGORY_MODIFIED || | 383 | if (modification == KOGlobals::CATEGORY_MODIFIED || |
403 | KOGlobals::UNKNOWN_MODIFIED == modification ) | 384 | KOGlobals::UNKNOWN_MODIFIED == modification ) |
404 | // mCategoryDialog->setSelected (mTodo->categories ()); | 385 | // mCategoryDialog->setSelected (mTodo->categories ()); |
405 | mGeneral->modified (mTodo, modification); | 386 | mGeneral->modified (mTodo, modification); |
406 | 387 | ||
407 | } | 388 | } |
408 | 389 | ||
409 | void KOTodoEditor::slotLoadTemplate() | 390 | void KOTodoEditor::slotLoadTemplate() |
410 | { | 391 | { |
411 | 392 | ||
412 | QString fileName =locateLocal( "templates", "todos" ); | 393 | QString fileName =locateLocal( "templates", "todos" ); |
413 | QDir t_dir; | 394 | QDir t_dir; |
414 | if ( !t_dir.exists(fileName) ) | 395 | if ( !t_dir.exists(fileName) ) |
415 | t_dir.mkdir ( fileName ); | 396 | t_dir.mkdir ( fileName ); |
416 | fileName += "/todo"; | 397 | fileName += "/todo"; |
417 | fileName = KFileDialog::getSaveFileName( fileName , "Load Todo template", this ); | 398 | fileName = KFileDialog::getSaveFileName( fileName , "Load Todo template", this ); |
418 | if ( fileName.length() == 0 ) | 399 | if ( fileName.length() == 0 ) |
419 | return; | 400 | return; |
420 | CalendarLocal cal; | 401 | CalendarLocal cal; |
421 | ICalFormat format; | 402 | ICalFormat format; |
422 | if ( !format.load( &cal, fileName ) ) { | 403 | if ( !format.load( &cal, fileName ) ) { |
423 | KMessageBox::error( this, i18n("Error loading template file\n '%1'.") | 404 | KMessageBox::error( this, i18n("Error loading template file\n '%1'.") |
424 | .arg( fileName ) ); | 405 | .arg( fileName ) ); |
425 | return ; | 406 | return ; |
426 | } | 407 | } |
427 | QPtrList<Todo> todos = cal.todos(); | 408 | QPtrList<Todo> todos = cal.todos(); |
428 | Todo * todo = todos.first(); | 409 | Todo * todo = todos.first(); |
429 | if ( !todo ) { | 410 | if ( !todo ) { |
430 | KMessageBox::error( this, | 411 | KMessageBox::error( this, |
431 | i18n("Template does not\ncontain a valid Todo.")); | 412 | i18n("Template does not\ncontain a valid Todo.")); |
432 | } else { | 413 | } else { |
433 | readTodo( todo ); | 414 | readTodo( todo ); |
434 | } | 415 | } |
435 | 416 | ||
436 | } | 417 | } |
437 | 418 | ||
438 | void KOTodoEditor::slotSaveTemplate() | 419 | void KOTodoEditor::slotSaveTemplate() |
439 | { | 420 | { |
440 | QString fileName =locateLocal( "templates", "todos" ); | 421 | QString fileName =locateLocal( "templates", "todos" ); |
441 | QDir t_dir; | 422 | QDir t_dir; |
442 | if ( !t_dir.exists(fileName) ) | 423 | if ( !t_dir.exists(fileName) ) |
443 | t_dir.mkdir ( fileName ); | 424 | t_dir.mkdir ( fileName ); |
444 | fileName += "/todo"; | 425 | fileName += "/todo"; |
445 | fileName = KFileDialog::getSaveFileName( fileName , "Save as Todo template", this ); | 426 | fileName = KFileDialog::getSaveFileName( fileName , "Save as Todo template", this ); |
446 | if ( fileName.length() > 0 ) | 427 | if ( fileName.length() > 0 ) |
447 | saveTemplate( fileName ); | 428 | saveTemplate( fileName ); |
448 | } | 429 | } |
449 | 430 | ||
450 | void KOTodoEditor::saveTemplate( const QString &templateName ) | 431 | void KOTodoEditor::saveTemplate( const QString &templateName ) |
451 | { | 432 | { |
452 | Todo *todo = new Todo; | 433 | Todo *todo = new Todo; |
453 | writeTodo( todo ); | 434 | writeTodo( todo ); |
454 | saveAsTemplate( todo, templateName ); | 435 | saveAsTemplate( todo, templateName ); |
455 | } | 436 | } |