summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt2
-rw-r--r--korganizer/calendarview.cpp1
2 files changed, 2 insertions, 1 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index fd5e4f9..944ee1e 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,30 +1,32 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 2.2.1 ************ 3********** VERSION 2.2.1 ************
4 4
5KO/Pi: 5KO/Pi:
6Fixed a problem displaying very long allday events in agenda view in single day mode. 6Fixed a problem displaying very long allday events in agenda view in single day mode.
7Fixed a problem with the default settings for new todos. 7Fixed a problem with the default settings for new todos.
8Added an error message dialog if saving of calendar files is not possible.
9Made it impossible to close KO/Pi if saving fails.
8 10
9KA/Pi: 11KA/Pi:
10Added a config option to turn on asking before a contact is deleted. 12Added a config option to turn on asking before a contact is deleted.
11Fixed a problem with the default view and view selection at startup. 13Fixed a problem with the default view and view selection at startup.
12Formatted name is now set on import, if formatted name is empty. 14Formatted name is now set on import, if formatted name is empty.
13 15
14********** VERSION 2.2.0 ************ 16********** VERSION 2.2.0 ************
15 17
16New stable release! 18New stable release!
17Fixed some minor usability problems. 19Fixed some minor usability problems.
18Added writing of next alarm to a file for usage on pdaXrom. 20Added writing of next alarm to a file for usage on pdaXrom.
19 21
20 22
21************************************* 23*************************************
22 24
23You can find the complete changelog 25You can find the complete changelog
24from version 1.7.7 to 2.2.0 26from version 1.7.7 to 2.2.0
25in the source package or on 27in the source package or on
26 28
27http://www.pi-sync.net/html/changelog.html 29http://www.pi-sync.net/html/changelog.html
28 30
29 31
30 32
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index ca071b2..26323b1 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1014,3073 +1014,3072 @@ void CalendarView::checkAlarms()
1014 mCalendar->addTodo( nt ); 1014 mCalendar->addTodo( nt );
1015 nt->setSummary( "Planning Project2"); 1015 nt->setSummary( "Planning Project2");
1016 nt->setPriority( 1 ); 1016 nt->setPriority( 1 );
1017 nt->setDescription( "This is a test description of Planning_Project_2" ); 1017 nt->setDescription( "This is a test description of Planning_Project_2" );
1018 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2") ); 1018 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2") );
1019 nt->setPercentComplete( 20 ); 1019 nt->setPercentComplete( 20 );
1020 1020
1021 1021
1022 Todo * sub1 = nt; 1022 Todo * sub1 = nt;
1023 sub1->setRelatedTo( root1 ); 1023 sub1->setRelatedTo( root1 );
1024 1024
1025 nt = new Todo; 1025 nt = new Todo;
1026 mCalendar->addTodo( nt ); 1026 mCalendar->addTodo( nt );
1027 nt->setSummary( "Planning Project2: Lutz"); 1027 nt->setSummary( "Planning Project2: Lutz");
1028 nt->setPriority( 1 ); 1028 nt->setPriority( 1 );
1029 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1029 nt->setDescription( "This todo counts the actual work of a person on a project" );
1030 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Lutz") ); 1030 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Lutz") );
1031 nt->setPercentComplete( 20 ); 1031 nt->setPercentComplete( 20 );
1032 Todo * workLutz11 = nt; 1032 Todo * workLutz11 = nt;
1033 workLutz11->setRelatedTo( sub1 ); 1033 workLutz11->setRelatedTo( sub1 );
1034 1034
1035 nt = new Todo; 1035 nt = new Todo;
1036 mCalendar->addTodo( nt ); 1036 mCalendar->addTodo( nt );
1037 nt->setSummary( "Planning Project2: Norbert"); 1037 nt->setSummary( "Planning Project2: Norbert");
1038 nt->setPriority( 1 ); 1038 nt->setPriority( 1 );
1039 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1039 nt->setDescription( "This todo counts the actual work of a person on a project" );
1040 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Norbert") ); 1040 nt->setCategories( QString( "Cat_Pro2,Cat_Plan_Pro2,Cat_Work_Norbert") );
1041 nt->setPercentComplete( 20 ); 1041 nt->setPercentComplete( 20 );
1042 Todo * workNorbert11 = nt; 1042 Todo * workNorbert11 = nt;
1043 workNorbert11->setRelatedTo( sub1 ); 1043 workNorbert11->setRelatedTo( sub1 );
1044 1044
1045 nt = new Todo; 1045 nt = new Todo;
1046 mCalendar->addTodo( nt ); 1046 mCalendar->addTodo( nt );
1047 nt->setSummary( "Work on 2"); 1047 nt->setSummary( "Work on 2");
1048 nt->setPriority( 1 ); 1048 nt->setPriority( 1 );
1049 nt->setDescription( "This is a test description of Work Project_2" ); 1049 nt->setDescription( "This is a test description of Work Project_2" );
1050 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2") ); 1050 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2") );
1051 nt->setPercentComplete( 20 ); 1051 nt->setPercentComplete( 20 );
1052 1052
1053 Todo * sub2 = nt; 1053 Todo * sub2 = nt;
1054 sub2->setRelatedTo( root1 ); 1054 sub2->setRelatedTo( root1 );
1055 1055
1056 1056
1057 nt = new Todo; 1057 nt = new Todo;
1058 mCalendar->addTodo( nt ); 1058 mCalendar->addTodo( nt );
1059 nt->setSummary( "Work on 2: Lutz"); 1059 nt->setSummary( "Work on 2: Lutz");
1060 nt->setPriority( 1 ); 1060 nt->setPriority( 1 );
1061 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1061 nt->setDescription( "This todo counts the actual work of a person on a project" );
1062 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Lutz") ); 1062 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Lutz") );
1063 nt->setPercentComplete( 20 ); 1063 nt->setPercentComplete( 20 );
1064 Todo * workLutz12 = nt; 1064 Todo * workLutz12 = nt;
1065 workLutz12->setRelatedTo( sub2 ); 1065 workLutz12->setRelatedTo( sub2 );
1066 1066
1067 nt = new Todo; 1067 nt = new Todo;
1068 mCalendar->addTodo( nt ); 1068 mCalendar->addTodo( nt );
1069 nt->setSummary( "Work on 2: Norbert"); 1069 nt->setSummary( "Work on 2: Norbert");
1070 nt->setPriority( 1 ); 1070 nt->setPriority( 1 );
1071 nt->setDescription( "This todo counts the actual work of a person on a project" ); 1071 nt->setDescription( "This todo counts the actual work of a person on a project" );
1072 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Norbert") ); 1072 nt->setCategories( QString( "Cat_Pro2,Cat_Work_Pro2,Cat_Work_Norbert") );
1073 nt->setPercentComplete( 20 ); 1073 nt->setPercentComplete( 20 );
1074 Todo * workNorbert12 = nt; 1074 Todo * workNorbert12 = nt;
1075 workNorbert12->setRelatedTo( sub2 ); 1075 workNorbert12->setRelatedTo( sub2 );
1076 createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, 10 ); 1076 createRunningDate4Todo( root1, start, end, secLenRunning, secLenPausing, 10 );
1077 createRunningDate4Todo( sub1, start.addSecs( secLenRunning*3 ), start.addDays( 20 ), secLenRunning*2, secLenPausing, 2); 1077 createRunningDate4Todo( sub1, start.addSecs( secLenRunning*3 ), start.addDays( 20 ), secLenRunning*2, secLenPausing, 2);
1078 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*3, secLenPausing, 7); 1078 createRunningDate4Todo( sub2, start.addDays( 8 ), end, secLenRunning*3, secLenPausing, 7);
1079 createRunningDate4Todo( workLutz11, start, start.addDays( 18 ), secLenRunning/2, secLenPausing*5, 0); 1079 createRunningDate4Todo( workLutz11, start, start.addDays( 18 ), secLenRunning/2, secLenPausing*5, 0);
1080 createRunningDate4Todo( workNorbert11, start.addDays( 8 ), start.addDays( 18 ), secLenRunning*5, secLenPausing*5, 1); 1080 createRunningDate4Todo( workNorbert11, start.addDays( 8 ), start.addDays( 18 ), secLenRunning*5, secLenPausing*5, 1);
1081 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning, secLenPausing*8, 0); 1081 createRunningDate4Todo( workLutz12, start.addDays( 8 ),end, secLenRunning, secLenPausing*8, 0);
1082 createRunningDate4Todo( workNorbert12, start.addDays( 28 ), end, secLenRunning/8, secLenPausing*6, 0); 1082 createRunningDate4Todo( workNorbert12, start.addDays( 28 ), end, secLenRunning/8, secLenPausing*6, 0);
1083 } 1083 }
1084 updateView(); 1084 updateView();
1085#endif 1085#endif
1086 1086
1087} 1087}
1088void CalendarView::createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval ) 1088void CalendarView::createRunningDate4Todo( Todo * runT, QDateTime start , QDateTime end, int secLenRunning, int secLenPausing,int dayInterval )
1089{ 1089{
1090 static int ccc = 0; 1090 static int ccc = 0;
1091 ++ccc; 1091 ++ccc;
1092 QDateTime t_start = start; 1092 QDateTime t_start = start;
1093 runT->setPriority( 5 ); 1093 runT->setPriority( 5 );
1094 runT->setPercentComplete( 0 ); 1094 runT->setPercentComplete( 0 );
1095 int count = 0; 1095 int count = 0;
1096 int prio = 5; 1096 int prio = 5;
1097 int complete = 0; 1097 int complete = 0;
1098 while ( t_start < end ) { 1098 while ( t_start < end ) {
1099 ++count; 1099 ++count;
1100 if ( count > ccc ) { 1100 if ( count > ccc ) {
1101 count = 0; 1101 count = 0;
1102 --prio; 1102 --prio;
1103 if ( prio == 0 ) prio = 5; 1103 if ( prio == 0 ) prio = 5;
1104 complete += 20; 1104 complete += 20;
1105 if ( complete > 100 ) complete = 0; 1105 if ( complete > 100 ) complete = 0;
1106 runT->setPriority( prio ); 1106 runT->setPriority( prio );
1107 runT->setPercentComplete( complete ); 1107 runT->setPercentComplete( complete );
1108 } 1108 }
1109 runT->setRunning( true ); 1109 runT->setRunning( true );
1110 runT->saveRunningInfo( "Additional tt comment: running on "+ t_start.toString(), t_start, t_start.addSecs( secLenRunning ) ); 1110 runT->saveRunningInfo( "Additional tt comment: running on "+ t_start.toString(), t_start, t_start.addSecs( secLenRunning ) );
1111 if ( dayInterval ) 1111 if ( dayInterval )
1112 t_start = t_start.addDays( dayInterval ); 1112 t_start = t_start.addDays( dayInterval );
1113 else { 1113 else {
1114 t_start = t_start.addSecs( secLenRunning + secLenPausing ); 1114 t_start = t_start.addSecs( secLenRunning + secLenPausing );
1115 } 1115 }
1116 } 1116 }
1117} 1117}
1118 1118
1119void CalendarView::showDay( QDate d ) 1119void CalendarView::showDay( QDate d )
1120{ 1120{
1121 dateNavigator()->blockSignals( true ); 1121 dateNavigator()->blockSignals( true );
1122 dateNavigator()->selectDate( d ); 1122 dateNavigator()->selectDate( d );
1123 dateNavigator()->blockSignals( false ); 1123 dateNavigator()->blockSignals( false );
1124 mViewManager->showDayView(); 1124 mViewManager->showDayView();
1125 //dateNavigator()->selectDate( d ); 1125 //dateNavigator()->selectDate( d );
1126} 1126}
1127void CalendarView::timerAlarm() 1127void CalendarView::timerAlarm()
1128{ 1128{
1129 //qDebug("CalendarView::timerAlarm() "); 1129 //qDebug("CalendarView::timerAlarm() ");
1130 computeAlarm(mAlarmNotification ); 1130 computeAlarm(mAlarmNotification );
1131} 1131}
1132 1132
1133void CalendarView::suspendAlarm() 1133void CalendarView::suspendAlarm()
1134{ 1134{
1135 //qDebug(" CalendarView::suspendAlarm() "); 1135 //qDebug(" CalendarView::suspendAlarm() ");
1136 computeAlarm(mSuspendAlarmNotification ); 1136 computeAlarm(mSuspendAlarmNotification );
1137 1137
1138} 1138}
1139 1139
1140void CalendarView::startAlarm( QString mess , QString filename) 1140void CalendarView::startAlarm( QString mess , QString filename)
1141{ 1141{
1142 1142
1143 topLevelWidget()->showNormal(); 1143 topLevelWidget()->showNormal();
1144 topLevelWidget()->setActiveWindow(); 1144 topLevelWidget()->setActiveWindow();
1145 topLevelWidget()->raise(); 1145 topLevelWidget()->raise();
1146 1146
1147 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 1147 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
1148 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) ); 1148 QTimer::singleShot( 2000, this, SLOT( checkNextTimerAlarm() ) );
1149 1149
1150} 1150}
1151 1151
1152void CalendarView::checkNextTimerAlarm() 1152void CalendarView::checkNextTimerAlarm()
1153{ 1153{
1154 mCalendar->checkAlarmForIncidence( 0, true ); 1154 mCalendar->checkAlarmForIncidence( 0, true );
1155} 1155}
1156 1156
1157void CalendarView::computeAlarm( QString msg ) 1157void CalendarView::computeAlarm( QString msg )
1158{ 1158{
1159 1159
1160 QString mess = msg; 1160 QString mess = msg;
1161 QString mAlarmMessage = mess.mid( 9 ); 1161 QString mAlarmMessage = mess.mid( 9 );
1162 QString filename = MainWindow::resourcePath(); 1162 QString filename = MainWindow::resourcePath();
1163 filename += "koalarm.wav"; 1163 filename += "koalarm.wav";
1164 QString tempfilename; 1164 QString tempfilename;
1165 if ( mess.left( 13 ) == "suspend_alarm") { 1165 if ( mess.left( 13 ) == "suspend_alarm") {
1166 bool error = false; 1166 bool error = false;
1167 int len = mess.mid( 13 ).find("+++"); 1167 int len = mess.mid( 13 ).find("+++");
1168 if ( len < 2 ) 1168 if ( len < 2 )
1169 error = true; 1169 error = true;
1170 else { 1170 else {
1171 tempfilename = mess.mid( 13, len ); 1171 tempfilename = mess.mid( 13, len );
1172 if ( !QFile::exists( tempfilename ) ) 1172 if ( !QFile::exists( tempfilename ) )
1173 error = true; 1173 error = true;
1174 } 1174 }
1175 if ( ! error ) { 1175 if ( ! error ) {
1176 filename = tempfilename; 1176 filename = tempfilename;
1177 } 1177 }
1178 mAlarmMessage = mess.mid( 13+len+3 ); 1178 mAlarmMessage = mess.mid( 13+len+3 );
1179 //qDebug("suspend file %s ",tempfilename.latin1() ); 1179 //qDebug("suspend file %s ",tempfilename.latin1() );
1180 startAlarm( mAlarmMessage, filename); 1180 startAlarm( mAlarmMessage, filename);
1181 return; 1181 return;
1182 } 1182 }
1183 if ( mess.left( 11 ) == "timer_alarm") { 1183 if ( mess.left( 11 ) == "timer_alarm") {
1184 //mTimerTime = 0; 1184 //mTimerTime = 0;
1185 startAlarm( mess.mid( 11 ), filename ); 1185 startAlarm( mess.mid( 11 ), filename );
1186 return; 1186 return;
1187 } 1187 }
1188 if ( mess.left( 10 ) == "proc_alarm") { 1188 if ( mess.left( 10 ) == "proc_alarm") {
1189 bool error = false; 1189 bool error = false;
1190 int len = mess.mid( 10 ).find("+++"); 1190 int len = mess.mid( 10 ).find("+++");
1191 if ( len < 2 ) 1191 if ( len < 2 )
1192 error = true; 1192 error = true;
1193 else { 1193 else {
1194 tempfilename = mess.mid( 10, len ); 1194 tempfilename = mess.mid( 10, len );
1195 if ( !QFile::exists( tempfilename ) ) 1195 if ( !QFile::exists( tempfilename ) )
1196 error = true; 1196 error = true;
1197 } 1197 }
1198 if ( error ) { 1198 if ( error ) {
1199 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 1199 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
1200 mAlarmMessage += mess.mid( 10+len+3+9 ); 1200 mAlarmMessage += mess.mid( 10+len+3+9 );
1201 } else { 1201 } else {
1202 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 1202 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
1203 //qDebug("-----system command %s ",tempfilename.latin1() ); 1203 //qDebug("-----system command %s ",tempfilename.latin1() );
1204#ifndef _WIN32_ 1204#ifndef _WIN32_
1205 if ( vfork () == 0 ) { 1205 if ( vfork () == 0 ) {
1206 execl ( tempfilename.latin1(), 0 ); 1206 execl ( tempfilename.latin1(), 0 );
1207 return; 1207 return;
1208 } 1208 }
1209#else 1209#else
1210 QProcess* p = new QProcess(); 1210 QProcess* p = new QProcess();
1211 p->addArgument( tempfilename.latin1() ); 1211 p->addArgument( tempfilename.latin1() );
1212 p->start(); 1212 p->start();
1213 return; 1213 return;
1214#endif 1214#endif
1215 1215
1216 return; 1216 return;
1217 } 1217 }
1218 1218
1219 //qDebug("+++++++system command %s ",tempfilename.latin1() ); 1219 //qDebug("+++++++system command %s ",tempfilename.latin1() );
1220 } 1220 }
1221 if ( mess.left( 11 ) == "audio_alarm") { 1221 if ( mess.left( 11 ) == "audio_alarm") {
1222 bool error = false; 1222 bool error = false;
1223 int len = mess.mid( 11 ).find("+++"); 1223 int len = mess.mid( 11 ).find("+++");
1224 if ( len < 2 ) 1224 if ( len < 2 )
1225 error = true; 1225 error = true;
1226 else { 1226 else {
1227 tempfilename = mess.mid( 11, len ); 1227 tempfilename = mess.mid( 11, len );
1228 if ( !QFile::exists( tempfilename ) ) 1228 if ( !QFile::exists( tempfilename ) )
1229 error = true; 1229 error = true;
1230 } 1230 }
1231 if ( ! error ) { 1231 if ( ! error ) {
1232 filename = tempfilename; 1232 filename = tempfilename;
1233 } 1233 }
1234 mAlarmMessage = mess.mid( 11+len+3+9 ); 1234 mAlarmMessage = mess.mid( 11+len+3+9 );
1235 //qDebug("audio file command %s ",tempfilename.latin1() ); 1235 //qDebug("audio file command %s ",tempfilename.latin1() );
1236 } 1236 }
1237 if ( mess.left( 9 ) == "cal_alarm") { 1237 if ( mess.left( 9 ) == "cal_alarm") {
1238 mAlarmMessage = mess.mid( 9 ) ; 1238 mAlarmMessage = mess.mid( 9 ) ;
1239 } 1239 }
1240 1240
1241 startAlarm( mAlarmMessage, filename ); 1241 startAlarm( mAlarmMessage, filename );
1242 1242
1243 1243
1244} 1244}
1245 1245
1246void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti ) 1246void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti )
1247{ 1247{
1248 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1248 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1249 1249
1250 mSuspendAlarmNotification = noti; 1250 mSuspendAlarmNotification = noti;
1251 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; 1251 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000;
1252 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); 1252 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000);
1253 mSuspendTimer->start( ms , true ); 1253 mSuspendTimer->start( ms , true );
1254#ifdef DESKTOP_VERSION 1254#ifdef DESKTOP_VERSION
1255 if ( QApplication::desktop()->width() < 1024 ) { 1255 if ( QApplication::desktop()->width() < 1024 ) {
1256 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti; 1256 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti;
1257 //qDebug("nextsuspendalarm = \n%s ",mess.latin1() ); 1257 //qDebug("nextsuspendalarm = \n%s ",mess.latin1() );
1258 QString fn = QDir::homeDirPath() + "/.kopi_suspend_alarm"; 1258 QString fn = QDir::homeDirPath() + "/.kopi_suspend_alarm";
1259 QFile file( fn ); 1259 QFile file( fn );
1260 if (!file.open( IO_WriteOnly ) ) { 1260 if (!file.open( IO_WriteOnly ) ) {
1261 qDebug("KO: Error writing next suspend alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1()); 1261 qDebug("KO: Error writing next suspend alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1());
1262 } else { 1262 } else {
1263 QTextStream ts( &file ); 1263 QTextStream ts( &file );
1264 ts << mess; 1264 ts << mess;
1265 file.close(); 1265 file.close();
1266 } 1266 }
1267 } 1267 }
1268#endif 1268#endif
1269 1269
1270} 1270}
1271 1271
1272void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti ) 1272void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti )
1273{ 1273{
1274 mNextAlarmDateTime = qdt; 1274 mNextAlarmDateTime = qdt;
1275 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1275 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1276 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1276 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1277#ifndef DESKTOP_VERSION 1277#ifndef DESKTOP_VERSION
1278 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() ); 1278 AlarmServer::addAlarm ( qdt,"koalarm", noti.utf8() );
1279#endif 1279#endif
1280 return; 1280 return;
1281 } 1281 }
1282#ifdef DESKTOP_VERSION 1282#ifdef DESKTOP_VERSION
1283 if ( QApplication::desktop()->width() < 1024 ) { 1283 if ( QApplication::desktop()->width() < 1024 ) {
1284 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti; 1284 QString mess = qdt.toString( "yyyy-MM-dd hh:mm:ss" ) + "\n" + noti;
1285 //qDebug("nextalarm = \n%s ",mess.latin1() ); 1285 //qDebug("nextalarm = \n%s ",mess.latin1() );
1286 QString fn = QDir::homeDirPath() + "/.kopi_next_alarm"; 1286 QString fn = QDir::homeDirPath() + "/.kopi_next_alarm";
1287 QFile file( fn ); 1287 QFile file( fn );
1288 if (!file.open( IO_WriteOnly ) ) { 1288 if (!file.open( IO_WriteOnly ) ) {
1289 qDebug("KO: Error writing next alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1()); 1289 qDebug("KO: Error writing next alarm file %s\nContent: \n%s ", fn.latin1(), mess.latin1());
1290 } else { 1290 } else {
1291 QTextStream ts( &file ); 1291 QTextStream ts( &file );
1292 ts << mess; 1292 ts << mess;
1293 file.close(); 1293 file.close();
1294 } 1294 }
1295 } 1295 }
1296#endif 1296#endif
1297 int maxSec; 1297 int maxSec;
1298 //maxSec = 5; //testing only 1298 //maxSec = 5; //testing only
1299 maxSec = 86400+3600; // one day+1hour 1299 maxSec = 86400+3600; // one day+1hour
1300 mAlarmNotification = noti; 1300 mAlarmNotification = noti;
1301 int sec = QDateTime::currentDateTime().secsTo( qdt ); 1301 int sec = QDateTime::currentDateTime().secsTo( qdt );
1302 if ( sec > maxSec ) { 1302 if ( sec > maxSec ) {
1303 mRecheckAlarmTimer->start( maxSec * 1000 ); 1303 mRecheckAlarmTimer->start( maxSec * 1000 );
1304 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec ); 1304 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec );
1305 return; 1305 return;
1306 } else { 1306 } else {
1307 mRecheckAlarmTimer->stop(); 1307 mRecheckAlarmTimer->stop();
1308 } 1308 }
1309 //qDebug("Alarm timer started with secs: %d ", sec); 1309 //qDebug("Alarm timer started with secs: %d ", sec);
1310 mAlarmTimer->start( sec * 1000 , true ); 1310 mAlarmTimer->start( sec * 1000 , true );
1311 1311
1312} 1312}
1313// called by mRecheckAlarmTimer to get next alarm 1313// called by mRecheckAlarmTimer to get next alarm
1314// we need this, because a QTimer has only a max range of 25 days 1314// we need this, because a QTimer has only a max range of 25 days
1315void CalendarView::recheckTimerAlarm() 1315void CalendarView::recheckTimerAlarm()
1316{ 1316{
1317 mAlarmTimer->stop(); 1317 mAlarmTimer->stop();
1318 mRecheckAlarmTimer->stop(); 1318 mRecheckAlarmTimer->stop();
1319 mCalendar->checkAlarmForIncidence( 0, true ); 1319 mCalendar->checkAlarmForIncidence( 0, true );
1320} 1320}
1321#ifndef DESKTOP_VERSION 1321#ifndef DESKTOP_VERSION
1322void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti ) 1322void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti )
1323#else 1323#else
1324void CalendarView::removeAlarm(const QDateTime &, const QString & ) 1324void CalendarView::removeAlarm(const QDateTime &, const QString & )
1325#endif 1325#endif
1326{ 1326{
1327 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 1327 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
1328 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 1328 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
1329#ifndef DESKTOP_VERSION 1329#ifndef DESKTOP_VERSION
1330 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() ); 1330 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.utf8() );
1331#endif 1331#endif
1332 return; 1332 return;
1333 } 1333 }
1334 mAlarmTimer->stop(); 1334 mAlarmTimer->stop();
1335} 1335}
1336void CalendarView::selectWeekNum ( int num ) 1336void CalendarView::selectWeekNum ( int num )
1337{ 1337{
1338 dateNavigator()->blockSignals( true ); 1338 dateNavigator()->blockSignals( true );
1339 dateNavigator()->selectWeek( num ); 1339 dateNavigator()->selectWeek( num );
1340 dateNavigator()->blockSignals( false ); 1340 dateNavigator()->blockSignals( false );
1341 mViewManager->showWeekView(); 1341 mViewManager->showWeekView();
1342} 1342}
1343KOViewManager *CalendarView::viewManager() 1343KOViewManager *CalendarView::viewManager()
1344{ 1344{
1345 return mViewManager; 1345 return mViewManager;
1346} 1346}
1347 1347
1348KODialogManager *CalendarView::dialogManager() 1348KODialogManager *CalendarView::dialogManager()
1349{ 1349{
1350 return mDialogManager; 1350 return mDialogManager;
1351} 1351}
1352 1352
1353QDate CalendarView::startDate() 1353QDate CalendarView::startDate()
1354{ 1354{
1355 DateList dates = mNavigator->selectedDates(); 1355 DateList dates = mNavigator->selectedDates();
1356 1356
1357 return dates.first(); 1357 return dates.first();
1358} 1358}
1359 1359
1360QDate CalendarView::endDate() 1360QDate CalendarView::endDate()
1361{ 1361{
1362 DateList dates = mNavigator->selectedDates(); 1362 DateList dates = mNavigator->selectedDates();
1363 1363
1364 return dates.last(); 1364 return dates.last();
1365} 1365}
1366 1366
1367 1367
1368void CalendarView::createPrinter() 1368void CalendarView::createPrinter()
1369{ 1369{
1370#ifndef KORG_NOPRINTER 1370#ifndef KORG_NOPRINTER
1371 if (!mCalPrinter) { 1371 if (!mCalPrinter) {
1372 mCalPrinter = new CalPrinter(this, mCalendar); 1372 mCalPrinter = new CalPrinter(this, mCalendar);
1373 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); 1373 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig()));
1374 } 1374 }
1375#endif 1375#endif
1376} 1376}
1377 1377
1378 1378
1379//KOPrefs::instance()->mWriteBackFile 1379//KOPrefs::instance()->mWriteBackFile
1380//KOPrefs::instance()->mWriteBackExistingOnly 1380//KOPrefs::instance()->mWriteBackExistingOnly
1381 1381
1382// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); 1382// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict"));
1383// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); 1383// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict"));
1384// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); 1384// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict"));
1385// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); 1385// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict"));
1386// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); 1386// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always"));
1387// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); 1387// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always"));
1388 1388
1389int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) 1389int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full )
1390{ 1390{
1391 1391
1392 // 0 equal 1392 // 0 equal
1393 // 1 take local 1393 // 1 take local
1394 // 2 take remote 1394 // 2 take remote
1395 // 3 cancel 1395 // 3 cancel
1396 QDateTime lastSync = mLastCalendarSync; 1396 QDateTime lastSync = mLastCalendarSync;
1397 QDateTime localMod = local->lastModified(); 1397 QDateTime localMod = local->lastModified();
1398 QDateTime remoteMod = remote->lastModified(); 1398 QDateTime remoteMod = remote->lastModified();
1399 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1399 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1400 bool remCh, locCh; 1400 bool remCh, locCh;
1401 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 1401 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
1402 //if ( remCh ) 1402 //if ( remCh )
1403 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 1403 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
1404 locCh = ( localMod > mLastCalendarSync ); 1404 locCh = ( localMod > mLastCalendarSync );
1405 if ( !remCh && ! locCh ) { 1405 if ( !remCh && ! locCh ) {
1406 //qDebug("both not changed "); 1406 //qDebug("both not changed ");
1407 lastSync = localMod.addDays(1); 1407 lastSync = localMod.addDays(1);
1408 if ( mode <= SYNC_PREF_ASK ) 1408 if ( mode <= SYNC_PREF_ASK )
1409 return 0; 1409 return 0;
1410 } else { 1410 } else {
1411 if ( locCh ) { 1411 if ( locCh ) {
1412 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1()); 1412 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1());
1413 lastSync = localMod.addDays( -1 ); 1413 lastSync = localMod.addDays( -1 );
1414 if ( !remCh ) 1414 if ( !remCh )
1415 remoteMod = ( lastSync.addDays( -1 ) ); 1415 remoteMod = ( lastSync.addDays( -1 ) );
1416 } else { 1416 } else {
1417 //qDebug(" not loc changed "); 1417 //qDebug(" not loc changed ");
1418 lastSync = localMod.addDays( 1 ); 1418 lastSync = localMod.addDays( 1 );
1419 if ( remCh ) 1419 if ( remCh )
1420 remoteMod =( lastSync.addDays( 1 ) ); 1420 remoteMod =( lastSync.addDays( 1 ) );
1421 1421
1422 } 1422 }
1423 } 1423 }
1424 full = true; 1424 full = true;
1425 if ( mode < SYNC_PREF_ASK ) 1425 if ( mode < SYNC_PREF_ASK )
1426 mode = SYNC_PREF_ASK; 1426 mode = SYNC_PREF_ASK;
1427 } else { 1427 } else {
1428 if ( localMod == remoteMod ) 1428 if ( localMod == remoteMod )
1429 // if ( local->revision() == remote->revision() ) 1429 // if ( local->revision() == remote->revision() )
1430 return 0; 1430 return 0;
1431 1431
1432 } 1432 }
1433 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 1433 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
1434 1434
1435 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision()); 1435 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision());
1436 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() ); 1436 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() );
1437 //full = true; //debug only 1437 //full = true; //debug only
1438 if ( full ) { 1438 if ( full ) {
1439 bool equ = false; 1439 bool equ = false;
1440 if ( local->typeID() == eventID ) { 1440 if ( local->typeID() == eventID ) {
1441 equ = (*((Event*) local) == *((Event*) remote)); 1441 equ = (*((Event*) local) == *((Event*) remote));
1442 } 1442 }
1443 else if ( local->typeID() == todoID ) 1443 else if ( local->typeID() == todoID )
1444 equ = (*((Todo*) local) == (*(Todo*) remote)); 1444 equ = (*((Todo*) local) == (*(Todo*) remote));
1445 else if ( local->typeID() == journalID ) 1445 else if ( local->typeID() == journalID )
1446 equ = (*((Journal*) local) == *((Journal*) remote)); 1446 equ = (*((Journal*) local) == *((Journal*) remote));
1447 if ( equ ) { 1447 if ( equ ) {
1448 //qDebug("equal "); 1448 //qDebug("equal ");
1449 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1449 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1450 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 1450 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
1451 } 1451 }
1452 if ( mode < SYNC_PREF_FORCE_LOCAL ) 1452 if ( mode < SYNC_PREF_FORCE_LOCAL )
1453 return 0; 1453 return 0;
1454 1454
1455 }//else //debug only 1455 }//else //debug only
1456 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 1456 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
1457 } 1457 }
1458 int result; 1458 int result;
1459 bool localIsNew; 1459 bool localIsNew;
1460 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() ); 1460 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() );
1461 1461
1462 1462
1463 // ************************************************ 1463 // ************************************************
1464 // ************************************************ 1464 // ************************************************
1465 // ************************************************ 1465 // ************************************************
1466 // We may have that lastSync > remoteMod AND lastSync > localMod 1466 // We may have that lastSync > remoteMod AND lastSync > localMod
1467 // BUT remoteMod != localMod 1467 // BUT remoteMod != localMod
1468 1468
1469 1469
1470 if ( full && mode < SYNC_PREF_NEWEST ) 1470 if ( full && mode < SYNC_PREF_NEWEST )
1471 mode = SYNC_PREF_ASK; 1471 mode = SYNC_PREF_ASK;
1472 1472
1473 switch( mode ) { 1473 switch( mode ) {
1474 case SYNC_PREF_LOCAL: 1474 case SYNC_PREF_LOCAL:
1475 if ( lastSync > remoteMod ) 1475 if ( lastSync > remoteMod )
1476 return 1; 1476 return 1;
1477 if ( lastSync > localMod ) 1477 if ( lastSync > localMod )
1478 return 2; 1478 return 2;
1479 return 1; 1479 return 1;
1480 break; 1480 break;
1481 case SYNC_PREF_REMOTE: 1481 case SYNC_PREF_REMOTE:
1482 if ( lastSync > localMod ) 1482 if ( lastSync > localMod )
1483 return 2; 1483 return 2;
1484 if ( lastSync > remoteMod ) 1484 if ( lastSync > remoteMod )
1485 return 1; 1485 return 1;
1486 return 2; 1486 return 2;
1487 break; 1487 break;
1488 case SYNC_PREF_NEWEST: 1488 case SYNC_PREF_NEWEST:
1489 if ( localMod >= remoteMod ) 1489 if ( localMod >= remoteMod )
1490 return 1; 1490 return 1;
1491 else 1491 else
1492 return 2; 1492 return 2;
1493 break; 1493 break;
1494 case SYNC_PREF_ASK: 1494 case SYNC_PREF_ASK:
1495 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1495 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1496 if ( lastSync > remoteMod && lastSync > localMod) 1496 if ( lastSync > remoteMod && lastSync > localMod)
1497 return 0; 1497 return 0;
1498 if ( lastSync > remoteMod ) 1498 if ( lastSync > remoteMod )
1499 return 1; 1499 return 1;
1500 if ( lastSync > localMod ) 1500 if ( lastSync > localMod )
1501 return 2; 1501 return 2;
1502 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1502 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1503 localIsNew = localMod >= remoteMod; 1503 localIsNew = localMod >= remoteMod;
1504 if ( localIsNew ) 1504 if ( localIsNew )
1505 getEventViewerDialog()->setColorMode( 1 ); 1505 getEventViewerDialog()->setColorMode( 1 );
1506 else 1506 else
1507 getEventViewerDialog()->setColorMode( 2 ); 1507 getEventViewerDialog()->setColorMode( 2 );
1508 getEventViewerDialog()->setIncidence(local); 1508 getEventViewerDialog()->setIncidence(local);
1509 if ( localIsNew ) 1509 if ( localIsNew )
1510 getEventViewerDialog()->setColorMode( 2 ); 1510 getEventViewerDialog()->setColorMode( 2 );
1511 else 1511 else
1512 getEventViewerDialog()->setColorMode( 1 ); 1512 getEventViewerDialog()->setColorMode( 1 );
1513 getEventViewerDialog()->addIncidence(remote); 1513 getEventViewerDialog()->addIncidence(remote);
1514 getEventViewerDialog()->setColorMode( 0 ); 1514 getEventViewerDialog()->setColorMode( 0 );
1515 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 1515 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
1516 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 1516 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
1517 getEventViewerDialog()->showMe(); 1517 getEventViewerDialog()->showMe();
1518 result = getEventViewerDialog()->executeS( localIsNew ); 1518 result = getEventViewerDialog()->executeS( localIsNew );
1519 return result; 1519 return result;
1520 1520
1521 break; 1521 break;
1522 case SYNC_PREF_FORCE_LOCAL: 1522 case SYNC_PREF_FORCE_LOCAL:
1523 return 1; 1523 return 1;
1524 break; 1524 break;
1525 case SYNC_PREF_FORCE_REMOTE: 1525 case SYNC_PREF_FORCE_REMOTE:
1526 return 2; 1526 return 2;
1527 break; 1527 break;
1528 1528
1529 default: 1529 default:
1530 // SYNC_PREF_TAKE_BOTH not implemented 1530 // SYNC_PREF_TAKE_BOTH not implemented
1531 break; 1531 break;
1532 } 1532 }
1533 return 0; 1533 return 0;
1534} 1534}
1535Event* CalendarView::getLastSyncEvent() 1535Event* CalendarView::getLastSyncEvent()
1536{ 1536{
1537 Event* lse; 1537 Event* lse;
1538 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 1538 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
1539 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 1539 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
1540 if (!lse) { 1540 if (!lse) {
1541 lse = new Event(); 1541 lse = new Event();
1542 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 1542 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
1543 QString sum = ""; 1543 QString sum = "";
1544 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 1544 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
1545 sum = "E: "; 1545 sum = "E: ";
1546 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 1546 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
1547 lse->setDtStart( mLastCalendarSync ); 1547 lse->setDtStart( mLastCalendarSync );
1548 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1548 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1549 lse->setCategories( i18n("SyncEvent") ); 1549 lse->setCategories( i18n("SyncEvent") );
1550 lse->setReadOnly( true ); 1550 lse->setReadOnly( true );
1551 mCalendar->addEvent( lse ); 1551 mCalendar->addEvent( lse );
1552 } 1552 }
1553 1553
1554 return lse; 1554 return lse;
1555 1555
1556} 1556}
1557 1557
1558// we check, if the to delete event has a id for a profile 1558// we check, if the to delete event has a id for a profile
1559// if yes, we set this id in the profile to delete 1559// if yes, we set this id in the profile to delete
1560void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 1560void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
1561{ 1561{
1562 if ( lastSync.count() == 0 ) { 1562 if ( lastSync.count() == 0 ) {
1563 //qDebug(" lastSync.count() == 0"); 1563 //qDebug(" lastSync.count() == 0");
1564 return; 1564 return;
1565 } 1565 }
1566 if ( toDelete->typeID() == journalID ) 1566 if ( toDelete->typeID() == journalID )
1567 return; 1567 return;
1568 1568
1569 Event* eve = lastSync.first(); 1569 Event* eve = lastSync.first();
1570 1570
1571 while ( eve ) { 1571 while ( eve ) {
1572 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 1572 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
1573 if ( !id.isEmpty() ) { 1573 if ( !id.isEmpty() ) {
1574 QString des = eve->description(); 1574 QString des = eve->description();
1575 QString pref = "e"; 1575 QString pref = "e";
1576 if ( toDelete->typeID() == todoID ) 1576 if ( toDelete->typeID() == todoID )
1577 pref = "t"; 1577 pref = "t";
1578 des += pref+ id + ","; 1578 des += pref+ id + ",";
1579 eve->setReadOnly( false ); 1579 eve->setReadOnly( false );
1580 eve->setDescription( des ); 1580 eve->setDescription( des );
1581 //qDebug("setdes %s ", des.latin1()); 1581 //qDebug("setdes %s ", des.latin1());
1582 eve->setReadOnly( true ); 1582 eve->setReadOnly( true );
1583 } 1583 }
1584 eve = lastSync.next(); 1584 eve = lastSync.next();
1585 } 1585 }
1586 1586
1587} 1587}
1588void CalendarView::checkExternalId( Incidence * inc ) 1588void CalendarView::checkExternalId( Incidence * inc )
1589{ 1589{
1590 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 1590 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
1591 checkExternSyncEvent( lastSync, inc ); 1591 checkExternSyncEvent( lastSync, inc );
1592 1592
1593} 1593}
1594bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 1594bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
1595{ 1595{
1596 bool syncOK = true; 1596 bool syncOK = true;
1597 int addedEvent = 0; 1597 int addedEvent = 0;
1598 int addedEventR = 0; 1598 int addedEventR = 0;
1599 int deletedEventR = 0; 1599 int deletedEventR = 0;
1600 int deletedEventL = 0; 1600 int deletedEventL = 0;
1601 int changedLocal = 0; 1601 int changedLocal = 0;
1602 int changedRemote = 0; 1602 int changedRemote = 0;
1603 int filteredIN = 0; 1603 int filteredIN = 0;
1604 int filteredOUT = 0; 1604 int filteredOUT = 0;
1605 //QPtrList<Event> el = local->rawEvents(); 1605 //QPtrList<Event> el = local->rawEvents();
1606 Event* eventR; 1606 Event* eventR;
1607 QString uid; 1607 QString uid;
1608 int take; 1608 int take;
1609 Event* eventRSync; 1609 Event* eventRSync;
1610 Event* eventLSync; 1610 Event* eventLSync;
1611 clearAllViews(); 1611 clearAllViews();
1612 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 1612 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
1613 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 1613 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
1614 bool fullDateRange = false; 1614 bool fullDateRange = false;
1615 local->resetTempSyncStat(); 1615 local->resetTempSyncStat();
1616 mLastCalendarSync = QDateTime::currentDateTime(); 1616 mLastCalendarSync = QDateTime::currentDateTime();
1617 if ( mSyncManager->syncWithDesktop() ) { 1617 if ( mSyncManager->syncWithDesktop() ) {
1618 remote->resetPilotStat(1); 1618 remote->resetPilotStat(1);
1619 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1619 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1620 mLastCalendarSync = KSyncManager::mRequestedSyncEvent; 1620 mLastCalendarSync = KSyncManager::mRequestedSyncEvent;
1621 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() ); 1621 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() );
1622 } else { 1622 } else {
1623 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime "); 1623 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime ");
1624 } 1624 }
1625 } 1625 }
1626 QDateTime modifiedCalendar = mLastCalendarSync; 1626 QDateTime modifiedCalendar = mLastCalendarSync;
1627 eventLSync = getLastSyncEvent(); 1627 eventLSync = getLastSyncEvent();
1628 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 1628 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
1629 if ( eventR ) { 1629 if ( eventR ) {
1630 qDebug("last-syncEvent on remote found "); 1630 qDebug("last-syncEvent on remote found ");
1631 eventRSync = (Event*) eventR->clone(); 1631 eventRSync = (Event*) eventR->clone();
1632 remote->deleteEvent(eventR ); 1632 remote->deleteEvent(eventR );
1633 1633
1634 } else { 1634 } else {
1635 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) { 1635 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) {
1636 eventRSync = (Event*)eventLSync->clone(); 1636 eventRSync = (Event*)eventLSync->clone();
1637 } else { 1637 } else {
1638 fullDateRange = true; 1638 fullDateRange = true;
1639 eventRSync = new Event(); 1639 eventRSync = new Event();
1640 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 1640 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
1641 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 1641 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
1642 eventRSync->setDtStart( mLastCalendarSync ); 1642 eventRSync->setDtStart( mLastCalendarSync );
1643 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1643 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1644 eventRSync->setCategories( i18n("SyncEvent") ); 1644 eventRSync->setCategories( i18n("SyncEvent") );
1645 } 1645 }
1646 } 1646 }
1647 if ( eventLSync->dtStart() == mLastCalendarSync ) 1647 if ( eventLSync->dtStart() == mLastCalendarSync )
1648 fullDateRange = true; 1648 fullDateRange = true;
1649 1649
1650 if ( ! fullDateRange ) { 1650 if ( ! fullDateRange ) {
1651 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 1651 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
1652 1652
1653 qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 1653 qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
1654 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 1654 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
1655 fullDateRange = true; 1655 fullDateRange = true;
1656 } 1656 }
1657 } 1657 }
1658 if ( mSyncManager->syncWithDesktop() ) { 1658 if ( mSyncManager->syncWithDesktop() ) {
1659 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync ); 1659 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync );
1660 } 1660 }
1661 if ( fullDateRange ) 1661 if ( fullDateRange )
1662 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 1662 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
1663 else 1663 else
1664 mLastCalendarSync = eventLSync->dtStart(); 1664 mLastCalendarSync = eventLSync->dtStart();
1665 // for resyncing if own file has changed 1665 // for resyncing if own file has changed
1666 if ( mCurrentSyncDevice == "deleteaftersync" ) { 1666 if ( mCurrentSyncDevice == "deleteaftersync" ) {
1667 mLastCalendarSync = loadedFileVersion; 1667 mLastCalendarSync = loadedFileVersion;
1668 //qDebug("setting mLastCalendarSync "); 1668 //qDebug("setting mLastCalendarSync ");
1669 } 1669 }
1670 //qDebug("*************************** "); 1670 //qDebug("*************************** ");
1671 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange); 1671 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange);
1672 QPtrList<Incidence> er = remote->rawIncidences(); 1672 QPtrList<Incidence> er = remote->rawIncidences();
1673 Incidence* inR = er.first(); 1673 Incidence* inR = er.first();
1674 Incidence* inL; 1674 Incidence* inL;
1675 QProgressBar bar( er.count(),0 ); 1675 QProgressBar bar( er.count(),0 );
1676 bar.setCaption (i18n("Syncing - close to abort!") ); 1676 bar.setCaption (i18n("Syncing - close to abort!") );
1677 1677
1678 // ************** setting up filter ************* 1678 // ************** setting up filter *************
1679 CalFilter *filterIN = 0; 1679 CalFilter *filterIN = 0;
1680 CalFilter *filterOUT = 0; 1680 CalFilter *filterOUT = 0;
1681 CalFilter *filter = mFilters.first(); 1681 CalFilter *filter = mFilters.first();
1682 while(filter) { 1682 while(filter) {
1683 if ( filter->name() == mSyncManager->mFilterInCal ) 1683 if ( filter->name() == mSyncManager->mFilterInCal )
1684 filterIN = filter; 1684 filterIN = filter;
1685 if ( filter->name() == mSyncManager->mFilterOutCal ) 1685 if ( filter->name() == mSyncManager->mFilterOutCal )
1686 filterOUT = filter; 1686 filterOUT = filter;
1687 filter = mFilters.next(); 1687 filter = mFilters.next();
1688 } 1688 }
1689 int w = 300; 1689 int w = 300;
1690 if ( QApplication::desktop()->width() < 320 ) 1690 if ( QApplication::desktop()->width() < 320 )
1691 w = 220; 1691 w = 220;
1692 int h = bar.sizeHint().height() ; 1692 int h = bar.sizeHint().height() ;
1693 int dw = QApplication::desktop()->width(); 1693 int dw = QApplication::desktop()->width();
1694 int dh = QApplication::desktop()->height(); 1694 int dh = QApplication::desktop()->height();
1695 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1695 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1696 bar.show(); 1696 bar.show();
1697 int modulo = (er.count()/10)+1; 1697 int modulo = (er.count()/10)+1;
1698 int incCounter = 0; 1698 int incCounter = 0;
1699 while ( inR ) { 1699 while ( inR ) {
1700 if ( ! bar.isVisible() ) 1700 if ( ! bar.isVisible() )
1701 return false; 1701 return false;
1702 if ( incCounter % modulo == 0 ) 1702 if ( incCounter % modulo == 0 )
1703 bar.setProgress( incCounter ); 1703 bar.setProgress( incCounter );
1704 ++incCounter; 1704 ++incCounter;
1705 uid = inR->uid(); 1705 uid = inR->uid();
1706 bool skipIncidence = false; 1706 bool skipIncidence = false;
1707 if ( uid.left(15) == QString("last-syncEvent-") ) 1707 if ( uid.left(15) == QString("last-syncEvent-") )
1708 skipIncidence = true; 1708 skipIncidence = true;
1709 QString idS; 1709 QString idS;
1710 qApp->processEvents(); 1710 qApp->processEvents();
1711 if ( !skipIncidence ) { 1711 if ( !skipIncidence ) {
1712 inL = local->incidenceForUid( uid , false ); 1712 inL = local->incidenceForUid( uid , false );
1713 if ( inL ) { // maybe conflict - same uid in both calendars 1713 if ( inL ) { // maybe conflict - same uid in both calendars
1714 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1714 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1715 //qDebug("take %d %s ", take, inL->summary().latin1()); 1715 //qDebug("take %d %s ", take, inL->summary().latin1());
1716 if ( take == 3 ) 1716 if ( take == 3 )
1717 return false; 1717 return false;
1718 if ( take == 1 ) {// take local ********************** 1718 if ( take == 1 ) {// take local **********************
1719 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 1719 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
1720 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1720 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1721 else 1721 else
1722 idS = inR->IDStr(); 1722 idS = inR->IDStr();
1723 int calID = inR->calID(); 1723 int calID = inR->calID();
1724 remote->deleteIncidence( inR ); 1724 remote->deleteIncidence( inR );
1725 inR = inL->clone(); 1725 inR = inL->clone();
1726 inR->setCalID( calID ); 1726 inR->setCalID( calID );
1727 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1727 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1728 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) 1728 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
1729 inR->setIDStr( idS ); 1729 inR->setIDStr( idS );
1730 remote->addIncidence( inR ); 1730 remote->addIncidence( inR );
1731 if ( mSyncManager->syncWithDesktop() ) 1731 if ( mSyncManager->syncWithDesktop() )
1732 inR->setPilotId( 2 ); 1732 inR->setPilotId( 2 );
1733 ++changedRemote; 1733 ++changedRemote;
1734 } else {// take remote ********************** 1734 } else {// take remote **********************
1735 if ( !inL->isReadOnly() ) { 1735 if ( !inL->isReadOnly() ) {
1736 idS = inL->IDStr(); 1736 idS = inL->IDStr();
1737 int pid = inL->pilotId(); 1737 int pid = inL->pilotId();
1738 int calID = inL->calID(); 1738 int calID = inL->calID();
1739 local->deleteIncidence( inL ); 1739 local->deleteIncidence( inL );
1740 inL = inR->clone(); 1740 inL = inR->clone();
1741 inL->setCalID( calID ); 1741 inL->setCalID( calID );
1742 if ( mSyncManager->syncWithDesktop() ) 1742 if ( mSyncManager->syncWithDesktop() )
1743 inL->setPilotId( pid ); 1743 inL->setPilotId( pid );
1744 inL->setIDStr( idS ); 1744 inL->setIDStr( idS );
1745 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1745 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1746 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1746 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1747 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1747 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1748 } 1748 }
1749 local->addIncidence( inL ); 1749 local->addIncidence( inL );
1750 ++changedLocal; 1750 ++changedLocal;
1751 } 1751 }
1752 } 1752 }
1753 } 1753 }
1754 } else { // no conflict ********** add or delete remote 1754 } else { // no conflict ********** add or delete remote
1755 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){ 1755 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){
1756 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1756 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1757 QString des = eventLSync->description(); 1757 QString des = eventLSync->description();
1758 QString pref = "e"; 1758 QString pref = "e";
1759 if ( inR->typeID() == todoID ) 1759 if ( inR->typeID() == todoID )
1760 pref = "t"; 1760 pref = "t";
1761 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1761 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1762 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1762 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1763 //remote->deleteIncidence( inR ); 1763 //remote->deleteIncidence( inR );
1764 ++deletedEventR; 1764 ++deletedEventR;
1765 } else { 1765 } else {
1766 inR->setLastModified( modifiedCalendar ); 1766 inR->setLastModified( modifiedCalendar );
1767 inL = inR->clone(); 1767 inL = inR->clone();
1768 inL->setIDStr( ":" ); 1768 inL->setIDStr( ":" );
1769 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1769 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1770 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1770 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1771 1771
1772 inL->setCalID( 0 );// add to default cal 1772 inL->setCalID( 0 );// add to default cal
1773 local->addIncidence( inL ); 1773 local->addIncidence( inL );
1774 ++addedEvent; 1774 ++addedEvent;
1775 1775
1776 } 1776 }
1777 } else { 1777 } else {
1778 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1778 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1779 inR->setLastModified( modifiedCalendar ); 1779 inR->setLastModified( modifiedCalendar );
1780 inL = inR->clone(); 1780 inL = inR->clone();
1781 inL->setIDStr( ":" ); 1781 inL->setIDStr( ":" );
1782 inL->setCalID( 0 );// add to default cal 1782 inL->setCalID( 0 );// add to default cal
1783 local->addIncidence( inL ); 1783 local->addIncidence( inL );
1784 ++addedEvent; 1784 ++addedEvent;
1785 1785
1786 } else { 1786 } else {
1787 checkExternSyncEvent(eventRSyncSharp, inR); 1787 checkExternSyncEvent(eventRSyncSharp, inR);
1788 remote->deleteIncidence( inR ); 1788 remote->deleteIncidence( inR );
1789 ++deletedEventR; 1789 ++deletedEventR;
1790 } 1790 }
1791 } 1791 }
1792 } else { 1792 } else {
1793 ++filteredIN; 1793 ++filteredIN;
1794 } 1794 }
1795 } 1795 }
1796 } 1796 }
1797 inR = er.next(); 1797 inR = er.next();
1798 } 1798 }
1799 QPtrList<Incidence> el = local->rawIncidences(); 1799 QPtrList<Incidence> el = local->rawIncidences();
1800 inL = el.first(); 1800 inL = el.first();
1801 modulo = (el.count()/10)+1; 1801 modulo = (el.count()/10)+1;
1802 bar.setCaption (i18n("Add / remove events") ); 1802 bar.setCaption (i18n("Add / remove events") );
1803 bar.setTotalSteps ( el.count() ) ; 1803 bar.setTotalSteps ( el.count() ) ;
1804 bar.show(); 1804 bar.show();
1805 incCounter = 0; 1805 incCounter = 0;
1806 1806
1807 while ( inL ) { 1807 while ( inL ) {
1808 1808
1809 qApp->processEvents(); 1809 qApp->processEvents();
1810 if ( ! bar.isVisible() ) 1810 if ( ! bar.isVisible() )
1811 return false; 1811 return false;
1812 if ( incCounter % modulo == 0 ) 1812 if ( incCounter % modulo == 0 )
1813 bar.setProgress( incCounter ); 1813 bar.setProgress( incCounter );
1814 ++incCounter; 1814 ++incCounter;
1815 uid = inL->uid(); 1815 uid = inL->uid();
1816 bool skipIncidence = false; 1816 bool skipIncidence = false;
1817 if ( uid.left(15) == QString("last-syncEvent-") ) 1817 if ( uid.left(15) == QString("last-syncEvent-") )
1818 skipIncidence = true; 1818 skipIncidence = true;
1819 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID ) 1819 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID )
1820 skipIncidence = true; 1820 skipIncidence = true;
1821 if ( !skipIncidence ) { 1821 if ( !skipIncidence ) {
1822 inR = remote->incidenceForUid( uid , true ); 1822 inR = remote->incidenceForUid( uid , true );
1823 if ( ! inR ) { 1823 if ( ! inR ) {
1824 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){ 1824 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){
1825 // no conflict ********** add or delete local 1825 // no conflict ********** add or delete local
1826 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1826 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1827 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1827 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1828 checkExternSyncEvent(eventLSyncSharp, inL); 1828 checkExternSyncEvent(eventLSyncSharp, inL);
1829 local->deleteIncidence( inL ); 1829 local->deleteIncidence( inL );
1830 ++deletedEventL; 1830 ++deletedEventL;
1831 } else { 1831 } else {
1832 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1832 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1833 inL->removeID(mCurrentSyncDevice ); 1833 inL->removeID(mCurrentSyncDevice );
1834 ++addedEventR; 1834 ++addedEventR;
1835 //qDebug("remote added Incidence %s ", inL->summary().latin1()); 1835 //qDebug("remote added Incidence %s ", inL->summary().latin1());
1836 inL->setLastModified( modifiedCalendar ); 1836 inL->setLastModified( modifiedCalendar );
1837 inR = inL->clone(); 1837 inR = inL->clone();
1838 inR->setIDStr( ":" ); 1838 inR->setIDStr( ":" );
1839 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1839 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1840 inR->setCalID( 0 );// add to default cal 1840 inR->setCalID( 0 );// add to default cal
1841 remote->addIncidence( inR ); 1841 remote->addIncidence( inR );
1842 } 1842 }
1843 } 1843 }
1844 } else { 1844 } else {
1845 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1845 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1846 checkExternSyncEvent(eventLSyncSharp, inL); 1846 checkExternSyncEvent(eventLSyncSharp, inL);
1847 local->deleteIncidence( inL ); 1847 local->deleteIncidence( inL );
1848 ++deletedEventL; 1848 ++deletedEventL;
1849 } else { 1849 } else {
1850 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1850 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1851 ++addedEventR; 1851 ++addedEventR;
1852 inL->setLastModified( modifiedCalendar ); 1852 inL->setLastModified( modifiedCalendar );
1853 inR = inL->clone(); 1853 inR = inL->clone();
1854 inR->setIDStr( ":" ); 1854 inR->setIDStr( ":" );
1855 inR->setCalID( 0 );// add to default cal 1855 inR->setCalID( 0 );// add to default cal
1856 remote->addIncidence( inR ); 1856 remote->addIncidence( inR );
1857 } 1857 }
1858 } 1858 }
1859 } 1859 }
1860 } else { 1860 } else {
1861 ++filteredOUT; 1861 ++filteredOUT;
1862 } 1862 }
1863 } 1863 }
1864 } 1864 }
1865 inL = el.next(); 1865 inL = el.next();
1866 } 1866 }
1867 int delFut = 0; 1867 int delFut = 0;
1868 int remRem = 0; 1868 int remRem = 0;
1869 if ( mSyncManager->mWriteBackInFuture ) { 1869 if ( mSyncManager->mWriteBackInFuture ) {
1870 er = remote->rawIncidences(); 1870 er = remote->rawIncidences();
1871 remRem = er.count(); 1871 remRem = er.count();
1872 inR = er.first(); 1872 inR = er.first();
1873 QDateTime dt; 1873 QDateTime dt;
1874 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) ); 1874 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) );
1875 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 ); 1875 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 );
1876 while ( inR ) { 1876 while ( inR ) {
1877 if ( inR->typeID() == todoID ) { 1877 if ( inR->typeID() == todoID ) {
1878 Todo * t = (Todo*)inR; 1878 Todo * t = (Todo*)inR;
1879 if ( t->hasDueDate() ) 1879 if ( t->hasDueDate() )
1880 dt = t->dtDue(); 1880 dt = t->dtDue();
1881 else 1881 else
1882 dt = cur.addSecs( 62 ); 1882 dt = cur.addSecs( 62 );
1883 } 1883 }
1884 else if (inR->typeID() == eventID ) { 1884 else if (inR->typeID() == eventID ) {
1885 bool ok; 1885 bool ok;
1886 dt = inR->getNextOccurence( cur, &ok ); 1886 dt = inR->getNextOccurence( cur, &ok );
1887 if ( !ok ) 1887 if ( !ok )
1888 dt = cur.addSecs( -62 ); 1888 dt = cur.addSecs( -62 );
1889 } 1889 }
1890 else 1890 else
1891 dt = inR->dtStart(); 1891 dt = inR->dtStart();
1892 if ( dt < cur || dt > end ) { 1892 if ( dt < cur || dt > end ) {
1893 remote->deleteIncidence( inR ); 1893 remote->deleteIncidence( inR );
1894 ++delFut; 1894 ++delFut;
1895 } 1895 }
1896 inR = er.next(); 1896 inR = er.next();
1897 } 1897 }
1898 } 1898 }
1899 bar.hide(); 1899 bar.hide();
1900 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1900 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1901 eventLSync->setReadOnly( false ); 1901 eventLSync->setReadOnly( false );
1902 eventLSync->setDtStart( mLastCalendarSync ); 1902 eventLSync->setDtStart( mLastCalendarSync );
1903 eventRSync->setDtStart( mLastCalendarSync ); 1903 eventRSync->setDtStart( mLastCalendarSync );
1904 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1904 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1905 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1905 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1906 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1906 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1907 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1907 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1908 eventLSync->setReadOnly( true ); 1908 eventLSync->setReadOnly( true );
1909 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL ); 1909 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL );
1910 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop()) // kde is abnormal... 1910 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop()) // kde is abnormal...
1911 remote->addEvent( eventRSync ); 1911 remote->addEvent( eventRSync );
1912 else 1912 else
1913 delete eventRSync; 1913 delete eventRSync;
1914 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() ); 1914 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() );
1915 QString mes; 1915 QString mes;
1916 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR, filteredIN, filteredOUT ); 1916 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR, filteredIN, filteredOUT );
1917 QString delmess; 1917 QString delmess;
1918 if ( delFut ) { 1918 if ( delFut ) {
1919 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are more\nthan %d weeks in the past or\nmore than %d weeks in the future.\nAfter skipping, remote has\n%d calendar/todo items."), delFut,mSyncManager->mWriteBackInPast,mSyncManager->mWriteBackInFuture, remRem-delFut); 1919 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are more\nthan %d weeks in the past or\nmore than %d weeks in the future.\nAfter skipping, remote has\n%d calendar/todo items."), delFut,mSyncManager->mWriteBackInPast,mSyncManager->mWriteBackInFuture, remRem-delFut);
1920 mes += delmess; 1920 mes += delmess;
1921 } 1921 }
1922 mes = i18n("Local calendar changed!\n") +mes; 1922 mes = i18n("Local calendar changed!\n") +mes;
1923 mCalendar->checkAlarmForIncidence( 0, true ); 1923 mCalendar->checkAlarmForIncidence( 0, true );
1924 qDebug( mes ); 1924 qDebug( mes );
1925 if ( mSyncManager->mShowSyncSummary ) { 1925 if ( mSyncManager->mShowSyncSummary ) {
1926 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes, 1926 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes,
1927 i18n("KO/Pi Synchronization"),i18n("Write back"))) { 1927 i18n("KO/Pi Synchronization"),i18n("Write back"))) {
1928 qDebug("KO: WB cancelled "); 1928 qDebug("KO: WB cancelled ");
1929 mSyncManager->mWriteBackFile = false; 1929 mSyncManager->mWriteBackFile = false;
1930 return syncOK; 1930 return syncOK;
1931 } 1931 }
1932 } 1932 }
1933 return syncOK; 1933 return syncOK;
1934} 1934}
1935 1935
1936void CalendarView::setSyncDevice( QString s ) 1936void CalendarView::setSyncDevice( QString s )
1937{ 1937{
1938 mCurrentSyncDevice= s; 1938 mCurrentSyncDevice= s;
1939} 1939}
1940void CalendarView::setSyncName( QString s ) 1940void CalendarView::setSyncName( QString s )
1941{ 1941{
1942 mCurrentSyncName= s; 1942 mCurrentSyncName= s;
1943} 1943}
1944bool CalendarView::syncCalendar(QString filename, int mode) 1944bool CalendarView::syncCalendar(QString filename, int mode)
1945{ 1945{
1946 //qDebug("syncCalendar %s ", filename.latin1()); 1946 //qDebug("syncCalendar %s ", filename.latin1());
1947 mGlobalSyncMode = SYNC_MODE_NORMAL; 1947 mGlobalSyncMode = SYNC_MODE_NORMAL;
1948 CalendarLocal* calendar = new CalendarLocal(); 1948 CalendarLocal* calendar = new CalendarLocal();
1949 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1949 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1950 FileStorage* storage = new FileStorage( calendar ); 1950 FileStorage* storage = new FileStorage( calendar );
1951 bool syncOK = false; 1951 bool syncOK = false;
1952 storage->setFileName( filename ); 1952 storage->setFileName( filename );
1953 // qDebug("loading ... "); 1953 // qDebug("loading ... ");
1954 if ( storage->load() ) { 1954 if ( storage->load() ) {
1955 getEventViewerDialog()->setSyncMode( true ); 1955 getEventViewerDialog()->setSyncMode( true );
1956 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1956 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1957 getEventViewerDialog()->setSyncMode( false ); 1957 getEventViewerDialog()->setSyncMode( false );
1958 if ( syncOK ) { 1958 if ( syncOK ) {
1959 if ( mSyncManager->mWriteBackFile ) 1959 if ( mSyncManager->mWriteBackFile )
1960 { 1960 {
1961 storage->setSaveFormat( new ICalFormat() ); 1961 storage->setSaveFormat( new ICalFormat() );
1962 storage->save(); 1962 storage->save();
1963 } 1963 }
1964 } 1964 }
1965 setModified( true ); 1965 setModified( true );
1966 } 1966 }
1967 delete storage; 1967 delete storage;
1968 delete calendar; 1968 delete calendar;
1969 if ( syncOK ) 1969 if ( syncOK )
1970 updateView(); 1970 updateView();
1971 return syncOK; 1971 return syncOK;
1972} 1972}
1973 1973
1974void CalendarView::syncExternal( int mode ) 1974void CalendarView::syncExternal( int mode )
1975{ 1975{
1976 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1976 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1977 1977
1978 qApp->processEvents(); 1978 qApp->processEvents();
1979 CalendarLocal* calendar = new CalendarLocal(); 1979 CalendarLocal* calendar = new CalendarLocal();
1980 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1980 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1981 bool syncOK = false; 1981 bool syncOK = false;
1982 bool loadSuccess = false; 1982 bool loadSuccess = false;
1983 PhoneFormat* phoneFormat = 0; 1983 PhoneFormat* phoneFormat = 0;
1984 emit tempDisableBR(true); 1984 emit tempDisableBR(true);
1985#ifndef DESKTOP_VERSION 1985#ifndef DESKTOP_VERSION
1986 SharpFormat* sharpFormat = 0; 1986 SharpFormat* sharpFormat = 0;
1987 if ( mode == 0 ) { // sharp 1987 if ( mode == 0 ) { // sharp
1988 sharpFormat = new SharpFormat () ; 1988 sharpFormat = new SharpFormat () ;
1989 loadSuccess = sharpFormat->load( calendar, mCalendar ); 1989 loadSuccess = sharpFormat->load( calendar, mCalendar );
1990 1990
1991 } else 1991 } else
1992#endif 1992#endif
1993 if ( mode == 1 ) { // phone 1993 if ( mode == 1 ) { // phone
1994 phoneFormat = new PhoneFormat (mCurrentSyncDevice, 1994 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
1995 mSyncManager->mPhoneDevice, 1995 mSyncManager->mPhoneDevice,
1996 mSyncManager->mPhoneConnection, 1996 mSyncManager->mPhoneConnection,
1997 mSyncManager->mPhoneModel); 1997 mSyncManager->mPhoneModel);
1998 loadSuccess = phoneFormat->load( calendar,mCalendar); 1998 loadSuccess = phoneFormat->load( calendar,mCalendar);
1999 1999
2000 } else { 2000 } else {
2001 emit tempDisableBR(false); 2001 emit tempDisableBR(false);
2002 return; 2002 return;
2003 } 2003 }
2004 if ( loadSuccess ) { 2004 if ( loadSuccess ) {
2005 getEventViewerDialog()->setSyncMode( true ); 2005 getEventViewerDialog()->setSyncMode( true );
2006 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2006 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2007 getEventViewerDialog()->setSyncMode( false ); 2007 getEventViewerDialog()->setSyncMode( false );
2008 qApp->processEvents(); 2008 qApp->processEvents();
2009 if ( syncOK ) { 2009 if ( syncOK ) {
2010 if ( mSyncManager->mWriteBackFile ) 2010 if ( mSyncManager->mWriteBackFile )
2011 { 2011 {
2012 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 2012 QPtrList<Incidence> iL = mCalendar->rawIncidences();
2013 Incidence* inc = iL.first(); 2013 Incidence* inc = iL.first();
2014 if ( phoneFormat ) { 2014 if ( phoneFormat ) {
2015 while ( inc ) { 2015 while ( inc ) {
2016 inc->removeID(mCurrentSyncDevice); 2016 inc->removeID(mCurrentSyncDevice);
2017 inc = iL.next(); 2017 inc = iL.next();
2018 } 2018 }
2019 } 2019 }
2020#ifndef DESKTOP_VERSION 2020#ifndef DESKTOP_VERSION
2021 if ( sharpFormat ) 2021 if ( sharpFormat )
2022 sharpFormat->save(calendar); 2022 sharpFormat->save(calendar);
2023#endif 2023#endif
2024 if ( phoneFormat ) 2024 if ( phoneFormat )
2025 phoneFormat->save(calendar); 2025 phoneFormat->save(calendar);
2026 iL = calendar->rawIncidences(); 2026 iL = calendar->rawIncidences();
2027 inc = iL.first(); 2027 inc = iL.first();
2028 Incidence* loc; 2028 Incidence* loc;
2029 while ( inc ) { 2029 while ( inc ) {
2030 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 2030 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
2031 loc = mCalendar->incidence(inc->uid() ); 2031 loc = mCalendar->incidence(inc->uid() );
2032 if ( loc ) { 2032 if ( loc ) {
2033 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 2033 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
2034 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 2034 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
2035 } 2035 }
2036 } 2036 }
2037 inc = iL.next(); 2037 inc = iL.next();
2038 } 2038 }
2039 Incidence* lse = getLastSyncEvent(); 2039 Incidence* lse = getLastSyncEvent();
2040 if ( lse ) { 2040 if ( lse ) {
2041 lse->setReadOnly( false ); 2041 lse->setReadOnly( false );
2042 lse->setDescription( "" ); 2042 lse->setDescription( "" );
2043 lse->setReadOnly( true ); 2043 lse->setReadOnly( true );
2044 } 2044 }
2045 } 2045 }
2046 } else { 2046 } else {
2047 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); 2047 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") );
2048 } 2048 }
2049 setModified( true ); 2049 setModified( true );
2050 } else { 2050 } else {
2051 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 2051 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
2052 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 2052 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
2053 question, i18n("Ok")) ; 2053 question, i18n("Ok")) ;
2054 2054
2055 } 2055 }
2056 delete calendar; 2056 delete calendar;
2057 updateView(); 2057 updateView();
2058 emit tempDisableBR(false); 2058 emit tempDisableBR(false);
2059 return ;//syncOK; 2059 return ;//syncOK;
2060 2060
2061} 2061}
2062 2062
2063bool CalendarView::importBday() 2063bool CalendarView::importBday()
2064{ 2064{
2065#ifndef KORG_NOKABC 2065#ifndef KORG_NOKABC
2066 2066
2067#ifdef DESKTOP_VERSION 2067#ifdef DESKTOP_VERSION
2068 int curCal = mCalendar->defaultCalendar(); 2068 int curCal = mCalendar->defaultCalendar();
2069 int bd = mCalEditView->getBirtdayID(); 2069 int bd = mCalEditView->getBirtdayID();
2070 if ( bd == 0 ) 2070 if ( bd == 0 )
2071 return false; 2071 return false;
2072 mCalendar->setDefaultCalendar( bd ); 2072 mCalendar->setDefaultCalendar( bd );
2073 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 2073 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
2074 KABC::AddressBook::Iterator it; 2074 KABC::AddressBook::Iterator it;
2075 int count = 0; 2075 int count = 0;
2076 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 2076 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
2077 ++count; 2077 ++count;
2078 } 2078 }
2079 QProgressBar bar(count,0 ); 2079 QProgressBar bar(count,0 );
2080 int w = 300; 2080 int w = 300;
2081 if ( QApplication::desktop()->width() < 320 ) 2081 if ( QApplication::desktop()->width() < 320 )
2082 w = 220; 2082 w = 220;
2083 int h = bar.sizeHint().height() ; 2083 int h = bar.sizeHint().height() ;
2084 int dw = QApplication::desktop()->width(); 2084 int dw = QApplication::desktop()->width();
2085 int dh = QApplication::desktop()->height(); 2085 int dh = QApplication::desktop()->height();
2086 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2086 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2087 bar.show(); 2087 bar.show();
2088 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 2088 bar.setCaption (i18n("Reading addressbook - close to abort!") );
2089 qApp->processEvents(); 2089 qApp->processEvents();
2090 count = 0; 2090 count = 0;
2091 int addCount = 0; 2091 int addCount = 0;
2092 KCal::Attendee* a = 0; 2092 KCal::Attendee* a = 0;
2093 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 2093 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
2094 if ( ! bar.isVisible() ) 2094 if ( ! bar.isVisible() )
2095 return false; 2095 return false;
2096 bar.setProgress( count++ ); 2096 bar.setProgress( count++ );
2097 qApp->processEvents(); 2097 qApp->processEvents();
2098 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 2098 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
2099 if ( (*it).birthday().date().isValid() ){ 2099 if ( (*it).birthday().date().isValid() ){
2100 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 2100 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
2101 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 2101 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
2102 ++addCount; 2102 ++addCount;
2103 } 2103 }
2104 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 2104 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
2105 if ( anni.isValid() ){ 2105 if ( anni.isValid() ){
2106 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 2106 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
2107 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 2107 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
2108 ++addCount; 2108 ++addCount;
2109 } 2109 }
2110 } 2110 }
2111 mCalendar->setDefaultCalendar( curCal ); 2111 mCalendar->setDefaultCalendar( curCal );
2112 updateView(); 2112 updateView();
2113 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 2113 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
2114#else //DESKTOP_VERSION 2114#else //DESKTOP_VERSION
2115 2115
2116 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); 2116 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/);
2117 // the result should now arrive through method insertBirthdays 2117 // the result should now arrive through method insertBirthdays
2118 2118
2119#endif //DESKTOP_VERSION 2119#endif //DESKTOP_VERSION
2120 2120
2121#endif //KORG_NOKABC 2121#endif //KORG_NOKABC
2122 2122
2123 2123
2124 return true; 2124 return true;
2125} 2125}
2126 2126
2127// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI 2127// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI
2128void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList, 2128void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList,
2129 const QStringList& anniversaryList, const QStringList& realNameList, 2129 const QStringList& anniversaryList, const QStringList& realNameList,
2130 const QStringList& emailList, const QStringList& assembledNameList, 2130 const QStringList& emailList, const QStringList& assembledNameList,
2131 const QStringList& uidList) 2131 const QStringList& uidList)
2132{ 2132{
2133 2133
2134 //qDebug("KO::CalendarView::insertBirthdays"); 2134 //qDebug("KO::CalendarView::insertBirthdays");
2135 if (uid == this->name()) 2135 if (uid == this->name())
2136 { 2136 {
2137 int curCal = mCalendar->defaultCalendar(); 2137 int curCal = mCalendar->defaultCalendar();
2138 int bd = mCalEditView->getBirtdayID(); 2138 int bd = mCalEditView->getBirtdayID();
2139 if ( bd == 0 ) 2139 if ( bd == 0 )
2140 return; 2140 return;
2141 mCalendar->setDefaultCalendar( bd ); 2141 mCalendar->setDefaultCalendar( bd );
2142 2142
2143 2143
2144 int count = birthdayList.count(); 2144 int count = birthdayList.count();
2145 int addCount = 0; 2145 int addCount = 0;
2146 KCal::Attendee* a = 0; 2146 KCal::Attendee* a = 0;
2147 2147
2148 //qDebug("CalView 1 %i", count); 2148 //qDebug("CalView 1 %i", count);
2149 2149
2150 QProgressBar bar(count,0 ); 2150 QProgressBar bar(count,0 );
2151 int w = 300; 2151 int w = 300;
2152 if ( QApplication::desktop()->width() < 320 ) 2152 if ( QApplication::desktop()->width() < 320 )
2153 w = 220; 2153 w = 220;
2154 int h = bar.sizeHint().height() ; 2154 int h = bar.sizeHint().height() ;
2155 int dw = QApplication::desktop()->width(); 2155 int dw = QApplication::desktop()->width();
2156 int dh = QApplication::desktop()->height(); 2156 int dh = QApplication::desktop()->height();
2157 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2157 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2158 bar.show(); 2158 bar.show();
2159 bar.setCaption (i18n("inserting birthdays - close to abort!") ); 2159 bar.setCaption (i18n("inserting birthdays - close to abort!") );
2160 qApp->processEvents(); 2160 qApp->processEvents();
2161 2161
2162 QDate birthday; 2162 QDate birthday;
2163 QDate anniversary; 2163 QDate anniversary;
2164 QString realName; 2164 QString realName;
2165 QString email; 2165 QString email;
2166 QString assembledName; 2166 QString assembledName;
2167 QString uid; 2167 QString uid;
2168 bool ok = true; 2168 bool ok = true;
2169 for ( int i = 0; i < count; i++) 2169 for ( int i = 0; i < count; i++)
2170 { 2170 {
2171 if ( ! bar.isVisible() ) 2171 if ( ! bar.isVisible() )
2172 return; 2172 return;
2173 bar.setProgress( i ); 2173 bar.setProgress( i );
2174 qApp->processEvents(); 2174 qApp->processEvents();
2175 2175
2176 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok); 2176 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok);
2177 if (!ok) { 2177 if (!ok) {
2178 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1()); 2178 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1());
2179 } 2179 }
2180 2180
2181 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok); 2181 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok);
2182 if (!ok) { 2182 if (!ok) {
2183 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1()); 2183 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1());
2184 } 2184 }
2185 realName = realNameList[i]; 2185 realName = realNameList[i];
2186 email = emailList[i]; 2186 email = emailList[i];
2187 assembledName = assembledNameList[i]; 2187 assembledName = assembledNameList[i];
2188 uid = uidList[i]; 2188 uid = uidList[i];
2189 //qDebug("insert birthday in KO/Pi: %s,%s,%s,%s: %s, %s", realName.latin1(), email.latin1(), assembledName.latin1(), uid.latin1(), birthdayList[i].latin1(), anniversaryList[i].latin1() ); 2189 //qDebug("insert birthday in KO/Pi: %s,%s,%s,%s: %s, %s", realName.latin1(), email.latin1(), assembledName.latin1(), uid.latin1(), birthdayList[i].latin1(), anniversaryList[i].latin1() );
2190 2190
2191 if ( birthday.isValid() ){ 2191 if ( birthday.isValid() ){
2192 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 2192 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
2193 KCal::Attendee::ReqParticipant,uid) ; 2193 KCal::Attendee::ReqParticipant,uid) ;
2194 if ( addAnniversary( birthday, assembledName, a, true ) ) 2194 if ( addAnniversary( birthday, assembledName, a, true ) )
2195 ++addCount; 2195 ++addCount;
2196 } 2196 }
2197 2197
2198 if ( anniversary.isValid() ){ 2198 if ( anniversary.isValid() ){
2199 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 2199 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
2200 KCal::Attendee::ReqParticipant,uid) ; 2200 KCal::Attendee::ReqParticipant,uid) ;
2201 if ( addAnniversary( anniversary, assembledName, a, false ) ) 2201 if ( addAnniversary( anniversary, assembledName, a, false ) )
2202 ++addCount; 2202 ++addCount;
2203 } 2203 }
2204 } 2204 }
2205 2205
2206 mCalendar->setDefaultCalendar( curCal ); 2206 mCalendar->setDefaultCalendar( curCal );
2207 updateView(); 2207 updateView();
2208 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 2208 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
2209 2209
2210 } 2210 }
2211 2211
2212} 2212}
2213 2213
2214 2214
2215 2215
2216bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 2216bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
2217{ 2217{
2218 //qDebug("addAnni "); 2218 //qDebug("addAnni ");
2219 Event * ev = new Event(); 2219 Event * ev = new Event();
2220 ev->setOrganizer(KOPrefs::instance()->email()); 2220 ev->setOrganizer(KOPrefs::instance()->email());
2221 if ( a ) { 2221 if ( a ) {
2222 ev->addAttendee( a ); 2222 ev->addAttendee( a );
2223 } 2223 }
2224 QString kind; 2224 QString kind;
2225 if ( birthday ) { 2225 if ( birthday ) {
2226 kind = i18n( "Birthday" ); 2226 kind = i18n( "Birthday" );
2227 ev->setSummary( name + " (" + QString::number(date.year()) +")"); 2227 ev->setSummary( name + " (" + QString::number(date.year()) +")");
2228 } 2228 }
2229 else { 2229 else {
2230 kind = i18n( "Anniversary" ); 2230 kind = i18n( "Anniversary" );
2231 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind ); 2231 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind );
2232 } 2232 }
2233 ev->setCategories( kind ); 2233 ev->setCategories( kind );
2234 ev->setDtStart( QDateTime(date) ); 2234 ev->setDtStart( QDateTime(date) );
2235 ev->setDtEnd( QDateTime(date) ); 2235 ev->setDtEnd( QDateTime(date) );
2236 ev->setFloats( true ); 2236 ev->setFloats( true );
2237 Recurrence * rec = ev->recurrence(); 2237 Recurrence * rec = ev->recurrence();
2238 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 2238 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
2239 rec->addYearlyNum( date.month() ); 2239 rec->addYearlyNum( date.month() );
2240 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 2240 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
2241 delete ev; 2241 delete ev;
2242 return false; 2242 return false;
2243 } 2243 }
2244 return true; 2244 return true;
2245 2245
2246} 2246}
2247bool CalendarView::importQtopia( const QString &categories, 2247bool CalendarView::importQtopia( const QString &categories,
2248 const QString &datebook, 2248 const QString &datebook,
2249 const QString &todolist ) 2249 const QString &todolist )
2250{ 2250{
2251 2251
2252 QtopiaFormat qtopiaFormat; 2252 QtopiaFormat qtopiaFormat;
2253 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2253 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
2254 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 2254 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
2255 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 2255 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
2256 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 2256 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
2257 2257
2258 updateView(); 2258 updateView();
2259 return true; 2259 return true;
2260 2260
2261#if 0 2261#if 0
2262 mGlobalSyncMode = SYNC_MODE_QTOPIA; 2262 mGlobalSyncMode = SYNC_MODE_QTOPIA;
2263 mCurrentSyncDevice = "qtopia-XML"; 2263 mCurrentSyncDevice = "qtopia-XML";
2264 if ( mSyncManager->mAskForPreferences ) 2264 if ( mSyncManager->mAskForPreferences )
2265 edit_sync_options(); 2265 edit_sync_options();
2266 qApp->processEvents(); 2266 qApp->processEvents();
2267 CalendarLocal* calendar = new CalendarLocal(); 2267 CalendarLocal* calendar = new CalendarLocal();
2268 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2268 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2269 bool syncOK = false; 2269 bool syncOK = false;
2270 QtopiaFormat qtopiaFormat; 2270 QtopiaFormat qtopiaFormat;
2271 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2271 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
2272 bool loadOk = true; 2272 bool loadOk = true;
2273 if ( !categories.isEmpty() ) 2273 if ( !categories.isEmpty() )
2274 loadOk = qtopiaFormat.load( calendar, categories ); 2274 loadOk = qtopiaFormat.load( calendar, categories );
2275 if ( loadOk && !datebook.isEmpty() ) 2275 if ( loadOk && !datebook.isEmpty() )
2276 loadOk = qtopiaFormat.load( calendar, datebook ); 2276 loadOk = qtopiaFormat.load( calendar, datebook );
2277 if ( loadOk && !todolist.isEmpty() ) 2277 if ( loadOk && !todolist.isEmpty() )
2278 loadOk = qtopiaFormat.load( calendar, todolist ); 2278 loadOk = qtopiaFormat.load( calendar, todolist );
2279 2279
2280 if ( loadOk ) { 2280 if ( loadOk ) {
2281 getEventViewerDialog()->setSyncMode( true ); 2281 getEventViewerDialog()->setSyncMode( true );
2282 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2282 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2283 getEventViewerDialog()->setSyncMode( false ); 2283 getEventViewerDialog()->setSyncMode( false );
2284 qApp->processEvents(); 2284 qApp->processEvents();
2285 if ( syncOK ) { 2285 if ( syncOK ) {
2286 if ( mSyncManager->mWriteBackFile ) 2286 if ( mSyncManager->mWriteBackFile )
2287 { 2287 {
2288 // write back XML file 2288 // write back XML file
2289 2289
2290 } 2290 }
2291 setModified( true ); 2291 setModified( true );
2292 } 2292 }
2293 } else { 2293 } else {
2294 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 2294 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
2295 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 2295 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
2296 question, i18n("Ok")) ; 2296 question, i18n("Ok")) ;
2297 } 2297 }
2298 delete calendar; 2298 delete calendar;
2299 updateView(); 2299 updateView();
2300 return syncOK; 2300 return syncOK;
2301 2301
2302 2302
2303#endif 2303#endif
2304 2304
2305} 2305}
2306 2306
2307void CalendarView::setSyncEventsReadOnly() 2307void CalendarView::setSyncEventsReadOnly()
2308{ 2308{
2309 mCalendar->setSyncEventsReadOnly(); 2309 mCalendar->setSyncEventsReadOnly();
2310} 2310}
2311 2311
2312bool CalendarView::loadCalendars() 2312bool CalendarView::loadCalendars()
2313{ 2313{
2314 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2314 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2315 KopiCalendarFile * cal = calendars.first(); 2315 KopiCalendarFile * cal = calendars.first();
2316 mCalendar->setDefaultCalendar( 1 ); 2316 mCalendar->setDefaultCalendar( 1 );
2317 openCalendar( MainWindow::defaultFileName(), false ); 2317 openCalendar( MainWindow::defaultFileName(), false );
2318 cal = calendars.next(); 2318 cal = calendars.next();
2319 while ( cal ) { 2319 while ( cal ) {
2320 addCalendar( cal ); 2320 addCalendar( cal );
2321 cal = calendars.next(); 2321 cal = calendars.next();
2322 } 2322 }
2323 restoreCalendarSettings(); 2323 restoreCalendarSettings();
2324 return true; 2324 return true;
2325} 2325}
2326bool CalendarView::restoreCalendarSettings() 2326bool CalendarView::restoreCalendarSettings()
2327{ 2327{
2328 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2328 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2329 KopiCalendarFile * cal = calendars.first(); 2329 KopiCalendarFile * cal = calendars.first();
2330 while ( cal ) { 2330 while ( cal ) {
2331 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled ); 2331 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled );
2332 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled ); 2332 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled );
2333 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly ); 2333 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly );
2334 if ( cal->isStandard ) 2334 if ( cal->isStandard )
2335 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2335 mCalendar->setDefaultCalendar( cal->mCalNumber );
2336 cal = calendars.next(); 2336 cal = calendars.next();
2337 } 2337 }
2338 setSyncEventsReadOnly(); 2338 setSyncEventsReadOnly();
2339 mCalendar->reInitAlarmSettings(); 2339 mCalendar->reInitAlarmSettings();
2340 updateUnmanagedViews(); 2340 updateUnmanagedViews();
2341 updateView(); 2341 updateView();
2342 return true; 2342 return true;
2343} 2343}
2344void CalendarView::addCalendarId( int id ) 2344void CalendarView::addCalendarId( int id )
2345{ 2345{
2346 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id ); 2346 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id );
2347 if ( cal ) 2347 if ( cal )
2348 addCalendar( cal ); 2348 addCalendar( cal );
2349} 2349}
2350bool CalendarView::addCalendar( KopiCalendarFile * cal ) 2350bool CalendarView::addCalendar( KopiCalendarFile * cal )
2351{ 2351{
2352 cal->mErrorOnLoad = false; 2352 cal->mErrorOnLoad = false;
2353 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) { 2353 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) {
2354 cal->mLoadDt = QDateTime::currentDateTime(); 2354 cal->mLoadDt = QDateTime::currentDateTime();
2355 return true; 2355 return true;
2356 } 2356 }
2357 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() ); 2357 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() );
2358 cal->mErrorOnLoad = true; 2358 cal->mErrorOnLoad = true;
2359 return false; 2359 return false;
2360} 2360}
2361bool CalendarView::openCalendar(QString filename, bool merge) 2361bool CalendarView::openCalendar(QString filename, bool merge)
2362{ 2362{
2363 2363
2364 if (filename.isEmpty()) { 2364 if (filename.isEmpty()) {
2365 return false; 2365 return false;
2366 } 2366 }
2367 2367
2368 if (!QFile::exists(filename)) { 2368 if (!QFile::exists(filename)) {
2369 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 2369 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
2370 return false; 2370 return false;
2371 } 2371 }
2372 2372
2373 globalFlagBlockAgenda = 1; 2373 globalFlagBlockAgenda = 1;
2374 clearAllViews(); 2374 clearAllViews();
2375 if (!merge) { 2375 if (!merge) {
2376 mViewManager->setDocumentId( filename ); 2376 mViewManager->setDocumentId( filename );
2377 mCalendar->close(); 2377 mCalendar->close();
2378 } 2378 }
2379 mStorage->setFileName( filename ); 2379 mStorage->setFileName( filename );
2380 2380
2381 if ( mStorage->load() ) { 2381 if ( mStorage->load() ) {
2382 if ( merge ) ;//setModified( true ); 2382 if ( merge ) ;//setModified( true );
2383 else { 2383 else {
2384 //setModified( true ); 2384 //setModified( true );
2385 mViewManager->setDocumentId( filename ); 2385 mViewManager->setDocumentId( filename );
2386 mDialogManager->setDocumentId( filename ); 2386 mDialogManager->setDocumentId( filename );
2387 mTodoList->setDocumentId( filename ); 2387 mTodoList->setDocumentId( filename );
2388 } 2388 }
2389 globalFlagBlockAgenda = 2; 2389 globalFlagBlockAgenda = 2;
2390 // if ( getLastSyncEvent() ) 2390 // if ( getLastSyncEvent() )
2391 // getLastSyncEvent()->setReadOnly( true ); 2391 // getLastSyncEvent()->setReadOnly( true );
2392 mCalendar->reInitAlarmSettings(); 2392 mCalendar->reInitAlarmSettings();
2393 setSyncEventsReadOnly(); 2393 setSyncEventsReadOnly();
2394 updateUnmanagedViews(); 2394 updateUnmanagedViews();
2395 updateView(); 2395 updateView();
2396 if ( filename != MainWindow::defaultFileName() ) { 2396 if ( filename != MainWindow::defaultFileName() ) {
2397 saveCalendar( MainWindow::defaultFileName() ); 2397 saveCalendar( MainWindow::defaultFileName() );
2398 } else { 2398 } else {
2399 QFileInfo finf ( MainWindow::defaultFileName()); 2399 QFileInfo finf ( MainWindow::defaultFileName());
2400 if ( finf.exists() ) { 2400 if ( finf.exists() ) {
2401 setLoadedFileVersion( finf.lastModified () ); 2401 setLoadedFileVersion( finf.lastModified () );
2402 } 2402 }
2403 } 2403 }
2404 return true; 2404 return true;
2405 } else { 2405 } else {
2406 // while failing to load, the calendar object could 2406 // while failing to load, the calendar object could
2407 // have become partially populated. Clear it out. 2407 // have become partially populated. Clear it out.
2408 if ( !merge ) { 2408 if ( !merge ) {
2409 mCalendar->close(); 2409 mCalendar->close();
2410 mViewManager->setDocumentId( filename ); 2410 mViewManager->setDocumentId( filename );
2411 mDialogManager->setDocumentId( filename ); 2411 mDialogManager->setDocumentId( filename );
2412 mTodoList->setDocumentId( filename ); 2412 mTodoList->setDocumentId( filename );
2413 } 2413 }
2414 2414
2415 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 2415 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
2416 2416
2417 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); 2417 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) );
2418 globalFlagBlockAgenda = 2; 2418 globalFlagBlockAgenda = 2;
2419 mCalendar->reInitAlarmSettings(); 2419 mCalendar->reInitAlarmSettings();
2420 setSyncEventsReadOnly(); 2420 setSyncEventsReadOnly();
2421 updateUnmanagedViews(); 2421 updateUnmanagedViews();
2422 updateView(); 2422 updateView();
2423 } 2423 }
2424 return false; 2424 return false;
2425} 2425}
2426void CalendarView::mergeFile( QString fn ) 2426void CalendarView::mergeFile( QString fn )
2427{ 2427{
2428 clearAllViews(); 2428 clearAllViews();
2429 mCalendar->mergeCalendarFile( fn ); 2429 mCalendar->mergeCalendarFile( fn );
2430 mCalendar->reInitAlarmSettings(); 2430 mCalendar->reInitAlarmSettings();
2431 setSyncEventsReadOnly(); 2431 setSyncEventsReadOnly();
2432 updateUnmanagedViews(); 2432 updateUnmanagedViews();
2433 updateView(); 2433 updateView();
2434} 2434}
2435void CalendarView::showOpenError() 2435void CalendarView::showOpenError()
2436{ 2436{
2437 KMessageBox::error(this,i18n("Couldn't load calendar\n.")); 2437 KMessageBox::error(this,i18n("Couldn't load calendar\n."));
2438} 2438}
2439void CalendarView::setLoadedFileVersion(QDateTime dt) 2439void CalendarView::setLoadedFileVersion(QDateTime dt)
2440{ 2440{
2441 loadedFileVersion = dt; 2441 loadedFileVersion = dt;
2442} 2442}
2443bool CalendarView::checkFileChanged(QString fn) 2443bool CalendarView::checkFileChanged(QString fn)
2444{ 2444{
2445 QFileInfo finf ( fn ); 2445 QFileInfo finf ( fn );
2446 if ( !finf.exists() ) 2446 if ( !finf.exists() )
2447 return true; 2447 return true;
2448 QDateTime dt = finf.lastModified (); 2448 QDateTime dt = finf.lastModified ();
2449 if ( dt <= loadedFileVersion ) 2449 if ( dt <= loadedFileVersion )
2450 return false; 2450 return false;
2451 return true; 2451 return true;
2452 2452
2453} 2453}
2454void CalendarView::watchSavedFile() 2454void CalendarView::watchSavedFile()
2455{ 2455{
2456 QFileInfo finf ( MainWindow::defaultFileName()); 2456 QFileInfo finf ( MainWindow::defaultFileName());
2457 if ( !finf.exists() ) 2457 if ( !finf.exists() )
2458 return; 2458 return;
2459 QDateTime dt = finf.lastModified (); 2459 QDateTime dt = finf.lastModified ();
2460 if ( dt < loadedFileVersion ) { 2460 if ( dt < loadedFileVersion ) {
2461 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); 2461 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1());
2462 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); 2462 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) );
2463 return; 2463 return;
2464 } 2464 }
2465 loadedFileVersion = dt; 2465 loadedFileVersion = dt;
2466} 2466}
2467bool CalendarView::checkAllFileVersions() 2467bool CalendarView::checkAllFileVersions()
2468{ 2468{
2469 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2469 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2470 KopiCalendarFile * cal = calendars.first(); 2470 KopiCalendarFile * cal = calendars.first();
2471 mCalendar->setDefaultCalendar( 1 ); 2471 mCalendar->setDefaultCalendar( 1 );
2472 mCalendar->setDefaultCalendarEnabledOnly(); 2472 mCalendar->setDefaultCalendarEnabledOnly();
2473 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2473 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2474 if ( !checkFileVersion(MainWindow::defaultFileName())) { 2474 if ( !checkFileVersion(MainWindow::defaultFileName())) {
2475 restoreCalendarSettings(); 2475 restoreCalendarSettings();
2476 return false; 2476 return false;
2477 } 2477 }
2478 } 2478 }
2479 cal = calendars.next(); 2479 cal = calendars.next();
2480 QDateTime storeTemp = loadedFileVersion; 2480 QDateTime storeTemp = loadedFileVersion;
2481 while ( cal ) { 2481 while ( cal ) {
2482 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2482 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2483 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2483 mCalendar->setDefaultCalendar( cal->mCalNumber );
2484 mCalendar->setDefaultCalendarEnabledOnly(); 2484 mCalendar->setDefaultCalendarEnabledOnly();
2485 loadedFileVersion = cal->mLoadDt.addSecs( 15 ); 2485 loadedFileVersion = cal->mLoadDt.addSecs( 15 );
2486 if ( !checkFileVersion(cal->mFileName )) { 2486 if ( !checkFileVersion(cal->mFileName )) {
2487 loadedFileVersion = storeTemp; 2487 loadedFileVersion = storeTemp;
2488 restoreCalendarSettings(); 2488 restoreCalendarSettings();
2489 return false; 2489 return false;
2490 } 2490 }
2491 } 2491 }
2492 cal = calendars.next(); 2492 cal = calendars.next();
2493 } 2493 }
2494 loadedFileVersion = storeTemp; 2494 loadedFileVersion = storeTemp;
2495 return true; 2495 return true;
2496} 2496}
2497bool CalendarView::checkFileVersion(QString fn) 2497bool CalendarView::checkFileVersion(QString fn)
2498{ 2498{
2499 QFileInfo finf ( fn ); 2499 QFileInfo finf ( fn );
2500 if ( !finf.exists() ) 2500 if ( !finf.exists() )
2501 return true; 2501 return true;
2502 QDateTime dt = finf.lastModified (); 2502 QDateTime dt = finf.lastModified ();
2503 qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1()); 2503 qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1());
2504 qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1()); 2504 qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1());
2505 if ( dt <= loadedFileVersion ) 2505 if ( dt <= loadedFileVersion )
2506 return true; 2506 return true;
2507 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg(KGlobal::formatMessage(fn,0)).arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) , 2507 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg(KGlobal::formatMessage(fn,0)).arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) ,
2508 i18n("KO/Pi Warning"),i18n("Overwrite"), 2508 i18n("KO/Pi Warning"),i18n("Overwrite"),
2509 i18n("Sync+save")); 2509 i18n("Sync+save"));
2510 2510
2511 if ( km == KMessageBox::Cancel ) 2511 if ( km == KMessageBox::Cancel )
2512 return false; 2512 return false;
2513 if ( km == KMessageBox::Yes ) 2513 if ( km == KMessageBox::Yes )
2514 return true; 2514 return true;
2515 2515
2516 setSyncDevice("deleteaftersync" ); 2516 setSyncDevice("deleteaftersync" );
2517 mSyncManager->mAskForPreferences = true; 2517 mSyncManager->mAskForPreferences = true;
2518 mSyncManager->mSyncAlgoPrefs = 3; 2518 mSyncManager->mSyncAlgoPrefs = 3;
2519 mSyncManager->mWriteBackFile = false; 2519 mSyncManager->mWriteBackFile = false;
2520 mSyncManager->mWriteBackExistingOnly = false; 2520 mSyncManager->mWriteBackExistingOnly = false;
2521 mSyncManager->mShowSyncSummary = false; 2521 mSyncManager->mShowSyncSummary = false;
2522 syncCalendar( fn, 3 ); 2522 syncCalendar( fn, 3 );
2523 Event * e = getLastSyncEvent(); 2523 Event * e = getLastSyncEvent();
2524 if ( e ) 2524 if ( e )
2525 mCalendar->deleteEvent( e ); 2525 mCalendar->deleteEvent( e );
2526 return true; 2526 return true;
2527} 2527}
2528bool CalendarView::saveCalendars() 2528bool CalendarView::saveCalendars()
2529{ 2529{
2530 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2530 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2531 KopiCalendarFile * cal = calendars.first(); 2531 KopiCalendarFile * cal = calendars.first();
2532 mCalendar->setDefaultCalendar( 1 ); 2532 mCalendar->setDefaultCalendar( 1 );
2533 mCalendar->setDefaultCalendarEnabledOnly(); 2533 mCalendar->setDefaultCalendarEnabledOnly();
2534 QString saveError; 2534 QString saveError;
2535 if ( !saveCalendar( MainWindow::defaultFileName() ) ) 2535 if ( !saveCalendar( MainWindow::defaultFileName() ) )
2536 saveError = cal->mName +"\n"; 2536 saveError = cal->mName +"\n";
2537 cal = calendars.next(); 2537 cal = calendars.next();
2538 while ( cal ) { 2538 while ( cal ) {
2539 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2539 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2540 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2540 mCalendar->setDefaultCalendar( cal->mCalNumber );
2541 mCalendar->setDefaultCalendarEnabledOnly(); 2541 mCalendar->setDefaultCalendarEnabledOnly();
2542 if ( saveCalendar( cal->mFileName ) ) 2542 if ( saveCalendar( cal->mFileName ) )
2543 cal->mLoadDt = QDateTime::currentDateTime(); 2543 cal->mLoadDt = QDateTime::currentDateTime();
2544 else 2544 else
2545 saveError += cal->mName + "\n"; 2545 saveError += cal->mName + "\n";
2546 } 2546 }
2547 cal = calendars.next(); 2547 cal = calendars.next();
2548 } 2548 }
2549 restoreCalendarSettings(); 2549 restoreCalendarSettings();
2550
2551 if ( !saveError.isEmpty() ) { 2550 if ( !saveError.isEmpty() ) {
2552 saveError = KGlobal::formatMessage( i18n("Calendar(s) not saved:"),0 )+"\n" + saveError; 2551 saveError = KGlobal::formatMessage( i18n("Calendar(s) not saved:"),0 )+"\n" + saveError;
2553 KMessageBox::error(this, saveError, i18n("Error saving data")); 2552 KMessageBox::error(this, saveError, i18n("Error saving data"));
2554 return false; 2553 return false;
2555 } 2554 }
2556 return true; 2555 return true;
2557} 2556}
2558bool CalendarView::saveCalendar( QString filename ) 2557bool CalendarView::saveCalendar( QString filename )
2559{ 2558{
2560 2559
2561 // Store back all unsaved data into calendar object 2560 // Store back all unsaved data into calendar object
2562 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 2561 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
2563 if ( mViewManager->currentView() ) 2562 if ( mViewManager->currentView() )
2564 mViewManager->currentView()->flushView(); 2563 mViewManager->currentView()->flushView();
2565 2564
2566 2565
2567 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); 2566 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2);
2568 mStorage->setSaveFormat( new ICalFormat() ); 2567 mStorage->setSaveFormat( new ICalFormat() );
2569 mStorage->setFileName( filename ); 2568 mStorage->setFileName( filename );
2570 bool success; 2569 bool success;
2571 success = mStorage->save(); 2570 success = mStorage->save();
2572 if ( !success ) { 2571 if ( !success ) {
2573 return false; 2572 return false;
2574 } 2573 }
2575 if ( filename == MainWindow::defaultFileName() ) { 2574 if ( filename == MainWindow::defaultFileName() ) {
2576 setLoadedFileVersion( lfv ); 2575 setLoadedFileVersion( lfv );
2577 watchSavedFile(); 2576 watchSavedFile();
2578 } 2577 }
2579 return true; 2578 return true;
2580} 2579}
2581 2580
2582void CalendarView::closeCalendar() 2581void CalendarView::closeCalendar()
2583{ 2582{
2584 2583
2585 // child windows no longer valid 2584 // child windows no longer valid
2586 clearAllViews(); 2585 clearAllViews();
2587 emit closingDown(); 2586 emit closingDown();
2588 2587
2589 mCalendar->close(); 2588 mCalendar->close();
2590 setModified(false); 2589 setModified(false);
2591 updateView(); 2590 updateView();
2592} 2591}
2593 2592
2594void CalendarView::archiveCalendar() 2593void CalendarView::archiveCalendar()
2595{ 2594{
2596 mDialogManager->showArchiveDialog(); 2595 mDialogManager->showArchiveDialog();
2597} 2596}
2598 2597
2599 2598
2600void CalendarView::readSettings() 2599void CalendarView::readSettings()
2601{ 2600{
2602 2601
2603 2602
2604 // mViewManager->showAgendaView(); 2603 // mViewManager->showAgendaView();
2605 QString str; 2604 QString str;
2606 //qDebug("CalendarView::readSettings() "); 2605 //qDebug("CalendarView::readSettings() ");
2607 // read settings from the KConfig, supplying reasonable 2606 // read settings from the KConfig, supplying reasonable
2608 // defaults where none are to be found 2607 // defaults where none are to be found
2609 KConfig *config = KOGlobals::config(); 2608 KConfig *config = KOGlobals::config();
2610#ifndef KORG_NOSPLITTER 2609#ifndef KORG_NOSPLITTER
2611 config->setGroup("KOrganizer Geometry"); 2610 config->setGroup("KOrganizer Geometry");
2612 2611
2613 QValueList<int> sizes = config->readIntListEntry("Separator1"); 2612 QValueList<int> sizes = config->readIntListEntry("Separator1");
2614 if (sizes.count() != 2) { 2613 if (sizes.count() != 2) {
2615 sizes << mDateNavigator->minimumSizeHint().width(); 2614 sizes << mDateNavigator->minimumSizeHint().width();
2616 sizes << 300; 2615 sizes << 300;
2617 } 2616 }
2618 mPanner->setSizes(sizes); 2617 mPanner->setSizes(sizes);
2619 2618
2620 sizes = config->readIntListEntry("Separator2"); 2619 sizes = config->readIntListEntry("Separator2");
2621 if ( ( mResourceView && sizes.count() == 4 ) || 2620 if ( ( mResourceView && sizes.count() == 4 ) ||
2622 ( !mResourceView && sizes.count() == 3 ) ) { 2621 ( !mResourceView && sizes.count() == 3 ) ) {
2623 mLeftSplitter->setSizes(sizes); 2622 mLeftSplitter->setSizes(sizes);
2624 } 2623 }
2625#endif 2624#endif
2626 globalFlagBlockAgenda = 1; 2625 globalFlagBlockAgenda = 1;
2627 mViewManager->showAgendaView(); 2626 mViewManager->showAgendaView();
2628 //mViewManager->readSettings( config ); 2627 //mViewManager->readSettings( config );
2629 mTodoList->restoreLayout(config,QString("Todo Layout")); 2628 mTodoList->restoreLayout(config,QString("Todo Layout"));
2630 readFilterSettings(config); 2629 readFilterSettings(config);
2631 2630
2632#ifdef DESKTOP_VERSION 2631#ifdef DESKTOP_VERSION
2633 config->setGroup("WidgetLayout"); 2632 config->setGroup("WidgetLayout");
2634 QStringList list; 2633 QStringList list;
2635 list = config->readListEntry("MainLayout"); 2634 list = config->readListEntry("MainLayout");
2636 int x,y,w,h; 2635 int x,y,w,h;
2637 if ( ! list.isEmpty() ) { 2636 if ( ! list.isEmpty() ) {
2638 x = list[0].toInt(); 2637 x = list[0].toInt();
2639 y = list[1].toInt(); 2638 y = list[1].toInt();
2640 w = list[2].toInt(); 2639 w = list[2].toInt();
2641 h = list[3].toInt(); 2640 h = list[3].toInt();
2642 KApplication::testCoords( &x,&y,&w,&h ); 2641 KApplication::testCoords( &x,&y,&w,&h );
2643 topLevelWidget()->setGeometry(x,y,w,h); 2642 topLevelWidget()->setGeometry(x,y,w,h);
2644 2643
2645 } else { 2644 } else {
2646 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 2645 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
2647 } 2646 }
2648 list = config->readListEntry("EditEventLayout"); 2647 list = config->readListEntry("EditEventLayout");
2649 if ( ! list.isEmpty() ) { 2648 if ( ! list.isEmpty() ) {
2650 x = list[0].toInt(); 2649 x = list[0].toInt();
2651 y = list[1].toInt(); 2650 y = list[1].toInt();
2652 w = list[2].toInt(); 2651 w = list[2].toInt();
2653 h = list[3].toInt(); 2652 h = list[3].toInt();
2654 KApplication::testCoords( &x,&y,&w,&h ); 2653 KApplication::testCoords( &x,&y,&w,&h );
2655 mEventEditor->setGeometry(x,y,w,h); 2654 mEventEditor->setGeometry(x,y,w,h);
2656 2655
2657 } 2656 }
2658 list = config->readListEntry("EditTodoLayout"); 2657 list = config->readListEntry("EditTodoLayout");
2659 if ( ! list.isEmpty() ) { 2658 if ( ! list.isEmpty() ) {
2660 x = list[0].toInt(); 2659 x = list[0].toInt();
2661 y = list[1].toInt(); 2660 y = list[1].toInt();
2662 w = list[2].toInt(); 2661 w = list[2].toInt();
2663 h = list[3].toInt(); 2662 h = list[3].toInt();
2664 KApplication::testCoords( &x,&y,&w,&h ); 2663 KApplication::testCoords( &x,&y,&w,&h );
2665 mTodoEditor->setGeometry(x,y,w,h); 2664 mTodoEditor->setGeometry(x,y,w,h);
2666 2665
2667 } 2666 }
2668 list = config->readListEntry("ViewerLayout"); 2667 list = config->readListEntry("ViewerLayout");
2669 if ( ! list.isEmpty() ) { 2668 if ( ! list.isEmpty() ) {
2670 x = list[0].toInt(); 2669 x = list[0].toInt();
2671 y = list[1].toInt(); 2670 y = list[1].toInt();
2672 w = list[2].toInt(); 2671 w = list[2].toInt();
2673 h = list[3].toInt(); 2672 h = list[3].toInt();
2674 KApplication::testCoords( &x,&y,&w,&h ); 2673 KApplication::testCoords( &x,&y,&w,&h );
2675 getEventViewerDialog()->setGeometry(x,y,w,h); 2674 getEventViewerDialog()->setGeometry(x,y,w,h);
2676 } 2675 }
2677#endif 2676#endif
2678 config->setGroup( "Views" ); 2677 config->setGroup( "Views" );
2679 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 2678 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
2680 2679
2681 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame"); 2680 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame");
2682 2681
2683 int resetval = 0; 2682 int resetval = 0;
2684 int maxVal = 0; 2683 int maxVal = 0;
2685 if (sizes.count() != 3) { 2684 if (sizes.count() != 3) {
2686 if ( KOPrefs::instance()->mVerticalScreen ) { 2685 if ( KOPrefs::instance()->mVerticalScreen ) {
2687 resetval = mDateNavigator->sizeHint().width()+2; 2686 resetval = mDateNavigator->sizeHint().width()+2;
2688 } else { 2687 } else {
2689 resetval = mDateNavigator->sizeHint().height()+2; 2688 resetval = mDateNavigator->sizeHint().height()+2;
2690 } 2689 }
2691 } 2690 }
2692 if ( resetval ) { 2691 if ( resetval ) {
2693 sizes.clear(); 2692 sizes.clear();
2694 if ( KOPrefs::instance()->mVerticalScreen ) { 2693 if ( KOPrefs::instance()->mVerticalScreen ) {
2695 maxVal = QApplication::desktop()->width() -10; 2694 maxVal = QApplication::desktop()->width() -10;
2696 } else { 2695 } else {
2697 maxVal = QApplication::desktop()->height()-10; 2696 maxVal = QApplication::desktop()->height()-10;
2698 } 2697 }
2699 sizes << resetval; 2698 sizes << resetval;
2700 if ( maxVal < resetval + resetval) 2699 if ( maxVal < resetval + resetval)
2701 resetval = maxVal - resetval; 2700 resetval = maxVal - resetval;
2702 sizes << resetval; 2701 sizes << resetval;
2703 sizes << 100; 2702 sizes << 100;
2704 } 2703 }
2705 mLeftFrame->setSizes(sizes); 2704 mLeftFrame->setSizes(sizes);
2706 sizes = config->readIntListEntry("Main Splitter Frame"); 2705 sizes = config->readIntListEntry("Main Splitter Frame");
2707 resetval = 0; 2706 resetval = 0;
2708 maxVal = 0; 2707 maxVal = 0;
2709 if (sizes.count() != 2) { 2708 if (sizes.count() != 2) {
2710 if ( !KOPrefs::instance()->mVerticalScreen ) { 2709 if ( !KOPrefs::instance()->mVerticalScreen ) {
2711 resetval = mDateNavigator->sizeHint().width()+2; 2710 resetval = mDateNavigator->sizeHint().width()+2;
2712 } else { 2711 } else {
2713 resetval = mDateNavigator->sizeHint().height()+2; 2712 resetval = mDateNavigator->sizeHint().height()+2;
2714 } 2713 }
2715 } 2714 }
2716 if ( resetval ) { 2715 if ( resetval ) {
2717 sizes.clear(); 2716 sizes.clear();
2718 if ( !KOPrefs::instance()->mVerticalScreen ) { 2717 if ( !KOPrefs::instance()->mVerticalScreen ) {
2719 maxVal = QApplication::desktop()->width() -10; 2718 maxVal = QApplication::desktop()->width() -10;
2720 } else { 2719 } else {
2721 maxVal = QApplication::desktop()->height()-10; 2720 maxVal = QApplication::desktop()->height()-10;
2722 } 2721 }
2723 sizes << resetval; 2722 sizes << resetval;
2724 if ( maxVal < resetval + resetval) 2723 if ( maxVal < resetval + resetval)
2725 resetval = maxVal - resetval; 2724 resetval = maxVal - resetval;
2726 sizes << resetval; 2725 sizes << resetval;
2727 } 2726 }
2728 mMainFrame->setSizes(sizes); 2727 mMainFrame->setSizes(sizes);
2729 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 2728 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
2730 else if ( dateCount == 7 ) mNavigator->selectWeek(); 2729 else if ( dateCount == 7 ) mNavigator->selectWeek();
2731 else mNavigator->selectDates( dateCount ); 2730 else mNavigator->selectDates( dateCount );
2732 // mViewManager->readSettings( config ); 2731 // mViewManager->readSettings( config );
2733 updateConfig(); 2732 updateConfig();
2734 globalFlagBlockAgenda = 2; 2733 globalFlagBlockAgenda = 2;
2735 mViewManager->readSettings( config ); 2734 mViewManager->readSettings( config );
2736 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) ); 2735 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) );
2737} 2736}
2738 2737
2739void CalendarView::checkSuspendAlarm() 2738void CalendarView::checkSuspendAlarm()
2740{ 2739{
2741 if ( mSuspendTimer->isActive() ) { 2740 if ( mSuspendTimer->isActive() ) {
2742 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm")); 2741 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm"));
2743 } 2742 }
2744} 2743}
2745void CalendarView::writeSettings() 2744void CalendarView::writeSettings()
2746{ 2745{
2747 // kdDebug() << "CalendarView::writeSettings" << endl; 2746 // kdDebug() << "CalendarView::writeSettings" << endl;
2748 2747
2749 KConfig *config = KOGlobals::config(); 2748 KConfig *config = KOGlobals::config();
2750 2749
2751 mViewManager->writeSettings( config ); 2750 mViewManager->writeSettings( config );
2752 mTodoList->saveLayout(config,QString("Todo Layout")); 2751 mTodoList->saveLayout(config,QString("Todo Layout"));
2753 mDialogManager->writeSettings( config ); 2752 mDialogManager->writeSettings( config );
2754 //KOPrefs::instance()->usrWriteConfig(); 2753 //KOPrefs::instance()->usrWriteConfig();
2755 KOPrefs::instance()->writeConfig(); 2754 KOPrefs::instance()->writeConfig();
2756 2755
2757 writeFilterSettings(config); 2756 writeFilterSettings(config);
2758 config->setGroup( "AppRun" ); 2757 config->setGroup( "AppRun" );
2759 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 2758 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
2760 int days = dt.daysTo( QDate::currentDate() ); 2759 int days = dt.daysTo( QDate::currentDate() );
2761 dt = dt.addDays( days ); 2760 dt = dt.addDays( days );
2762 int secs = dt.secsTo( QDateTime::currentDateTime() ); 2761 int secs = dt.secsTo( QDateTime::currentDateTime() );
2763 config->writeEntry( "LatestProgramStopDays", days ); 2762 config->writeEntry( "LatestProgramStopDays", days );
2764 config->writeEntry( "LatestProgramStopSecs", secs ); 2763 config->writeEntry( "LatestProgramStopSecs", secs );
2765 //qDebug("KO: Writing stop time: %d ", secs); 2764 //qDebug("KO: Writing stop time: %d ", secs);
2766 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 2765 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
2767 //QDateTime latest = dt.addSecs ( secs ); 2766 //QDateTime latest = dt.addSecs ( secs );
2768 //qDebug("KO: Termination on %s ", latest.toString().latin1()); 2767 //qDebug("KO: Termination on %s ", latest.toString().latin1());
2769 config->setGroup( "Views" ); 2768 config->setGroup( "Views" );
2770 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 2769 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
2771 2770
2772#if 0 2771#if 0
2773 qDebug("********************* "); 2772 qDebug("********************* ");
2774 qDebug("Testcode secsto "); 2773 qDebug("Testcode secsto ");
2775 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) ); 2774 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) );
2776 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) ); 2775 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) );
2777 int secsto = dt_nodaylight.secsTo( dt_daylight ); 2776 int secsto = dt_nodaylight.secsTo( dt_daylight );
2778 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto ); 2777 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto );
2779 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() ); 2778 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() );
2780 qDebug("dt daylight %s ",dt_daylight.toString().latin1() ); 2779 qDebug("dt daylight %s ",dt_daylight.toString().latin1() );
2781 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() ); 2780 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() );
2782 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600); 2781 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600);
2783 qDebug("********************* testcode end"); 2782 qDebug("********************* testcode end");
2784 2783
2785#endif 2784#endif
2786 2785
2787 QValueList<int> listINT = mLeftFrame->sizes(); 2786 QValueList<int> listINT = mLeftFrame->sizes();
2788 config->writeEntry("Left Splitter Frame",listINT); 2787 config->writeEntry("Left Splitter Frame",listINT);
2789 QValueList<int> listINT2 = mMainFrame->sizes(); 2788 QValueList<int> listINT2 = mMainFrame->sizes();
2790 config->writeEntry("Main Splitter Frame",listINT2); 2789 config->writeEntry("Main Splitter Frame",listINT2);
2791#ifdef DESKTOP_VERSION 2790#ifdef DESKTOP_VERSION
2792 config->setGroup("WidgetLayout"); 2791 config->setGroup("WidgetLayout");
2793 QStringList list ;//= config->readListEntry("MainLayout"); 2792 QStringList list ;//= config->readListEntry("MainLayout");
2794 int x,y,w,h; 2793 int x,y,w,h;
2795 QWidget* wid; 2794 QWidget* wid;
2796 wid = topLevelWidget(); 2795 wid = topLevelWidget();
2797 x = wid->geometry().x(); 2796 x = wid->geometry().x();
2798 y = wid->geometry().y(); 2797 y = wid->geometry().y();
2799 w = wid->width(); 2798 w = wid->width();
2800 h = wid->height(); 2799 h = wid->height();
2801 list.clear(); 2800 list.clear();
2802 list << QString::number( x ); 2801 list << QString::number( x );
2803 list << QString::number( y ); 2802 list << QString::number( y );
2804 list << QString::number( w ); 2803 list << QString::number( w );
2805 list << QString::number( h ); 2804 list << QString::number( h );
2806 config->writeEntry("MainLayout",list ); 2805 config->writeEntry("MainLayout",list );
2807 2806
2808 wid = mEventEditor; 2807 wid = mEventEditor;
2809 x = wid->geometry().x(); 2808 x = wid->geometry().x();
2810 y = wid->geometry().y(); 2809 y = wid->geometry().y();
2811 w = wid->width(); 2810 w = wid->width();
2812 h = wid->height(); 2811 h = wid->height();
2813 list.clear(); 2812 list.clear();
2814 list << QString::number( x ); 2813 list << QString::number( x );
2815 list << QString::number( y ); 2814 list << QString::number( y );
2816 list << QString::number( w ); 2815 list << QString::number( w );
2817 list << QString::number( h ); 2816 list << QString::number( h );
2818 config->writeEntry("EditEventLayout",list ); 2817 config->writeEntry("EditEventLayout",list );
2819 2818
2820 wid = mTodoEditor; 2819 wid = mTodoEditor;
2821 x = wid->geometry().x(); 2820 x = wid->geometry().x();
2822 y = wid->geometry().y(); 2821 y = wid->geometry().y();
2823 w = wid->width(); 2822 w = wid->width();
2824 h = wid->height(); 2823 h = wid->height();
2825 list.clear(); 2824 list.clear();
2826 list << QString::number( x ); 2825 list << QString::number( x );
2827 list << QString::number( y ); 2826 list << QString::number( y );
2828 list << QString::number( w ); 2827 list << QString::number( w );
2829 list << QString::number( h ); 2828 list << QString::number( h );
2830 config->writeEntry("EditTodoLayout",list ); 2829 config->writeEntry("EditTodoLayout",list );
2831 wid = getEventViewerDialog(); 2830 wid = getEventViewerDialog();
2832 x = wid->geometry().x(); 2831 x = wid->geometry().x();
2833 y = wid->geometry().y(); 2832 y = wid->geometry().y();
2834 w = wid->width(); 2833 w = wid->width();
2835 h = wid->height(); 2834 h = wid->height();
2836 list.clear(); 2835 list.clear();
2837 list << QString::number( x ); 2836 list << QString::number( x );
2838 list << QString::number( y ); 2837 list << QString::number( y );
2839 list << QString::number( w ); 2838 list << QString::number( w );
2840 list << QString::number( h ); 2839 list << QString::number( h );
2841 config->writeEntry("ViewerLayout",list ); 2840 config->writeEntry("ViewerLayout",list );
2842 wid = mDialogManager->getSearchDialog(); 2841 wid = mDialogManager->getSearchDialog();
2843 if ( wid ) { 2842 if ( wid ) {
2844 x = wid->geometry().x(); 2843 x = wid->geometry().x();
2845 y = wid->geometry().y(); 2844 y = wid->geometry().y();
2846 w = wid->width(); 2845 w = wid->width();
2847 h = wid->height(); 2846 h = wid->height();
2848 list.clear(); 2847 list.clear();
2849 list << QString::number( x ); 2848 list << QString::number( x );
2850 list << QString::number( y ); 2849 list << QString::number( y );
2851 list << QString::number( w ); 2850 list << QString::number( w );
2852 list << QString::number( h ); 2851 list << QString::number( h );
2853 config->writeEntry("SearchLayout",list ); 2852 config->writeEntry("SearchLayout",list );
2854 } 2853 }
2855#endif 2854#endif
2856 2855
2857 2856
2858 config->sync(); 2857 config->sync();
2859} 2858}
2860 2859
2861void CalendarView::readFilterSettings(KConfig *config) 2860void CalendarView::readFilterSettings(KConfig *config)
2862{ 2861{
2863 // kdDebug() << "CalendarView::readFilterSettings()" << endl; 2862 // kdDebug() << "CalendarView::readFilterSettings()" << endl;
2864 2863
2865 mFilters.clear(); 2864 mFilters.clear();
2866 2865
2867 config->setGroup("General"); 2866 config->setGroup("General");
2868 QStringList filterList = config->readListEntry("CalendarFilters"); 2867 QStringList filterList = config->readListEntry("CalendarFilters");
2869 2868
2870 QStringList::ConstIterator it = filterList.begin(); 2869 QStringList::ConstIterator it = filterList.begin();
2871 QStringList::ConstIterator end = filterList.end(); 2870 QStringList::ConstIterator end = filterList.end();
2872 while(it != end) { 2871 while(it != end) {
2873 // kdDebug() << " filter: " << (*it) << endl; 2872 // kdDebug() << " filter: " << (*it) << endl;
2874 2873
2875 CalFilter *filter; 2874 CalFilter *filter;
2876 filter = new CalFilter(*it); 2875 filter = new CalFilter(*it);
2877 config->setGroup("Filter_" + (*it).utf8()); 2876 config->setGroup("Filter_" + (*it).utf8());
2878 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); 2877 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) );
2879 filter->setCriteria(config->readNumEntry("Criteria",0)); 2878 filter->setCriteria(config->readNumEntry("Criteria",0));
2880 filter->setCategoryList(config->readListEntry("CategoryList")); 2879 filter->setCategoryList(config->readListEntry("CategoryList"));
2881 mFilters.append(filter); 2880 mFilters.append(filter);
2882 2881
2883 ++it; 2882 ++it;
2884 } 2883 }
2885 2884
2886 if (mFilters.count() == 0) { 2885 if (mFilters.count() == 0) {
2887 CalFilter *filter = new CalFilter(i18n("Default")); 2886 CalFilter *filter = new CalFilter(i18n("Default"));
2888 mFilters.append(filter); 2887 mFilters.append(filter);
2889 } 2888 }
2890 mFilterView->updateFilters(); 2889 mFilterView->updateFilters();
2891 config->setGroup("FilterView"); 2890 config->setGroup("FilterView");
2892 2891
2893 mFilterView->blockSignals(true); 2892 mFilterView->blockSignals(true);
2894 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); 2893 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled"));
2895 mFilterView->setSelectedFilter(config->readEntry("Current Filter")); 2894 mFilterView->setSelectedFilter(config->readEntry("Current Filter"));
2896 mFilterView->blockSignals(false); 2895 mFilterView->blockSignals(false);
2897 // We do it manually to avoid it being done twice by the above calls 2896 // We do it manually to avoid it being done twice by the above calls
2898 updateFilter(); 2897 updateFilter();
2899} 2898}
2900 2899
2901void CalendarView::writeFilterSettings(KConfig *config) 2900void CalendarView::writeFilterSettings(KConfig *config)
2902{ 2901{
2903 // kdDebug() << "CalendarView::writeFilterSettings()" << endl; 2902 // kdDebug() << "CalendarView::writeFilterSettings()" << endl;
2904 2903
2905 QStringList filterList; 2904 QStringList filterList;
2906 2905
2907 CalFilter *filter = mFilters.first(); 2906 CalFilter *filter = mFilters.first();
2908 while(filter) { 2907 while(filter) {
2909 // kdDebug() << " fn: " << filter->name() << endl; 2908 // kdDebug() << " fn: " << filter->name() << endl;
2910 filterList << filter->name(); 2909 filterList << filter->name();
2911 config->setGroup("Filter_" + filter->name().utf8()); 2910 config->setGroup("Filter_" + filter->name().utf8());
2912 config->writeEntry("Criteria",filter->criteria()); 2911 config->writeEntry("Criteria",filter->criteria());
2913 config->writeEntry("CategoryList",filter->categoryList()); 2912 config->writeEntry("CategoryList",filter->categoryList());
2914 filter = mFilters.next(); 2913 filter = mFilters.next();
2915 } 2914 }
2916 config->setGroup("General"); 2915 config->setGroup("General");
2917 config->writeEntry("CalendarFilters",filterList); 2916 config->writeEntry("CalendarFilters",filterList);
2918 2917
2919 config->setGroup("FilterView"); 2918 config->setGroup("FilterView");
2920 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); 2919 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled());
2921 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); 2920 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name());
2922} 2921}
2923 2922
2924 2923
2925void CalendarView::goToday() 2924void CalendarView::goToday()
2926{ 2925{
2927 if ( mViewManager->currentView()->isMonthView() ) 2926 if ( mViewManager->currentView()->isMonthView() )
2928 mNavigator->selectTodayMonth(); 2927 mNavigator->selectTodayMonth();
2929 else 2928 else
2930 mNavigator->selectToday(); 2929 mNavigator->selectToday();
2931} 2930}
2932 2931
2933void CalendarView::goNext() 2932void CalendarView::goNext()
2934{ 2933{
2935 mNavigator->selectNext(); 2934 mNavigator->selectNext();
2936} 2935}
2937 2936
2938void CalendarView::goPrevious() 2937void CalendarView::goPrevious()
2939{ 2938{
2940 mNavigator->selectPrevious(); 2939 mNavigator->selectPrevious();
2941} 2940}
2942void CalendarView::goNextMonth() 2941void CalendarView::goNextMonth()
2943{ 2942{
2944 mNavigator->selectNextMonth(); 2943 mNavigator->selectNextMonth();
2945} 2944}
2946 2945
2947void CalendarView::goPreviousMonth() 2946void CalendarView::goPreviousMonth()
2948{ 2947{
2949 mNavigator->selectPreviousMonth(); 2948 mNavigator->selectPreviousMonth();
2950} 2949}
2951 2950
2952void CalendarView::updateConfig() 2951void CalendarView::updateConfig()
2953{ 2952{
2954 if ( KOPrefs::instance()->mUseAppColors ) 2953 if ( KOPrefs::instance()->mUseAppColors )
2955 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 2954 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
2956 emit configChanged(); 2955 emit configChanged();
2957 mTodoList->updateConfig(); 2956 mTodoList->updateConfig();
2958 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); 2957 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont);
2959 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2958 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2960 // To make the "fill window" configurations work 2959 // To make the "fill window" configurations work
2961 //mViewManager->raiseCurrentView(); 2960 //mViewManager->raiseCurrentView();
2962} 2961}
2963 2962
2964 2963
2965void CalendarView::eventChanged(Event *event) 2964void CalendarView::eventChanged(Event *event)
2966{ 2965{
2967 changeEventDisplay(event,KOGlobals::EVENTEDITED); 2966 changeEventDisplay(event,KOGlobals::EVENTEDITED);
2968 //updateUnmanagedViews(); 2967 //updateUnmanagedViews();
2969} 2968}
2970 2969
2971void CalendarView::eventAdded(Event *event) 2970void CalendarView::eventAdded(Event *event)
2972{ 2971{
2973 changeEventDisplay(event,KOGlobals::EVENTADDED); 2972 changeEventDisplay(event,KOGlobals::EVENTADDED);
2974} 2973}
2975 2974
2976void CalendarView::eventToBeDeleted(Event *) 2975void CalendarView::eventToBeDeleted(Event *)
2977{ 2976{
2978 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 2977 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
2979} 2978}
2980 2979
2981void CalendarView::eventDeleted() 2980void CalendarView::eventDeleted()
2982{ 2981{
2983 changeEventDisplay(0,KOGlobals::EVENTDELETED); 2982 changeEventDisplay(0,KOGlobals::EVENTDELETED);
2984} 2983}
2985void CalendarView::changeTodoDisplay(Todo *which, int action) 2984void CalendarView::changeTodoDisplay(Todo *which, int action)
2986{ 2985{
2987 changeIncidenceDisplay((Incidence *)which, action); 2986 changeIncidenceDisplay((Incidence *)which, action);
2988 mDateNavigator->updateView(); //LR 2987 mDateNavigator->updateView(); //LR
2989 //mDialogManager->updateSearchDialog(); 2988 //mDialogManager->updateSearchDialog();
2990 2989
2991 if (which) { 2990 if (which) {
2992 mViewManager->updateWNview(); 2991 mViewManager->updateWNview();
2993 //mTodoList->updateView(); 2992 //mTodoList->updateView();
2994 } 2993 }
2995 2994
2996} 2995}
2997 2996
2998void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 2997void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
2999{ 2998{
3000 updateUnmanagedViews(); 2999 updateUnmanagedViews();
3001 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 3000 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
3002 if ( action == KOGlobals::EVENTDELETED ) { //delete 3001 if ( action == KOGlobals::EVENTDELETED ) { //delete
3003 mCalendar->checkAlarmForIncidence( 0, true ); 3002 mCalendar->checkAlarmForIncidence( 0, true );
3004 if ( mEventViewerDialog ) 3003 if ( mEventViewerDialog )
3005 mEventViewerDialog->hide(); 3004 mEventViewerDialog->hide();
3006 } 3005 }
3007 else 3006 else
3008 mCalendar->checkAlarmForIncidence( which , false ); 3007 mCalendar->checkAlarmForIncidence( which , false );
3009} 3008}
3010 3009
3011// most of the changeEventDisplays() right now just call the view's 3010// most of the changeEventDisplays() right now just call the view's
3012// total update mode, but they SHOULD be recoded to be more refresh-efficient. 3011// total update mode, but they SHOULD be recoded to be more refresh-efficient.
3013void CalendarView::changeEventDisplay(Event *which, int action) 3012void CalendarView::changeEventDisplay(Event *which, int action)
3014{ 3013{
3015 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 3014 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
3016 changeIncidenceDisplay((Incidence *)which, action); 3015 changeIncidenceDisplay((Incidence *)which, action);
3017 static bool clearallviews = false; 3016 static bool clearallviews = false;
3018 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 3017 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
3019 if ( clearallviews ) { 3018 if ( clearallviews ) {
3020 clearAllViews(); 3019 clearAllViews();
3021 clearallviews = false; 3020 clearallviews = false;
3022 } 3021 }
3023 return; 3022 return;
3024 } 3023 }
3025 clearallviews = true; 3024 clearallviews = true;
3026 mDateNavigator->updateView(); 3025 mDateNavigator->updateView();
3027 //mDialogManager->updateSearchDialog(); 3026 //mDialogManager->updateSearchDialog();
3028 if (which) { 3027 if (which) {
3029 // If there is an event view visible update the display 3028 // If there is an event view visible update the display
3030 mViewManager->currentView()->changeEventDisplay(which,action); 3029 mViewManager->currentView()->changeEventDisplay(which,action);
3031 // TODO: check, if update needed 3030 // TODO: check, if update needed
3032 // if (which->getTodoStatus()) { 3031 // if (which->getTodoStatus()) {
3033 mTodoList->updateView(); 3032 mTodoList->updateView();
3034 if ( action != KOGlobals::EVENTDELETED ) { 3033 if ( action != KOGlobals::EVENTDELETED ) {
3035 mConflictingEvent = which ; 3034 mConflictingEvent = which ;
3036 int time = 1000; 3035 int time = 1000;
3037#ifdef DESKTOP_VERSION 3036#ifdef DESKTOP_VERSION
3038 time = 500; 3037 time = 500;
3039#endif 3038#endif
3040 QTimer::singleShot( time, this, SLOT ( checkConflictForEvent() ) ); 3039 QTimer::singleShot( time, this, SLOT ( checkConflictForEvent() ) );
3041 } 3040 }
3042 // } 3041 // }
3043 } else { 3042 } else {
3044 mViewManager->currentView()->updateView(); 3043 mViewManager->currentView()->updateView();
3045 } 3044 }
3046} 3045}
3047void CalendarView::checkConflictForEvent() 3046void CalendarView::checkConflictForEvent()
3048{ 3047{
3049 3048
3050 if (!KOPrefs::instance()->mConfirm) 3049 if (!KOPrefs::instance()->mConfirm)
3051 return; 3050 return;
3052 if ( ! mConflictingEvent ) return; 3051 if ( ! mConflictingEvent ) return;
3053 Event * conflictingEvent = mConflictingEvent; 3052 Event * conflictingEvent = mConflictingEvent;
3054 mConflictingEvent = 0; 3053 mConflictingEvent = 0;
3055 QDateTime current = QDateTime::currentDateTime(); 3054 QDateTime current = QDateTime::currentDateTime();
3056 if ( ! conflictingEvent->matchTime( &current, 0 ) ) { 3055 if ( ! conflictingEvent->matchTime( &current, 0 ) ) {
3057 return; 3056 return;
3058 } 3057 }
3059 QPtrList<Event> testlist = mCalendar->events(); 3058 QPtrList<Event> testlist = mCalendar->events();
3060 Event * test = testlist.first(); 3059 Event * test = testlist.first();
3061 QDateTime conflict; 3060 QDateTime conflict;
3062 QDateTime retVal; 3061 QDateTime retVal;
3063 bool found = false; 3062 bool found = false;
3064 Event * cE = 0; 3063 Event * cE = 0;
3065 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); 3064 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
3066 while ( test ) { 3065 while ( test ) {
3067 qApp->processEvents(); 3066 qApp->processEvents();
3068 bool skip = false; 3067 bool skip = false;
3069 if ( found ) 3068 if ( found )
3070 skip = !test->matchTime( &current, &conflict ); 3069 skip = !test->matchTime( &current, &conflict );
3071 else 3070 else
3072 skip = !test->matchTime( &current, 0 ); 3071 skip = !test->matchTime( &current, 0 );
3073 if ( !skip && !test->doesFloat() ) { 3072 if ( !skip && !test->doesFloat() ) {
3074 if ( conflictingEvent->isOverlapping ( test, &retVal, &current ) ) { 3073 if ( conflictingEvent->isOverlapping ( test, &retVal, &current ) ) {
3075 if ( ! found ) { 3074 if ( ! found ) {
3076 conflict = retVal; 3075 conflict = retVal;
3077 cE = test; 3076 cE = test;
3078 } else { 3077 } else {
3079 if ( retVal < conflict ) { 3078 if ( retVal < conflict ) {
3080 conflict = retVal; 3079 conflict = retVal;
3081 cE = test; 3080 cE = test;
3082 } 3081 }
3083 } 3082 }
3084 found = true; 3083 found = true;
3085 } 3084 }
3086 } 3085 }
3087 test = testlist.next(); 3086 test = testlist.next();
3088 } 3087 }
3089 topLevelWidget()->setCaption( i18n("KO/Pi") ); 3088 topLevelWidget()->setCaption( i18n("KO/Pi") );
3090 if ( found ) { 3089 if ( found ) {
3091 QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( conflictingEvent->summary(),0 ) ).arg( KGlobal::formatMessage ( cE->summary(),0 )).arg(KGlobal::locale()->formatDate(conflict.date()) ) ; 3090 QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( conflictingEvent->summary(),0 ) ).arg( KGlobal::formatMessage ( cE->summary(),0 )).arg(KGlobal::locale()->formatDate(conflict.date()) ) ;
3092 qApp->processEvents(); 3091 qApp->processEvents();
3093 int km = KMessageBox::warningContinueCancel(this,mess, 3092 int km = KMessageBox::warningContinueCancel(this,mess,
3094 i18n("KO/Pi Conflict delected"),i18n("Show date"),i18n("No problem!")); 3093 i18n("KO/Pi Conflict delected"),i18n("Show date"),i18n("No problem!"));
3095 if ( km != KMessageBox::Continue ) { 3094 if ( km != KMessageBox::Continue ) {
3096 return; 3095 return;
3097 } 3096 }
3098 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 3097 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
3099 mViewManager->showDayView(); 3098 mViewManager->showDayView();
3100 mNavigator->slotDaySelect( conflict.date() ); 3099 mNavigator->slotDaySelect( conflict.date() );
3101 int hour = conflict.time().hour(); 3100 int hour = conflict.time().hour();
3102 mViewManager->agendaView()->setStartHour( hour ); 3101 mViewManager->agendaView()->setStartHour( hour );
3103 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( conflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) ); 3102 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( conflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) );
3104 } else 3103 } else
3105 topLevelWidget()->setCaption( i18n("No conflict found") ); 3104 topLevelWidget()->setCaption( i18n("No conflict found") );
3106 return; 3105 return;
3107 3106
3108} 3107}
3109 3108
3110void CalendarView::updateTodoViews() 3109void CalendarView::updateTodoViews()
3111{ 3110{
3112 mTodoList->updateView(); 3111 mTodoList->updateView();
3113 mViewManager->currentView()->updateView(); 3112 mViewManager->currentView()->updateView();
3114 3113
3115} 3114}
3116 3115
3117 3116
3118 3117
3119void CalendarView::clearAllViews() 3118void CalendarView::clearAllViews()
3120{ 3119{
3121 mTodoList->clearList(); 3120 mTodoList->clearList();
3122 mViewManager->clearAllViews(); 3121 mViewManager->clearAllViews();
3123 SearchDialog * sd = mDialogManager->getSearchDialog(); 3122 SearchDialog * sd = mDialogManager->getSearchDialog();
3124 if ( sd ) { 3123 if ( sd ) {
3125 KOListView* kol = sd->listview(); 3124 KOListView* kol = sd->listview();
3126 if ( kol ) 3125 if ( kol )
3127 kol->clearList(); 3126 kol->clearList();
3128 } 3127 }
3129} 3128}
3130void CalendarView::updateView() 3129void CalendarView::updateView()
3131{ 3130{
3132 static bool clearallviews = false; 3131 static bool clearallviews = false;
3133 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 3132 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
3134 if ( clearallviews ) { 3133 if ( clearallviews ) {
3135 clearAllViews(); 3134 clearAllViews();
3136 clearallviews = false; 3135 clearallviews = false;
3137 } 3136 }
3138 return; 3137 return;
3139 } 3138 }
3140 clearallviews = true; 3139 clearallviews = true;
3141 DateList tmpList = mNavigator->selectedDates(); 3140 DateList tmpList = mNavigator->selectedDates();
3142 3141
3143 if ( KOPrefs::instance()->mHideNonStartedTodos ) 3142 if ( KOPrefs::instance()->mHideNonStartedTodos )
3144 mTodoList->updateView(); 3143 mTodoList->updateView();
3145 // We assume that the navigator only selects consecutive days. 3144 // We assume that the navigator only selects consecutive days.
3146 updateView( tmpList.first(), tmpList.last() ); 3145 updateView( tmpList.first(), tmpList.last() );
3147} 3146}
3148 3147
3149void CalendarView::updateUnmanagedViews() 3148void CalendarView::updateUnmanagedViews()
3150{ 3149{
3151 mDateNavigator->updateDayMatrix(); 3150 mDateNavigator->updateDayMatrix();
3152} 3151}
3153 3152
3154int CalendarView::msgItemDelete(const QString name) 3153int CalendarView::msgItemDelete(const QString name)
3155{ 3154{
3156 return KMessageBox::warningContinueCancel(this,name +"\n\n"+ 3155 return KMessageBox::warningContinueCancel(this,name +"\n\n"+
3157 i18n("This item will be\npermanently deleted."), 3156 i18n("This item will be\npermanently deleted."),
3158 i18n("KO/Pi Confirmation"),i18n("Delete")); 3157 i18n("KO/Pi Confirmation"),i18n("Delete"));
3159} 3158}
3160 3159
3161 3160
3162void CalendarView::edit_cut() 3161void CalendarView::edit_cut()
3163{ 3162{
3164 Event *anEvent=0; 3163 Event *anEvent=0;
3165 3164
3166 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3165 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3167 3166
3168 if (mViewManager->currentView()->isEventView()) { 3167 if (mViewManager->currentView()->isEventView()) {
3169 if ( incidence && incidence->typeID() == eventID ) { 3168 if ( incidence && incidence->typeID() == eventID ) {
3170 anEvent = static_cast<Event *>(incidence); 3169 anEvent = static_cast<Event *>(incidence);
3171 } 3170 }
3172 } 3171 }
3173 3172
3174 if (!anEvent) { 3173 if (!anEvent) {
3175 KNotifyClient::beep(); 3174 KNotifyClient::beep();
3176 return; 3175 return;
3177 } 3176 }
3178 DndFactory factory( mCalendar ); 3177 DndFactory factory( mCalendar );
3179 factory.cutIncidence(anEvent); 3178 factory.cutIncidence(anEvent);
3180 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 3179 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
3181} 3180}
3182 3181
3183void CalendarView::edit_copy() 3182void CalendarView::edit_copy()
3184{ 3183{
3185 Event *anEvent=0; 3184 Event *anEvent=0;
3186 3185
3187 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3186 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3188 3187
3189 if (mViewManager->currentView()->isEventView()) { 3188 if (mViewManager->currentView()->isEventView()) {
3190 if ( incidence && incidence->typeID() == eventID ) { 3189 if ( incidence && incidence->typeID() == eventID ) {
3191 anEvent = static_cast<Event *>(incidence); 3190 anEvent = static_cast<Event *>(incidence);
3192 } 3191 }
3193 } 3192 }
3194 3193
3195 if (!anEvent) { 3194 if (!anEvent) {
3196 KNotifyClient::beep(); 3195 KNotifyClient::beep();
3197 return; 3196 return;
3198 } 3197 }
3199 DndFactory factory( mCalendar ); 3198 DndFactory factory( mCalendar );
3200 factory.copyIncidence(anEvent); 3199 factory.copyIncidence(anEvent);
3201} 3200}
3202 3201
3203void CalendarView::edit_paste() 3202void CalendarView::edit_paste()
3204{ 3203{
3205 QDate date = mNavigator->selectedDates().first(); 3204 QDate date = mNavigator->selectedDates().first();
3206 3205
3207 DndFactory factory( mCalendar ); 3206 DndFactory factory( mCalendar );
3208 Event *pastedEvent = (Event *)factory.pasteIncidence( date ); 3207 Event *pastedEvent = (Event *)factory.pasteIncidence( date );
3209 3208
3210 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 3209 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
3211} 3210}
3212void CalendarView::edit_global_options() 3211void CalendarView::edit_global_options()
3213{ 3212{
3214 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId; 3213 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId;
3215 emit save(); 3214 emit save();
3216 emit saveStopTimer(); 3215 emit saveStopTimer();
3217 mDialogManager->showGlobalOptionsDialog(); 3216 mDialogManager->showGlobalOptionsDialog();
3218 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) { 3217 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) {
3219 emit saveStopTimer(); 3218 emit saveStopTimer();
3220 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"), 3219 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"),
3221 i18n("Timezone settings"),i18n("Reload"))) { 3220 i18n("Timezone settings"),i18n("Reload"))) {
3222 qDebug("KO: TZ reload cancelled "); 3221 qDebug("KO: TZ reload cancelled ");
3223 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3222 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
3224 return; 3223 return;
3225 } 3224 }
3226 qDebug("KO: Timezone change "); 3225 qDebug("KO: Timezone change ");
3227 loadCalendars(); 3226 loadCalendars();
3228 setModified(true); 3227 setModified(true);
3229 } 3228 }
3230 else 3229 else
3231 qDebug("KO: No tz change "); 3230 qDebug("KO: No tz change ");
3232} 3231}
3233void CalendarView::edit_options() 3232void CalendarView::edit_options()
3234{ 3233{
3235 mDialogManager->showOptionsDialog(); 3234 mDialogManager->showOptionsDialog();
3236} 3235}
3237 3236
3238 3237
3239void CalendarView::slotSelectPickerDate( QDate d) 3238void CalendarView::slotSelectPickerDate( QDate d)
3240{ 3239{
3241 mDateFrame->hide(); 3240 mDateFrame->hide();
3242 if ( mDatePickerMode == 1 ) { 3241 if ( mDatePickerMode == 1 ) {
3243 mNavigator->slotDaySelect( d ); 3242 mNavigator->slotDaySelect( d );
3244 } else if ( mDatePickerMode == 2 ) { 3243 } else if ( mDatePickerMode == 2 ) {
3245 if ( mMoveIncidence->typeID() == todoID ) { 3244 if ( mMoveIncidence->typeID() == todoID ) {
3246 Todo * to = (Todo *) mMoveIncidence; 3245 Todo * to = (Todo *) mMoveIncidence;
3247 QTime tim; 3246 QTime tim;
3248 int len = 0; 3247 int len = 0;
3249 if ( to->hasStartDate() && to->hasDueDate() ) 3248 if ( to->hasStartDate() && to->hasDueDate() )
3250 len = to->dtStart().secsTo( to->dtDue()); 3249 len = to->dtStart().secsTo( to->dtDue());
3251 if ( to->hasDueDate() ) 3250 if ( to->hasDueDate() )
3252 tim = to->dtDue().time(); 3251 tim = to->dtDue().time();
3253 else { 3252 else {
3254 tim = QTime ( 0,0,0 ); 3253 tim = QTime ( 0,0,0 );
3255 to->setFloats( true ); 3254 to->setFloats( true );
3256 to->setHasDueDate( true ); 3255 to->setHasDueDate( true );
3257 } 3256 }
3258 QDateTime dt ( d,tim ); 3257 QDateTime dt ( d,tim );
3259 to->setDtDue( dt ); 3258 to->setDtDue( dt );
3260 3259
3261 if ( to->hasStartDate() ) { 3260 if ( to->hasStartDate() ) {
3262 if ( len>0 ) 3261 if ( len>0 )
3263 to->setDtStart(to->dtDue().addSecs( -len )); 3262 to->setDtStart(to->dtDue().addSecs( -len ));
3264 else 3263 else
3265 if (to->dtStart() > to->dtDue() ) 3264 if (to->dtStart() > to->dtDue() )
3266 to->setDtStart(to->dtDue().addDays( -3 )); 3265 to->setDtStart(to->dtDue().addDays( -3 ));
3267 } 3266 }
3268 3267
3269 todoChanged( to ); 3268 todoChanged( to );
3270 } else if ( mMoveIncidence->typeID() == eventID ) { 3269 } else if ( mMoveIncidence->typeID() == eventID ) {
3271 if ( mMoveIncidence->doesRecur() ) { 3270 if ( mMoveIncidence->doesRecur() ) {
3272#if 0 3271#if 0
3273 // PENDING implement this 3272 // PENDING implement this
3274 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate ); 3273 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate );
3275 mCalendar()->addIncidence( newInc ); 3274 mCalendar()->addIncidence( newInc );
3276 if ( mMoveIncidence->typeID() == todoID ) 3275 if ( mMoveIncidence->typeID() == todoID )
3277 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED ); 3276 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED );
3278 else 3277 else
3279 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED); 3278 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED);
3280 mMoveIncidence = newInc; 3279 mMoveIncidence = newInc;
3281 3280
3282#endif 3281#endif
3283 } 3282 }
3284 QTime tim = mMoveIncidence->dtStart().time(); 3283 QTime tim = mMoveIncidence->dtStart().time();
3285 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 3284 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
3286 QDateTime dt ( d,tim ); 3285 QDateTime dt ( d,tim );
3287 mMoveIncidence->setDtStart( dt ); 3286 mMoveIncidence->setDtStart( dt );
3288 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 3287 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
3289 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 3288 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
3290 } else if ( mMoveIncidence->typeID() == journalID ) { 3289 } else if ( mMoveIncidence->typeID() == journalID ) {
3291 QTime tim = mMoveIncidence->dtStart().time(); 3290 QTime tim = mMoveIncidence->dtStart().time();
3292 QDateTime dt ( d,tim ); 3291 QDateTime dt ( d,tim );
3293 mMoveIncidence->setDtStart( dt ); 3292 mMoveIncidence->setDtStart( dt );
3294 updateView(); 3293 updateView();
3295 } 3294 }
3296 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 3295 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
3297 } 3296 }
3298} 3297}
3299 3298
3300void CalendarView::removeCategories() 3299void CalendarView::removeCategories()
3301{ 3300{
3302 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 3301 QPtrList<Incidence> incList = mCalendar->rawIncidences();
3303 QStringList catList = KOPrefs::instance()->mCustomCategories; 3302 QStringList catList = KOPrefs::instance()->mCustomCategories;
3304 QStringList catIncList; 3303 QStringList catIncList;
3305 QStringList newCatList; 3304 QStringList newCatList;
3306 Incidence* inc = incList.first(); 3305 Incidence* inc = incList.first();
3307 uint i; 3306 uint i;
3308 while ( inc ) { 3307 while ( inc ) {
3309 newCatList.clear(); 3308 newCatList.clear();
3310 catIncList = inc->categories() ; 3309 catIncList = inc->categories() ;
3311 for( i = 0; i< catIncList.count(); ++i ) { 3310 for( i = 0; i< catIncList.count(); ++i ) {
3312 if ( catList.contains (catIncList[i])) 3311 if ( catList.contains (catIncList[i]))
3313 newCatList.append( catIncList[i] ); 3312 newCatList.append( catIncList[i] );
3314 } 3313 }
3315 newCatList.sort(); 3314 newCatList.sort();
3316 inc->setCategories( newCatList.join(",") ); 3315 inc->setCategories( newCatList.join(",") );
3317 inc = incList.next(); 3316 inc = incList.next();
3318 } 3317 }
3319} 3318}
3320 3319
3321int CalendarView::addCategories() 3320int CalendarView::addCategories()
3322{ 3321{
3323 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 3322 QPtrList<Incidence> incList = mCalendar->rawIncidences();
3324 QStringList catList = KOPrefs::instance()->mCustomCategories; 3323 QStringList catList = KOPrefs::instance()->mCustomCategories;
3325 QStringList catIncList; 3324 QStringList catIncList;
3326 Incidence* inc = incList.first(); 3325 Incidence* inc = incList.first();
3327 uint i; 3326 uint i;
3328 int count = 0; 3327 int count = 0;
3329 while ( inc ) { 3328 while ( inc ) {
3330 catIncList = inc->categories() ; 3329 catIncList = inc->categories() ;
3331 for( i = 0; i< catIncList.count(); ++i ) { 3330 for( i = 0; i< catIncList.count(); ++i ) {
3332 if ( !catList.contains (catIncList[i])) { 3331 if ( !catList.contains (catIncList[i])) {
3333 catList.append( catIncList[i] ); 3332 catList.append( catIncList[i] );
3334 //qDebug("add cat %s ", catIncList[i].latin1()); 3333 //qDebug("add cat %s ", catIncList[i].latin1());
3335 ++count; 3334 ++count;
3336 } 3335 }
3337 } 3336 }
3338 inc = incList.next(); 3337 inc = incList.next();
3339 } 3338 }
3340 catList.sort(); 3339 catList.sort();
3341 KOPrefs::instance()->mCustomCategories = catList; 3340 KOPrefs::instance()->mCustomCategories = catList;
3342 return count; 3341 return count;
3343} 3342}
3344 3343
3345void CalendarView::editCategories() 3344void CalendarView::editCategories()
3346{ 3345{
3347 qDebug("CalendarView::editCategories() "); 3346 qDebug("CalendarView::editCategories() ");
3348 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this ); 3347 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this );
3349 ced.exec(); 3348 ced.exec();
3350} 3349}
3351void CalendarView::manageCategories() 3350void CalendarView::manageCategories()
3352{ 3351{
3353 KOCatPrefs* cp = new KOCatPrefs(); 3352 KOCatPrefs* cp = new KOCatPrefs();
3354 cp->show(); 3353 cp->show();
3355 int w =cp->sizeHint().width() ; 3354 int w =cp->sizeHint().width() ;
3356 int h = cp->sizeHint().height() ; 3355 int h = cp->sizeHint().height() ;
3357 int dw = QApplication::desktop()->width(); 3356 int dw = QApplication::desktop()->width();
3358 int dh = QApplication::desktop()->height(); 3357 int dh = QApplication::desktop()->height();
3359 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 3358 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
3360 if ( !cp->exec() ) { 3359 if ( !cp->exec() ) {
3361 delete cp; 3360 delete cp;
3362 return; 3361 return;
3363 } 3362 }
3364 int count = 0; 3363 int count = 0;
3365 if ( cp->addCat() ) { 3364 if ( cp->addCat() ) {
3366 count = addCategories(); 3365 count = addCategories();
3367 if ( count ) { 3366 if ( count ) {
3368 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); 3367 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! "));
3369 writeSettings(); 3368 writeSettings();
3370 } else 3369 } else
3371 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! ")); 3370 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! "));
3372 } else { 3371 } else {
3373 removeCategories(); 3372 removeCategories();
3374 updateView(); 3373 updateView();
3375 } 3374 }
3376 delete cp; 3375 delete cp;
3377} 3376}
3378 3377
3379void CalendarView::beamIncidence(Incidence * Inc) 3378void CalendarView::beamIncidence(Incidence * Inc)
3380{ 3379{
3381 QPtrList<Incidence> delSel ; 3380 QPtrList<Incidence> delSel ;
3382 delSel.append(Inc); 3381 delSel.append(Inc);
3383 beamIncidenceList( delSel ); 3382 beamIncidenceList( delSel );
3384} 3383}
3385void CalendarView::beamCalendar() 3384void CalendarView::beamCalendar()
3386{ 3385{
3387 QPtrList<Incidence> delSel = mCalendar->rawIncidences(); 3386 QPtrList<Incidence> delSel = mCalendar->rawIncidences();
3388 //qDebug("beamCalendar() "); 3387 //qDebug("beamCalendar() ");
3389 beamIncidenceList( delSel ); 3388 beamIncidenceList( delSel );
3390} 3389}
3391void CalendarView::beamFilteredCalendar() 3390void CalendarView::beamFilteredCalendar()
3392{ 3391{
3393 QPtrList<Incidence> delSel = mCalendar->incidences(); 3392 QPtrList<Incidence> delSel = mCalendar->incidences();
3394 //qDebug("beamFilteredCalendar() "); 3393 //qDebug("beamFilteredCalendar() ");
3395 beamIncidenceList( delSel ); 3394 beamIncidenceList( delSel );
3396} 3395}
3397void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) 3396void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
3398{ 3397{
3399 3398
3400 KOBeamPrefs beamDialog; 3399 KOBeamPrefs beamDialog;
3401 if ( beamDialog.exec () == QDialog::Rejected ) 3400 if ( beamDialog.exec () == QDialog::Rejected )
3402 return; 3401 return;
3403#ifdef DESKTOP_VERSION 3402#ifdef DESKTOP_VERSION
3404 QString fn = locateLocal( "tmp", "kopibeamfile" ); 3403 QString fn = locateLocal( "tmp", "kopibeamfile" );
3405#else 3404#else
3406 QString fn = "/tmp/kopibeamfile"; 3405 QString fn = "/tmp/kopibeamfile";
3407#endif 3406#endif
3408 QString mes; 3407 QString mes;
3409 bool createbup = true; 3408 bool createbup = true;
3410 if ( createbup ) { 3409 if ( createbup ) {
3411 QString description = "\n"; 3410 QString description = "\n";
3412 CalendarLocal* cal = new CalendarLocal(); 3411 CalendarLocal* cal = new CalendarLocal();
3413 if ( beamDialog.beamLocal() ) 3412 if ( beamDialog.beamLocal() )
3414 cal->setLocalTime(); 3413 cal->setLocalTime();
3415 else 3414 else
3416 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3415 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
3417 Incidence *incidence = delSel.first(); 3416 Incidence *incidence = delSel.first();
3418 bool addText = false; 3417 bool addText = false;
3419 if ( delSel.count() < 10 ) 3418 if ( delSel.count() < 10 )
3420 addText = true; 3419 addText = true;
3421 else { 3420 else {
3422 description.sprintf(i18n(" %d items?"),delSel.count() ); 3421 description.sprintf(i18n(" %d items?"),delSel.count() );
3423 } 3422 }
3424 while ( incidence ) { 3423 while ( incidence ) {
3425 Incidence *in = incidence->clone(); 3424 Incidence *in = incidence->clone();
3426 if ( ! in->summary().isEmpty() ) { 3425 if ( ! in->summary().isEmpty() ) {
3427 in->setDescription(""); 3426 in->setDescription("");
3428 } else { 3427 } else {
3429 in->setSummary( in->description().left(20)); 3428 in->setSummary( in->description().left(20));
3430 in->setDescription(""); 3429 in->setDescription("");
3431 } 3430 }
3432 if ( addText ) 3431 if ( addText )
3433 description += in->summary() + "\n"; 3432 description += in->summary() + "\n";
3434 cal->addIncidence( in ); 3433 cal->addIncidence( in );
3435 incidence = delSel.next(); 3434 incidence = delSel.next();
3436 } 3435 }
3437 if ( beamDialog.beamVcal() ) { 3436 if ( beamDialog.beamVcal() ) {
3438 fn += ".vcs"; 3437 fn += ".vcs";
3439 FileStorage storage( cal, fn, new VCalFormat ); 3438 FileStorage storage( cal, fn, new VCalFormat );
3440 storage.save(); 3439 storage.save();
3441 } else { 3440 } else {
3442 fn += ".ics"; 3441 fn += ".ics";
3443 FileStorage storage( cal, fn, new ICalFormat( ) ); 3442 FileStorage storage( cal, fn, new ICalFormat( ) );
3444 storage.save(); 3443 storage.save();
3445 } 3444 }
3446 delete cal; 3445 delete cal;
3447 mes = i18n("KO/Pi: Ready for beaming"); 3446 mes = i18n("KO/Pi: Ready for beaming");
3448 topLevelWidget()->setCaption(mes); 3447 topLevelWidget()->setCaption(mes);
3449 KApplication::convert2latin1( fn ); 3448 KApplication::convert2latin1( fn );
3450#ifndef DESKTOP_VERSION 3449#ifndef DESKTOP_VERSION
3451 Ir *ir = new Ir( this ); 3450 Ir *ir = new Ir( this );
3452 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 3451 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
3453 ir->send( fn, description, "text/x-vCalendar" ); 3452 ir->send( fn, description, "text/x-vCalendar" );
3454#endif 3453#endif
3455 } 3454 }
3456} 3455}
3457 3456
3458#ifndef DESKTOP_VERSION 3457#ifndef DESKTOP_VERSION
3459void CalendarView::beamDone( Ir *ir ) 3458void CalendarView::beamDone( Ir *ir )
3460{ 3459{
3461 delete ir; 3460 delete ir;
3462 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") ); 3461 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") );
3463 topLevelWidget()->raise(); 3462 topLevelWidget()->raise();
3464} 3463}
3465#else 3464#else
3466void CalendarView::beamDone( Ir *){;} 3465void CalendarView::beamDone( Ir *){;}
3467#endif 3466#endif
3468void CalendarView::moveIncidence(Incidence * inc ) 3467void CalendarView::moveIncidence(Incidence * inc )
3469{ 3468{
3470 if ( !inc ) return; 3469 if ( !inc ) return;
3471 showDatePickerPopup(); 3470 showDatePickerPopup();
3472 mDatePickerMode = 2; 3471 mDatePickerMode = 2;
3473 mMoveIncidence = inc ; 3472 mMoveIncidence = inc ;
3474 QDate da; 3473 QDate da;
3475 if ( mMoveIncidence->typeID() == todoID ) { 3474 if ( mMoveIncidence->typeID() == todoID ) {
3476 Todo * to = (Todo *) mMoveIncidence; 3475 Todo * to = (Todo *) mMoveIncidence;
3477 if ( to->hasDueDate() ) 3476 if ( to->hasDueDate() )
3478 da = to->dtDue().date(); 3477 da = to->dtDue().date();
3479 else 3478 else
3480 da = QDate::currentDate(); 3479 da = QDate::currentDate();
3481 } else { 3480 } else {
3482 da = mMoveIncidence->dtStart().date(); 3481 da = mMoveIncidence->dtStart().date();
3483 } 3482 }
3484 //PENDING set date for recurring incidence to date of recurrence 3483 //PENDING set date for recurring incidence to date of recurrence
3485 //mMoveIncidenceOldDate; 3484 //mMoveIncidenceOldDate;
3486 mDatePicker->setDate( da ); 3485 mDatePicker->setDate( da );
3487} 3486}
3488void CalendarView::showDatePickerPopup() 3487void CalendarView::showDatePickerPopup()
3489{ 3488{
3490 if ( mDateFrame->isVisible() ) 3489 if ( mDateFrame->isVisible() )
3491 mDateFrame->hide(); 3490 mDateFrame->hide();
3492 else { 3491 else {
3493 int offX = 0, offY = 0; 3492 int offX = 0, offY = 0;
3494#ifdef DESKTOP_VERSION 3493#ifdef DESKTOP_VERSION
3495 int w =mDatePicker->sizeHint().width() ; 3494 int w =mDatePicker->sizeHint().width() ;
3496 int h = mDatePicker->sizeHint().height() ; 3495 int h = mDatePicker->sizeHint().height() ;
3497 int dw = topLevelWidget()->width(); 3496 int dw = topLevelWidget()->width();
3498 int dh = topLevelWidget()->height(); 3497 int dh = topLevelWidget()->height();
3499 offX = topLevelWidget()->x(); 3498 offX = topLevelWidget()->x();
3500 offY = topLevelWidget()->y(); 3499 offY = topLevelWidget()->y();
3501#else 3500#else
3502 int w =mDatePicker->sizeHint().width() ; 3501 int w =mDatePicker->sizeHint().width() ;
3503 int h = mDatePicker->sizeHint().height() ; 3502 int h = mDatePicker->sizeHint().height() ;
3504 int dw = QApplication::desktop()->width(); 3503 int dw = QApplication::desktop()->width();
3505 int dh = QApplication::desktop()->height(); 3504 int dh = QApplication::desktop()->height();
3506#endif 3505#endif
3507 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h ); 3506 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h );
3508 mDateFrame->show(); 3507 mDateFrame->show();
3509 } 3508 }
3510} 3509}
3511void CalendarView::showDatePicker( ) 3510void CalendarView::showDatePicker( )
3512{ 3511{
3513 showDatePickerPopup(); 3512 showDatePickerPopup();
3514 mDatePickerMode = 1; 3513 mDatePickerMode = 1;
3515 mDatePicker->setDate( mNavigator->selectedDates().first() ); 3514 mDatePicker->setDate( mNavigator->selectedDates().first() );
3516} 3515}
3517 3516
3518void CalendarView::showEventEditor() 3517void CalendarView::showEventEditor()
3519{ 3518{
3520#ifdef DESKTOP_VERSION 3519#ifdef DESKTOP_VERSION
3521 int x,y,w,h; 3520 int x,y,w,h;
3522 x = mEventEditor->geometry().x(); 3521 x = mEventEditor->geometry().x();
3523 y = mEventEditor->geometry().y(); 3522 y = mEventEditor->geometry().y();
3524 w = mEventEditor->width(); 3523 w = mEventEditor->width();
3525 h = mEventEditor->height(); 3524 h = mEventEditor->height();
3526 mEventEditor->show(); 3525 mEventEditor->show();
3527 mEventEditor->setGeometry(x,y,w,h); 3526 mEventEditor->setGeometry(x,y,w,h);
3528#else 3527#else
3529 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) { 3528 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) {
3530 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3529 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3531 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() ); 3530 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() );
3532 qApp->processEvents(); 3531 qApp->processEvents();
3533 delete mEventEditor; 3532 delete mEventEditor;
3534 mEventEditor = mDialogManager->getEventEditor(); 3533 mEventEditor = mDialogManager->getEventEditor();
3535 topLevelWidget()->setCaption( i18n("") ); 3534 topLevelWidget()->setCaption( i18n("") );
3536 } 3535 }
3537 mEventEditor->showMaximized(); 3536 mEventEditor->showMaximized();
3538#endif 3537#endif
3539} 3538}
3540void CalendarView::showTodoEditor() 3539void CalendarView::showTodoEditor()
3541{ 3540{
3542#ifdef DESKTOP_VERSION 3541#ifdef DESKTOP_VERSION
3543 int x,y,w,h; 3542 int x,y,w,h;
3544 x = mTodoEditor->geometry().x(); 3543 x = mTodoEditor->geometry().x();
3545 y = mTodoEditor->geometry().y(); 3544 y = mTodoEditor->geometry().y();
3546 w = mTodoEditor->width(); 3545 w = mTodoEditor->width();
3547 h = mTodoEditor->height(); 3546 h = mTodoEditor->height();
3548 mTodoEditor->show(); 3547 mTodoEditor->show();
3549 mTodoEditor->setGeometry(x,y,w,h); 3548 mTodoEditor->setGeometry(x,y,w,h);
3550#else 3549#else
3551 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) { 3550 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) {
3552 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3551 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3553 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() ); 3552 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() );
3554 qApp->processEvents(); 3553 qApp->processEvents();
3555 delete mTodoEditor; 3554 delete mTodoEditor;
3556 mTodoEditor = mDialogManager->getTodoEditor(); 3555 mTodoEditor = mDialogManager->getTodoEditor();
3557 topLevelWidget()->setCaption( i18n("") ); 3556 topLevelWidget()->setCaption( i18n("") );
3558 } 3557 }
3559 mTodoEditor->showMaximized(); 3558 mTodoEditor->showMaximized();
3560#endif 3559#endif
3561} 3560}
3562 3561
3563void CalendarView::cloneIncidence() 3562void CalendarView::cloneIncidence()
3564{ 3563{
3565 Incidence *incidence = currentSelection(); 3564 Incidence *incidence = currentSelection();
3566 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3565 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3567 if ( incidence ) { 3566 if ( incidence ) {
3568 cloneIncidence(incidence); 3567 cloneIncidence(incidence);
3569 } 3568 }
3570} 3569}
3571void CalendarView::moveIncidence() 3570void CalendarView::moveIncidence()
3572{ 3571{
3573 Incidence *incidence = currentSelection(); 3572 Incidence *incidence = currentSelection();
3574 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3573 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3575 if ( incidence ) { 3574 if ( incidence ) {
3576 moveIncidence(incidence); 3575 moveIncidence(incidence);
3577 } 3576 }
3578} 3577}
3579void CalendarView::beamIncidence() 3578void CalendarView::beamIncidence()
3580{ 3579{
3581 Incidence *incidence = currentSelection(); 3580 Incidence *incidence = currentSelection();
3582 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3581 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3583 if ( incidence ) { 3582 if ( incidence ) {
3584 beamIncidence(incidence); 3583 beamIncidence(incidence);
3585 } 3584 }
3586} 3585}
3587void CalendarView::toggleCancelIncidence() 3586void CalendarView::toggleCancelIncidence()
3588{ 3587{
3589 Incidence *incidence = currentSelection(); 3588 Incidence *incidence = currentSelection();
3590 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3589 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3591 if ( incidence ) { 3590 if ( incidence ) {
3592 cancelIncidence(incidence); 3591 cancelIncidence(incidence);
3593 } 3592 }
3594} 3593}
3595 3594
3596 3595
3597void CalendarView::cancelIncidence(Incidence * inc ) 3596void CalendarView::cancelIncidence(Incidence * inc )
3598{ 3597{
3599 inc->setCancelled( ! inc->cancelled() ); 3598 inc->setCancelled( ! inc->cancelled() );
3600 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 3599 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
3601 updateView(); 3600 updateView();
3602} 3601}
3603void CalendarView::cloneIncidence(Incidence * orgInc ) 3602void CalendarView::cloneIncidence(Incidence * orgInc )
3604{ 3603{
3605 Incidence * newInc = orgInc->clone(); 3604 Incidence * newInc = orgInc->clone();
3606 newInc->recreate(); 3605 newInc->recreate();
3607 3606
3608 if ( newInc->typeID() == todoID ) { 3607 if ( newInc->typeID() == todoID ) {
3609 Todo* t = (Todo*) newInc; 3608 Todo* t = (Todo*) newInc;
3610 bool cloneSub = false; 3609 bool cloneSub = false;
3611 if ( orgInc->relations().count() ) { 3610 if ( orgInc->relations().count() ) {
3612 int result = KMessageBox::warningYesNoCancel(this, 3611 int result = KMessageBox::warningYesNoCancel(this,
3613 i18n("The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?").arg( KGlobal::formatMessage ( newInc->summary(),0 ) ), 3612 i18n("The todo\n%1\nwill be cloned!\nIt has subtodos!\nDo you want to clone\nall subtodos as well?").arg( KGlobal::formatMessage ( newInc->summary(),0 ) ),
3614 i18n("Todo has subtodos"), 3613 i18n("Todo has subtodos"),
3615 i18n("Yes"), 3614 i18n("Yes"),
3616 i18n("No")); 3615 i18n("No"));
3617 3616
3618 if ( result == KMessageBox::Cancel ) { 3617 if ( result == KMessageBox::Cancel ) {
3619 delete t; 3618 delete t;
3620 return; 3619 return;
3621 } 3620 }
3622 if (result == KMessageBox::Yes) cloneSub = true; 3621 if (result == KMessageBox::Yes) cloneSub = true;
3623 } 3622 }
3624 showTodoEditor(); 3623 showTodoEditor();
3625 mTodoEditor->editTodo( t ); 3624 mTodoEditor->editTodo( t );
3626 if ( mTodoEditor->exec() ) { 3625 if ( mTodoEditor->exec() ) {
3627 if ( cloneSub ) { 3626 if ( cloneSub ) {
3628 orgInc->cloneRelations( t ); 3627 orgInc->cloneRelations( t );
3629 mCalendar->addIncidenceBranch( t ); 3628 mCalendar->addIncidenceBranch( t );
3630 updateView(); 3629 updateView();
3631 3630
3632 } else { 3631 } else {
3633 mCalendar->addTodo( t ); 3632 mCalendar->addTodo( t );
3634 updateView(); 3633 updateView();
3635 } 3634 }
3636 } else { 3635 } else {
3637 delete t; 3636 delete t;
3638 } 3637 }
3639 } 3638 }
3640 else if ( newInc->typeID() == eventID ) { 3639 else if ( newInc->typeID() == eventID ) {
3641 Event* e = (Event*) newInc; 3640 Event* e = (Event*) newInc;
3642 showEventEditor(); 3641 showEventEditor();
3643 mEventEditor->editEvent( e ); 3642 mEventEditor->editEvent( e );
3644 if ( mEventEditor->exec() ) { 3643 if ( mEventEditor->exec() ) {
3645 mCalendar->addEvent( e ); 3644 mCalendar->addEvent( e );
3646 updateView(); 3645 updateView();
3647 } else { 3646 } else {
3648 delete e; 3647 delete e;
3649 } 3648 }
3650 } else if ( newInc->typeID() == journalID ) { 3649 } else if ( newInc->typeID() == journalID ) {
3651 mCalendar->addJournal( (Journal*) newInc ); 3650 mCalendar->addJournal( (Journal*) newInc );
3652 editJournal( (Journal*) newInc ); 3651 editJournal( (Journal*) newInc );
3653 } 3652 }
3654 setActiveWindow(); 3653 setActiveWindow();
3655} 3654}
3656 3655
3657void CalendarView::newEvent() 3656void CalendarView::newEvent()
3658{ 3657{
3659 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 3658 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
3660 KOAgendaView *aView = mViewManager->agendaView(); 3659 KOAgendaView *aView = mViewManager->agendaView();
3661 if (aView) { 3660 if (aView) {
3662 if (aView->selectionStart().isValid()) { 3661 if (aView->selectionStart().isValid()) {
3663 if (aView->selectedIsAllDay()) { 3662 if (aView->selectedIsAllDay()) {
3664 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 3663 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
3665 } else { 3664 } else {
3666 newEvent(aView->selectionStart(),aView->selectionEnd()); 3665 newEvent(aView->selectionStart(),aView->selectionEnd());
3667 } 3666 }
3668 return; 3667 return;
3669 } 3668 }
3670 } 3669 }
3671 3670
3672 QDate date = mNavigator->selectedDates().first(); 3671 QDate date = mNavigator->selectedDates().first();
3673#if 0 3672#if 0
3674 QDateTime current = QDateTime::currentDateTime(); 3673 QDateTime current = QDateTime::currentDateTime();
3675 if ( date <= current.date() ) { 3674 if ( date <= current.date() ) {
3676 int hour = current.time().hour() +1; 3675 int hour = current.time().hour() +1;
3677 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 3676 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
3678 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3677 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3679 } else 3678 } else
3680#endif 3679#endif
3681 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 3680 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
3682 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 3681 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
3683 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3682 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3684} 3683}
3685 3684
3686void CalendarView::newEvent(QDateTime fh) 3685void CalendarView::newEvent(QDateTime fh)
3687{ 3686{
3688 newEvent(fh, 3687 newEvent(fh,
3689 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 3688 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
3690} 3689}
3691 3690
3692void CalendarView::newEvent(QDate dt) 3691void CalendarView::newEvent(QDate dt)
3693{ 3692{
3694 newEvent(QDateTime(dt, QTime(0,0,0)), 3693 newEvent(QDateTime(dt, QTime(0,0,0)),
3695 QDateTime(dt, QTime(0,0,0)), true); 3694 QDateTime(dt, QTime(0,0,0)), true);
3696} 3695}
3697void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint) 3696void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint)
3698{ 3697{
3699 newEvent(fromHint, toHint, false); 3698 newEvent(fromHint, toHint, false);
3700} 3699}
3701void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 3700void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
3702{ 3701{
3703 3702
3704 showEventEditor(); 3703 showEventEditor();
3705 mEventEditor->newEvent(fromHint,toHint,allDay); 3704 mEventEditor->newEvent(fromHint,toHint,allDay);
3706 if ( mFilterView->filtersEnabled() ) { 3705 if ( mFilterView->filtersEnabled() ) {
3707 CalFilter *filter = mFilterView->selectedFilter(); 3706 CalFilter *filter = mFilterView->selectedFilter();
3708 if (filter && filter->showCategories()) { 3707 if (filter && filter->showCategories()) {
3709 mEventEditor->setCategories(filter->categoryList().join(",") ); 3708 mEventEditor->setCategories(filter->categoryList().join(",") );
3710 } 3709 }
3711 if ( filter ) 3710 if ( filter )
3712 mEventEditor->setSecrecy( filter->getSecrecy() ); 3711 mEventEditor->setSecrecy( filter->getSecrecy() );
3713 } 3712 }
3714 mEventEditor->exec(); 3713 mEventEditor->exec();
3715 setActiveWindow(); 3714 setActiveWindow();
3716} 3715}
3717void CalendarView::todoAdded(Todo * t) 3716void CalendarView::todoAdded(Todo * t)
3718{ 3717{
3719 3718
3720 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 3719 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
3721 updateTodoViews(); 3720 updateTodoViews();
3722} 3721}
3723void CalendarView::todoChanged(Todo * t) 3722void CalendarView::todoChanged(Todo * t)
3724{ 3723{
3725 emit todoModified( t, 4 ); 3724 emit todoModified( t, 4 );
3726 // updateTodoViews(); 3725 // updateTodoViews();
3727} 3726}
3728void CalendarView::todoToBeDeleted(Todo *) 3727void CalendarView::todoToBeDeleted(Todo *)
3729{ 3728{
3730 //qDebug("todoToBeDeleted(Todo *) "); 3729 //qDebug("todoToBeDeleted(Todo *) ");
3731 updateTodoViews(); 3730 updateTodoViews();
3732} 3731}
3733void CalendarView::todoDeleted() 3732void CalendarView::todoDeleted()
3734{ 3733{
3735 //qDebug(" todoDeleted()"); 3734 //qDebug(" todoDeleted()");
3736 updateTodoViews(); 3735 updateTodoViews();
3737} 3736}
3738 3737
3739 3738
3740void CalendarView::newTodoDateTime( QDateTime dt, bool allday ) 3739void CalendarView::newTodoDateTime( QDateTime dt, bool allday )
3741{ 3740{
3742 showTodoEditor(); 3741 showTodoEditor();
3743 mTodoEditor->newTodo(dt,0,allday); 3742 mTodoEditor->newTodo(dt,0,allday);
3744 if ( mFilterView->filtersEnabled() ) { 3743 if ( mFilterView->filtersEnabled() ) {
3745 CalFilter *filter = mFilterView->selectedFilter(); 3744 CalFilter *filter = mFilterView->selectedFilter();
3746 if (filter && filter->showCategories()) { 3745 if (filter && filter->showCategories()) {
3747 mTodoEditor->setCategories(filter->categoryList().join(",") ); 3746 mTodoEditor->setCategories(filter->categoryList().join(",") );
3748 } 3747 }
3749 if ( filter ) 3748 if ( filter )
3750 mTodoEditor->setSecrecy( filter->getSecrecy() ); 3749 mTodoEditor->setSecrecy( filter->getSecrecy() );
3751 } 3750 }
3752 mTodoEditor->exec(); 3751 mTodoEditor->exec();
3753 setActiveWindow(); 3752 setActiveWindow();
3754} 3753}
3755 3754
3756void CalendarView::newTodo() 3755void CalendarView::newTodo()
3757{ 3756{
3758 newTodoDateTime( QDateTime(),true ); 3757 newTodoDateTime( QDateTime(),true );
3759} 3758}
3760 3759
3761void CalendarView::newSubTodo() 3760void CalendarView::newSubTodo()
3762{ 3761{
3763 Todo *todo = selectedTodo(); 3762 Todo *todo = selectedTodo();
3764 if ( todo ) newSubTodo( todo ); 3763 if ( todo ) newSubTodo( todo );
3765} 3764}
3766 3765
3767void CalendarView::newSubTodo(Todo *parentEvent) 3766void CalendarView::newSubTodo(Todo *parentEvent)
3768{ 3767{
3769 3768
3770 showTodoEditor(); 3769 showTodoEditor();
3771 mTodoEditor->newTodo(QDateTime(),parentEvent,true); 3770 mTodoEditor->newTodo(QDateTime(),parentEvent,true);
3772 mTodoEditor->exec(); 3771 mTodoEditor->exec();
3773 setActiveWindow(); 3772 setActiveWindow();
3774} 3773}
3775 3774
3776void CalendarView::newFloatingEvent() 3775void CalendarView::newFloatingEvent()
3777{ 3776{
3778 DateList tmpList = mNavigator->selectedDates(); 3777 DateList tmpList = mNavigator->selectedDates();
3779 QDate date = tmpList.first(); 3778 QDate date = tmpList.first();
3780 3779
3781 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 3780 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
3782 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 3781 QDateTime( date, QTime( 12, 0, 0 ) ), true );
3783} 3782}
3784 3783
3785 3784
3786void CalendarView::editEvent( Event *event ) 3785void CalendarView::editEvent( Event *event )
3787{ 3786{
3788 3787
3789 if ( !event ) return; 3788 if ( !event ) return;
3790 if ( event->isReadOnly() ) { 3789 if ( event->isReadOnly() ) {
3791 showEvent( event ); 3790 showEvent( event );
3792 return; 3791 return;
3793 } 3792 }
3794 showEventEditor(); 3793 showEventEditor();
3795 mEventEditor->editEvent( event , mFlagEditDescription); 3794 mEventEditor->editEvent( event , mFlagEditDescription);
3796 mEventEditor->exec(); 3795 mEventEditor->exec();
3797 setActiveWindow(); 3796 setActiveWindow();
3798 3797
3799} 3798}
3800void CalendarView::editJournal( Journal *jour ) 3799void CalendarView::editJournal( Journal *jour )
3801{ 3800{
3802 if ( !jour ) return; 3801 if ( !jour ) return;
3803 mDialogManager->hideSearchDialog(); 3802 mDialogManager->hideSearchDialog();
3804 mViewManager->showJournalView(); 3803 mViewManager->showJournalView();
3805 mNavigator->slotDaySelect( jour->dtStart().date() ); 3804 mNavigator->slotDaySelect( jour->dtStart().date() );
3806} 3805}
3807void CalendarView::editTodo( Todo *todo ) 3806void CalendarView::editTodo( Todo *todo )
3808{ 3807{
3809 if ( !todo ) return; 3808 if ( !todo ) return;
3810 3809
3811 if ( todo->isReadOnly() ) { 3810 if ( todo->isReadOnly() ) {
3812 showTodo( todo ); 3811 showTodo( todo );
3813 return; 3812 return;
3814 } 3813 }
3815 showTodoEditor(); 3814 showTodoEditor();
3816 mTodoEditor->editTodo( todo ,mFlagEditDescription); 3815 mTodoEditor->editTodo( todo ,mFlagEditDescription);
3817 mTodoEditor->exec(); 3816 mTodoEditor->exec();
3818 setActiveWindow(); 3817 setActiveWindow();
3819 3818
3820} 3819}
3821 3820
3822KOEventViewerDialog* CalendarView::getEventViewerDialog() 3821KOEventViewerDialog* CalendarView::getEventViewerDialog()
3823{ 3822{
3824 if ( !mEventViewerDialog ) { 3823 if ( !mEventViewerDialog ) {
3825 mEventViewerDialog = new KOEventViewerDialog(0); 3824 mEventViewerDialog = new KOEventViewerDialog(0);
3826 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 3825 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
3827 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 3826 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
3828 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 3827 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
3829 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 3828 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
3830 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 3829 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
3831 viewManager(), SLOT( showAgendaView( bool ) ) ); 3830 viewManager(), SLOT( showAgendaView( bool ) ) );
3832 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()), 3831 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()),
3833 this, SLOT( slotViewerClosed() ) ); 3832 this, SLOT( slotViewerClosed() ) );
3834 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ), 3833 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ),
3835 this, SLOT( todoChanged(Todo *) ) ); 3834 this, SLOT( todoChanged(Todo *) ) );
3836 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 3835 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
3837 mEventViewerDialog->resize( 640, 480 ); 3836 mEventViewerDialog->resize( 640, 480 );
3838 3837
3839 } 3838 }
3840 return mEventViewerDialog; 3839 return mEventViewerDialog;
3841} 3840}
3842void CalendarView::showEvent(Event *event) 3841void CalendarView::showEvent(Event *event)
3843{ 3842{
3844 getEventViewerDialog()->setEvent(event); 3843 getEventViewerDialog()->setEvent(event);
3845 getEventViewerDialog()->showMe(); 3844 getEventViewerDialog()->showMe();
3846} 3845}
3847 3846
3848void CalendarView::showTodo(Todo *event) 3847void CalendarView::showTodo(Todo *event)
3849{ 3848{
3850 getEventViewerDialog()->setTodo(event); 3849 getEventViewerDialog()->setTodo(event);
3851 getEventViewerDialog()->showMe(); 3850 getEventViewerDialog()->showMe();
3852} 3851}
3853void CalendarView::showJournal( Journal *jour ) 3852void CalendarView::showJournal( Journal *jour )
3854{ 3853{
3855 getEventViewerDialog()->setJournal(jour); 3854 getEventViewerDialog()->setJournal(jour);
3856 getEventViewerDialog()->showMe(); 3855 getEventViewerDialog()->showMe();
3857 3856
3858} 3857}
3859// void CalendarView::todoModified (Todo *event, int changed) 3858// void CalendarView::todoModified (Todo *event, int changed)
3860// { 3859// {
3861// // if (mDialogList.find (event) != mDialogList.end ()) { 3860// // if (mDialogList.find (event) != mDialogList.end ()) {
3862// // kdDebug() << "Todo modified and open" << endl; 3861// // kdDebug() << "Todo modified and open" << endl;
3863// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; 3862// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event];
3864// // temp->modified (changed); 3863// // temp->modified (changed);
3865 3864
3866// // } 3865// // }
3867 3866
3868// mViewManager->updateView(); 3867// mViewManager->updateView();
3869// } 3868// }
3870 3869
3871void CalendarView::appointment_show() 3870void CalendarView::appointment_show()
3872{ 3871{
3873 Event *anEvent = 0; 3872 Event *anEvent = 0;
3874 3873
3875 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3874 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3876 3875
3877 if (mViewManager->currentView()->isEventView()) { 3876 if (mViewManager->currentView()->isEventView()) {
3878 if ( incidence && incidence->typeID() == eventID ) { 3877 if ( incidence && incidence->typeID() == eventID ) {
3879 anEvent = static_cast<Event *>(incidence); 3878 anEvent = static_cast<Event *>(incidence);
3880 } 3879 }
3881 } 3880 }
3882 3881
3883 if (!anEvent) { 3882 if (!anEvent) {
3884 KNotifyClient::beep(); 3883 KNotifyClient::beep();
3885 return; 3884 return;
3886 } 3885 }
3887 3886
3888 showEvent(anEvent); 3887 showEvent(anEvent);
3889} 3888}
3890 3889
3891void CalendarView::appointment_edit() 3890void CalendarView::appointment_edit()
3892{ 3891{
3893 Event *anEvent = 0; 3892 Event *anEvent = 0;
3894 3893
3895 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3894 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3896 3895
3897 if (mViewManager->currentView()->isEventView()) { 3896 if (mViewManager->currentView()->isEventView()) {
3898 if ( incidence && incidence->typeID() == eventID ) { 3897 if ( incidence && incidence->typeID() == eventID ) {
3899 anEvent = static_cast<Event *>(incidence); 3898 anEvent = static_cast<Event *>(incidence);
3900 } 3899 }
3901 } 3900 }
3902 3901
3903 if (!anEvent) { 3902 if (!anEvent) {
3904 KNotifyClient::beep(); 3903 KNotifyClient::beep();
3905 return; 3904 return;
3906 } 3905 }
3907 3906
3908 editEvent(anEvent); 3907 editEvent(anEvent);
3909} 3908}
3910 3909
3911void CalendarView::appointment_delete() 3910void CalendarView::appointment_delete()
3912{ 3911{
3913 Event *anEvent = 0; 3912 Event *anEvent = 0;
3914 3913
3915 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3914 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3916 3915
3917 if (mViewManager->currentView()->isEventView()) { 3916 if (mViewManager->currentView()->isEventView()) {
3918 if ( incidence && incidence->typeID() == eventID ) { 3917 if ( incidence && incidence->typeID() == eventID ) {
3919 anEvent = static_cast<Event *>(incidence); 3918 anEvent = static_cast<Event *>(incidence);
3920 } 3919 }
3921 } 3920 }
3922 3921
3923 if (!anEvent) { 3922 if (!anEvent) {
3924 KNotifyClient::beep(); 3923 KNotifyClient::beep();
3925 return; 3924 return;
3926 } 3925 }
3927 3926
3928 deleteEvent(anEvent); 3927 deleteEvent(anEvent);
3929} 3928}
3930 3929
3931void CalendarView::todo_resub( Todo * parent, Todo * sub ) 3930void CalendarView::todo_resub( Todo * parent, Todo * sub )
3932{ 3931{
3933 if (!sub) return; 3932 if (!sub) return;
3934 if ( sub->relatedTo() == parent ) 3933 if ( sub->relatedTo() == parent )
3935 return; 3934 return;
3936 sub->setRelatedTo(parent); 3935 sub->setRelatedTo(parent);
3937 sub->updated(); 3936 sub->updated();
3938 setModified(true); 3937 setModified(true);
3939 updateView(); 3938 updateView();
3940} 3939}
3941void CalendarView::todo_unsub(Todo *anTodo ) 3940void CalendarView::todo_unsub(Todo *anTodo )
3942{ 3941{
3943 todo_resub( 0, anTodo ); 3942 todo_resub( 0, anTodo );
3944} 3943}
3945 3944
3946void CalendarView::deleteTodo(Todo *todo) 3945void CalendarView::deleteTodo(Todo *todo)
3947{ 3946{
3948 if (!todo) { 3947 if (!todo) {
3949 KNotifyClient::beep(); 3948 KNotifyClient::beep();
3950 return; 3949 return;
3951 } 3950 }
3952 if (KOPrefs::instance()->mConfirm) { 3951 if (KOPrefs::instance()->mConfirm) {
3953 QString text = KGlobal::formatMessage ( todo->summary(),0 ); 3952 QString text = KGlobal::formatMessage ( todo->summary(),0 );
3954 if (!todo->relations().isEmpty()) { 3953 if (!todo->relations().isEmpty()) {
3955 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!"); 3954 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!");
3956 3955
3957 } 3956 }
3958 switch (msgItemDelete(i18n("Todo:") +"\n"+text)) { 3957 switch (msgItemDelete(i18n("Todo:") +"\n"+text)) {
3959 case KMessageBox::Continue: // OK 3958 case KMessageBox::Continue: // OK
3960 bool deleteT = false; 3959 bool deleteT = false;
3961 if (!todo->relations().isEmpty()) { 3960 if (!todo->relations().isEmpty()) {
3962 deleteT = removeCompletedSubTodos( todo ); 3961 deleteT = removeCompletedSubTodos( todo );
3963 } 3962 }
3964 // deleteT == true: todo already deleted in removeCompletedSubTodos 3963 // deleteT == true: todo already deleted in removeCompletedSubTodos
3965 if ( !deleteT ) { 3964 if ( !deleteT ) {
3966 checkExternalId( todo ); 3965 checkExternalId( todo );
3967 calendar()->deleteTodo(todo); 3966 calendar()->deleteTodo(todo);
3968 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 3967 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
3969 updateView(); 3968 updateView();
3970 } 3969 }
3971 break; 3970 break;
3972 } // switch 3971 } // switch
3973 } else { 3972 } else {
3974 checkExternalId( todo ); 3973 checkExternalId( todo );
3975 mCalendar->deleteTodo(todo); 3974 mCalendar->deleteTodo(todo);
3976 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 3975 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
3977 updateView(); 3976 updateView();
3978 } 3977 }
3979 3978
3980 emit updateSearchDialog(); 3979 emit updateSearchDialog();
3981} 3980}
3982void CalendarView::deleteJournal(Journal *jour) 3981void CalendarView::deleteJournal(Journal *jour)
3983{ 3982{
3984 if (!jour) { 3983 if (!jour) {
3985 KNotifyClient::beep(); 3984 KNotifyClient::beep();
3986 return; 3985 return;
3987 } 3986 }
3988 if (KOPrefs::instance()->mConfirm) { 3987 if (KOPrefs::instance()->mConfirm) {
3989 3988
3990 QString des; 3989 QString des;
3991 if ( !jour->summary().isEmpty() ) { 3990 if ( !jour->summary().isEmpty() ) {
3992 des = jour->summary(); 3991 des = jour->summary();
3993 } else { 3992 } else {
3994 des = jour->description().left(30); 3993 des = jour->description().left(30);
3995 des = des.simplifyWhiteSpace (); 3994 des = des.simplifyWhiteSpace ();
3996 des.replace (QRegExp ("\\n"),"" ); 3995 des.replace (QRegExp ("\\n"),"" );
3997 des.replace (QRegExp ("\\r"),"" ); 3996 des.replace (QRegExp ("\\r"),"" );
3998 } 3997 }
3999 switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) { 3998 switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) {
4000 case KMessageBox::Continue: // OK 3999 case KMessageBox::Continue: // OK
4001 calendar()->deleteJournal(jour); 4000 calendar()->deleteJournal(jour);
4002 updateView(); 4001 updateView();
4003 break; 4002 break;
4004 } // switch 4003 } // switch
4005 } else { 4004 } else {
4006 calendar()->deleteJournal(jour);; 4005 calendar()->deleteJournal(jour);;
4007 updateView(); 4006 updateView();
4008 } 4007 }
4009 emit updateSearchDialog(); 4008 emit updateSearchDialog();
4010} 4009}
4011 4010
4012void CalendarView::deleteEvent(Event *anEvent) 4011void CalendarView::deleteEvent(Event *anEvent)
4013{ 4012{
4014 if (!anEvent) { 4013 if (!anEvent) {
4015 KNotifyClient::beep(); 4014 KNotifyClient::beep();
4016 return; 4015 return;
4017 } 4016 }
4018 4017
4019 if (anEvent->doesRecur()) { 4018 if (anEvent->doesRecur()) {
4020 QDate itemDate = mViewManager->currentSelectionDate(); 4019 QDate itemDate = mViewManager->currentSelectionDate();
4021 int km; 4020 int km;
4022 if (!itemDate.isValid()) { 4021 if (!itemDate.isValid()) {
4023 //kdDebug() << "Date Not Valid" << endl; 4022 //kdDebug() << "Date Not Valid" << endl;
4024 if (KOPrefs::instance()->mConfirm) { 4023 if (KOPrefs::instance()->mConfirm) {
4025 km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4024 km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
4026 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), 4025 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
4027 i18n("KO/Pi Confirmation"),i18n("Delete All")); 4026 i18n("KO/Pi Confirmation"),i18n("Delete All"));
4028 if ( km == KMessageBox::Continue ) 4027 if ( km == KMessageBox::Continue )
4029 km = KMessageBox::No; // No = all below 4028 km = KMessageBox::No; // No = all below
4030 } else 4029 } else
4031 km = KMessageBox::No; 4030 km = KMessageBox::No;
4032 } else { 4031 } else {
4033 km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4032 km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
4034 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ 4033 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
4035 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), 4034 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
4036 i18n("KO/Pi Confirmation"),i18n("Current"), 4035 i18n("KO/Pi Confirmation"),i18n("Current"),
4037 i18n("All")); 4036 i18n("All"));
4038 } 4037 }
4039 switch(km) { 4038 switch(km) {
4040 4039
4041 case KMessageBox::No: // Continue // all 4040 case KMessageBox::No: // Continue // all
4042 //qDebug("KMessageBox::No "); 4041 //qDebug("KMessageBox::No ");
4043 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4042 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
4044 schedule(Scheduler::Cancel,anEvent); 4043 schedule(Scheduler::Cancel,anEvent);
4045 4044
4046 checkExternalId( anEvent); 4045 checkExternalId( anEvent);
4047 mCalendar->deleteEvent(anEvent); 4046 mCalendar->deleteEvent(anEvent);
4048 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); 4047 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED);
4049 break; 4048 break;
4050 4049
4051 // Disabled because it does not work 4050 // Disabled because it does not work
4052 //#if 0 4051 //#if 0
4053 case KMessageBox::Yes: // just this one 4052 case KMessageBox::Yes: // just this one
4054 //QDate qd = mNavigator->selectedDates().first(); 4053 //QDate qd = mNavigator->selectedDates().first();
4055 //if (!qd.isValid()) { 4054 //if (!qd.isValid()) {
4056 // kdDebug() << "no date selected, or invalid date" << endl; 4055 // kdDebug() << "no date selected, or invalid date" << endl;
4057 // KNotifyClient::beep(); 4056 // KNotifyClient::beep();
4058 // return; 4057 // return;
4059 //} 4058 //}
4060 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); 4059 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1);
4061 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { 4060 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) {
4062 anEvent->addExDate(itemDate); 4061 anEvent->addExDate(itemDate);
4063 int duration = anEvent->recurrence()->duration(); 4062 int duration = anEvent->recurrence()->duration();
4064 if ( duration > 0 ) { 4063 if ( duration > 0 ) {
4065 anEvent->recurrence()->setDuration( duration - 1 ); 4064 anEvent->recurrence()->setDuration( duration - 1 );
4066 } 4065 }
4067 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); 4066 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED);
4068 } 4067 }
4069 break; 4068 break;
4070 //#endif 4069 //#endif
4071 } // switch 4070 } // switch
4072 } else { 4071 } else {
4073 if (KOPrefs::instance()->mConfirm) { 4072 if (KOPrefs::instance()->mConfirm) {
4074 switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4073 switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
4075 i18n("\nAre you sure you want\nto delete this event?"), 4074 i18n("\nAre you sure you want\nto delete this event?"),
4076 i18n("KO/Pi Confirmation"),i18n("Delete"))) { 4075 i18n("KO/Pi Confirmation"),i18n("Delete"))) {
4077 case KMessageBox::Continue: // OK 4076 case KMessageBox::Continue: // OK
4078 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4077 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
4079 schedule(Scheduler::Cancel,anEvent); 4078 schedule(Scheduler::Cancel,anEvent);
4080 checkExternalId( anEvent); 4079 checkExternalId( anEvent);
4081 mCalendar->deleteEvent(anEvent); 4080 mCalendar->deleteEvent(anEvent);
4082 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 4081 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
4083 break; 4082 break;
4084 } // switch 4083 } // switch
4085 } else { 4084 } else {
4086 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4085 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)