summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp20
-rw-r--r--korganizer/calendarview.h1
-rw-r--r--korganizer/journalentry.cpp22
-rw-r--r--korganizer/journalentry.h3
-rw-r--r--korganizer/mainwindow.cpp2
-rw-r--r--libkcal/calendar.cpp3
-rw-r--r--libkcal/calendar.h1
-rw-r--r--libkcal/calendarlocal.cpp75
-rw-r--r--libkcal/calendarlocal.h3
9 files changed, 127 insertions, 3 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 940ea91..ccacc52 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1198,634 +1198,643 @@ int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , b
1198 // We may have that lastSync > remoteMod AND lastSync > localMod 1198 // We may have that lastSync > remoteMod AND lastSync > localMod
1199 // BUT remoteMod != localMod 1199 // BUT remoteMod != localMod
1200 1200
1201 1201
1202 if ( full && mode < SYNC_PREF_NEWEST ) 1202 if ( full && mode < SYNC_PREF_NEWEST )
1203 mode = SYNC_PREF_ASK; 1203 mode = SYNC_PREF_ASK;
1204 1204
1205 switch( mode ) { 1205 switch( mode ) {
1206 case SYNC_PREF_LOCAL: 1206 case SYNC_PREF_LOCAL:
1207 if ( lastSync > remoteMod ) 1207 if ( lastSync > remoteMod )
1208 return 1; 1208 return 1;
1209 if ( lastSync > localMod ) 1209 if ( lastSync > localMod )
1210 return 2; 1210 return 2;
1211 return 1; 1211 return 1;
1212 break; 1212 break;
1213 case SYNC_PREF_REMOTE: 1213 case SYNC_PREF_REMOTE:
1214 if ( lastSync > localMod ) 1214 if ( lastSync > localMod )
1215 return 2; 1215 return 2;
1216 if ( lastSync > remoteMod ) 1216 if ( lastSync > remoteMod )
1217 return 1; 1217 return 1;
1218 return 2; 1218 return 2;
1219 break; 1219 break;
1220 case SYNC_PREF_NEWEST: 1220 case SYNC_PREF_NEWEST:
1221 if ( localMod >= remoteMod ) 1221 if ( localMod >= remoteMod )
1222 return 1; 1222 return 1;
1223 else 1223 else
1224 return 2; 1224 return 2;
1225 break; 1225 break;
1226 case SYNC_PREF_ASK: 1226 case SYNC_PREF_ASK:
1227 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1227 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1228 if ( lastSync > remoteMod && lastSync > localMod) 1228 if ( lastSync > remoteMod && lastSync > localMod)
1229 return 0; 1229 return 0;
1230 if ( lastSync > remoteMod ) 1230 if ( lastSync > remoteMod )
1231 return 1; 1231 return 1;
1232 if ( lastSync > localMod ) 1232 if ( lastSync > localMod )
1233 return 2; 1233 return 2;
1234 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1234 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1235 localIsNew = localMod >= remoteMod; 1235 localIsNew = localMod >= remoteMod;
1236 if ( localIsNew ) 1236 if ( localIsNew )
1237 getEventViewerDialog()->setColorMode( 1 ); 1237 getEventViewerDialog()->setColorMode( 1 );
1238 else 1238 else
1239 getEventViewerDialog()->setColorMode( 2 ); 1239 getEventViewerDialog()->setColorMode( 2 );
1240 getEventViewerDialog()->setIncidence(local); 1240 getEventViewerDialog()->setIncidence(local);
1241 if ( localIsNew ) 1241 if ( localIsNew )
1242 getEventViewerDialog()->setColorMode( 2 ); 1242 getEventViewerDialog()->setColorMode( 2 );
1243 else 1243 else
1244 getEventViewerDialog()->setColorMode( 1 ); 1244 getEventViewerDialog()->setColorMode( 1 );
1245 getEventViewerDialog()->addIncidence(remote); 1245 getEventViewerDialog()->addIncidence(remote);
1246 getEventViewerDialog()->setColorMode( 0 ); 1246 getEventViewerDialog()->setColorMode( 0 );
1247 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 1247 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
1248 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 1248 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
1249 getEventViewerDialog()->showMe(); 1249 getEventViewerDialog()->showMe();
1250 result = getEventViewerDialog()->executeS( localIsNew ); 1250 result = getEventViewerDialog()->executeS( localIsNew );
1251 return result; 1251 return result;
1252 1252
1253 break; 1253 break;
1254 case SYNC_PREF_FORCE_LOCAL: 1254 case SYNC_PREF_FORCE_LOCAL:
1255 return 1; 1255 return 1;
1256 break; 1256 break;
1257 case SYNC_PREF_FORCE_REMOTE: 1257 case SYNC_PREF_FORCE_REMOTE:
1258 return 2; 1258 return 2;
1259 break; 1259 break;
1260 1260
1261 default: 1261 default:
1262 // SYNC_PREF_TAKE_BOTH not implemented 1262 // SYNC_PREF_TAKE_BOTH not implemented
1263 break; 1263 break;
1264 } 1264 }
1265 return 0; 1265 return 0;
1266} 1266}
1267Event* CalendarView::getLastSyncEvent() 1267Event* CalendarView::getLastSyncEvent()
1268{ 1268{
1269 Event* lse; 1269 Event* lse;
1270 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 1270 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
1271 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 1271 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
1272 if (!lse) { 1272 if (!lse) {
1273 lse = new Event(); 1273 lse = new Event();
1274 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 1274 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
1275 QString sum = ""; 1275 QString sum = "";
1276 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 1276 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
1277 sum = "E: "; 1277 sum = "E: ";
1278 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 1278 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
1279 lse->setDtStart( mLastCalendarSync ); 1279 lse->setDtStart( mLastCalendarSync );
1280 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1280 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1281 lse->setCategories( i18n("SyncEvent") ); 1281 lse->setCategories( i18n("SyncEvent") );
1282 lse->setReadOnly( true ); 1282 lse->setReadOnly( true );
1283 mCalendar->addEvent( lse ); 1283 mCalendar->addEvent( lse );
1284 } 1284 }
1285 1285
1286 return lse; 1286 return lse;
1287 1287
1288} 1288}
1289 1289
1290// we check, if the to delete event has a id for a profile 1290// we check, if the to delete event has a id for a profile
1291// if yes, we set this id in the profile to delete 1291// if yes, we set this id in the profile to delete
1292void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 1292void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
1293{ 1293{
1294 if ( lastSync.count() == 0 ) { 1294 if ( lastSync.count() == 0 ) {
1295 //qDebug(" lastSync.count() == 0"); 1295 //qDebug(" lastSync.count() == 0");
1296 return; 1296 return;
1297 } 1297 }
1298 if ( toDelete->typeID() == journalID ) 1298 if ( toDelete->typeID() == journalID )
1299 return; 1299 return;
1300 1300
1301 Event* eve = lastSync.first(); 1301 Event* eve = lastSync.first();
1302 1302
1303 while ( eve ) { 1303 while ( eve ) {
1304 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 1304 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
1305 if ( !id.isEmpty() ) { 1305 if ( !id.isEmpty() ) {
1306 QString des = eve->description(); 1306 QString des = eve->description();
1307 QString pref = "e"; 1307 QString pref = "e";
1308 if ( toDelete->typeID() == todoID ) 1308 if ( toDelete->typeID() == todoID )
1309 pref = "t"; 1309 pref = "t";
1310 des += pref+ id + ","; 1310 des += pref+ id + ",";
1311 eve->setReadOnly( false ); 1311 eve->setReadOnly( false );
1312 eve->setDescription( des ); 1312 eve->setDescription( des );
1313 //qDebug("setdes %s ", des.latin1()); 1313 //qDebug("setdes %s ", des.latin1());
1314 eve->setReadOnly( true ); 1314 eve->setReadOnly( true );
1315 } 1315 }
1316 eve = lastSync.next(); 1316 eve = lastSync.next();
1317 } 1317 }
1318 1318
1319} 1319}
1320void CalendarView::checkExternalId( Incidence * inc ) 1320void CalendarView::checkExternalId( Incidence * inc )
1321{ 1321{
1322 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 1322 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
1323 checkExternSyncEvent( lastSync, inc ); 1323 checkExternSyncEvent( lastSync, inc );
1324 1324
1325} 1325}
1326bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 1326bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
1327{ 1327{
1328 bool syncOK = true; 1328 bool syncOK = true;
1329 int addedEvent = 0; 1329 int addedEvent = 0;
1330 int addedEventR = 0; 1330 int addedEventR = 0;
1331 int deletedEventR = 0; 1331 int deletedEventR = 0;
1332 int deletedEventL = 0; 1332 int deletedEventL = 0;
1333 int changedLocal = 0; 1333 int changedLocal = 0;
1334 int changedRemote = 0; 1334 int changedRemote = 0;
1335 int filteredIN = 0; 1335 int filteredIN = 0;
1336 int filteredOUT = 0; 1336 int filteredOUT = 0;
1337 //QPtrList<Event> el = local->rawEvents(); 1337 //QPtrList<Event> el = local->rawEvents();
1338 Event* eventR; 1338 Event* eventR;
1339 QString uid; 1339 QString uid;
1340 int take; 1340 int take;
1341 Event* eventRSync; 1341 Event* eventRSync;
1342 Event* eventLSync; 1342 Event* eventLSync;
1343 clearAllViews(); 1343 clearAllViews();
1344 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 1344 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
1345 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 1345 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
1346 bool fullDateRange = false; 1346 bool fullDateRange = false;
1347 local->resetTempSyncStat(); 1347 local->resetTempSyncStat();
1348 mLastCalendarSync = QDateTime::currentDateTime(); 1348 mLastCalendarSync = QDateTime::currentDateTime();
1349 if ( mSyncManager->syncWithDesktop() ) { 1349 if ( mSyncManager->syncWithDesktop() ) {
1350 remote->resetPilotStat(1); 1350 remote->resetPilotStat(1);
1351 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1351 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1352 mLastCalendarSync = KSyncManager::mRequestedSyncEvent; 1352 mLastCalendarSync = KSyncManager::mRequestedSyncEvent;
1353 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() ); 1353 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() );
1354 } else { 1354 } else {
1355 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime "); 1355 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime ");
1356 } 1356 }
1357 } 1357 }
1358 QDateTime modifiedCalendar = mLastCalendarSync; 1358 QDateTime modifiedCalendar = mLastCalendarSync;
1359 eventLSync = getLastSyncEvent(); 1359 eventLSync = getLastSyncEvent();
1360 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 1360 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
1361 if ( eventR ) { 1361 if ( eventR ) {
1362 eventRSync = (Event*) eventR->clone(); 1362 eventRSync = (Event*) eventR->clone();
1363 remote->deleteEvent(eventR ); 1363 remote->deleteEvent(eventR );
1364 1364
1365 } else { 1365 } else {
1366 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) { 1366 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) {
1367 eventRSync = (Event*)eventLSync->clone(); 1367 eventRSync = (Event*)eventLSync->clone();
1368 } else { 1368 } else {
1369 fullDateRange = true; 1369 fullDateRange = true;
1370 eventRSync = new Event(); 1370 eventRSync = new Event();
1371 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 1371 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
1372 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 1372 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
1373 eventRSync->setDtStart( mLastCalendarSync ); 1373 eventRSync->setDtStart( mLastCalendarSync );
1374 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1374 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1375 eventRSync->setCategories( i18n("SyncEvent") ); 1375 eventRSync->setCategories( i18n("SyncEvent") );
1376 } 1376 }
1377 } 1377 }
1378 if ( eventLSync->dtStart() == mLastCalendarSync ) 1378 if ( eventLSync->dtStart() == mLastCalendarSync )
1379 fullDateRange = true; 1379 fullDateRange = true;
1380 1380
1381 if ( ! fullDateRange ) { 1381 if ( ! fullDateRange ) {
1382 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 1382 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
1383 1383
1384 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 1384 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
1385 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 1385 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
1386 fullDateRange = true; 1386 fullDateRange = true;
1387 } 1387 }
1388 } 1388 }
1389 if ( mSyncManager->syncWithDesktop() ) { 1389 if ( mSyncManager->syncWithDesktop() ) {
1390 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync ); 1390 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync );
1391 } 1391 }
1392 if ( fullDateRange ) 1392 if ( fullDateRange )
1393 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 1393 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
1394 else 1394 else
1395 mLastCalendarSync = eventLSync->dtStart(); 1395 mLastCalendarSync = eventLSync->dtStart();
1396 // for resyncing if own file has changed 1396 // for resyncing if own file has changed
1397 if ( mCurrentSyncDevice == "deleteaftersync" ) { 1397 if ( mCurrentSyncDevice == "deleteaftersync" ) {
1398 mLastCalendarSync = loadedFileVersion; 1398 mLastCalendarSync = loadedFileVersion;
1399 //qDebug("setting mLastCalendarSync "); 1399 //qDebug("setting mLastCalendarSync ");
1400 } 1400 }
1401 //qDebug("*************************** "); 1401 //qDebug("*************************** ");
1402 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange); 1402 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange);
1403 QPtrList<Incidence> er = remote->rawIncidences(); 1403 QPtrList<Incidence> er = remote->rawIncidences();
1404 Incidence* inR = er.first(); 1404 Incidence* inR = er.first();
1405 Incidence* inL; 1405 Incidence* inL;
1406 QProgressBar bar( er.count(),0 ); 1406 QProgressBar bar( er.count(),0 );
1407 bar.setCaption (i18n("Syncing - close to abort!") ); 1407 bar.setCaption (i18n("Syncing - close to abort!") );
1408 1408
1409 // ************** setting up filter ************* 1409 // ************** setting up filter *************
1410 CalFilter *filterIN = 0; 1410 CalFilter *filterIN = 0;
1411 CalFilter *filterOUT = 0; 1411 CalFilter *filterOUT = 0;
1412 CalFilter *filter = mFilters.first(); 1412 CalFilter *filter = mFilters.first();
1413 while(filter) { 1413 while(filter) {
1414 if ( filter->name() == mSyncManager->mFilterInCal ) 1414 if ( filter->name() == mSyncManager->mFilterInCal )
1415 filterIN = filter; 1415 filterIN = filter;
1416 if ( filter->name() == mSyncManager->mFilterOutCal ) 1416 if ( filter->name() == mSyncManager->mFilterOutCal )
1417 filterOUT = filter; 1417 filterOUT = filter;
1418 filter = mFilters.next(); 1418 filter = mFilters.next();
1419 } 1419 }
1420 int w = 300; 1420 int w = 300;
1421 if ( QApplication::desktop()->width() < 320 ) 1421 if ( QApplication::desktop()->width() < 320 )
1422 w = 220; 1422 w = 220;
1423 int h = bar.sizeHint().height() ; 1423 int h = bar.sizeHint().height() ;
1424 int dw = QApplication::desktop()->width(); 1424 int dw = QApplication::desktop()->width();
1425 int dh = QApplication::desktop()->height(); 1425 int dh = QApplication::desktop()->height();
1426 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1426 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1427 bar.show(); 1427 bar.show();
1428 int modulo = (er.count()/10)+1; 1428 int modulo = (er.count()/10)+1;
1429 int incCounter = 0; 1429 int incCounter = 0;
1430 while ( inR ) { 1430 while ( inR ) {
1431 if ( ! bar.isVisible() ) 1431 if ( ! bar.isVisible() )
1432 return false; 1432 return false;
1433 if ( incCounter % modulo == 0 ) 1433 if ( incCounter % modulo == 0 )
1434 bar.setProgress( incCounter ); 1434 bar.setProgress( incCounter );
1435 ++incCounter; 1435 ++incCounter;
1436 uid = inR->uid(); 1436 uid = inR->uid();
1437 bool skipIncidence = false; 1437 bool skipIncidence = false;
1438 if ( uid.left(15) == QString("last-syncEvent-") ) 1438 if ( uid.left(15) == QString("last-syncEvent-") )
1439 skipIncidence = true; 1439 skipIncidence = true;
1440 QString idS; 1440 QString idS;
1441 qApp->processEvents(); 1441 qApp->processEvents();
1442 if ( !skipIncidence ) { 1442 if ( !skipIncidence ) {
1443 inL = local->incidence( uid ); 1443 inL = local->incidence( uid );
1444 if ( inL ) { // maybe conflict - same uid in both calendars 1444 if ( inL ) { // maybe conflict - same uid in both calendars
1445 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1445 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1446 //qDebug("take %d %s ", take, inL->summary().latin1()); 1446 //qDebug("take %d %s ", take, inL->summary().latin1());
1447 if ( take == 3 ) 1447 if ( take == 3 )
1448 return false; 1448 return false;
1449 if ( take == 1 ) {// take local ********************** 1449 if ( take == 1 ) {// take local **********************
1450 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 1450 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
1451 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1451 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1452 else 1452 else
1453 idS = inR->IDStr(); 1453 idS = inR->IDStr();
1454 int calID = inR->calID();
1454 remote->deleteIncidence( inR ); 1455 remote->deleteIncidence( inR );
1455 inR = inL->clone(); 1456 inR = inL->clone();
1457 inR->setCalID( calID );
1456 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1458 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1457 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) 1459 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
1458 inR->setIDStr( idS ); 1460 inR->setIDStr( idS );
1459 remote->addIncidence( inR ); 1461 remote->addIncidence( inR );
1460 if ( mSyncManager->syncWithDesktop() ) 1462 if ( mSyncManager->syncWithDesktop() )
1461 inR->setPilotId( 2 ); 1463 inR->setPilotId( 2 );
1462 ++changedRemote; 1464 ++changedRemote;
1463 } else {// take remote ********************** 1465 } else {// take remote **********************
1464 idS = inL->IDStr(); 1466 idS = inL->IDStr();
1465 int pid = inL->pilotId(); 1467 int pid = inL->pilotId();
1468 int calID = inL->calID();
1466 local->deleteIncidence( inL ); 1469 local->deleteIncidence( inL );
1467 inL = inR->clone(); 1470 inL = inR->clone();
1471 inL->setCalID( calID );
1468 if ( mSyncManager->syncWithDesktop() ) 1472 if ( mSyncManager->syncWithDesktop() )
1469 inL->setPilotId( pid ); 1473 inL->setPilotId( pid );
1470 inL->setIDStr( idS ); 1474 inL->setIDStr( idS );
1471 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1475 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1472 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1476 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1473 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1477 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1474 } 1478 }
1475 local->addIncidence( inL ); 1479 local->addIncidence( inL );
1476 ++changedLocal; 1480 ++changedLocal;
1477 } 1481 }
1478 } 1482 }
1479 } else { // no conflict ********** add or delete remote 1483 } else { // no conflict ********** add or delete remote
1480 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){ 1484 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){
1481 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1485 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1482 QString des = eventLSync->description(); 1486 QString des = eventLSync->description();
1483 QString pref = "e"; 1487 QString pref = "e";
1484 if ( inR->typeID() == todoID ) 1488 if ( inR->typeID() == todoID )
1485 pref = "t"; 1489 pref = "t";
1486 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1490 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1487 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1491 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1488 //remote->deleteIncidence( inR ); 1492 //remote->deleteIncidence( inR );
1489 ++deletedEventR; 1493 ++deletedEventR;
1490 } else { 1494 } else {
1491 inR->setLastModified( modifiedCalendar ); 1495 inR->setLastModified( modifiedCalendar );
1492 inL = inR->clone(); 1496 inL = inR->clone();
1493 inL->setIDStr( ":" ); 1497 inL->setIDStr( ":" );
1494 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1498 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1495 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1499 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1500
1501 inL->setCalID( 0 );// add to default cal
1496 local->addIncidence( inL ); 1502 local->addIncidence( inL );
1497 ++addedEvent; 1503 ++addedEvent;
1498 1504
1499 } 1505 }
1500 } else { 1506 } else {
1501 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1507 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1502 inR->setLastModified( modifiedCalendar ); 1508 inR->setLastModified( modifiedCalendar );
1503 inL = inR->clone(); 1509 inL = inR->clone();
1504 inL->setIDStr( ":" ); 1510 inL->setIDStr( ":" );
1511 inL->setCalID( 0 );// add to default cal
1505 local->addIncidence( inL ); 1512 local->addIncidence( inL );
1506 ++addedEvent; 1513 ++addedEvent;
1507 1514
1508 } else { 1515 } else {
1509 checkExternSyncEvent(eventRSyncSharp, inR); 1516 checkExternSyncEvent(eventRSyncSharp, inR);
1510 remote->deleteIncidence( inR ); 1517 remote->deleteIncidence( inR );
1511 ++deletedEventR; 1518 ++deletedEventR;
1512 } 1519 }
1513 } 1520 }
1514 } else { 1521 } else {
1515 ++filteredIN; 1522 ++filteredIN;
1516 } 1523 }
1517 } 1524 }
1518 } 1525 }
1519 inR = er.next(); 1526 inR = er.next();
1520 } 1527 }
1521 QPtrList<Incidence> el = local->rawIncidences(); 1528 QPtrList<Incidence> el = local->rawIncidences();
1522 inL = el.first(); 1529 inL = el.first();
1523 modulo = (el.count()/10)+1; 1530 modulo = (el.count()/10)+1;
1524 bar.setCaption (i18n("Add / remove events") ); 1531 bar.setCaption (i18n("Add / remove events") );
1525 bar.setTotalSteps ( el.count() ) ; 1532 bar.setTotalSteps ( el.count() ) ;
1526 bar.show(); 1533 bar.show();
1527 incCounter = 0; 1534 incCounter = 0;
1528 1535
1529 while ( inL ) { 1536 while ( inL ) {
1530 1537
1531 qApp->processEvents(); 1538 qApp->processEvents();
1532 if ( ! bar.isVisible() ) 1539 if ( ! bar.isVisible() )
1533 return false; 1540 return false;
1534 if ( incCounter % modulo == 0 ) 1541 if ( incCounter % modulo == 0 )
1535 bar.setProgress( incCounter ); 1542 bar.setProgress( incCounter );
1536 ++incCounter; 1543 ++incCounter;
1537 uid = inL->uid(); 1544 uid = inL->uid();
1538 bool skipIncidence = false; 1545 bool skipIncidence = false;
1539 if ( uid.left(15) == QString("last-syncEvent-") ) 1546 if ( uid.left(15) == QString("last-syncEvent-") )
1540 skipIncidence = true; 1547 skipIncidence = true;
1541 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID ) 1548 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID )
1542 skipIncidence = true; 1549 skipIncidence = true;
1543 if ( !skipIncidence ) { 1550 if ( !skipIncidence ) {
1544 inR = remote->incidence( uid ); 1551 inR = remote->incidence( uid );
1545 if ( ! inR ) { 1552 if ( ! inR ) {
1546 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){ 1553 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){
1547 // no conflict ********** add or delete local 1554 // no conflict ********** add or delete local
1548 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1555 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1549 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1556 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1550 checkExternSyncEvent(eventLSyncSharp, inL); 1557 checkExternSyncEvent(eventLSyncSharp, inL);
1551 local->deleteIncidence( inL ); 1558 local->deleteIncidence( inL );
1552 ++deletedEventL; 1559 ++deletedEventL;
1553 } else { 1560 } else {
1554 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1561 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1555 inL->removeID(mCurrentSyncDevice ); 1562 inL->removeID(mCurrentSyncDevice );
1556 ++addedEventR; 1563 ++addedEventR;
1557 //qDebug("remote added Incidence %s ", inL->summary().latin1()); 1564 //qDebug("remote added Incidence %s ", inL->summary().latin1());
1558 inL->setLastModified( modifiedCalendar ); 1565 inL->setLastModified( modifiedCalendar );
1559 inR = inL->clone(); 1566 inR = inL->clone();
1560 inR->setIDStr( ":" ); 1567 inR->setIDStr( ":" );
1561 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1568 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1569 inR->setCalID( 0 );// add to default cal
1562 remote->addIncidence( inR ); 1570 remote->addIncidence( inR );
1563 } 1571 }
1564 } 1572 }
1565 } else { 1573 } else {
1566 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1574 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1567 checkExternSyncEvent(eventLSyncSharp, inL); 1575 checkExternSyncEvent(eventLSyncSharp, inL);
1568 local->deleteIncidence( inL ); 1576 local->deleteIncidence( inL );
1569 ++deletedEventL; 1577 ++deletedEventL;
1570 } else { 1578 } else {
1571 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1579 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1572 ++addedEventR; 1580 ++addedEventR;
1573 inL->setLastModified( modifiedCalendar ); 1581 inL->setLastModified( modifiedCalendar );
1574 inR = inL->clone(); 1582 inR = inL->clone();
1575 inR->setIDStr( ":" ); 1583 inR->setIDStr( ":" );
1584 inR->setCalID( 0 );// add to default cal
1576 remote->addIncidence( inR ); 1585 remote->addIncidence( inR );
1577 } 1586 }
1578 } 1587 }
1579 } 1588 }
1580 } else { 1589 } else {
1581 ++filteredOUT; 1590 ++filteredOUT;
1582 } 1591 }
1583 } 1592 }
1584 } 1593 }
1585 inL = el.next(); 1594 inL = el.next();
1586 } 1595 }
1587 int delFut = 0; 1596 int delFut = 0;
1588 int remRem = 0; 1597 int remRem = 0;
1589 if ( mSyncManager->mWriteBackInFuture ) { 1598 if ( mSyncManager->mWriteBackInFuture ) {
1590 er = remote->rawIncidences(); 1599 er = remote->rawIncidences();
1591 remRem = er.count(); 1600 remRem = er.count();
1592 inR = er.first(); 1601 inR = er.first();
1593 QDateTime dt; 1602 QDateTime dt;
1594 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) ); 1603 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) );
1595 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 ); 1604 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 );
1596 while ( inR ) { 1605 while ( inR ) {
1597 if ( inR->typeID() == todoID ) { 1606 if ( inR->typeID() == todoID ) {
1598 Todo * t = (Todo*)inR; 1607 Todo * t = (Todo*)inR;
1599 if ( t->hasDueDate() ) 1608 if ( t->hasDueDate() )
1600 dt = t->dtDue(); 1609 dt = t->dtDue();
1601 else 1610 else
1602 dt = cur.addSecs( 62 ); 1611 dt = cur.addSecs( 62 );
1603 } 1612 }
1604 else if (inR->typeID() == eventID ) { 1613 else if (inR->typeID() == eventID ) {
1605 bool ok; 1614 bool ok;
1606 dt = inR->getNextOccurence( cur, &ok ); 1615 dt = inR->getNextOccurence( cur, &ok );
1607 if ( !ok ) 1616 if ( !ok )
1608 dt = cur.addSecs( -62 ); 1617 dt = cur.addSecs( -62 );
1609 } 1618 }
1610 else 1619 else
1611 dt = inR->dtStart(); 1620 dt = inR->dtStart();
1612 if ( dt < cur || dt > end ) { 1621 if ( dt < cur || dt > end ) {
1613 remote->deleteIncidence( inR ); 1622 remote->deleteIncidence( inR );
1614 ++delFut; 1623 ++delFut;
1615 } 1624 }
1616 inR = er.next(); 1625 inR = er.next();
1617 } 1626 }
1618 } 1627 }
1619 bar.hide(); 1628 bar.hide();
1620 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1629 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1621 eventLSync->setReadOnly( false ); 1630 eventLSync->setReadOnly( false );
1622 eventLSync->setDtStart( mLastCalendarSync ); 1631 eventLSync->setDtStart( mLastCalendarSync );
1623 eventRSync->setDtStart( mLastCalendarSync ); 1632 eventRSync->setDtStart( mLastCalendarSync );
1624 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1633 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1625 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1634 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1626 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1635 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1627 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1636 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1628 eventLSync->setReadOnly( true ); 1637 eventLSync->setReadOnly( true );
1629 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL ); 1638 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL );
1630 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop()) // kde is abnormal... 1639 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop()) // kde is abnormal...
1631 remote->addEvent( eventRSync ); 1640 remote->addEvent( eventRSync );
1632 else 1641 else
1633 delete eventRSync; 1642 delete eventRSync;
1634 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() ); 1643 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() );
1635 QString mes; 1644 QString mes;
1636 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 ); 1645 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 );
1637 QString delmess; 1646 QString delmess;
1638 if ( delFut ) { 1647 if ( delFut ) {
1639 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); 1648 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);
1640 mes += delmess; 1649 mes += delmess;
1641 } 1650 }
1642 mes = i18n("Local calendar changed!\n") +mes; 1651 mes = i18n("Local calendar changed!\n") +mes;
1643 mCalendar->checkAlarmForIncidence( 0, true ); 1652 mCalendar->checkAlarmForIncidence( 0, true );
1644 qDebug( mes ); 1653 qDebug( mes );
1645 if ( mSyncManager->mShowSyncSummary ) { 1654 if ( mSyncManager->mShowSyncSummary ) {
1646 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes, 1655 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes,
1647 i18n("KO/Pi Synchronization"),i18n("Write back"))) { 1656 i18n("KO/Pi Synchronization"),i18n("Write back"))) {
1648 qDebug("KO: WB cancelled "); 1657 qDebug("KO: WB cancelled ");
1649 mSyncManager->mWriteBackFile = false; 1658 mSyncManager->mWriteBackFile = false;
1650 return syncOK; 1659 return syncOK;
1651 } 1660 }
1652 } 1661 }
1653 return syncOK; 1662 return syncOK;
1654} 1663}
1655 1664
1656void CalendarView::setSyncDevice( QString s ) 1665void CalendarView::setSyncDevice( QString s )
1657{ 1666{
1658 mCurrentSyncDevice= s; 1667 mCurrentSyncDevice= s;
1659} 1668}
1660void CalendarView::setSyncName( QString s ) 1669void CalendarView::setSyncName( QString s )
1661{ 1670{
1662 mCurrentSyncName= s; 1671 mCurrentSyncName= s;
1663} 1672}
1664bool CalendarView::syncCalendar(QString filename, int mode) 1673bool CalendarView::syncCalendar(QString filename, int mode)
1665{ 1674{
1666 //qDebug("syncCalendar %s ", filename.latin1()); 1675 //qDebug("syncCalendar %s ", filename.latin1());
1667 mGlobalSyncMode = SYNC_MODE_NORMAL; 1676 mGlobalSyncMode = SYNC_MODE_NORMAL;
1668 CalendarLocal* calendar = new CalendarLocal(); 1677 CalendarLocal* calendar = new CalendarLocal();
1669 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1678 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1670 FileStorage* storage = new FileStorage( calendar ); 1679 FileStorage* storage = new FileStorage( calendar );
1671 bool syncOK = false; 1680 bool syncOK = false;
1672 storage->setFileName( filename ); 1681 storage->setFileName( filename );
1673 // qDebug("loading ... "); 1682 // qDebug("loading ... ");
1674 if ( storage->load() ) { 1683 if ( storage->load() ) {
1675 getEventViewerDialog()->setSyncMode( true ); 1684 getEventViewerDialog()->setSyncMode( true );
1676 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1685 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1677 getEventViewerDialog()->setSyncMode( false ); 1686 getEventViewerDialog()->setSyncMode( false );
1678 if ( syncOK ) { 1687 if ( syncOK ) {
1679 if ( mSyncManager->mWriteBackFile ) 1688 if ( mSyncManager->mWriteBackFile )
1680 { 1689 {
1681 storage->setSaveFormat( new ICalFormat() ); 1690 storage->setSaveFormat( new ICalFormat() );
1682 storage->save(); 1691 storage->save();
1683 } 1692 }
1684 } 1693 }
1685 setModified( true ); 1694 setModified( true );
1686 } 1695 }
1687 delete storage; 1696 delete storage;
1688 delete calendar; 1697 delete calendar;
1689 if ( syncOK ) 1698 if ( syncOK )
1690 updateView(); 1699 updateView();
1691 return syncOK; 1700 return syncOK;
1692} 1701}
1693 1702
1694void CalendarView::syncExternal( int mode ) 1703void CalendarView::syncExternal( int mode )
1695{ 1704{
1696 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1705 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1697 1706
1698 qApp->processEvents(); 1707 qApp->processEvents();
1699 CalendarLocal* calendar = new CalendarLocal(); 1708 CalendarLocal* calendar = new CalendarLocal();
1700 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1709 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1701 bool syncOK = false; 1710 bool syncOK = false;
1702 bool loadSuccess = false; 1711 bool loadSuccess = false;
1703 PhoneFormat* phoneFormat = 0; 1712 PhoneFormat* phoneFormat = 0;
1704 emit tempDisableBR(true); 1713 emit tempDisableBR(true);
1705#ifndef DESKTOP_VERSION 1714#ifndef DESKTOP_VERSION
1706 SharpFormat* sharpFormat = 0; 1715 SharpFormat* sharpFormat = 0;
1707 if ( mode == 0 ) { // sharp 1716 if ( mode == 0 ) { // sharp
1708 sharpFormat = new SharpFormat () ; 1717 sharpFormat = new SharpFormat () ;
1709 loadSuccess = sharpFormat->load( calendar, mCalendar ); 1718 loadSuccess = sharpFormat->load( calendar, mCalendar );
1710 1719
1711 } else 1720 } else
1712#endif 1721#endif
1713 if ( mode == 1 ) { // phone 1722 if ( mode == 1 ) { // phone
1714 phoneFormat = new PhoneFormat (mCurrentSyncDevice, 1723 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
1715 mSyncManager->mPhoneDevice, 1724 mSyncManager->mPhoneDevice,
1716 mSyncManager->mPhoneConnection, 1725 mSyncManager->mPhoneConnection,
1717 mSyncManager->mPhoneModel); 1726 mSyncManager->mPhoneModel);
1718 loadSuccess = phoneFormat->load( calendar,mCalendar); 1727 loadSuccess = phoneFormat->load( calendar,mCalendar);
1719 1728
1720 } else { 1729 } else {
1721 emit tempDisableBR(false); 1730 emit tempDisableBR(false);
1722 return; 1731 return;
1723 } 1732 }
1724 if ( loadSuccess ) { 1733 if ( loadSuccess ) {
1725 getEventViewerDialog()->setSyncMode( true ); 1734 getEventViewerDialog()->setSyncMode( true );
1726 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 1735 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
1727 getEventViewerDialog()->setSyncMode( false ); 1736 getEventViewerDialog()->setSyncMode( false );
1728 qApp->processEvents(); 1737 qApp->processEvents();
1729 if ( syncOK ) { 1738 if ( syncOK ) {
1730 if ( mSyncManager->mWriteBackFile ) 1739 if ( mSyncManager->mWriteBackFile )
1731 { 1740 {
1732 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 1741 QPtrList<Incidence> iL = mCalendar->rawIncidences();
1733 Incidence* inc = iL.first(); 1742 Incidence* inc = iL.first();
1734 if ( phoneFormat ) { 1743 if ( phoneFormat ) {
1735 while ( inc ) { 1744 while ( inc ) {
1736 inc->removeID(mCurrentSyncDevice); 1745 inc->removeID(mCurrentSyncDevice);
1737 inc = iL.next(); 1746 inc = iL.next();
1738 } 1747 }
1739 } 1748 }
1740#ifndef DESKTOP_VERSION 1749#ifndef DESKTOP_VERSION
1741 if ( sharpFormat ) 1750 if ( sharpFormat )
1742 sharpFormat->save(calendar); 1751 sharpFormat->save(calendar);
1743#endif 1752#endif
1744 if ( phoneFormat ) 1753 if ( phoneFormat )
1745 phoneFormat->save(calendar); 1754 phoneFormat->save(calendar);
1746 iL = calendar->rawIncidences(); 1755 iL = calendar->rawIncidences();
1747 inc = iL.first(); 1756 inc = iL.first();
1748 Incidence* loc; 1757 Incidence* loc;
1749 while ( inc ) { 1758 while ( inc ) {
1750 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 1759 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
1751 loc = mCalendar->incidence(inc->uid() ); 1760 loc = mCalendar->incidence(inc->uid() );
1752 if ( loc ) { 1761 if ( loc ) {
1753 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 1762 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
1754 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 1763 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
1755 } 1764 }
1756 } 1765 }
1757 inc = iL.next(); 1766 inc = iL.next();
1758 } 1767 }
1759 Incidence* lse = getLastSyncEvent(); 1768 Incidence* lse = getLastSyncEvent();
1760 if ( lse ) { 1769 if ( lse ) {
1761 lse->setReadOnly( false ); 1770 lse->setReadOnly( false );
1762 lse->setDescription( "" ); 1771 lse->setDescription( "" );
1763 lse->setReadOnly( true ); 1772 lse->setReadOnly( true );
1764 } 1773 }
1765 } 1774 }
1766 } else { 1775 } else {
1767 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); 1776 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") );
1768 } 1777 }
1769 setModified( true ); 1778 setModified( true );
1770 } else { 1779 } else {
1771 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 1780 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
1772 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 1781 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
1773 question, i18n("Ok")) ; 1782 question, i18n("Ok")) ;
1774 1783
1775 } 1784 }
1776 delete calendar; 1785 delete calendar;
1777 updateView(); 1786 updateView();
1778 emit tempDisableBR(false); 1787 emit tempDisableBR(false);
1779 return ;//syncOK; 1788 return ;//syncOK;
1780 1789
1781} 1790}
1782 1791
1783bool CalendarView::importBday() 1792bool CalendarView::importBday()
1784{ 1793{
1785#ifndef KORG_NOKABC 1794#ifndef KORG_NOKABC
1786 1795
1787#ifdef DESKTOP_VERSION 1796#ifdef DESKTOP_VERSION
1788 int curCal = mCalendar->defaultCalendar(); 1797 int curCal = mCalendar->defaultCalendar();
1789 int bd = mCalEditView->getBirtdayID(); 1798 int bd = mCalEditView->getBirtdayID();
1790 if ( bd == 0 ) 1799 if ( bd == 0 )
1791 return false; 1800 return false;
1792 mCalendar->setDefaultCalendar( bd ); 1801 mCalendar->setDefaultCalendar( bd );
1793 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 1802 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
1794 KABC::AddressBook::Iterator it; 1803 KABC::AddressBook::Iterator it;
1795 int count = 0; 1804 int count = 0;
1796 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1805 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1797 ++count; 1806 ++count;
1798 } 1807 }
1799 QProgressBar bar(count,0 ); 1808 QProgressBar bar(count,0 );
1800 int w = 300; 1809 int w = 300;
1801 if ( QApplication::desktop()->width() < 320 ) 1810 if ( QApplication::desktop()->width() < 320 )
1802 w = 220; 1811 w = 220;
1803 int h = bar.sizeHint().height() ; 1812 int h = bar.sizeHint().height() ;
1804 int dw = QApplication::desktop()->width(); 1813 int dw = QApplication::desktop()->width();
1805 int dh = QApplication::desktop()->height(); 1814 int dh = QApplication::desktop()->height();
1806 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1815 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1807 bar.show(); 1816 bar.show();
1808 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 1817 bar.setCaption (i18n("Reading addressbook - close to abort!") );
1809 qApp->processEvents(); 1818 qApp->processEvents();
1810 count = 0; 1819 count = 0;
1811 int addCount = 0; 1820 int addCount = 0;
1812 KCal::Attendee* a = 0; 1821 KCal::Attendee* a = 0;
1813 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1822 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1814 if ( ! bar.isVisible() ) 1823 if ( ! bar.isVisible() )
1815 return false; 1824 return false;
1816 bar.setProgress( count++ ); 1825 bar.setProgress( count++ );
1817 qApp->processEvents(); 1826 qApp->processEvents();
1818 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 1827 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
1819 if ( (*it).birthday().date().isValid() ){ 1828 if ( (*it).birthday().date().isValid() ){
1820 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1829 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1821 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 1830 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
1822 ++addCount; 1831 ++addCount;
1823 } 1832 }
1824 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 1833 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
1825 if ( anni.isValid() ){ 1834 if ( anni.isValid() ){
1826 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1835 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1827 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 1836 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
1828 ++addCount; 1837 ++addCount;
1829 } 1838 }
1830 } 1839 }
1831 mCalendar->setDefaultCalendar( curCal ); 1840 mCalendar->setDefaultCalendar( curCal );
@@ -1890,512 +1899,521 @@ void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthd
1890 { 1899 {
1891 if ( ! bar.isVisible() ) 1900 if ( ! bar.isVisible() )
1892 return; 1901 return;
1893 bar.setProgress( i ); 1902 bar.setProgress( i );
1894 qApp->processEvents(); 1903 qApp->processEvents();
1895 1904
1896 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok); 1905 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok);
1897 if (!ok) { 1906 if (!ok) {
1898 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1()); 1907 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1());
1899 } 1908 }
1900 1909
1901 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok); 1910 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok);
1902 if (!ok) { 1911 if (!ok) {
1903 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1()); 1912 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1());
1904 } 1913 }
1905 realName = realNameList[i]; 1914 realName = realNameList[i];
1906 email = emailList[i]; 1915 email = emailList[i];
1907 assembledName = assembledNameList[i]; 1916 assembledName = assembledNameList[i];
1908 uid = uidList[i]; 1917 uid = uidList[i];
1909 //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() ); 1918 //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() );
1910 1919
1911 if ( birthday.isValid() ){ 1920 if ( birthday.isValid() ){
1912 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 1921 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
1913 KCal::Attendee::ReqParticipant,uid) ; 1922 KCal::Attendee::ReqParticipant,uid) ;
1914 if ( addAnniversary( birthday, assembledName, a, true ) ) 1923 if ( addAnniversary( birthday, assembledName, a, true ) )
1915 ++addCount; 1924 ++addCount;
1916 } 1925 }
1917 1926
1918 if ( anniversary.isValid() ){ 1927 if ( anniversary.isValid() ){
1919 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 1928 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
1920 KCal::Attendee::ReqParticipant,uid) ; 1929 KCal::Attendee::ReqParticipant,uid) ;
1921 if ( addAnniversary( anniversary, assembledName, a, false ) ) 1930 if ( addAnniversary( anniversary, assembledName, a, false ) )
1922 ++addCount; 1931 ++addCount;
1923 } 1932 }
1924 } 1933 }
1925 1934
1926 mCalendar->setDefaultCalendar( curCal ); 1935 mCalendar->setDefaultCalendar( curCal );
1927 updateView(); 1936 updateView();
1928 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 1937 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
1929 1938
1930 } 1939 }
1931 1940
1932} 1941}
1933 1942
1934 1943
1935 1944
1936bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 1945bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
1937{ 1946{
1938 //qDebug("addAnni "); 1947 //qDebug("addAnni ");
1939 Event * ev = new Event(); 1948 Event * ev = new Event();
1940 ev->setOrganizer(KOPrefs::instance()->email()); 1949 ev->setOrganizer(KOPrefs::instance()->email());
1941 if ( a ) { 1950 if ( a ) {
1942 ev->addAttendee( a ); 1951 ev->addAttendee( a );
1943 } 1952 }
1944 QString kind; 1953 QString kind;
1945 if ( birthday ) { 1954 if ( birthday ) {
1946 kind = i18n( "Birthday" ); 1955 kind = i18n( "Birthday" );
1947 ev->setSummary( name + " (" + QString::number(date.year()) +")"); 1956 ev->setSummary( name + " (" + QString::number(date.year()) +")");
1948 } 1957 }
1949 else { 1958 else {
1950 kind = i18n( "Anniversary" ); 1959 kind = i18n( "Anniversary" );
1951 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind ); 1960 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind );
1952 } 1961 }
1953 ev->setCategories( kind ); 1962 ev->setCategories( kind );
1954 ev->setDtStart( QDateTime(date) ); 1963 ev->setDtStart( QDateTime(date) );
1955 ev->setDtEnd( QDateTime(date) ); 1964 ev->setDtEnd( QDateTime(date) );
1956 ev->setFloats( true ); 1965 ev->setFloats( true );
1957 Recurrence * rec = ev->recurrence(); 1966 Recurrence * rec = ev->recurrence();
1958 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 1967 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
1959 rec->addYearlyNum( date.month() ); 1968 rec->addYearlyNum( date.month() );
1960 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 1969 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
1961 delete ev; 1970 delete ev;
1962 return false; 1971 return false;
1963 } 1972 }
1964 return true; 1973 return true;
1965 1974
1966} 1975}
1967bool CalendarView::importQtopia( const QString &categories, 1976bool CalendarView::importQtopia( const QString &categories,
1968 const QString &datebook, 1977 const QString &datebook,
1969 const QString &todolist ) 1978 const QString &todolist )
1970{ 1979{
1971 1980
1972 QtopiaFormat qtopiaFormat; 1981 QtopiaFormat qtopiaFormat;
1973 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1982 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1974 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 1983 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
1975 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 1984 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
1976 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 1985 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
1977 1986
1978 updateView(); 1987 updateView();
1979 return true; 1988 return true;
1980 1989
1981#if 0 1990#if 0
1982 mGlobalSyncMode = SYNC_MODE_QTOPIA; 1991 mGlobalSyncMode = SYNC_MODE_QTOPIA;
1983 mCurrentSyncDevice = "qtopia-XML"; 1992 mCurrentSyncDevice = "qtopia-XML";
1984 if ( mSyncManager->mAskForPreferences ) 1993 if ( mSyncManager->mAskForPreferences )
1985 edit_sync_options(); 1994 edit_sync_options();
1986 qApp->processEvents(); 1995 qApp->processEvents();
1987 CalendarLocal* calendar = new CalendarLocal(); 1996 CalendarLocal* calendar = new CalendarLocal();
1988 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1997 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1989 bool syncOK = false; 1998 bool syncOK = false;
1990 QtopiaFormat qtopiaFormat; 1999 QtopiaFormat qtopiaFormat;
1991 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2000 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1992 bool loadOk = true; 2001 bool loadOk = true;
1993 if ( !categories.isEmpty() ) 2002 if ( !categories.isEmpty() )
1994 loadOk = qtopiaFormat.load( calendar, categories ); 2003 loadOk = qtopiaFormat.load( calendar, categories );
1995 if ( loadOk && !datebook.isEmpty() ) 2004 if ( loadOk && !datebook.isEmpty() )
1996 loadOk = qtopiaFormat.load( calendar, datebook ); 2005 loadOk = qtopiaFormat.load( calendar, datebook );
1997 if ( loadOk && !todolist.isEmpty() ) 2006 if ( loadOk && !todolist.isEmpty() )
1998 loadOk = qtopiaFormat.load( calendar, todolist ); 2007 loadOk = qtopiaFormat.load( calendar, todolist );
1999 2008
2000 if ( loadOk ) { 2009 if ( loadOk ) {
2001 getEventViewerDialog()->setSyncMode( true ); 2010 getEventViewerDialog()->setSyncMode( true );
2002 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2011 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2003 getEventViewerDialog()->setSyncMode( false ); 2012 getEventViewerDialog()->setSyncMode( false );
2004 qApp->processEvents(); 2013 qApp->processEvents();
2005 if ( syncOK ) { 2014 if ( syncOK ) {
2006 if ( mSyncManager->mWriteBackFile ) 2015 if ( mSyncManager->mWriteBackFile )
2007 { 2016 {
2008 // write back XML file 2017 // write back XML file
2009 2018
2010 } 2019 }
2011 setModified( true ); 2020 setModified( true );
2012 } 2021 }
2013 } else { 2022 } else {
2014 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 2023 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
2015 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 2024 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
2016 question, i18n("Ok")) ; 2025 question, i18n("Ok")) ;
2017 } 2026 }
2018 delete calendar; 2027 delete calendar;
2019 updateView(); 2028 updateView();
2020 return syncOK; 2029 return syncOK;
2021 2030
2022 2031
2023#endif 2032#endif
2024 2033
2025} 2034}
2026 2035
2027void CalendarView::setSyncEventsReadOnly() 2036void CalendarView::setSyncEventsReadOnly()
2028{ 2037{
2029 mCalendar->setSyncEventsReadOnly(); 2038 mCalendar->setSyncEventsReadOnly();
2030} 2039}
2031 2040
2032bool CalendarView::loadCalendars() 2041bool CalendarView::loadCalendars()
2033{ 2042{
2034 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2043 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2035 KopiCalendarFile * cal = calendars.first(); 2044 KopiCalendarFile * cal = calendars.first();
2036 mCalendar->setDefaultCalendar( 1 ); 2045 mCalendar->setDefaultCalendar( 1 );
2037 openCalendar( MainWindow::defaultFileName(), false ); 2046 openCalendar( MainWindow::defaultFileName(), false );
2038 cal = calendars.next(); 2047 cal = calendars.next();
2039 while ( cal ) { 2048 while ( cal ) {
2040 addCalendar( cal ); 2049 addCalendar( cal );
2041 cal = calendars.next(); 2050 cal = calendars.next();
2042 } 2051 }
2043 restoreCalendarSettings(); 2052 restoreCalendarSettings();
2044 return true; 2053 return true;
2045} 2054}
2046bool CalendarView::restoreCalendarSettings() 2055bool CalendarView::restoreCalendarSettings()
2047{ 2056{
2048 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2057 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2049 KopiCalendarFile * cal = calendars.first(); 2058 KopiCalendarFile * cal = calendars.first();
2050 while ( cal ) { 2059 while ( cal ) {
2051 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled ); 2060 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled );
2052 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled ); 2061 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled );
2053 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly ); 2062 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly );
2054 if ( cal->isStandard ) 2063 if ( cal->isStandard )
2055 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2064 mCalendar->setDefaultCalendar( cal->mCalNumber );
2056 cal = calendars.next(); 2065 cal = calendars.next();
2057 } 2066 }
2058 setSyncEventsReadOnly(); 2067 setSyncEventsReadOnly();
2059 mCalendar->reInitAlarmSettings(); 2068 mCalendar->reInitAlarmSettings();
2060 updateUnmanagedViews(); 2069 updateUnmanagedViews();
2061 updateView(); 2070 updateView();
2062 return true; 2071 return true;
2063} 2072}
2064void CalendarView::addCalendarId( int id ) 2073void CalendarView::addCalendarId( int id )
2065{ 2074{
2066 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id ); 2075 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id );
2067 if ( cal ) 2076 if ( cal )
2068 addCalendar( cal ); 2077 addCalendar( cal );
2069} 2078}
2070bool CalendarView::addCalendar( KopiCalendarFile * cal ) 2079bool CalendarView::addCalendar( KopiCalendarFile * cal )
2071{ 2080{
2072 cal->mErrorOnLoad = false; 2081 cal->mErrorOnLoad = false;
2073 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) { 2082 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) {
2074 cal->mLoadDt = QDateTime::currentDateTime(); 2083 cal->mLoadDt = QDateTime::currentDateTime();
2075 return true; 2084 return true;
2076 } 2085 }
2077 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() ); 2086 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() );
2078 cal->mErrorOnLoad = true; 2087 cal->mErrorOnLoad = true;
2079 return false; 2088 return false;
2080} 2089}
2081bool CalendarView::openCalendar(QString filename, bool merge) 2090bool CalendarView::openCalendar(QString filename, bool merge)
2082{ 2091{
2083 2092
2084 if (filename.isEmpty()) { 2093 if (filename.isEmpty()) {
2085 return false; 2094 return false;
2086 } 2095 }
2087 2096
2088 if (!QFile::exists(filename)) { 2097 if (!QFile::exists(filename)) {
2089 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 2098 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
2090 return false; 2099 return false;
2091 } 2100 }
2092 2101
2093 globalFlagBlockAgenda = 1; 2102 globalFlagBlockAgenda = 1;
2094 clearAllViews(); 2103 clearAllViews();
2095 if (!merge) { 2104 if (!merge) {
2096 mViewManager->setDocumentId( filename ); 2105 mViewManager->setDocumentId( filename );
2097 mCalendar->close(); 2106 mCalendar->close();
2098 } 2107 }
2099 mStorage->setFileName( filename ); 2108 mStorage->setFileName( filename );
2100 2109
2101 if ( mStorage->load() ) { 2110 if ( mStorage->load() ) {
2102 if ( merge ) ;//setModified( true ); 2111 if ( merge ) ;//setModified( true );
2103 else { 2112 else {
2104 //setModified( true ); 2113 //setModified( true );
2105 mViewManager->setDocumentId( filename ); 2114 mViewManager->setDocumentId( filename );
2106 mDialogManager->setDocumentId( filename ); 2115 mDialogManager->setDocumentId( filename );
2107 mTodoList->setDocumentId( filename ); 2116 mTodoList->setDocumentId( filename );
2108 } 2117 }
2109 globalFlagBlockAgenda = 2; 2118 globalFlagBlockAgenda = 2;
2110 // if ( getLastSyncEvent() ) 2119 // if ( getLastSyncEvent() )
2111 // getLastSyncEvent()->setReadOnly( true ); 2120 // getLastSyncEvent()->setReadOnly( true );
2112 mCalendar->reInitAlarmSettings(); 2121 mCalendar->reInitAlarmSettings();
2113 setSyncEventsReadOnly(); 2122 setSyncEventsReadOnly();
2114 updateUnmanagedViews(); 2123 updateUnmanagedViews();
2115 updateView(); 2124 updateView();
2116 if ( filename != MainWindow::defaultFileName() ) { 2125 if ( filename != MainWindow::defaultFileName() ) {
2117 saveCalendar( MainWindow::defaultFileName() ); 2126 saveCalendar( MainWindow::defaultFileName() );
2118 } else { 2127 } else {
2119 QFileInfo finf ( MainWindow::defaultFileName()); 2128 QFileInfo finf ( MainWindow::defaultFileName());
2120 if ( finf.exists() ) { 2129 if ( finf.exists() ) {
2121 setLoadedFileVersion( finf.lastModified () ); 2130 setLoadedFileVersion( finf.lastModified () );
2122 } 2131 }
2123 } 2132 }
2124 return true; 2133 return true;
2125 } else { 2134 } else {
2126 // while failing to load, the calendar object could 2135 // while failing to load, the calendar object could
2127 // have become partially populated. Clear it out. 2136 // have become partially populated. Clear it out.
2128 if ( !merge ) { 2137 if ( !merge ) {
2129 mCalendar->close(); 2138 mCalendar->close();
2130 mViewManager->setDocumentId( filename ); 2139 mViewManager->setDocumentId( filename );
2131 mDialogManager->setDocumentId( filename ); 2140 mDialogManager->setDocumentId( filename );
2132 mTodoList->setDocumentId( filename ); 2141 mTodoList->setDocumentId( filename );
2133 } 2142 }
2134 2143
2135 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 2144 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
2136 2145
2137 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); 2146 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) );
2138 globalFlagBlockAgenda = 2; 2147 globalFlagBlockAgenda = 2;
2139 mCalendar->reInitAlarmSettings(); 2148 mCalendar->reInitAlarmSettings();
2140 setSyncEventsReadOnly(); 2149 setSyncEventsReadOnly();
2141 updateUnmanagedViews(); 2150 updateUnmanagedViews();
2142 updateView(); 2151 updateView();
2143 } 2152 }
2144 return false; 2153 return false;
2145} 2154}
2155void CalendarView::mergeFile( QString fn )
2156{
2157 clearAllViews();
2158 mCalendar->mergeCalendarFile( fn );
2159 mCalendar->reInitAlarmSettings();
2160 setSyncEventsReadOnly();
2161 updateUnmanagedViews();
2162 updateView();
2163}
2146void CalendarView::showOpenError() 2164void CalendarView::showOpenError()
2147{ 2165{
2148 KMessageBox::error(this,i18n("Couldn't load calendar\n.")); 2166 KMessageBox::error(this,i18n("Couldn't load calendar\n."));
2149} 2167}
2150void CalendarView::setLoadedFileVersion(QDateTime dt) 2168void CalendarView::setLoadedFileVersion(QDateTime dt)
2151{ 2169{
2152 loadedFileVersion = dt; 2170 loadedFileVersion = dt;
2153} 2171}
2154bool CalendarView::checkFileChanged(QString fn) 2172bool CalendarView::checkFileChanged(QString fn)
2155{ 2173{
2156 QFileInfo finf ( fn ); 2174 QFileInfo finf ( fn );
2157 if ( !finf.exists() ) 2175 if ( !finf.exists() )
2158 return true; 2176 return true;
2159 QDateTime dt = finf.lastModified (); 2177 QDateTime dt = finf.lastModified ();
2160 if ( dt <= loadedFileVersion ) 2178 if ( dt <= loadedFileVersion )
2161 return false; 2179 return false;
2162 return true; 2180 return true;
2163 2181
2164} 2182}
2165void CalendarView::watchSavedFile() 2183void CalendarView::watchSavedFile()
2166{ 2184{
2167 QFileInfo finf ( MainWindow::defaultFileName()); 2185 QFileInfo finf ( MainWindow::defaultFileName());
2168 if ( !finf.exists() ) 2186 if ( !finf.exists() )
2169 return; 2187 return;
2170 QDateTime dt = finf.lastModified (); 2188 QDateTime dt = finf.lastModified ();
2171 if ( dt < loadedFileVersion ) { 2189 if ( dt < loadedFileVersion ) {
2172 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); 2190 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1());
2173 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); 2191 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) );
2174 return; 2192 return;
2175 } 2193 }
2176 loadedFileVersion = dt; 2194 loadedFileVersion = dt;
2177} 2195}
2178bool CalendarView::checkAllFileVersions() 2196bool CalendarView::checkAllFileVersions()
2179{ 2197{
2180 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2198 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2181 KopiCalendarFile * cal = calendars.first(); 2199 KopiCalendarFile * cal = calendars.first();
2182 mCalendar->setDefaultCalendar( 1 ); 2200 mCalendar->setDefaultCalendar( 1 );
2183 mCalendar->setDefaultCalendarEnabledOnly(); 2201 mCalendar->setDefaultCalendarEnabledOnly();
2184 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2202 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2185 if ( !checkFileVersion(MainWindow::defaultFileName())) { 2203 if ( !checkFileVersion(MainWindow::defaultFileName())) {
2186 restoreCalendarSettings(); 2204 restoreCalendarSettings();
2187 return false; 2205 return false;
2188 } 2206 }
2189 } 2207 }
2190 cal = calendars.next(); 2208 cal = calendars.next();
2191 QDateTime storeTemp = loadedFileVersion; 2209 QDateTime storeTemp = loadedFileVersion;
2192 while ( cal ) { 2210 while ( cal ) {
2193 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2211 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2194 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2212 mCalendar->setDefaultCalendar( cal->mCalNumber );
2195 mCalendar->setDefaultCalendarEnabledOnly(); 2213 mCalendar->setDefaultCalendarEnabledOnly();
2196 loadedFileVersion = cal->mLoadDt.addSecs( 15 ); 2214 loadedFileVersion = cal->mLoadDt.addSecs( 15 );
2197 if ( !checkFileVersion(cal->mFileName )) { 2215 if ( !checkFileVersion(cal->mFileName )) {
2198 loadedFileVersion = storeTemp; 2216 loadedFileVersion = storeTemp;
2199 restoreCalendarSettings(); 2217 restoreCalendarSettings();
2200 return false; 2218 return false;
2201 } 2219 }
2202 } 2220 }
2203 cal = calendars.next(); 2221 cal = calendars.next();
2204 } 2222 }
2205 loadedFileVersion = storeTemp; 2223 loadedFileVersion = storeTemp;
2206 return true; 2224 return true;
2207} 2225}
2208bool CalendarView::checkFileVersion(QString fn) 2226bool CalendarView::checkFileVersion(QString fn)
2209{ 2227{
2210 QFileInfo finf ( fn ); 2228 QFileInfo finf ( fn );
2211 if ( !finf.exists() ) 2229 if ( !finf.exists() )
2212 return true; 2230 return true;
2213 QDateTime dt = finf.lastModified (); 2231 QDateTime dt = finf.lastModified ();
2214 qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1()); 2232 qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1());
2215 qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1()); 2233 qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1());
2216 if ( dt <= loadedFileVersion ) 2234 if ( dt <= loadedFileVersion )
2217 return true; 2235 return true;
2218 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)) , 2236 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)) ,
2219 i18n("KO/Pi Warning"),i18n("Overwrite"), 2237 i18n("KO/Pi Warning"),i18n("Overwrite"),
2220 i18n("Sync+save")); 2238 i18n("Sync+save"));
2221 2239
2222 if ( km == KMessageBox::Cancel ) 2240 if ( km == KMessageBox::Cancel )
2223 return false; 2241 return false;
2224 if ( km == KMessageBox::Yes ) 2242 if ( km == KMessageBox::Yes )
2225 return true; 2243 return true;
2226 2244
2227 setSyncDevice("deleteaftersync" ); 2245 setSyncDevice("deleteaftersync" );
2228 mSyncManager->mAskForPreferences = true; 2246 mSyncManager->mAskForPreferences = true;
2229 mSyncManager->mSyncAlgoPrefs = 3; 2247 mSyncManager->mSyncAlgoPrefs = 3;
2230 mSyncManager->mWriteBackFile = false; 2248 mSyncManager->mWriteBackFile = false;
2231 mSyncManager->mWriteBackExistingOnly = false; 2249 mSyncManager->mWriteBackExistingOnly = false;
2232 mSyncManager->mShowSyncSummary = false; 2250 mSyncManager->mShowSyncSummary = false;
2233 syncCalendar( fn, 3 ); 2251 syncCalendar( fn, 3 );
2234 Event * e = getLastSyncEvent(); 2252 Event * e = getLastSyncEvent();
2235 if ( e ) 2253 if ( e )
2236 mCalendar->deleteEvent( e ); 2254 mCalendar->deleteEvent( e );
2237 return true; 2255 return true;
2238} 2256}
2239bool CalendarView::saveCalendars() 2257bool CalendarView::saveCalendars()
2240{ 2258{
2241 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2259 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2242 KopiCalendarFile * cal = calendars.first(); 2260 KopiCalendarFile * cal = calendars.first();
2243 mCalendar->setDefaultCalendar( 1 ); 2261 mCalendar->setDefaultCalendar( 1 );
2244 mCalendar->setDefaultCalendarEnabledOnly(); 2262 mCalendar->setDefaultCalendarEnabledOnly();
2245 saveCalendar( MainWindow::defaultFileName() ); 2263 saveCalendar( MainWindow::defaultFileName() );
2246 cal = calendars.next(); 2264 cal = calendars.next();
2247 while ( cal ) { 2265 while ( cal ) {
2248 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2266 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2249 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2267 mCalendar->setDefaultCalendar( cal->mCalNumber );
2250 mCalendar->setDefaultCalendarEnabledOnly(); 2268 mCalendar->setDefaultCalendarEnabledOnly();
2251 if ( saveCalendar( cal->mFileName ) ) 2269 if ( saveCalendar( cal->mFileName ) )
2252 cal->mLoadDt = QDateTime::currentDateTime(); 2270 cal->mLoadDt = QDateTime::currentDateTime();
2253 } 2271 }
2254 cal = calendars.next(); 2272 cal = calendars.next();
2255 } 2273 }
2256 restoreCalendarSettings(); 2274 restoreCalendarSettings();
2257 return true; 2275 return true;
2258} 2276}
2259bool CalendarView::saveCalendar( QString filename ) 2277bool CalendarView::saveCalendar( QString filename )
2260{ 2278{
2261 2279
2262 // Store back all unsaved data into calendar object 2280 // Store back all unsaved data into calendar object
2263 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 2281 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
2264 if ( mViewManager->currentView() ) 2282 if ( mViewManager->currentView() )
2265 mViewManager->currentView()->flushView(); 2283 mViewManager->currentView()->flushView();
2266 2284
2267 2285
2268 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); 2286 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2);
2269 mStorage->setSaveFormat( new ICalFormat() ); 2287 mStorage->setSaveFormat( new ICalFormat() );
2270 mStorage->setFileName( filename ); 2288 mStorage->setFileName( filename );
2271 bool success; 2289 bool success;
2272 success = mStorage->save(); 2290 success = mStorage->save();
2273 if ( !success ) { 2291 if ( !success ) {
2274 return false; 2292 return false;
2275 } 2293 }
2276 if ( filename == MainWindow::defaultFileName() ) { 2294 if ( filename == MainWindow::defaultFileName() ) {
2277 setLoadedFileVersion( lfv ); 2295 setLoadedFileVersion( lfv );
2278 watchSavedFile(); 2296 watchSavedFile();
2279 } 2297 }
2280 return true; 2298 return true;
2281} 2299}
2282 2300
2283void CalendarView::closeCalendar() 2301void CalendarView::closeCalendar()
2284{ 2302{
2285 2303
2286 // child windows no longer valid 2304 // child windows no longer valid
2287 clearAllViews(); 2305 clearAllViews();
2288 emit closingDown(); 2306 emit closingDown();
2289 2307
2290 mCalendar->close(); 2308 mCalendar->close();
2291 setModified(false); 2309 setModified(false);
2292 updateView(); 2310 updateView();
2293} 2311}
2294 2312
2295void CalendarView::archiveCalendar() 2313void CalendarView::archiveCalendar()
2296{ 2314{
2297 mDialogManager->showArchiveDialog(); 2315 mDialogManager->showArchiveDialog();
2298} 2316}
2299 2317
2300 2318
2301void CalendarView::readSettings() 2319void CalendarView::readSettings()
2302{ 2320{
2303 2321
2304 2322
2305 // mViewManager->showAgendaView(); 2323 // mViewManager->showAgendaView();
2306 QString str; 2324 QString str;
2307 //qDebug("CalendarView::readSettings() "); 2325 //qDebug("CalendarView::readSettings() ");
2308 // read settings from the KConfig, supplying reasonable 2326 // read settings from the KConfig, supplying reasonable
2309 // defaults where none are to be found 2327 // defaults where none are to be found
2310 KConfig *config = KOGlobals::config(); 2328 KConfig *config = KOGlobals::config();
2311#ifndef KORG_NOSPLITTER 2329#ifndef KORG_NOSPLITTER
2312 config->setGroup("KOrganizer Geometry"); 2330 config->setGroup("KOrganizer Geometry");
2313 2331
2314 QValueList<int> sizes = config->readIntListEntry("Separator1"); 2332 QValueList<int> sizes = config->readIntListEntry("Separator1");
2315 if (sizes.count() != 2) { 2333 if (sizes.count() != 2) {
2316 sizes << mDateNavigator->minimumSizeHint().width(); 2334 sizes << mDateNavigator->minimumSizeHint().width();
2317 sizes << 300; 2335 sizes << 300;
2318 } 2336 }
2319 mPanner->setSizes(sizes); 2337 mPanner->setSizes(sizes);
2320 2338
2321 sizes = config->readIntListEntry("Separator2"); 2339 sizes = config->readIntListEntry("Separator2");
2322 if ( ( mResourceView && sizes.count() == 4 ) || 2340 if ( ( mResourceView && sizes.count() == 4 ) ||
2323 ( !mResourceView && sizes.count() == 3 ) ) { 2341 ( !mResourceView && sizes.count() == 3 ) ) {
2324 mLeftSplitter->setSizes(sizes); 2342 mLeftSplitter->setSizes(sizes);
2325 } 2343 }
2326#endif 2344#endif
2327 globalFlagBlockAgenda = 1; 2345 globalFlagBlockAgenda = 1;
2328 mViewManager->showAgendaView(); 2346 mViewManager->showAgendaView();
2329 //mViewManager->readSettings( config ); 2347 //mViewManager->readSettings( config );
2330 mTodoList->restoreLayout(config,QString("Todo Layout")); 2348 mTodoList->restoreLayout(config,QString("Todo Layout"));
2331 readFilterSettings(config); 2349 readFilterSettings(config);
2332 2350
2333#ifdef DESKTOP_VERSION 2351#ifdef DESKTOP_VERSION
2334 config->setGroup("WidgetLayout"); 2352 config->setGroup("WidgetLayout");
2335 QStringList list; 2353 QStringList list;
2336 list = config->readListEntry("MainLayout"); 2354 list = config->readListEntry("MainLayout");
2337 int x,y,w,h; 2355 int x,y,w,h;
2338 if ( ! list.isEmpty() ) { 2356 if ( ! list.isEmpty() ) {
2339 x = list[0].toInt(); 2357 x = list[0].toInt();
2340 y = list[1].toInt(); 2358 y = list[1].toInt();
2341 w = list[2].toInt(); 2359 w = list[2].toInt();
2342 h = list[3].toInt(); 2360 h = list[3].toInt();
2343 KApplication::testCoords( &x,&y,&w,&h ); 2361 KApplication::testCoords( &x,&y,&w,&h );
2344 topLevelWidget()->setGeometry(x,y,w,h); 2362 topLevelWidget()->setGeometry(x,y,w,h);
2345 2363
2346 } else { 2364 } else {
2347 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 2365 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
2348 } 2366 }
2349 list = config->readListEntry("EditEventLayout"); 2367 list = config->readListEntry("EditEventLayout");
2350 if ( ! list.isEmpty() ) { 2368 if ( ! list.isEmpty() ) {
2351 x = list[0].toInt(); 2369 x = list[0].toInt();
2352 y = list[1].toInt(); 2370 y = list[1].toInt();
2353 w = list[2].toInt(); 2371 w = list[2].toInt();
2354 h = list[3].toInt(); 2372 h = list[3].toInt();
2355 KApplication::testCoords( &x,&y,&w,&h ); 2373 KApplication::testCoords( &x,&y,&w,&h );
2356 mEventEditor->setGeometry(x,y,w,h); 2374 mEventEditor->setGeometry(x,y,w,h);
2357 2375
2358 } 2376 }
2359 list = config->readListEntry("EditTodoLayout"); 2377 list = config->readListEntry("EditTodoLayout");
2360 if ( ! list.isEmpty() ) { 2378 if ( ! list.isEmpty() ) {
2361 x = list[0].toInt(); 2379 x = list[0].toInt();
2362 y = list[1].toInt(); 2380 y = list[1].toInt();
2363 w = list[2].toInt(); 2381 w = list[2].toInt();
2364 h = list[3].toInt(); 2382 h = list[3].toInt();
2365 KApplication::testCoords( &x,&y,&w,&h ); 2383 KApplication::testCoords( &x,&y,&w,&h );
2366 mTodoEditor->setGeometry(x,y,w,h); 2384 mTodoEditor->setGeometry(x,y,w,h);
2367 2385
2368 } 2386 }
2369 list = config->readListEntry("ViewerLayout"); 2387 list = config->readListEntry("ViewerLayout");
2370 if ( ! list.isEmpty() ) { 2388 if ( ! list.isEmpty() ) {
2371 x = list[0].toInt(); 2389 x = list[0].toInt();
2372 y = list[1].toInt(); 2390 y = list[1].toInt();
2373 w = list[2].toInt(); 2391 w = list[2].toInt();
2374 h = list[3].toInt(); 2392 h = list[3].toInt();
2375 KApplication::testCoords( &x,&y,&w,&h ); 2393 KApplication::testCoords( &x,&y,&w,&h );
2376 getEventViewerDialog()->setGeometry(x,y,w,h); 2394 getEventViewerDialog()->setGeometry(x,y,w,h);
2377 } 2395 }
2378#endif 2396#endif
2379 config->setGroup( "Views" ); 2397 config->setGroup( "Views" );
2380 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 2398 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
2381 2399
2382 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame"); 2400 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame");
2383 2401
2384 int resetval = 0; 2402 int resetval = 0;
2385 int maxVal = 0; 2403 int maxVal = 0;
2386 if (sizes.count() != 3) { 2404 if (sizes.count() != 3) {
2387 if ( KOPrefs::instance()->mVerticalScreen ) { 2405 if ( KOPrefs::instance()->mVerticalScreen ) {
2388 resetval = mDateNavigator->sizeHint().width()+2; 2406 resetval = mDateNavigator->sizeHint().width()+2;
2389 } else { 2407 } else {
2390 resetval = mDateNavigator->sizeHint().height()+2; 2408 resetval = mDateNavigator->sizeHint().height()+2;
2391 } 2409 }
2392 } 2410 }
2393 if ( resetval ) { 2411 if ( resetval ) {
2394 sizes.clear(); 2412 sizes.clear();
2395 if ( KOPrefs::instance()->mVerticalScreen ) { 2413 if ( KOPrefs::instance()->mVerticalScreen ) {
2396 maxVal = QApplication::desktop()->width() -10; 2414 maxVal = QApplication::desktop()->width() -10;
2397 } else { 2415 } else {
2398 maxVal = QApplication::desktop()->height()-10; 2416 maxVal = QApplication::desktop()->height()-10;
2399 } 2417 }
2400 sizes << resetval; 2418 sizes << resetval;
2401 if ( maxVal < resetval + resetval) 2419 if ( maxVal < resetval + resetval)
@@ -3105,518 +3123,520 @@ void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
3105 Incidence *incidence = delSel.first(); 3123 Incidence *incidence = delSel.first();
3106 bool addText = false; 3124 bool addText = false;
3107 if ( delSel.count() < 10 ) 3125 if ( delSel.count() < 10 )
3108 addText = true; 3126 addText = true;
3109 else { 3127 else {
3110 description.sprintf(i18n(" %d items?"),delSel.count() ); 3128 description.sprintf(i18n(" %d items?"),delSel.count() );
3111 } 3129 }
3112 while ( incidence ) { 3130 while ( incidence ) {
3113 Incidence *in = incidence->clone(); 3131 Incidence *in = incidence->clone();
3114 if ( ! in->summary().isEmpty() ) { 3132 if ( ! in->summary().isEmpty() ) {
3115 in->setDescription(""); 3133 in->setDescription("");
3116 } else { 3134 } else {
3117 in->setSummary( in->description().left(20)); 3135 in->setSummary( in->description().left(20));
3118 in->setDescription(""); 3136 in->setDescription("");
3119 } 3137 }
3120 if ( addText ) 3138 if ( addText )
3121 description += in->summary() + "\n"; 3139 description += in->summary() + "\n";
3122 cal->addIncidence( in ); 3140 cal->addIncidence( in );
3123 incidence = delSel.next(); 3141 incidence = delSel.next();
3124 } 3142 }
3125 if ( beamDialog.beamVcal() ) { 3143 if ( beamDialog.beamVcal() ) {
3126 fn += ".vcs"; 3144 fn += ".vcs";
3127 FileStorage storage( cal, fn, new VCalFormat ); 3145 FileStorage storage( cal, fn, new VCalFormat );
3128 storage.save(); 3146 storage.save();
3129 } else { 3147 } else {
3130 fn += ".ics"; 3148 fn += ".ics";
3131 FileStorage storage( cal, fn, new ICalFormat( ) ); 3149 FileStorage storage( cal, fn, new ICalFormat( ) );
3132 storage.save(); 3150 storage.save();
3133 } 3151 }
3134 delete cal; 3152 delete cal;
3135 mes = i18n("KO/Pi: Ready for beaming"); 3153 mes = i18n("KO/Pi: Ready for beaming");
3136 topLevelWidget()->setCaption(mes); 3154 topLevelWidget()->setCaption(mes);
3137 KApplication::convert2latin1( fn ); 3155 KApplication::convert2latin1( fn );
3138#ifndef DESKTOP_VERSION 3156#ifndef DESKTOP_VERSION
3139 Ir *ir = new Ir( this ); 3157 Ir *ir = new Ir( this );
3140 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 3158 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
3141 ir->send( fn, description, "text/x-vCalendar" ); 3159 ir->send( fn, description, "text/x-vCalendar" );
3142#endif 3160#endif
3143 } 3161 }
3144} 3162}
3145 3163
3146#ifndef DESKTOP_VERSION 3164#ifndef DESKTOP_VERSION
3147void CalendarView::beamDone( Ir *ir ) 3165void CalendarView::beamDone( Ir *ir )
3148{ 3166{
3149 delete ir; 3167 delete ir;
3150 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") ); 3168 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") );
3151 topLevelWidget()->raise(); 3169 topLevelWidget()->raise();
3152} 3170}
3153#else 3171#else
3154void CalendarView::beamDone( Ir *){;} 3172void CalendarView::beamDone( Ir *){;}
3155#endif 3173#endif
3156void CalendarView::moveIncidence(Incidence * inc ) 3174void CalendarView::moveIncidence(Incidence * inc )
3157{ 3175{
3158 if ( !inc ) return; 3176 if ( !inc ) return;
3159 showDatePickerPopup(); 3177 showDatePickerPopup();
3160 mDatePickerMode = 2; 3178 mDatePickerMode = 2;
3161 mMoveIncidence = inc ; 3179 mMoveIncidence = inc ;
3162 QDate da; 3180 QDate da;
3163 if ( mMoveIncidence->typeID() == todoID ) { 3181 if ( mMoveIncidence->typeID() == todoID ) {
3164 Todo * to = (Todo *) mMoveIncidence; 3182 Todo * to = (Todo *) mMoveIncidence;
3165 if ( to->hasDueDate() ) 3183 if ( to->hasDueDate() )
3166 da = to->dtDue().date(); 3184 da = to->dtDue().date();
3167 else 3185 else
3168 da = QDate::currentDate(); 3186 da = QDate::currentDate();
3169 } else { 3187 } else {
3170 da = mMoveIncidence->dtStart().date(); 3188 da = mMoveIncidence->dtStart().date();
3171 } 3189 }
3172 //PENDING set date for recurring incidence to date of recurrence 3190 //PENDING set date for recurring incidence to date of recurrence
3173 //mMoveIncidenceOldDate; 3191 //mMoveIncidenceOldDate;
3174 mDatePicker->setDate( da ); 3192 mDatePicker->setDate( da );
3175} 3193}
3176void CalendarView::showDatePickerPopup() 3194void CalendarView::showDatePickerPopup()
3177{ 3195{
3178 if ( mDateFrame->isVisible() ) 3196 if ( mDateFrame->isVisible() )
3179 mDateFrame->hide(); 3197 mDateFrame->hide();
3180 else { 3198 else {
3181 int offX = 0, offY = 0; 3199 int offX = 0, offY = 0;
3182#ifdef DESKTOP_VERSION 3200#ifdef DESKTOP_VERSION
3183 int w =mDatePicker->sizeHint().width() ; 3201 int w =mDatePicker->sizeHint().width() ;
3184 int h = mDatePicker->sizeHint().height() ; 3202 int h = mDatePicker->sizeHint().height() ;
3185 int dw = topLevelWidget()->width(); 3203 int dw = topLevelWidget()->width();
3186 int dh = topLevelWidget()->height(); 3204 int dh = topLevelWidget()->height();
3187 offX = topLevelWidget()->x(); 3205 offX = topLevelWidget()->x();
3188 offY = topLevelWidget()->y(); 3206 offY = topLevelWidget()->y();
3189#else 3207#else
3190 int w =mDatePicker->sizeHint().width() ; 3208 int w =mDatePicker->sizeHint().width() ;
3191 int h = mDatePicker->sizeHint().height() ; 3209 int h = mDatePicker->sizeHint().height() ;
3192 int dw = QApplication::desktop()->width(); 3210 int dw = QApplication::desktop()->width();
3193 int dh = QApplication::desktop()->height(); 3211 int dh = QApplication::desktop()->height();
3194#endif 3212#endif
3195 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h ); 3213 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h );
3196 mDateFrame->show(); 3214 mDateFrame->show();
3197 } 3215 }
3198} 3216}
3199void CalendarView::showDatePicker( ) 3217void CalendarView::showDatePicker( )
3200{ 3218{
3201 showDatePickerPopup(); 3219 showDatePickerPopup();
3202 mDatePickerMode = 1; 3220 mDatePickerMode = 1;
3203 mDatePicker->setDate( mNavigator->selectedDates().first() ); 3221 mDatePicker->setDate( mNavigator->selectedDates().first() );
3204} 3222}
3205 3223
3206void CalendarView::showEventEditor() 3224void CalendarView::showEventEditor()
3207{ 3225{
3208#ifdef DESKTOP_VERSION 3226#ifdef DESKTOP_VERSION
3209 int x,y,w,h; 3227 int x,y,w,h;
3210 x = mEventEditor->geometry().x(); 3228 x = mEventEditor->geometry().x();
3211 y = mEventEditor->geometry().y(); 3229 y = mEventEditor->geometry().y();
3212 w = mEventEditor->width(); 3230 w = mEventEditor->width();
3213 h = mEventEditor->height(); 3231 h = mEventEditor->height();
3214 mEventEditor->show(); 3232 mEventEditor->show();
3215 mEventEditor->setGeometry(x,y,w,h); 3233 mEventEditor->setGeometry(x,y,w,h);
3216#else 3234#else
3217 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) { 3235 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) {
3218 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3236 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3219 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() ); 3237 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() );
3220 qApp->processEvents(); 3238 qApp->processEvents();
3221 delete mEventEditor; 3239 delete mEventEditor;
3222 mEventEditor = mDialogManager->getEventEditor(); 3240 mEventEditor = mDialogManager->getEventEditor();
3223 topLevelWidget()->setCaption( i18n("") ); 3241 topLevelWidget()->setCaption( i18n("") );
3224 } 3242 }
3225 mEventEditor->showMaximized(); 3243 mEventEditor->showMaximized();
3226#endif 3244#endif
3227} 3245}
3228void CalendarView::showTodoEditor() 3246void CalendarView::showTodoEditor()
3229{ 3247{
3230#ifdef DESKTOP_VERSION 3248#ifdef DESKTOP_VERSION
3231 int x,y,w,h; 3249 int x,y,w,h;
3232 x = mTodoEditor->geometry().x(); 3250 x = mTodoEditor->geometry().x();
3233 y = mTodoEditor->geometry().y(); 3251 y = mTodoEditor->geometry().y();
3234 w = mTodoEditor->width(); 3252 w = mTodoEditor->width();
3235 h = mTodoEditor->height(); 3253 h = mTodoEditor->height();
3236 mTodoEditor->show(); 3254 mTodoEditor->show();
3237 mTodoEditor->setGeometry(x,y,w,h); 3255 mTodoEditor->setGeometry(x,y,w,h);
3238#else 3256#else
3239 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) { 3257 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) {
3240 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3258 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3241 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() ); 3259 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() );
3242 qApp->processEvents(); 3260 qApp->processEvents();
3243 delete mTodoEditor; 3261 delete mTodoEditor;
3244 mTodoEditor = mDialogManager->getTodoEditor(); 3262 mTodoEditor = mDialogManager->getTodoEditor();
3245 topLevelWidget()->setCaption( i18n("") ); 3263 topLevelWidget()->setCaption( i18n("") );
3246 } 3264 }
3247 mTodoEditor->showMaximized(); 3265 mTodoEditor->showMaximized();
3248#endif 3266#endif
3249} 3267}
3250 3268
3251void CalendarView::cloneIncidence() 3269void CalendarView::cloneIncidence()
3252{ 3270{
3253 Incidence *incidence = currentSelection(); 3271 Incidence *incidence = currentSelection();
3254 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3272 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3255 if ( incidence ) { 3273 if ( incidence ) {
3256 cloneIncidence(incidence); 3274 cloneIncidence(incidence);
3257 } 3275 }
3258} 3276}
3259void CalendarView::moveIncidence() 3277void CalendarView::moveIncidence()
3260{ 3278{
3261 Incidence *incidence = currentSelection(); 3279 Incidence *incidence = currentSelection();
3262 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3280 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3263 if ( incidence ) { 3281 if ( incidence ) {
3264 moveIncidence(incidence); 3282 moveIncidence(incidence);
3265 } 3283 }
3266} 3284}
3267void CalendarView::beamIncidence() 3285void CalendarView::beamIncidence()
3268{ 3286{
3269 Incidence *incidence = currentSelection(); 3287 Incidence *incidence = currentSelection();
3270 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3288 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3271 if ( incidence ) { 3289 if ( incidence ) {
3272 beamIncidence(incidence); 3290 beamIncidence(incidence);
3273 } 3291 }
3274} 3292}
3275void CalendarView::toggleCancelIncidence() 3293void CalendarView::toggleCancelIncidence()
3276{ 3294{
3277 Incidence *incidence = currentSelection(); 3295 Incidence *incidence = currentSelection();
3278 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3296 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3279 if ( incidence ) { 3297 if ( incidence ) {
3280 cancelIncidence(incidence); 3298 cancelIncidence(incidence);
3281 } 3299 }
3282} 3300}
3283 3301
3284 3302
3285void CalendarView::cancelIncidence(Incidence * inc ) 3303void CalendarView::cancelIncidence(Incidence * inc )
3286{ 3304{
3287 inc->setCancelled( ! inc->cancelled() ); 3305 inc->setCancelled( ! inc->cancelled() );
3288 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 3306 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
3289 updateView(); 3307 updateView();
3290} 3308}
3291void CalendarView::cloneIncidence(Incidence * orgInc ) 3309void CalendarView::cloneIncidence(Incidence * orgInc )
3292{ 3310{
3293 Incidence * newInc = orgInc->clone(); 3311 Incidence * newInc = orgInc->clone();
3294 newInc->recreate(); 3312 newInc->recreate();
3295 3313
3296 if ( newInc->typeID() == todoID ) { 3314 if ( newInc->typeID() == todoID ) {
3297 Todo* t = (Todo*) newInc; 3315 Todo* t = (Todo*) newInc;
3298 bool cloneSub = false; 3316 bool cloneSub = false;
3299 if ( orgInc->relations().count() ) { 3317 if ( orgInc->relations().count() ) {
3300 int result = KMessageBox::warningYesNoCancel(this, 3318 int result = KMessageBox::warningYesNoCancel(this,
3301 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 ) ), 3319 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 ) ),
3302 i18n("Todo has subtodos"), 3320 i18n("Todo has subtodos"),
3303 i18n("Yes"), 3321 i18n("Yes"),
3304 i18n("No")); 3322 i18n("No"));
3305 3323
3306 if ( result == KMessageBox::Cancel ) { 3324 if ( result == KMessageBox::Cancel ) {
3307 delete t; 3325 delete t;
3308 return; 3326 return;
3309 } 3327 }
3310 if (result == KMessageBox::Yes) cloneSub = true; 3328 if (result == KMessageBox::Yes) cloneSub = true;
3311 } 3329 }
3312 showTodoEditor(); 3330 showTodoEditor();
3313 mTodoEditor->editTodo( t ); 3331 mTodoEditor->editTodo( t );
3314 if ( mTodoEditor->exec() ) { 3332 if ( mTodoEditor->exec() ) {
3315 if ( cloneSub ) { 3333 if ( cloneSub ) {
3316 orgInc->cloneRelations( t ); 3334 orgInc->cloneRelations( t );
3317 mCalendar->addIncidenceBranch( t ); 3335 mCalendar->addIncidenceBranch( t );
3318 updateView(); 3336 updateView();
3319 3337
3320 } else { 3338 } else {
3321 mCalendar->addTodo( t ); 3339 mCalendar->addTodo( t );
3322 updateView(); 3340 updateView();
3323 } 3341 }
3324 } else { 3342 } else {
3325 delete t; 3343 delete t;
3326 } 3344 }
3327 } 3345 }
3328 else if ( newInc->typeID() == eventID ) { 3346 else if ( newInc->typeID() == eventID ) {
3329 Event* e = (Event*) newInc; 3347 Event* e = (Event*) newInc;
3330 showEventEditor(); 3348 showEventEditor();
3331 mEventEditor->editEvent( e ); 3349 mEventEditor->editEvent( e );
3332 if ( mEventEditor->exec() ) { 3350 if ( mEventEditor->exec() ) {
3333 mCalendar->addEvent( e ); 3351 mCalendar->addEvent( e );
3334 updateView(); 3352 updateView();
3335 } else { 3353 } else {
3336 delete e; 3354 delete e;
3337 } 3355 }
3338 } if ( newInc->typeID() == journalID ) { 3356 } if ( newInc->typeID() == journalID ) {
3339 mCalendar->addJournal( (Journal*) newInc ); 3357 mCalendar->addJournal( (Journal*) newInc );
3340 editJournal( (Journal*) newInc ); 3358 editJournal( (Journal*) newInc );
3341 } 3359 }
3342 setActiveWindow(); 3360 setActiveWindow();
3343} 3361}
3344 3362
3345void CalendarView::newEvent() 3363void CalendarView::newEvent()
3346{ 3364{
3347 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 3365 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
3348 KOAgendaView *aView = mViewManager->agendaView(); 3366 KOAgendaView *aView = mViewManager->agendaView();
3349 if (aView) { 3367 if (aView) {
3350 if (aView->selectionStart().isValid()) { 3368 if (aView->selectionStart().isValid()) {
3351 if (aView->selectedIsAllDay()) { 3369 if (aView->selectedIsAllDay()) {
3352 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 3370 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
3353 } else { 3371 } else {
3354 newEvent(aView->selectionStart(),aView->selectionEnd()); 3372 newEvent(aView->selectionStart(),aView->selectionEnd());
3355 } 3373 }
3356 return; 3374 return;
3357 } 3375 }
3358 } 3376 }
3359 3377
3360 QDate date = mNavigator->selectedDates().first(); 3378 QDate date = mNavigator->selectedDates().first();
3379#if 0
3361 QDateTime current = QDateTime::currentDateTime(); 3380 QDateTime current = QDateTime::currentDateTime();
3362 if ( date <= current.date() ) { 3381 if ( date <= current.date() ) {
3363 int hour = current.time().hour() +1; 3382 int hour = current.time().hour() +1;
3364 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 3383 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
3365 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3384 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3366 } else 3385 } else
3386#endif
3367 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 3387 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
3368 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 3388 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
3369 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3389 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3370} 3390}
3371 3391
3372void CalendarView::newEvent(QDateTime fh) 3392void CalendarView::newEvent(QDateTime fh)
3373{ 3393{
3374 newEvent(fh, 3394 newEvent(fh,
3375 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 3395 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
3376} 3396}
3377 3397
3378void CalendarView::newEvent(QDate dt) 3398void CalendarView::newEvent(QDate dt)
3379{ 3399{
3380 newEvent(QDateTime(dt, QTime(0,0,0)), 3400 newEvent(QDateTime(dt, QTime(0,0,0)),
3381 QDateTime(dt, QTime(0,0,0)), true); 3401 QDateTime(dt, QTime(0,0,0)), true);
3382} 3402}
3383void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint) 3403void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint)
3384{ 3404{
3385 newEvent(fromHint, toHint, false); 3405 newEvent(fromHint, toHint, false);
3386} 3406}
3387void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 3407void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
3388{ 3408{
3389 3409
3390 showEventEditor(); 3410 showEventEditor();
3391 mEventEditor->newEvent(fromHint,toHint,allDay); 3411 mEventEditor->newEvent(fromHint,toHint,allDay);
3392 if ( mFilterView->filtersEnabled() ) { 3412 if ( mFilterView->filtersEnabled() ) {
3393 CalFilter *filter = mFilterView->selectedFilter(); 3413 CalFilter *filter = mFilterView->selectedFilter();
3394 if (filter && filter->showCategories()) { 3414 if (filter && filter->showCategories()) {
3395 mEventEditor->setCategories(filter->categoryList().join(",") ); 3415 mEventEditor->setCategories(filter->categoryList().join(",") );
3396 } 3416 }
3397 if ( filter ) 3417 if ( filter )
3398 mEventEditor->setSecrecy( filter->getSecrecy() ); 3418 mEventEditor->setSecrecy( filter->getSecrecy() );
3399 } 3419 }
3400 mEventEditor->exec(); 3420 mEventEditor->exec();
3401 setActiveWindow(); 3421 setActiveWindow();
3402} 3422}
3403void CalendarView::todoAdded(Todo * t) 3423void CalendarView::todoAdded(Todo * t)
3404{ 3424{
3405 3425
3406 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 3426 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
3407 updateTodoViews(); 3427 updateTodoViews();
3408} 3428}
3409void CalendarView::todoChanged(Todo * t) 3429void CalendarView::todoChanged(Todo * t)
3410{ 3430{
3411 emit todoModified( t, 4 ); 3431 emit todoModified( t, 4 );
3412 // updateTodoViews(); 3432 // updateTodoViews();
3413} 3433}
3414void CalendarView::todoToBeDeleted(Todo *) 3434void CalendarView::todoToBeDeleted(Todo *)
3415{ 3435{
3416 //qDebug("todoToBeDeleted(Todo *) "); 3436 //qDebug("todoToBeDeleted(Todo *) ");
3417 updateTodoViews(); 3437 updateTodoViews();
3418} 3438}
3419void CalendarView::todoDeleted() 3439void CalendarView::todoDeleted()
3420{ 3440{
3421 //qDebug(" todoDeleted()"); 3441 //qDebug(" todoDeleted()");
3422 updateTodoViews(); 3442 updateTodoViews();
3423} 3443}
3424 3444
3425 3445
3426void CalendarView::newTodoDateTime( QDateTime dt, bool allday ) 3446void CalendarView::newTodoDateTime( QDateTime dt, bool allday )
3427{ 3447{
3428 showTodoEditor(); 3448 showTodoEditor();
3429 mTodoEditor->newTodo(dt,0,allday); 3449 mTodoEditor->newTodo(dt,0,allday);
3430 if ( mFilterView->filtersEnabled() ) { 3450 if ( mFilterView->filtersEnabled() ) {
3431 CalFilter *filter = mFilterView->selectedFilter(); 3451 CalFilter *filter = mFilterView->selectedFilter();
3432 if (filter && filter->showCategories()) { 3452 if (filter && filter->showCategories()) {
3433 mTodoEditor->setCategories(filter->categoryList().join(",") ); 3453 mTodoEditor->setCategories(filter->categoryList().join(",") );
3434 } 3454 }
3435 if ( filter ) 3455 if ( filter )
3436 mTodoEditor->setSecrecy( filter->getSecrecy() ); 3456 mTodoEditor->setSecrecy( filter->getSecrecy() );
3437 } 3457 }
3438 mTodoEditor->exec(); 3458 mTodoEditor->exec();
3439 setActiveWindow(); 3459 setActiveWindow();
3440} 3460}
3441 3461
3442void CalendarView::newTodo() 3462void CalendarView::newTodo()
3443{ 3463{
3444 newTodoDateTime( QDateTime(),true ); 3464 newTodoDateTime( QDateTime(),true );
3445} 3465}
3446 3466
3447void CalendarView::newSubTodo() 3467void CalendarView::newSubTodo()
3448{ 3468{
3449 Todo *todo = selectedTodo(); 3469 Todo *todo = selectedTodo();
3450 if ( todo ) newSubTodo( todo ); 3470 if ( todo ) newSubTodo( todo );
3451} 3471}
3452 3472
3453void CalendarView::newSubTodo(Todo *parentEvent) 3473void CalendarView::newSubTodo(Todo *parentEvent)
3454{ 3474{
3455 3475
3456 showTodoEditor(); 3476 showTodoEditor();
3457 mTodoEditor->newTodo(QDateTime(),parentEvent,true); 3477 mTodoEditor->newTodo(QDateTime(),parentEvent,true);
3458 mTodoEditor->exec(); 3478 mTodoEditor->exec();
3459 setActiveWindow(); 3479 setActiveWindow();
3460} 3480}
3461 3481
3462void CalendarView::newFloatingEvent() 3482void CalendarView::newFloatingEvent()
3463{ 3483{
3464 DateList tmpList = mNavigator->selectedDates(); 3484 DateList tmpList = mNavigator->selectedDates();
3465 QDate date = tmpList.first(); 3485 QDate date = tmpList.first();
3466 3486
3467 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 3487 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
3468 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 3488 QDateTime( date, QTime( 12, 0, 0 ) ), true );
3469} 3489}
3470 3490
3471 3491
3472void CalendarView::editEvent( Event *event ) 3492void CalendarView::editEvent( Event *event )
3473{ 3493{
3474 3494
3475 if ( !event ) return; 3495 if ( !event ) return;
3476 if ( event->isReadOnly() ) { 3496 if ( event->isReadOnly() ) {
3477 showEvent( event ); 3497 showEvent( event );
3478 return; 3498 return;
3479 } 3499 }
3480 showEventEditor(); 3500 showEventEditor();
3481 mEventEditor->editEvent( event , mFlagEditDescription); 3501 mEventEditor->editEvent( event , mFlagEditDescription);
3482 mEventEditor->exec(); 3502 mEventEditor->exec();
3483 setActiveWindow(); 3503 setActiveWindow();
3484 3504
3485} 3505}
3486void CalendarView::editJournal( Journal *jour ) 3506void CalendarView::editJournal( Journal *jour )
3487{ 3507{
3488 if ( !jour ) return; 3508 if ( !jour ) return;
3489 mDialogManager->hideSearchDialog(); 3509 mDialogManager->hideSearchDialog();
3490 mViewManager->showJournalView(); 3510 mViewManager->showJournalView();
3491 mNavigator->slotDaySelect( jour->dtStart().date() ); 3511 mNavigator->slotDaySelect( jour->dtStart().date() );
3492} 3512}
3493void CalendarView::editTodo( Todo *todo ) 3513void CalendarView::editTodo( Todo *todo )
3494{ 3514{
3495 if ( !todo ) return; 3515 if ( !todo ) return;
3496 3516
3497 if ( todo->isReadOnly() ) { 3517 if ( todo->isReadOnly() ) {
3498 showTodo( todo ); 3518 showTodo( todo );
3499 return; 3519 return;
3500 } 3520 }
3501 showTodoEditor(); 3521 showTodoEditor();
3502 mTodoEditor->editTodo( todo ,mFlagEditDescription); 3522 mTodoEditor->editTodo( todo ,mFlagEditDescription);
3503 mTodoEditor->exec(); 3523 mTodoEditor->exec();
3504 setActiveWindow(); 3524 setActiveWindow();
3505 3525
3506} 3526}
3507 3527
3508KOEventViewerDialog* CalendarView::getEventViewerDialog() 3528KOEventViewerDialog* CalendarView::getEventViewerDialog()
3509{ 3529{
3510 if ( !mEventViewerDialog ) { 3530 if ( !mEventViewerDialog ) {
3511 mEventViewerDialog = new KOEventViewerDialog(0); 3531 mEventViewerDialog = new KOEventViewerDialog(0);
3512 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 3532 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
3513 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 3533 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
3514 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 3534 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
3515 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 3535 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
3516 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 3536 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
3517 viewManager(), SLOT( showAgendaView( bool ) ) ); 3537 viewManager(), SLOT( showAgendaView( bool ) ) );
3518 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()), 3538 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()),
3519 this, SLOT( slotViewerClosed() ) ); 3539 this, SLOT( slotViewerClosed() ) );
3520 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ), 3540 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ),
3521 this, SLOT( todoChanged(Todo *) ) ); 3541 this, SLOT( todoChanged(Todo *) ) );
3522 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 3542 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
3523 mEventViewerDialog->resize( 640, 480 ); 3543 mEventViewerDialog->resize( 640, 480 );
3524 3544
3525 } 3545 }
3526 return mEventViewerDialog; 3546 return mEventViewerDialog;
3527} 3547}
3528void CalendarView::showEvent(Event *event) 3548void CalendarView::showEvent(Event *event)
3529{ 3549{
3530 getEventViewerDialog()->setEvent(event); 3550 getEventViewerDialog()->setEvent(event);
3531 getEventViewerDialog()->showMe(); 3551 getEventViewerDialog()->showMe();
3532} 3552}
3533 3553
3534void CalendarView::showTodo(Todo *event) 3554void CalendarView::showTodo(Todo *event)
3535{ 3555{
3536 getEventViewerDialog()->setTodo(event); 3556 getEventViewerDialog()->setTodo(event);
3537 getEventViewerDialog()->showMe(); 3557 getEventViewerDialog()->showMe();
3538} 3558}
3539void CalendarView::showJournal( Journal *jour ) 3559void CalendarView::showJournal( Journal *jour )
3540{ 3560{
3541 getEventViewerDialog()->setJournal(jour); 3561 getEventViewerDialog()->setJournal(jour);
3542 getEventViewerDialog()->showMe(); 3562 getEventViewerDialog()->showMe();
3543 3563
3544} 3564}
3545// void CalendarView::todoModified (Todo *event, int changed) 3565// void CalendarView::todoModified (Todo *event, int changed)
3546// { 3566// {
3547// // if (mDialogList.find (event) != mDialogList.end ()) { 3567// // if (mDialogList.find (event) != mDialogList.end ()) {
3548// // kdDebug() << "Todo modified and open" << endl; 3568// // kdDebug() << "Todo modified and open" << endl;
3549// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; 3569// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event];
3550// // temp->modified (changed); 3570// // temp->modified (changed);
3551 3571
3552// // } 3572// // }
3553 3573
3554// mViewManager->updateView(); 3574// mViewManager->updateView();
3555// } 3575// }
3556 3576
3557void CalendarView::appointment_show() 3577void CalendarView::appointment_show()
3558{ 3578{
3559 Event *anEvent = 0; 3579 Event *anEvent = 0;
3560 3580
3561 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3581 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3562 3582
3563 if (mViewManager->currentView()->isEventView()) { 3583 if (mViewManager->currentView()->isEventView()) {
3564 if ( incidence && incidence->typeID() == eventID ) { 3584 if ( incidence && incidence->typeID() == eventID ) {
3565 anEvent = static_cast<Event *>(incidence); 3585 anEvent = static_cast<Event *>(incidence);
3566 } 3586 }
3567 } 3587 }
3568 3588
3569 if (!anEvent) { 3589 if (!anEvent) {
3570 KNotifyClient::beep(); 3590 KNotifyClient::beep();
3571 return; 3591 return;
3572 } 3592 }
3573 3593
3574 showEvent(anEvent); 3594 showEvent(anEvent);
3575} 3595}
3576 3596
3577void CalendarView::appointment_edit() 3597void CalendarView::appointment_edit()
3578{ 3598{
3579 Event *anEvent = 0; 3599 Event *anEvent = 0;
3580 3600
3581 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3601 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3582 3602
3583 if (mViewManager->currentView()->isEventView()) { 3603 if (mViewManager->currentView()->isEventView()) {
3584 if ( incidence && incidence->typeID() == eventID ) { 3604 if ( incidence && incidence->typeID() == eventID ) {
3585 anEvent = static_cast<Event *>(incidence); 3605 anEvent = static_cast<Event *>(incidence);
3586 } 3606 }
3587 } 3607 }
3588 3608
3589 if (!anEvent) { 3609 if (!anEvent) {
3590 KNotifyClient::beep(); 3610 KNotifyClient::beep();
3591 return; 3611 return;
3592 } 3612 }
3593 3613
3594 editEvent(anEvent); 3614 editEvent(anEvent);
3595} 3615}
3596 3616
3597void CalendarView::appointment_delete() 3617void CalendarView::appointment_delete()
3598{ 3618{
3599 Event *anEvent = 0; 3619 Event *anEvent = 0;
3600 3620
3601 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3621 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3602 3622
3603 if (mViewManager->currentView()->isEventView()) { 3623 if (mViewManager->currentView()->isEventView()) {
3604 if ( incidence && incidence->typeID() == eventID ) { 3624 if ( incidence && incidence->typeID() == eventID ) {
3605 anEvent = static_cast<Event *>(incidence); 3625 anEvent = static_cast<Event *>(incidence);
3606 } 3626 }
3607 } 3627 }
3608 3628
3609 if (!anEvent) { 3629 if (!anEvent) {
3610 KNotifyClient::beep(); 3630 KNotifyClient::beep();
3611 return; 3631 return;
3612 } 3632 }
3613 3633
3614 deleteEvent(anEvent); 3634 deleteEvent(anEvent);
3615} 3635}
3616 3636
3617void CalendarView::todo_resub( Todo * parent, Todo * sub ) 3637void CalendarView::todo_resub( Todo * parent, Todo * sub )
3618{ 3638{
3619 if (!sub) return; 3639 if (!sub) return;
3620 if ( sub->relatedTo() == parent ) 3640 if ( sub->relatedTo() == parent )
3621 return; 3641 return;
3622 sub->setRelatedTo(parent); 3642 sub->setRelatedTo(parent);
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index 706d05d..799c297 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -1,396 +1,397 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000, 2001 3 Copyright (c) 2000, 2001
4 Cornelius Schumacher <schumacher@kde.org> 4 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24#ifndef CALENDARVIEW_H 24#ifndef CALENDARVIEW_H
25#define CALENDARVIEW_H 25#define CALENDARVIEW_H
26 26
27#include <qframe.h> 27#include <qframe.h>
28#include <qlayout.h> 28#include <qlayout.h>
29#include <qwidget.h> 29#include <qwidget.h>
30#include <qptrlist.h> 30#include <qptrlist.h>
31#include <qvbox.h> 31#include <qvbox.h>
32#include <qmap.h> 32#include <qmap.h>
33#include <qscrollbar.h> 33#include <qscrollbar.h>
34#ifndef DESKTOP_VERSION 34#ifndef DESKTOP_VERSION
35#include <qtopia/ir.h> 35#include <qtopia/ir.h>
36#else 36#else
37#define Ir char 37#define Ir char
38#endif 38#endif
39#include <libkcal/calendar.h> 39#include <libkcal/calendar.h>
40#include <libkcal/scheduler.h> 40#include <libkcal/scheduler.h>
41#include <libkcal/calendarresources.h> 41#include <libkcal/calendarresources.h>
42#include <libkcal/resourcecalendar.h> 42#include <libkcal/resourcecalendar.h>
43#include <KDGanttMinimizeSplitter.h> 43#include <KDGanttMinimizeSplitter.h>
44 44
45#include <korganizer/calendarviewbase.h> 45#include <korganizer/calendarviewbase.h>
46 46
47#include <ksyncmanager.h> 47#include <ksyncmanager.h>
48//#include <koprefs.h> 48//#include <koprefs.h>
49 49
50class QWidgetStack; 50class QWidgetStack;
51class QSplitter; 51class QSplitter;
52class KopiCalendarFile; 52class KopiCalendarFile;
53class CalPrinter; 53class CalPrinter;
54class KOFilterView; 54class KOFilterView;
55class KOCalEditView; 55class KOCalEditView;
56class KOViewManager; 56class KOViewManager;
57class KODialogManager; 57class KODialogManager;
58class KOTodoView; 58class KOTodoView;
59class KDateNavigator; 59class KDateNavigator;
60class DateNavigatorContainer; 60class DateNavigatorContainer;
61class DateNavigator; 61class DateNavigator;
62class KOIncidenceEditor; 62class KOIncidenceEditor;
63class KDatePicker; 63class KDatePicker;
64class ResourceView; 64class ResourceView;
65class KOEventEditor; 65class KOEventEditor;
66class KOTodoEditor ; 66class KOTodoEditor ;
67class KOEventViewerDialog; 67class KOEventViewerDialog;
68class KOBeamPrefs; 68class KOBeamPrefs;
69class KSyncProfile; 69class KSyncProfile;
70class AlarmDialog; 70class AlarmDialog;
71class KCal::Attendee; 71class KCal::Attendee;
72 72
73namespace KCal { class FileStorage; } 73namespace KCal { class FileStorage; }
74 74
75using namespace KCal; 75using namespace KCal;
76 76
77/** 77/**
78 This is the main calendar widget. It provides the different vies on t he 78 This is the main calendar widget. It provides the different vies on t he
79 calendar data as well as the date navigator. It also handles synchronisation 79 calendar data as well as the date navigator. It also handles synchronisation
80 of the different views and controls the different dialogs like preferences, 80 of the different views and controls the different dialogs like preferences,
81 event editor, search dialog etc. 81 event editor, search dialog etc.
82 82
83 @short main calendar view widget 83 @short main calendar view widget
84 @author Cornelius Schumacher 84 @author Cornelius Schumacher
85*/ 85*/
86 86
87#include <qtextbrowser.h> 87#include <qtextbrowser.h>
88#include <qtextcodec.h> 88#include <qtextcodec.h>
89 89
90class MissedAlarmTextBrowser : public QTextBrowser { 90class MissedAlarmTextBrowser : public QTextBrowser {
91 Q_OBJECT 91 Q_OBJECT
92 public: 92 public:
93 MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms ,QDateTime start); 93 MissedAlarmTextBrowser(QWidget *parent, QPtrList<Incidence> alarms ,QDateTime start);
94 ~MissedAlarmTextBrowser(); 94 ~MissedAlarmTextBrowser();
95 void setSource(const QString & n); 95 void setSource(const QString & n);
96 96
97 private: 97 private:
98 Incidence * getNextInc(QDateTime start ); 98 Incidence * getNextInc(QDateTime start );
99 QPtrList<Incidence> mAlarms; 99 QPtrList<Incidence> mAlarms;
100 signals: 100 signals:
101 void showIncidence( QString uid); 101 void showIncidence( QString uid);
102}; 102};
103 103
104 104
105class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface 105class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface
106{ 106{
107 Q_OBJECT 107 Q_OBJECT
108 public: 108 public:
109 /** 109 /**
110 Constructs a new calendar view widget. 110 Constructs a new calendar view widget.
111 111
112 @param calendar calendar document 112 @param calendar calendar document
113 @param parent parent window 113 @param parent parent window
114 @param name Qt internal widget object name 114 @param name Qt internal widget object name
115 */ 115 */
116 CalendarView( CalendarResources *calendar, QWidget *parent = 0, 116 CalendarView( CalendarResources *calendar, QWidget *parent = 0,
117 const char *name = 0 ); 117 const char *name = 0 );
118 CalendarView( Calendar *calendar, QWidget *parent = 0, 118 CalendarView( Calendar *calendar, QWidget *parent = 0,
119 const char *name = 0 ); 119 const char *name = 0 );
120 virtual ~CalendarView(); 120 virtual ~CalendarView();
121 121
122 Calendar *calendar() { return mCalendar; } 122 Calendar *calendar() { return mCalendar; }
123 123
124 KOViewManager *viewManager(); 124 KOViewManager *viewManager();
125 KODialogManager *dialogManager(); 125 KODialogManager *dialogManager();
126 126
127 QDate startDate(); 127 QDate startDate();
128 QDate endDate(); 128 QDate endDate();
129 129
130 QWidgetStack *viewStack(); 130 QWidgetStack *viewStack();
131 QWidget *leftFrame(); 131 QWidget *leftFrame();
132 132
133 DateNavigator *dateNavigator(); 133 DateNavigator *dateNavigator();
134 KDateNavigator *dateNavigatorWidget(); 134 KDateNavigator *dateNavigatorWidget();
135 135
136 void addView(KOrg::BaseView *); 136 void addView(KOrg::BaseView *);
137 void showView(KOrg::BaseView *); 137 void showView(KOrg::BaseView *);
138 KOEventViewerDialog* getEventViewerDialog(); 138 KOEventViewerDialog* getEventViewerDialog();
139 Incidence *currentSelection(); 139 Incidence *currentSelection();
140 void checkSuspendAlarm(); 140 void checkSuspendAlarm();
141 void mergeFile( QString fn );
141 142
142 signals: 143 signals:
143 void save (); 144 void save ();
144 void saveStopTimer (); 145 void saveStopTimer ();
145 void tempDisableBR(bool); 146 void tempDisableBR(bool);
146 /** This todo has been modified */ 147 /** This todo has been modified */
147 void todoModified(Todo *, int); 148 void todoModified(Todo *, int);
148 149
149 /** when change is made to options dialog, the topwidget will catch this 150 /** when change is made to options dialog, the topwidget will catch this
150 * and emit this signal which notifies all widgets which have registered 151 * and emit this signal which notifies all widgets which have registered
151 * for notification to update their settings. */ 152 * for notification to update their settings. */
152 void configChanged(); 153 void configChanged();
153 /** emitted when the topwidget is closing down, so that any attached 154 /** emitted when the topwidget is closing down, so that any attached
154 child windows can also close. */ 155 child windows can also close. */
155 void closingDown(); 156 void closingDown();
156 /** emitted right before we die */ 157 /** emitted right before we die */
157 void closed(QWidget *); 158 void closed(QWidget *);
158 159
159 /** Emitted when state of modified flag changes */ 160 /** Emitted when state of modified flag changes */
160 void modifiedChanged(bool); 161 void modifiedChanged(bool);
161 void signalmodified(); 162 void signalmodified();
162 163
163 /** Emitted when state of read-only flag changes */ 164 /** Emitted when state of read-only flag changes */
164 void readOnlyChanged(bool); 165 void readOnlyChanged(bool);
165 166
166 /** Emitted when the unit of navigation changes */ 167 /** Emitted when the unit of navigation changes */
167 void changeNavStringPrev(const QString &); 168 void changeNavStringPrev(const QString &);
168 void changeNavStringNext(const QString &); 169 void changeNavStringNext(const QString &);
169 170
170 /** Emitted when state of events selection has changed and user is organizer*/ 171 /** Emitted when state of events selection has changed and user is organizer*/
171 void organizerEventsSelected(bool); 172 void organizerEventsSelected(bool);
172 /** Emitted when state of events selection has changed and user is attendee*/ 173 /** Emitted when state of events selection has changed and user is attendee*/
173 void groupEventsSelected(bool); 174 void groupEventsSelected(bool);
174 /** 175 /**
175 Emitted when an incidence gets selected. If the selection is cleared the 176 Emitted when an incidence gets selected. If the selection is cleared the
176 signal is emitted with 0 as argument. 177 signal is emitted with 0 as argument.
177 */ 178 */
178 void incidenceSelected( Incidence * ); 179 void incidenceSelected( Incidence * );
179 /** Emitted, when a todoitem is selected or deselected. */ 180 /** Emitted, when a todoitem is selected or deselected. */
180 void todoSelected( bool ); 181 void todoSelected( bool );
181 182
182 /** 183 /**
183 Emitted, when clipboard content changes. Parameter indicates if paste 184 Emitted, when clipboard content changes. Parameter indicates if paste
184 is possible or not. 185 is possible or not.
185 */ 186 */
186 void pasteEnabled(bool); 187 void pasteEnabled(bool);
187 188
188 /** Emitted, when the number of incoming messages has changed. */ 189 /** Emitted, when the number of incoming messages has changed. */
189 void numIncomingChanged(int); 190 void numIncomingChanged(int);
190 191
191 /** Emitted, when the number of outgoing messages has changed. */ 192 /** Emitted, when the number of outgoing messages has changed. */
192 void numOutgoingChanged(int); 193 void numOutgoingChanged(int);
193 194
194 /** Send status message, which can e.g. be displayed in the status bar. */ 195 /** Send status message, which can e.g. be displayed in the status bar. */
195 void statusMessage(const QString &); 196 void statusMessage(const QString &);
196 197
197 void calendarViewExpanded( bool ); 198 void calendarViewExpanded( bool );
198 void updateSearchDialog(); 199 void updateSearchDialog();
199 void filtersUpdated(); 200 void filtersUpdated();
200 201
201 202
202 public slots: 203 public slots:
203 void nextConflict( bool all, bool allday ); 204 void nextConflict( bool all, bool allday );
204 void conflictAll(); 205 void conflictAll();
205 void conflictAllday(); 206 void conflictAllday();
206 void conflictNotAll(); 207 void conflictNotAll();
207 void setCalReadOnly( int id, bool readO ); 208 void setCalReadOnly( int id, bool readO );
208 void checkAlarms(); 209 void checkAlarms();
209 void checkFiles(); 210 void checkFiles();
210 void slotprintSelInc(); 211 void slotprintSelInc();
211 void showNextAlarms(); 212 void showNextAlarms();
212 void showOpenError(); 213 void showOpenError();
213 void watchSavedFile(); 214 void watchSavedFile();
214 void recheckTimerAlarm(); 215 void recheckTimerAlarm();
215 void checkNextTimerAlarm(); 216 void checkNextTimerAlarm();
216 void addAlarm(const QDateTime &qdt, const QString &noti ); 217 void addAlarm(const QDateTime &qdt, const QString &noti );
217 void addSuspendAlarm(const QDateTime &qdt, const QString &noti ); 218 void addSuspendAlarm(const QDateTime &qdt, const QString &noti );
218 void removeAlarm(const QDateTime &qdt, const QString &noti ); 219 void removeAlarm(const QDateTime &qdt, const QString &noti );
219 220
220 /** options dialog made a changed to the configuration. we catch this 221 /** options dialog made a changed to the configuration. we catch this
221 * and notify all widgets which need to update their configuration. */ 222 * and notify all widgets which need to update their configuration. */
222 void updateConfig(); 223 void updateConfig();
223 224
224 void insertBirthdays(const QString& uid, const QStringList& birthdayList, 225 void insertBirthdays(const QString& uid, const QStringList& birthdayList,
225 const QStringList& anniversaryList, const QStringList& realNameList, 226 const QStringList& anniversaryList, const QStringList& realNameList,
226 const QStringList& emailList, const QStringList& assembledNameList, 227 const QStringList& emailList, const QStringList& assembledNameList,
227 const QStringList& uidList); 228 const QStringList& uidList);
228 229
229 /** 230 /**
230 Load calendar from file \a filename. If \a merge is true, load 231 Load calendar from file \a filename. If \a merge is true, load
231 calendar into existing one, if it is false, clear calendar, before 232 calendar into existing one, if it is false, clear calendar, before
232 loading. Return true, if calendar could be successfully loaded. 233 loading. Return true, if calendar could be successfully loaded.
233 */ 234 */
234 bool openCalendar(QString filename, bool merge=false); 235 bool openCalendar(QString filename, bool merge=false);
235 bool loadCalendars(); 236 bool loadCalendars();
236 bool saveCalendars(); 237 bool saveCalendars();
237 bool restoreCalendarSettings(); 238 bool restoreCalendarSettings();
238 bool addCalendar( KopiCalendarFile * ); 239 bool addCalendar( KopiCalendarFile * );
239 void addCalendarId( int id ); 240 void addCalendarId( int id );
240 bool syncCalendar(QString filename,int mode = 0 ); 241 bool syncCalendar(QString filename,int mode = 0 );
241 242
242 /** 243 /**
243 Save calendar data to file. Return true if calendar could be 244 Save calendar data to file. Return true if calendar could be
244 successfully saved. 245 successfully saved.
245 */ 246 */
246 bool saveCalendar(QString filename); 247 bool saveCalendar(QString filename);
247 248
248 /** 249 /**
249 Close calendar. Clear calendar data and reset views to display an empty 250 Close calendar. Clear calendar data and reset views to display an empty
250 calendar. 251 calendar.
251 */ 252 */
252 void closeCalendar(); 253 void closeCalendar();
253 254
254 /** Archive old events of calendar */ 255 /** Archive old events of calendar */
255 void archiveCalendar(); 256 void archiveCalendar();
256 257
257 void showIncidence(); 258 void showIncidence();
258 void editIncidence(); 259 void editIncidence();
259 void editIncidenceDescription(); 260 void editIncidenceDescription();
260 void deleteIncidence(); 261 void deleteIncidence();
261 void cloneIncidence(); 262 void cloneIncidence();
262 void moveIncidence(); 263 void moveIncidence();
263 void beamIncidence(); 264 void beamIncidence();
264 void toggleCancelIncidence(); 265 void toggleCancelIncidence();
265 266
266 /** create an editeventwin with supplied date/time, and if bool is true, 267 /** create an editeventwin with supplied date/time, and if bool is true,
267 * make the event take all day. */ 268 * make the event take all day. */
268 void newEvent(QDateTime, QDateTime, bool allDay ); 269 void newEvent(QDateTime, QDateTime, bool allDay );
269 void newEvent(QDateTime, QDateTime); 270 void newEvent(QDateTime, QDateTime);
270 void newEvent(QDateTime fh); 271 void newEvent(QDateTime fh);
271 void newEvent(QDate dt); 272 void newEvent(QDate dt);
272 /** create new event without having a date hint. Takes current date as 273 /** create new event without having a date hint. Takes current date as
273 default hint. */ 274 default hint. */
274 void newEvent(); 275 void newEvent();
275 void newFloatingEvent(); 276 void newFloatingEvent();
276 277
277 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/ 278 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/
278 void showIncidence(Incidence *); 279 void showIncidence(Incidence *);
279 void showIncidence(QString uid); 280 void showIncidence(QString uid);
280 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/ 281 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/
281 void editIncidence(Incidence *); 282 void editIncidence(Incidence *);
282 /** Delete the supplied incidence. It calls the correct deleteXXX method*/ 283 /** Delete the supplied incidence. It calls the correct deleteXXX method*/
283 void deleteIncidence(Incidence *); 284 void deleteIncidence(Incidence *);
284 void cloneIncidence(Incidence *); 285 void cloneIncidence(Incidence *);
285 void cancelIncidence(Incidence *); 286 void cancelIncidence(Incidence *);
286 /** Create an editor for the supplied event. */ 287 /** Create an editor for the supplied event. */
287 void editEvent(Event *); 288 void editEvent(Event *);
288 /** Delete the supplied event. */ 289 /** Delete the supplied event. */
289 void deleteEvent(Event *); 290 void deleteEvent(Event *);
290 /** Delete the event with the given unique ID. Returns false, if event wasn't 291 /** Delete the event with the given unique ID. Returns false, if event wasn't
291 found. */ 292 found. */
292 bool deleteEvent(const QString &uid); 293 bool deleteEvent(const QString &uid);
293 /** Create a read-only viewer dialog for the supplied event. */ 294 /** Create a read-only viewer dialog for the supplied event. */
294 void showEvent(Event *); 295 void showEvent(Event *);
295 296
296 void editJournal(Journal *); 297 void editJournal(Journal *);
297 void showJournal(Journal *); 298 void showJournal(Journal *);
298 void deleteJournal(Journal *); 299 void deleteJournal(Journal *);
299 /** Create an editor dialog for a todo */ 300 /** Create an editor dialog for a todo */
300 void editTodo(Todo *); 301 void editTodo(Todo *);
301 /** Create a read-only viewer dialog for the supplied todo */ 302 /** Create a read-only viewer dialog for the supplied todo */
302 void showTodo(Todo *); 303 void showTodo(Todo *);
303 /** create new todo */ 304 /** create new todo */
304 void newTodo(); 305 void newTodo();
305 void newTodoDateTime(QDateTime, bool allday); 306 void newTodoDateTime(QDateTime, bool allday);
306 /** create new todo with a parent todo */ 307 /** create new todo with a parent todo */
307 void newSubTodo(); 308 void newSubTodo();
308 /** create new todo with a parent todo */ 309 /** create new todo with a parent todo */
309 void newSubTodo(Todo *); 310 void newSubTodo(Todo *);
310 /** Delete todo */ 311 /** Delete todo */
311 void deleteTodo(Todo *); 312 void deleteTodo(Todo *);
312 313
313 314
314 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is 315 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is
315 * emitted as result. */ 316 * emitted as result. */
316 void checkClipboard(); 317 void checkClipboard();
317 318
318 /** using the KConfig associated with the kapp variable, read in the 319 /** using the KConfig associated with the kapp variable, read in the
319 * settings from the config file. 320 * settings from the config file.
320 */ 321 */
321 void readSettings(); 322 void readSettings();
322 323
323 /** write current state to config file. */ 324 /** write current state to config file. */
324 void writeSettings(); 325 void writeSettings();
325 326
326 /** read settings for calendar filters */ 327 /** read settings for calendar filters */
327 void readFilterSettings(KConfig *config); 328 void readFilterSettings(KConfig *config);
328 329
329 /** write settings for calendar filters */ 330 /** write settings for calendar filters */
330 void writeFilterSettings(KConfig *config); 331 void writeFilterSettings(KConfig *config);
331 332
332 /** passes on the message that an event has changed to the currently 333 /** passes on the message that an event has changed to the currently
333 * activated view so that it can make appropriate display changes. */ 334 * activated view so that it can make appropriate display changes. */
334 void changeEventDisplay(Event *, int); 335 void changeEventDisplay(Event *, int);
335 void changeIncidenceDisplay(Incidence *, int); 336 void changeIncidenceDisplay(Incidence *, int);
336 void changeTodoDisplay(Todo *, int); 337 void changeTodoDisplay(Todo *, int);
337 338
338 void eventAdded(Event *); 339 void eventAdded(Event *);
339 void eventChanged(Event *); 340 void eventChanged(Event *);
340 void eventToBeDeleted(Event *); 341 void eventToBeDeleted(Event *);
341 void eventDeleted(); 342 void eventDeleted();
342 343
343 void todoAdded(Todo *); 344 void todoAdded(Todo *);
344 void todoChanged(Todo *); 345 void todoChanged(Todo *);
345 void todoToBeDeleted(Todo *); 346 void todoToBeDeleted(Todo *);
346 void todoDeleted(); 347 void todoDeleted();
347 348
348 void updateView(const QDate &start, const QDate &end); 349 void updateView(const QDate &start, const QDate &end);
349 void updateView(); 350 void updateView();
350 void clearAllViews(); 351 void clearAllViews();
351 352
352 /** Full update of visible todo views */ 353 /** Full update of visible todo views */
353 void updateTodoViews(); 354 void updateTodoViews();
354 355
355 void updateUnmanagedViews(); 356 void updateUnmanagedViews();
356 357
357 /** cut the current appointment to the clipboard */ 358 /** cut the current appointment to the clipboard */
358 void edit_cut(); 359 void edit_cut();
359 360
360 /** copy the current appointment(s) to the clipboard */ 361 /** copy the current appointment(s) to the clipboard */
361 void edit_copy(); 362 void edit_copy();
362 363
363 /** paste the current vobject(s) in the clipboard buffer into calendar */ 364 /** paste the current vobject(s) in the clipboard buffer into calendar */
364 void edit_paste(); 365 void edit_paste();
365 366
366 /** edit viewing and configuration options. */ 367 /** edit viewing and configuration options. */
367 void edit_options(); 368 void edit_options();
368 void edit_global_options(); 369 void edit_global_options();
369 /** 370 /**
370 Functions for printing, previewing a print, and setting up printing 371 Functions for printing, previewing a print, and setting up printing
371 parameters. 372 parameters.
372 */ 373 */
373 void print(); 374 void print();
374 void printSetup(); 375 void printSetup();
375 void printPreview(); 376 void printPreview();
376 377
377 /** Export as iCalendar file */ 378 /** Export as iCalendar file */
378 void exportICalendar(); 379 void exportICalendar();
379 380
380 /** Export as vCalendar file */ 381 /** Export as vCalendar file */
381 bool exportVCalendar( QString fn); 382 bool exportVCalendar( QString fn);
382 383
383 /** pop up a dialog to show an existing appointment. */ 384 /** pop up a dialog to show an existing appointment. */
384 void appointment_show(); 385 void appointment_show();
385 /** 386 /**
386 * pop up an Appointment Dialog to edit an existing appointment.Get 387 * pop up an Appointment Dialog to edit an existing appointment.Get
387 * information on the appointment from the list of unique IDs that is 388 * information on the appointment from the list of unique IDs that is
388 * currently in the View, called currIds. 389 * currently in the View, called currIds.
389 */ 390 */
390 void appointment_edit(); 391 void appointment_edit();
391 /** 392 /**
392 * pop up dialog confirming deletion of currently selected event in the 393 * pop up dialog confirming deletion of currently selected event in the
393 * View. 394 * View.
394 */ 395 */
395 void appointment_delete(); 396 void appointment_delete();
396 397
diff --git a/korganizer/journalentry.cpp b/korganizer/journalentry.cpp
index b8a4cf2..f0e0f86 100644
--- a/korganizer/journalentry.cpp
+++ b/korganizer/journalentry.cpp
@@ -1,333 +1,353 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24// 24//
25// Journal Entry 25// Journal Entry
26 26
27#include <qlabel.h> 27#include <qlabel.h>
28#include <qlayout.h> 28#include <qlayout.h>
29#include <qvbox.h> 29#include <qvbox.h>
30#include <qfile.h> 30#include <qfile.h>
31#include <qdir.h> 31#include <qdir.h>
32#include <qtextstream.h> 32#include <qtextstream.h>
33#include <qtextcodec.h> 33#include <qtextcodec.h>
34#include <qpixmap.h> 34#include <qpixmap.h>
35#include <qpushbutton.h> 35#include <qpushbutton.h>
36#include <qapplication.h> 36#include <qapplication.h>
37 37
38#include <kdebug.h> 38#include <kdebug.h>
39#include <kglobal.h> 39#include <kglobal.h>
40#include <klocale.h> 40#include <klocale.h>
41#include <ktextedit.h> 41#include <ktextedit.h>
42#include <kfiledialog.h> 42#include <kfiledialog.h>
43#include <kmessagebox.h> 43#include <kmessagebox.h>
44#include "koprefs.h" 44#include "koprefs.h"
45#include <klineedit.h> 45#include <klineedit.h>
46#include <kdialog.h> 46#include <kdialog.h>
47#include "kolocationbox.h" 47#include "kolocationbox.h"
48 48
49#include <libkcal/journal.h> 49#include <libkcal/journal.h>
50#include <libkcal/calendarresources.h> 50#include <libkcal/calendarresources.h>
51#include <libkcal/resourcecalendar.h> 51#include <libkcal/resourcecalendar.h>
52#include <kresources/resourceselectdialog.h> 52#include <kresources/resourceselectdialog.h>
53 53
54#include "journalentry.h" 54#include "journalentry.h"
55//#include "journalentry.moc" 55//#include "journalentry.moc"
56#ifndef DESKTOP_VERSION 56#ifndef DESKTOP_VERSION
57#include <qpe/qpeapplication.h> 57#include <qpe/qpeapplication.h>
58#endif 58#endif
59JournalEntry::JournalEntry(Calendar *calendar,QWidget *parent) : 59JournalEntry::JournalEntry(Calendar *calendar,QWidget *parent) :
60 QFrame(parent) 60 QFrame(parent)
61{ 61{
62 62
63 int fac = 5; 63 int fac = 5;
64 heiHint = QApplication::desktop()->height(); 64 heiHint = QApplication::desktop()->height();
65 if ( heiHint > 800 ) 65 if ( heiHint > 800 )
66 fac += 2; 66 fac += 2;
67 heiHint = heiHint / fac; 67 heiHint = heiHint / fac;
68 68
69 showOnlyMode = false; 69 showOnlyMode = false;
70 mCalendar = calendar; 70 mCalendar = calendar;
71 mJournal = 0; 71 mJournal = 0;
72 visibleMode = true; 72 visibleMode = true;
73 QHBox * vb = new QHBox ( this ); 73 QHBox * vb = new QHBox ( this );
74 QPixmap iconp; 74 QPixmap iconp;
75 vb->setMargin ( KDialog::marginHint()-1 ); 75 vb->setMargin ( KDialog::marginHint()-1 );
76 QPushButton * toggleJournal = new QPushButton( vb ); 76 QPushButton * toggleJournal = new QPushButton( vb );
77 iconp = SmallIcon("1updownarrow"); 77 iconp = SmallIcon("1updownarrow");
78 toggleJournal->setPixmap (iconp ) ; 78 toggleJournal->setPixmap (iconp ) ;
79 vb->setStretchFactor (new QLabel(" "+i18n("Title: "),vb),1); 79 QLabel* textLabel = new QLabel(" "+i18n("Title: "),vb);
80 vb->setStretchFactor (textLabel,1);
80 vb->setStretchFactor( toggleJournal, 1 ); 81 vb->setStretchFactor( toggleJournal, 1 );
81 mTitle = new KOLocationBox(TRUE, vb, 30); 82 mTitle = new KOLocationBox(TRUE, vb, 30);
82 mTitle->setSizePolicy( QSizePolicy( QSizePolicy::MinimumExpanding ,QSizePolicy::Fixed ,FALSE) ); 83 mTitle->setSizePolicy( QSizePolicy( QSizePolicy::MinimumExpanding ,QSizePolicy::Fixed ,FALSE) );
83 mCalendarBox = new QComboBox(vb); 84 mCalendarBox = new QComboBox(vb);
84 mCalendarBox->setSizePolicy( QSizePolicy( QSizePolicy::MinimumExpanding ,QSizePolicy::Fixed ,FALSE) ); 85 mCalendarBox->setSizePolicy( QSizePolicy( QSizePolicy::MinimumExpanding ,QSizePolicy::Fixed ,FALSE) );
85#ifndef DESKTOP_VERSION 86#ifndef DESKTOP_VERSION
86 mTitle->setSizeLimit( 8 ); 87 mTitle->setSizeLimit( 8 );
87 mCalendarBox->setSizeLimit( 8 ); 88 mCalendarBox->setSizeLimit( 8 );
88#endif 89#endif
89 vb->setStretchFactor ( mTitle, 8 ); 90 vb->setStretchFactor ( mTitle, 8 );
90 vb->setStretchFactor ( mCalendarBox, 3 ); 91 vb->setStretchFactor ( mCalendarBox, 3 );
91 //mTitleLabel->setMargin(0); 92 //mTitleLabel->setMargin(0);
92 //mTitleLabel->setAlignment(AlignCenter); 93 //mTitleLabel->setAlignment(AlignCenter);
93 QPushButton * loadTemplate = new QPushButton( vb ); 94 QPushButton * loadTemplate = new QPushButton( vb );
94 QPushButton * saveTemplate = new QPushButton( vb ); 95 QPushButton * saveTemplate = new QPushButton( vb );
95 if ( QApplication::desktop()->width() < 321 ) 96 if ( QApplication::desktop()->width() < 321 )
96 iconp = SmallIcon("fileexport16"); 97 iconp = SmallIcon("fileexport16");
97 else 98 else
98 iconp = SmallIcon("fileexport"); 99 iconp = SmallIcon("fileexport");
99 saveTemplate->setPixmap (iconp ) ; 100 saveTemplate->setPixmap (iconp ) ;
100 int size = saveTemplate->sizeHint().height(); 101 int size = saveTemplate->sizeHint().height();
101 if ( QApplication::desktop()->width() < 321 ) 102 if ( QApplication::desktop()->width() < 321 )
102 iconp = SmallIcon("fileimport16"); 103 iconp = SmallIcon("fileimport16");
103 else 104 else
104 iconp = SmallIcon("fileimport"); 105 iconp = SmallIcon("fileimport");
105 loadTemplate->setPixmap (iconp ) ; 106 loadTemplate->setPixmap (iconp ) ;
106 loadTemplate->setFixedSize( size, size ); 107 loadTemplate->setFixedSize( size, size );
107 saveTemplate->setFixedSize( size, size ); 108 saveTemplate->setFixedSize( size, size );
108 toggleJournal->setFixedSize( size , size ); 109 toggleJournal->setFixedSize( size , size );
109 mTitle->setFixedHeight( size+4); 110 mTitle->setFixedHeight( size+4);
110 mCalendarBox->setFixedHeight( size+4); 111 mCalendarBox->setFixedHeight( size+4);
111 mEditor = new KTextEdit(this); 112 mEditor = new KTextEdit(this);
112#ifndef DESKTOP_VERSION 113#ifndef DESKTOP_VERSION
113 QPEApplication::setStylusOperation( mEditor, QPEApplication::RightOnHold ); 114 QPEApplication::setStylusOperation( mEditor, QPEApplication::RightOnHold );
114#endif 115#endif
116 mMaxWidDiff = 3*size - 2*frameWidth() - textLabel->sizeHint().width();
117 mDeskWid = QApplication::desktop()->width();
118 int maxwid = mDeskWid - mMaxWidDiff;
119 mTitle->setMaximumWidth( maxwid/2 +20 );
120 mCalendarBox->setMaximumWidth( maxwid/2 -20 );
115 mEditor->setWordWrap( KTextEdit::WidgetWidth ); 121 mEditor->setWordWrap( KTextEdit::WidgetWidth );
116 QBoxLayout *topLayout = new QVBoxLayout(this); 122 QBoxLayout *topLayout = new QVBoxLayout(this);
117 topLayout->addWidget(vb); 123 topLayout->addWidget(vb);
118 topLayout->addWidget(mEditor); 124 topLayout->addWidget(mEditor);
119 mEditor->installEventFilter(this); 125 mEditor->installEventFilter(this);
120 connect( saveTemplate, SIGNAL( clicked() ), this , SLOT( slotSaveTemplate() ) ); 126 connect( saveTemplate, SIGNAL( clicked() ), this , SLOT( slotSaveTemplate() ) );
121 connect( loadTemplate, SIGNAL( clicked() ), this , SLOT( slotLoadTemplate() ) ); 127 connect( loadTemplate, SIGNAL( clicked() ), this , SLOT( slotLoadTemplate() ) );
122 connect( toggleJournal, SIGNAL( clicked() ), this , SLOT( toggleShowJournal() ) ); 128 connect( toggleJournal, SIGNAL( clicked() ), this , SLOT( toggleShowJournal() ) );
123 mTitle->load( KOLocationBox::SUMMARYJOURNAL ); 129 mTitle->load( KOLocationBox::SUMMARYJOURNAL );
124 mTitle->lineEdit ()->setText(""); 130 mTitle->lineEdit ()->setText("");
125} 131}
126 132
127JournalEntry::~JournalEntry() 133JournalEntry::~JournalEntry()
128{ 134{
129 //qDebug("JournalEntry::~JournalEntry() "); 135 //qDebug("JournalEntry::~JournalEntry() ");
130} 136}
137void JournalEntry::resizeEvent(QResizeEvent* e )
138{
139#ifndef DESKTOP_VERSION
140 if ( mDeskWid != QApplication::desktop()->width() ) {
141 mDeskWid == QApplication::desktop()->width();
142 int maxwid = mDeskWid - mMaxWidDiff;
143 mTitle->setMaximumWidth( maxwid/2 +20 );
144 mCalendarBox->setMaximumWidth( maxwid/2 -20 );
145 }
146 setMaximumWidth( QApplication::desktop()->width() );
147 qDebug("MAXXX %d ", QApplication::desktop()->width());
148#endif
149 QFrame::resizeEvent( e );
150}
131QSize JournalEntry::sizeHint() const 151QSize JournalEntry::sizeHint() const
132{ 152{
133 return QSize ( 240, heiHint ); 153 return QSize ( 240, heiHint );
134} 154}
135void JournalEntry::slotSaveTemplate() 155void JournalEntry::slotSaveTemplate()
136{ 156{
137 QString fileName =locateLocal( "templates", "journals" ); 157 QString fileName =locateLocal( "templates", "journals" );
138 QDir t_dir; 158 QDir t_dir;
139 if ( !t_dir.exists(fileName) ) 159 if ( !t_dir.exists(fileName) )
140 t_dir.mkdir ( fileName ); 160 t_dir.mkdir ( fileName );
141 fileName += "/journal"; 161 fileName += "/journal";
142 fileName = KFileDialog::getSaveFileName( fileName , i18n("Save as Journal template"), this ); 162 fileName = KFileDialog::getSaveFileName( fileName , i18n("Save as Journal template"), this );
143 if ( fileName.length() == 0 ) 163 if ( fileName.length() == 0 )
144 return; 164 return;
145 165
146 QFile fileIn( fileName ); 166 QFile fileIn( fileName );
147 if (!fileIn.open( IO_WriteOnly ) ) { 167 if (!fileIn.open( IO_WriteOnly ) ) {
148 KMessageBox::error( this, i18n("Error saving template file\n '%1'.") 168 KMessageBox::error( this, i18n("Error saving template file\n '%1'.")
149 .arg( fileName ) ); 169 .arg( fileName ) );
150 return; 170 return;
151 } 171 }
152 // QString text; 172 // QString text;
153 QTextStream tsIn( &fileIn ); 173 QTextStream tsIn( &fileIn );
154 tsIn.setCodec( QTextCodec::codecForName("utf8") ); 174 tsIn.setCodec( QTextCodec::codecForName("utf8") );
155 tsIn << mEditor->text(); 175 tsIn << mEditor->text();
156 fileIn.close(); 176 fileIn.close();
157} 177}
158void JournalEntry::slotLoadTemplate() 178void JournalEntry::slotLoadTemplate()
159{ 179{
160 QString fileName =locateLocal( "templates", "journals" ); 180 QString fileName =locateLocal( "templates", "journals" );
161 QDir t_dir; 181 QDir t_dir;
162 if ( !t_dir.exists(fileName) ) 182 if ( !t_dir.exists(fileName) )
163 t_dir.mkdir ( fileName ); 183 t_dir.mkdir ( fileName );
164 fileName += "/journal"; 184 fileName += "/journal";
165 fileName = KFileDialog::getOpenFileName( fileName , i18n("Insert Journal template"), this ); 185 fileName = KFileDialog::getOpenFileName( fileName , i18n("Insert Journal template"), this );
166 if ( fileName.length() == 0 ) 186 if ( fileName.length() == 0 )
167 return; 187 return;
168 QFile fileIn( fileName ); 188 QFile fileIn( fileName );
169 if (!fileIn.open( IO_ReadOnly ) ) { 189 if (!fileIn.open( IO_ReadOnly ) ) {
170 KMessageBox::error( this, i18n("Error loading template file\n '%1'.") 190 KMessageBox::error( this, i18n("Error loading template file\n '%1'.")
171 .arg( fileName ) ); 191 .arg( fileName ) );
172 return; 192 return;
173 } 193 }
174 QTextStream tsIn( &fileIn ); 194 QTextStream tsIn( &fileIn );
175 tsIn.setCodec( QTextCodec::codecForName("utf8") ); 195 tsIn.setCodec( QTextCodec::codecForName("utf8") );
176 QString text = tsIn.read(); 196 QString text = tsIn.read();
177 fileIn.close(); 197 fileIn.close();
178 int line, col; 198 int line, col;
179 mEditor->getCursorPosition (& line, & col ); 199 mEditor->getCursorPosition (& line, & col );
180 mEditor-> insertAt ( text, line, col, true ); 200 mEditor-> insertAt ( text, line, col, true );
181 //mEditor->setIgnoreMark( true ); 201 //mEditor->setIgnoreMark( true );
182} 202}
183void JournalEntry::setDate(const QDate &date) 203void JournalEntry::setDate(const QDate &date)
184{ 204{
185 showOnlyMode = false; 205 showOnlyMode = false;
186 writeJournal(); 206 writeJournal();
187 mDate = date; 207 mDate = date;
188 fillCalendar( mCalendar->defaultCalendar() ); 208 fillCalendar( mCalendar->defaultCalendar() );
189} 209}
190void JournalEntry::fillCalendar( int setToID ) 210void JournalEntry::fillCalendar( int setToID )
191{ 211{
192 mCalendarBox->clear(); 212 mCalendarBox->clear();
193 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first(); 213 KopiCalendarFile * kkf = KOPrefs::instance()->mCalendars.first();
194 int std = 0; 214 int std = 0;
195 int count = 0; 215 int count = 0;
196 while ( kkf ) { 216 while ( kkf ) {
197 if ( (!kkf->mErrorOnLoad &&! kkf->isReadOnly) || setToID == kkf->mCalNumber ) { 217 if ( (!kkf->mErrorOnLoad &&! kkf->isReadOnly) || setToID == kkf->mCalNumber ) {
198 if ( setToID ) { 218 if ( setToID ) {
199 if ( kkf->mCalNumber == setToID ) 219 if ( kkf->mCalNumber == setToID )
200 std = count; 220 std = count;
201 } else { 221 } else {
202 if ( kkf->isStandard ) { 222 if ( kkf->isStandard ) {
203 std = count; 223 std = count;
204 } 224 }
205 } 225 }
206 ++count; 226 ++count;
207 mCalendarBox->insertItem( kkf->mName ); 227 mCalendarBox->insertItem( kkf->mName );
208 } 228 }
209 kkf = KOPrefs::instance()->mCalendars.next(); 229 kkf = KOPrefs::instance()->mCalendars.next();
210 } 230 }
211 mCalendarBox->setCurrentItem( std ); 231 mCalendarBox->setCurrentItem( std );
212} 232}
213 233
214void JournalEntry::toggleShowJournal() 234void JournalEntry::toggleShowJournal()
215{ 235{
216 if (!mEditor->text().isEmpty() || !mTitle->currentText ().isEmpty()) 236 if (!mEditor->text().isEmpty() || !mTitle->currentText ().isEmpty())
217 flushEntry(); 237 flushEntry();
218 if ( showOnlyMode ) 238 if ( showOnlyMode )
219 emit showJournalOnly( 0 ); 239 emit showJournalOnly( 0 );
220 else { 240 else {
221 // we have to protect mJournal from deleting if mJournal has empty text 241 // we have to protect mJournal from deleting if mJournal has empty text
222 visibleMode = false; // set to true via :setShowOnly() 242 visibleMode = false; // set to true via :setShowOnly()
223 emit showJournalOnly( mJournal ); 243 emit showJournalOnly( mJournal );
224 //QTimer::singleShot( 0, this, SLOT( setVisibleOn() ) ); 244 //QTimer::singleShot( 0, this, SLOT( setVisibleOn() ) );
225 } 245 }
226} 246}
227void JournalEntry::setVisibleOn() 247void JournalEntry::setVisibleOn()
228{ 248{
229 visibleMode = true; 249 visibleMode = true;
230} 250}
231void JournalEntry::setShowOnly() 251void JournalEntry::setShowOnly()
232{ 252{
233 showOnlyMode = true; 253 showOnlyMode = true;
234 if ( mTitle->currentText().isEmpty() ) 254 if ( mTitle->currentText().isEmpty() )
235 mTitle->setFocus(); 255 mTitle->setFocus();
236 else 256 else
237 mEditor->setFocus(); 257 mEditor->setFocus();
238} 258}
239void JournalEntry::setJournal(Journal *journal, bool saveJournal ) 259void JournalEntry::setJournal(Journal *journal, bool saveJournal )
240{ 260{
241 if ( saveJournal ) 261 if ( saveJournal )
242 writeJournal(); 262 writeJournal();
243 mTitle->load( KOLocationBox::SUMMARYJOURNAL ); 263 mTitle->load( KOLocationBox::SUMMARYJOURNAL );
244 264
245 mJournal = journal; 265 mJournal = journal;
246 if ( journal->isReadOnly() ) 266 if ( journal->isReadOnly() )
247 mTitle->lineEdit ()->setText(mJournal->summary()+" ("+i18n("readonly")+")"); 267 mTitle->lineEdit ()->setText(mJournal->summary()+" ("+i18n("readonly")+")");
248 else 268 else
249 mTitle->lineEdit ()->setText(mJournal->summary()); 269 mTitle->lineEdit ()->setText(mJournal->summary());
250 mEditor->setText(mJournal->description()); 270 mEditor->setText(mJournal->description());
251 mTitle->setEnabled (!journal->isReadOnly() ); 271 mTitle->setEnabled (!journal->isReadOnly() );
252 mEditor->setReadOnly ( journal->isReadOnly() ); 272 mEditor->setReadOnly ( journal->isReadOnly() );
253 mCalendarBox->setEnabled (!journal->isReadOnly() ); 273 mCalendarBox->setEnabled (!journal->isReadOnly() );
254 fillCalendar( mJournal->calID() ); 274 fillCalendar( mJournal->calID() );
255} 275}
256 276
257Journal *JournalEntry::journal() const 277Journal *JournalEntry::journal() const
258{ 278{
259 return mJournal; 279 return mJournal;
260} 280}
261 281
262 282
263void JournalEntry::clear() 283void JournalEntry::clear()
264{ 284{
265 mJournal = 0; 285 mJournal = 0;
266 mEditor->setText(""); 286 mEditor->setText("");
267 mTitle->load( KOLocationBox::SUMMARYJOURNAL ); 287 mTitle->load( KOLocationBox::SUMMARYJOURNAL );
268 mTitle->lineEdit ()->setText(""); 288 mTitle->lineEdit ()->setText("");
269} 289}
270 290
271bool JournalEntry::eventFilter( QObject *o, QEvent *e ) 291bool JournalEntry::eventFilter( QObject *o, QEvent *e )
272{ 292{
273// kdDebug() << "JournalEntry::event received " << e->type() << endl; 293// kdDebug() << "JournalEntry::event received " << e->type() << endl;
274 294
275 if ( e->type() == QEvent::FocusOut ) { 295 if ( e->type() == QEvent::FocusOut ) {
276 writeJournal(); 296 writeJournal();
277 } 297 }
278 if ( e->type() == QEvent::KeyPress ) { 298 if ( e->type() == QEvent::KeyPress ) {
279 QKeyEvent * k = (QKeyEvent *) e; 299 QKeyEvent * k = (QKeyEvent *) e;
280 if ( k->state() == Qt::ControlButton ) { 300 if ( k->state() == Qt::ControlButton ) {
281 k->ignore(); 301 k->ignore();
282 //return true; 302 //return true;
283 } 303 }
284 } 304 }
285 305
286 return QFrame::eventFilter( o, e ); // standard event processing 306 return QFrame::eventFilter( o, e ); // standard event processing
287} 307}
288 308
289void JournalEntry::writeJournal() 309void JournalEntry::writeJournal()
290{ 310{
291 if ( !visibleMode ) return; 311 if ( !visibleMode ) return;
292 if ( !mTitle->isEnabled() ) return; 312 if ( !mTitle->isEnabled() ) return;
293 if (mEditor->text().isEmpty() && mTitle->currentText().isEmpty()) { 313 if (mEditor->text().isEmpty() && mTitle->currentText().isEmpty()) {
294 if ( mJournal ) { 314 if ( mJournal ) {
295 Journal* j = mJournal; 315 Journal* j = mJournal;
296 mJournal = 0; 316 mJournal = 0;
297 bool conf = KOPrefs::instance()->mConfirm; 317 bool conf = KOPrefs::instance()->mConfirm;
298 KOPrefs::instance()->mConfirm = false; 318 KOPrefs::instance()->mConfirm = false;
299 emit deleteJournal(j); 319 emit deleteJournal(j);
300 KOPrefs::instance()->mConfirm = conf; 320 KOPrefs::instance()->mConfirm = conf;
301 } 321 }
302 return; 322 return;
303 } 323 }
304 324
305// kdDebug() << "JournalEntry::writeJournal()..." << endl; 325// kdDebug() << "JournalEntry::writeJournal()..." << endl;
306 326
307 if (!mJournal) { 327 if (!mJournal) {
308 mJournal = new Journal; 328 mJournal = new Journal;
309 mJournal->setDtStart(QDateTime(mDate,QTime(0,0,0))); 329 mJournal->setDtStart(QDateTime(mDate,QTime(0,0,0)));
310 mCalendar->addJournal(mJournal); 330 mCalendar->addJournal(mJournal);
311 } 331 }
312 if ( mJournal->description() != mEditor->text() ) { 332 if ( mJournal->description() != mEditor->text() ) {
313 mJournal->setDescription(mEditor->text()); 333 mJournal->setDescription(mEditor->text());
314 } 334 }
315 if ( mJournal->summary() != mTitle->currentText() ) { 335 if ( mJournal->summary() != mTitle->currentText() ) {
316 mJournal->setSummary(mTitle->currentText()); 336 mJournal->setSummary(mTitle->currentText());
317 mTitle->save(KOLocationBox::SUMMARYJOURNAL); 337 mTitle->save(KOLocationBox::SUMMARYJOURNAL);
318 } 338 }
319 int id = KOPrefs::instance()->getCalendarID( mCalendarBox->currentText() ); 339 int id = KOPrefs::instance()->getCalendarID( mCalendarBox->currentText() );
320 if ( mJournal->calID() != id ) { 340 if ( mJournal->calID() != id ) {
321 mJournal->setCalID( id ); 341 mJournal->setCalID( id );
322 } 342 }
323} 343}
324 344
325void JournalEntry::flushEntry() 345void JournalEntry::flushEntry()
326{ 346{
327 writeJournal(); 347 writeJournal();
328} 348}
329void JournalEntry::keyPressEvent ( QKeyEvent * e ) 349void JournalEntry::keyPressEvent ( QKeyEvent * e )
330{ 350{
331 e->ignore(); 351 e->ignore();
332 352
333} 353}
diff --git a/korganizer/journalentry.h b/korganizer/journalentry.h
index ed04b7c..a69846c 100644
--- a/korganizer/journalentry.h
+++ b/korganizer/journalentry.h
@@ -1,86 +1,89 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23#ifndef JOURNALENTRY_H 23#ifndef JOURNALENTRY_H
24#define JOURNALENTRY_H 24#define JOURNALENTRY_H
25// 25//
26// Widget showing one Journal entry 26// Widget showing one Journal entry
27 27
28#include <qframe.h> 28#include <qframe.h>
29 29
30#include <libkcal/calendar.h> 30#include <libkcal/calendar.h>
31 31
32class QLabel; 32class QLabel;
33class KTextEdit; 33class KTextEdit;
34class QComboBox; 34class QComboBox;
35class KLineEdit; 35class KLineEdit;
36class KOLocationBox; 36class KOLocationBox;
37 37
38using namespace KCal; 38using namespace KCal;
39 39
40class JournalEntry : public QFrame { 40class JournalEntry : public QFrame {
41 Q_OBJECT 41 Q_OBJECT
42 public: 42 public:
43 JournalEntry(Calendar *,QWidget *parent); 43 JournalEntry(Calendar *,QWidget *parent);
44 virtual ~JournalEntry(); 44 virtual ~JournalEntry();
45 45
46 void setJournal(Journal *, bool saveJournal = true ); 46 void setJournal(Journal *, bool saveJournal = true );
47 Journal *journal() const; 47 Journal *journal() const;
48 48
49 void setDate(const QDate &); 49 void setDate(const QDate &);
50 50
51 void clear(); 51 void clear();
52 52
53 void flushEntry(); 53 void flushEntry();
54 void setShowOnly(); 54 void setShowOnly();
55 QSize sizeHint() const; 55 QSize sizeHint() const;
56 void setVisibleMode( bool b ) { visibleMode = b;} 56 void setVisibleMode( bool b ) { visibleMode = b;}
57 void fillCalendar( int id = 0 ); 57 void fillCalendar( int id = 0 );
58 void resizeEvent(QResizeEvent* e ) ;
58 protected slots: 59 protected slots:
59 void slotSaveTemplate(); 60 void slotSaveTemplate();
60 void slotLoadTemplate(); 61 void slotLoadTemplate();
61 void toggleShowJournal(); 62 void toggleShowJournal();
62 void setVisibleOn(); 63 void setVisibleOn();
63 signals: 64 signals:
64 void deleteJournal(Journal *); 65 void deleteJournal(Journal *);
65 void newJournal(); 66 void newJournal();
66 void showJournalOnly( Journal * ); 67 void showJournalOnly( Journal * );
67 68
68 protected: 69 protected:
69 bool eventFilter( QObject *o, QEvent *e ); 70 bool eventFilter( QObject *o, QEvent *e );
70 71
71 void writeJournal(); 72 void writeJournal();
72 73
73 private: 74 private:
75 int mMaxWidDiff;
76 int mDeskWid;
74 bool visibleMode; 77 bool visibleMode;
75 bool showOnlyMode; 78 bool showOnlyMode;
76 Calendar *mCalendar; 79 Calendar *mCalendar;
77 Journal *mJournal; 80 Journal *mJournal;
78 QDate mDate; 81 QDate mDate;
79 void keyPressEvent ( QKeyEvent * ) ; 82 void keyPressEvent ( QKeyEvent * ) ;
80 QComboBox *mCalendarBox; 83 QComboBox *mCalendarBox;
81 KOLocationBox * mTitle; 84 KOLocationBox * mTitle;
82 KTextEdit *mEditor; 85 KTextEdit *mEditor;
83 int heiHint; 86 int heiHint;
84}; 87};
85 88
86#endif 89#endif
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp
index 5249300..4bedb61 100644
--- a/korganizer/mainwindow.cpp
+++ b/korganizer/mainwindow.cpp
@@ -2291,346 +2291,346 @@ void MainWindow::updateFilterToolbar()
2291 if ( filterMenubar ) { 2291 if ( filterMenubar ) {
2292 if ( !mView->filterView()->filtersEnabled() ) { 2292 if ( !mView->filterView()->filtersEnabled() ) {
2293 filterMenubar->changeItem( 0, i18n("No Filter") ); 2293 filterMenubar->changeItem( 0, i18n("No Filter") );
2294 } else { 2294 } else {
2295 CalFilter *curfilter = mView->filterView()->selectedFilter(); 2295 CalFilter *curfilter = mView->filterView()->selectedFilter();
2296 if ( curfilter ) { 2296 if ( curfilter ) {
2297 filterMenubar->changeItem( 0, curfilter->name() ); 2297 filterMenubar->changeItem( 0, curfilter->name() );
2298 } 2298 }
2299 } 2299 }
2300 } 2300 }
2301} 2301}
2302void MainWindow::selectFilterPopup( int fil ) 2302void MainWindow::selectFilterPopup( int fil )
2303{ 2303{
2304 selectFilter( fil + 1 ); 2304 selectFilter( fil + 1 );
2305 2305
2306} 2306}
2307void MainWindow::configureToolBar( int item ) 2307void MainWindow::configureToolBar( int item )
2308{ 2308{
2309 2309
2310 configureToolBarMenu->setItemChecked( item, !configureToolBarMenu-> isItemChecked ( item ) ); 2310 configureToolBarMenu->setItemChecked( item, !configureToolBarMenu-> isItemChecked ( item ) );
2311 KOPrefs *p = KOPrefs::instance(); 2311 KOPrefs *p = KOPrefs::instance();
2312 p-> mShowIconStretch= configureToolBarMenu->isItemChecked( 5 ); 2312 p-> mShowIconStretch= configureToolBarMenu->isItemChecked( 5 );
2313 p-> mShowIconOnetoolbar = configureToolBarMenu->isItemChecked( 6 ); 2313 p-> mShowIconOnetoolbar = configureToolBarMenu->isItemChecked( 6 );
2314 p-> mShowIconFilter = configureToolBarMenu->isItemChecked( 7 ); 2314 p-> mShowIconFilter = configureToolBarMenu->isItemChecked( 7 );
2315 p-> mShowIconNewEvent= configureToolBarMenu->isItemChecked( 10 ); 2315 p-> mShowIconNewEvent= configureToolBarMenu->isItemChecked( 10 );
2316 p->mShowIconNewTodo = configureToolBarMenu->isItemChecked( 20 ); 2316 p->mShowIconNewTodo = configureToolBarMenu->isItemChecked( 20 );
2317 p->mShowIconNavigator = configureToolBarMenu->isItemChecked( 22 ); 2317 p->mShowIconNavigator = configureToolBarMenu->isItemChecked( 22 );
2318 p->mShowIconAllday = configureToolBarMenu->isItemChecked( 24 ); 2318 p->mShowIconAllday = configureToolBarMenu->isItemChecked( 24 );
2319 p->mShowIconFilterview = configureToolBarMenu->isItemChecked( 26 ); 2319 p->mShowIconFilterview = configureToolBarMenu->isItemChecked( 26 );
2320 p->mShowIconToggleFull = configureToolBarMenu->isItemChecked( 28 ); 2320 p->mShowIconToggleFull = configureToolBarMenu->isItemChecked( 28 );
2321 p-> mShowIconSearch= configureToolBarMenu->isItemChecked( 120 ); 2321 p-> mShowIconSearch= configureToolBarMenu->isItemChecked( 120 );
2322 p-> mShowIconList= configureToolBarMenu->isItemChecked( 30 ); 2322 p-> mShowIconList= configureToolBarMenu->isItemChecked( 30 );
2323 p-> mShowIconDay1= configureToolBarMenu->isItemChecked( 40 ); 2323 p-> mShowIconDay1= configureToolBarMenu->isItemChecked( 40 );
2324 p-> mShowIconDay5= configureToolBarMenu->isItemChecked( 50 ); 2324 p-> mShowIconDay5= configureToolBarMenu->isItemChecked( 50 );
2325 p-> mShowIconDay6= configureToolBarMenu->isItemChecked( 75 ); 2325 p-> mShowIconDay6= configureToolBarMenu->isItemChecked( 75 );
2326 p-> mShowIconDay7= configureToolBarMenu->isItemChecked( 60 ); 2326 p-> mShowIconDay7= configureToolBarMenu->isItemChecked( 60 );
2327 p-> mShowIconMonth= configureToolBarMenu->isItemChecked( 70 ); 2327 p-> mShowIconMonth= configureToolBarMenu->isItemChecked( 70 );
2328 p-> mShowIconTodoview= configureToolBarMenu->isItemChecked( 80 ); 2328 p-> mShowIconTodoview= configureToolBarMenu->isItemChecked( 80 );
2329 p-> mShowIconBackFast= configureToolBarMenu->isItemChecked( 200 ); 2329 p-> mShowIconBackFast= configureToolBarMenu->isItemChecked( 200 );
2330 p-> mShowIconBack = configureToolBarMenu->isItemChecked( 210 ); 2330 p-> mShowIconBack = configureToolBarMenu->isItemChecked( 210 );
2331 p-> mShowIconToday= configureToolBarMenu->isItemChecked( 130 ); 2331 p-> mShowIconToday= configureToolBarMenu->isItemChecked( 130 );
2332 p-> mShowIconForward= configureToolBarMenu->isItemChecked( 220 ); 2332 p-> mShowIconForward= configureToolBarMenu->isItemChecked( 220 );
2333 p-> mShowIconForwardFast= configureToolBarMenu->isItemChecked( 230 ); 2333 p-> mShowIconForwardFast= configureToolBarMenu->isItemChecked( 230 );
2334 p-> mShowIconNextDays= configureToolBarMenu->isItemChecked( 100 ); 2334 p-> mShowIconNextDays= configureToolBarMenu->isItemChecked( 100 );
2335 p-> mShowIconNext= configureToolBarMenu->isItemChecked( 110 ); 2335 p-> mShowIconNext= configureToolBarMenu->isItemChecked( 110 );
2336 p-> mShowIconJournal= configureToolBarMenu->isItemChecked( 90 ); 2336 p-> mShowIconJournal= configureToolBarMenu->isItemChecked( 90 );
2337 p-> mShowIconWhatsThis= configureToolBarMenu->isItemChecked( 300 ); 2337 p-> mShowIconWhatsThis= configureToolBarMenu->isItemChecked( 300 );
2338 p-> mShowIconWeekNum= configureToolBarMenu->isItemChecked( 400 ); 2338 p-> mShowIconWeekNum= configureToolBarMenu->isItemChecked( 400 );
2339 // initActions(); 2339 // initActions();
2340 setCaption ( i18n("Toolbar changes needs a restart!") ); 2340 setCaption ( i18n("Toolbar changes needs a restart!") );
2341} 2341}
2342void MainWindow::setCaption ( const QString & c ) 2342void MainWindow::setCaption ( const QString & c )
2343{ 2343{
2344 QString cap = c; 2344 QString cap = c;
2345 cap.replace( QRegExp("\n"), " " ); 2345 cap.replace( QRegExp("\n"), " " );
2346 cap = cap.stripWhiteSpace(); 2346 cap = cap.stripWhiteSpace();
2347 if ( cap.isEmpty() ) 2347 if ( cap.isEmpty() )
2348 cap = "KO/Pi"; 2348 cap = "KO/Pi";
2349 QWidget::setCaption( cap ); 2349 QWidget::setCaption( cap );
2350} 2350}
2351void MainWindow::setCaptionToDates() 2351void MainWindow::setCaptionToDates()
2352{ 2352{
2353 QString selDates; 2353 QString selDates;
2354 QDate date = mView->startDate(); 2354 QDate date = mView->startDate();
2355 if ( ! date.isValid() ) { 2355 if ( ! date.isValid() ) {
2356 setCaption(""); 2356 setCaption("");
2357 return; 2357 return;
2358 } 2358 }
2359 selDates = KGlobal::locale()->formatDate( date, true); 2359 selDates = KGlobal::locale()->formatDate( date, true);
2360 if (mView->startDate() < mView->endDate() ) 2360 if (mView->startDate() < mView->endDate() )
2361 selDates += " - " + KGlobal::locale()->formatDate(mView->endDate(), true); 2361 selDates += " - " + KGlobal::locale()->formatDate(mView->endDate(), true);
2362 else { 2362 else {
2363 QString addString; 2363 QString addString;
2364 if ( date == QDateTime::currentDateTime().date() ) 2364 if ( date == QDateTime::currentDateTime().date() )
2365 addString = i18n("Today"); 2365 addString = i18n("Today");
2366 else if ( date == QDateTime::currentDateTime().date().addDays(1) ) 2366 else if ( date == QDateTime::currentDateTime().date().addDays(1) )
2367 addString = i18n("Tomorrow"); 2367 addString = i18n("Tomorrow");
2368 if ( !addString.isEmpty() ) 2368 if ( !addString.isEmpty() )
2369 selDates = addString+", "+selDates ; 2369 selDates = addString+", "+selDates ;
2370 } 2370 }
2371 setCaption( i18n("Dates: ") + selDates ); 2371 setCaption( i18n("Dates: ") + selDates );
2372 2372
2373} 2373}
2374void MainWindow::showConfigureAgenda( ) 2374void MainWindow::showConfigureAgenda( )
2375{ 2375{
2376 int iii; 2376 int iii;
2377 for ( iii = 1;iii<= 10 ;++iii ){ 2377 for ( iii = 1;iii<= 10 ;++iii ){
2378 configureAgendaMenu->setItemChecked( (iii+1)*2, false ); 2378 configureAgendaMenu->setItemChecked( (iii+1)*2, false );
2379 } 2379 }
2380 configureAgendaMenu->setItemChecked( (KOPrefs::instance()->mHourSize/2)*2, true ); 2380 configureAgendaMenu->setItemChecked( (KOPrefs::instance()->mHourSize/2)*2, true );
2381} 2381}
2382void MainWindow::configureAgenda( int item ) 2382void MainWindow::configureAgenda( int item )
2383{ 2383{
2384 if ( KOPrefs::instance()->mHourSize == item ) 2384 if ( KOPrefs::instance()->mHourSize == item )
2385 return; 2385 return;
2386 KOPrefs::instance()->mHourSize=item; 2386 KOPrefs::instance()->mHourSize=item;
2387 mView->viewManager()->agendaView()->updateConfig(); 2387 mView->viewManager()->agendaView()->updateConfig();
2388} 2388}
2389 2389
2390void MainWindow::saveCalendar() 2390void MainWindow::saveCalendar()
2391{ 2391{
2392 QString bupDir = KPimGlobalPrefs::instance()->mBackupDatadir; 2392 QString bupDir = KPimGlobalPrefs::instance()->mBackupDatadir;
2393 if ( KPimGlobalPrefs::instance()->mBackupUseDefaultDir) 2393 if ( KPimGlobalPrefs::instance()->mBackupUseDefaultDir)
2394 bupDir = KGlobalSettings::backupDataDir(); 2394 bupDir = KGlobalSettings::backupDataDir();
2395 bupDir = KGlobal::formatMessage ( bupDir, 0 ); 2395 bupDir = KGlobal::formatMessage ( bupDir, 0 );
2396 QString bupHint; 2396 QString bupHint;
2397 if ( !KPimGlobalPrefs::instance()->mBackupEnabled ) 2397 if ( !KPimGlobalPrefs::instance()->mBackupEnabled )
2398 bupHint = i18n("(Hint: You can enable automatic backup in the global settings!)"); 2398 bupHint = i18n("(Hint: You can enable automatic backup in the global settings!)");
2399 if ( KMessageBox::warningContinueCancel( this, i18n("This will <b>backup all calendar files</b> to the directory %1 %2").arg(bupDir).arg(bupHint),i18n("Information") ) != KMessageBox::Continue ) return; 2399 if ( KMessageBox::warningContinueCancel( this, i18n("This will <b>backup all calendar files</b> to the directory %1 %2").arg(bupDir).arg(bupHint),i18n("Information") ) != KMessageBox::Continue ) return;
2400 bool enabled = KPimGlobalPrefs::instance()->mBackupEnabled; 2400 bool enabled = KPimGlobalPrefs::instance()->mBackupEnabled;
2401 KPimGlobalPrefs::instance()->mBackupEnabled = false; 2401 KPimGlobalPrefs::instance()->mBackupEnabled = false;
2402 save(); 2402 save();
2403 KPimGlobalPrefs::instance()->mBackupEnabled = enabled; 2403 KPimGlobalPrefs::instance()->mBackupEnabled = enabled;
2404 backupAllFiles(); 2404 backupAllFiles();
2405} 2405}
2406void MainWindow::loadCalendar() 2406void MainWindow::loadCalendar()
2407{ 2407{
2408 2408
2409 2409
2410#if 0 2410#if 0
2411 QString fn = KOPrefs::instance()->mLastLoadFile; 2411 QString fn = KOPrefs::instance()->mLastLoadFile;
2412 fn = KFileDialog::getOpenFileName( fn, i18n("Load backup filename"), this ); 2412 fn = KFileDialog::getOpenFileName( fn, i18n("Load backup filename"), this );
2413 2413
2414 if ( fn == "" ) 2414 if ( fn == "" )
2415 return; 2415 return;
2416 QFileInfo info; 2416 QFileInfo info;
2417 info.setFile( fn ); 2417 info.setFile( fn );
2418 QString mess; 2418 QString mess;
2419 bool loadbup = true; 2419 bool loadbup = true;
2420 if ( info. exists() ) { 2420 if ( info. exists() ) {
2421 mess = i18n("Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n").arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); 2421 mess = i18n("Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n").arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
2422 int result = QMessageBox::warning( this, "KO/Pi: Warning!", 2422 int result = QMessageBox::warning( this, "KO/Pi: Warning!",
2423 mess, 2423 mess,
2424 i18n("Load!"), i18n("Cancel"), 0, 2424 i18n("Load!"), i18n("Cancel"), 0,
2425 0, 1 ); 2425 0, 1 );
2426 if ( result != 0 ) { 2426 if ( result != 0 ) {
2427 loadbup = false; 2427 loadbup = false;
2428 } 2428 }
2429 } else { 2429 } else {
2430 QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 2430 QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
2431 i18n("Backup file\ndoes not exist!\nNothing loaded!"), 0, 0, 2431 i18n("Backup file\ndoes not exist!\nNothing loaded!"), 0, 0,
2432 0, 1 ); 2432 0, 1 );
2433 2433
2434 return; 2434 return;
2435 } 2435 }
2436 if ( loadbup ) { 2436 if ( loadbup ) {
2437 mView->openCalendar( fn ); 2437 mView->openCalendar( fn );
2438 KOPrefs::instance()->mLastLoadFile = fn; 2438 KOPrefs::instance()->mLastLoadFile = fn;
2439 mess = i18n("KO/Pi:Loaded %1").arg(fn) ; 2439 mess = i18n("KO/Pi:Loaded %1").arg(fn) ;
2440 setCaption(mess); 2440 setCaption(mess);
2441 } 2441 }
2442#endif 2442#endif
2443 2443
2444} 2444}
2445void MainWindow::quickImportIcal() 2445void MainWindow::quickImportIcal()
2446{ 2446{
2447 importFile( KOPrefs::instance()->mLastImportFile, false ); 2447 importFile( KOPrefs::instance()->mLastImportFile, false );
2448} 2448}
2449void MainWindow::importFile( QString fn, bool quick ) 2449void MainWindow::importFile( QString fn, bool quick )
2450{ 2450{
2451 QFileInfo info; 2451 QFileInfo info;
2452 info.setFile( fn ); 2452 info.setFile( fn );
2453 QString mess; 2453 QString mess;
2454 if ( !info. exists() ) { 2454 if ( !info. exists() ) {
2455 mess = i18n("Import file \n...%1\ndoes not exist!\nNothing imported!\n").arg(fn.right( 30)); 2455 mess = i18n("Import file \n...%1\ndoes not exist!\nNothing imported!\n").arg(fn.right( 30));
2456 QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 2456 QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
2457 mess ); 2457 mess );
2458 return; 2458 return;
2459 } 2459 }
2460 int result = 0; 2460 int result = 0;
2461 if ( !quick ) { 2461 if ( !quick ) {
2462 mess = i18n( "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); 2462 mess = i18n( "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
2463 result = QMessageBox::warning( this, "KO/Pi: Warning!", 2463 result = QMessageBox::warning( this, "KO/Pi: Warning!",
2464 mess, 2464 mess,
2465 "Import", "Cancel", 0, 2465 "Import", "Cancel", 0,
2466 0, 1 ); 2466 0, 1 );
2467 } 2467 }
2468 if ( result == 0 ) { 2468 if ( result == 0 ) {
2469 if ( mView->openCalendar( fn, true )) { 2469 if ( mView->openCalendar( fn, true )) {
2470 KOPrefs::instance()->mLastImportFile = fn; 2470 KOPrefs::instance()->mLastImportFile = fn;
2471 setCaption(i18n("Imported file successfully")); 2471 setCaption(i18n("Imported file successfully"));
2472 } else { 2472 } else {
2473 setCaption(i18n("Error importing file")); 2473 setCaption(i18n("Error importing file"));
2474 } 2474 }
2475 } 2475 }
2476} 2476}
2477 2477
2478void MainWindow::importIcal() 2478void MainWindow::importIcal()
2479{ 2479{
2480 2480
2481 QString fn =KOPrefs::instance()->mLastImportFile; 2481 QString fn =KOPrefs::instance()->mLastImportFile;
2482 2482
2483 fn =KFileDialog:: getOpenFileName( fn, i18n("Import filename(*.ics/*.vcs)"), this ); 2483 fn =KFileDialog:: getOpenFileName( fn, i18n("Import filename(*.ics/*.vcs)"), this );
2484 if ( fn == "" ) 2484 if ( fn == "" )
2485 return; 2485 return;
2486 importFile( fn, true ); 2486 importFile( fn, true );
2487 2487
2488} 2488}
2489 2489
2490void MainWindow::exportVCalendar() 2490void MainWindow::exportVCalendar()
2491{ 2491{
2492 QString fn = KOPrefs::instance()->mLastVcalFile; 2492 QString fn = KOPrefs::instance()->mLastVcalFile;
2493 fn = KFileDialog::getSaveFileName( fn, i18n("Export vcal filename(*.vcs)"), this ); 2493 fn = KFileDialog::getSaveFileName( fn, i18n("Export vcal filename(*.vcs)"), this );
2494 if ( fn == "" ) 2494 if ( fn == "" )
2495 return; 2495 return;
2496 QFileInfo info; 2496 QFileInfo info;
2497 info.setFile( fn ); 2497 info.setFile( fn );
2498 QString mes; 2498 QString mes;
2499 bool createbup = true; 2499 bool createbup = true;
2500 if ( info. exists() ) { 2500 if ( info. exists() ) {
2501 mes = i18n("Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); 2501 mes = i18n("Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) );
2502 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, 2502 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes,
2503 i18n("Overwrite!"), i18n("Cancel"), 0, 2503 i18n("Overwrite!"), i18n("Cancel"), 0,
2504 0, 1 ); 2504 0, 1 );
2505 if ( result != 0 ) { 2505 if ( result != 0 ) {
2506 createbup = false; 2506 createbup = false;
2507 } 2507 }
2508 } 2508 }
2509 if ( createbup ) { 2509 if ( createbup ) {
2510 if ( mView->exportVCalendar( fn ) ) { 2510 if ( mView->exportVCalendar( fn ) ) {
2511 KOPrefs::instance()->mLastVcalFile = fn; 2511 KOPrefs::instance()->mLastVcalFile = fn;
2512 if ( fn.length() > 20 ) 2512 if ( fn.length() > 20 )
2513 mes = i18n("KO/Pi:Exported to ...%1").arg(fn.right(20)) ; 2513 mes = i18n("KO/Pi:Exported to ...%1").arg(fn.right(20)) ;
2514 else 2514 else
2515 mes = i18n("KO/Pi:Exported to %1").arg(fn ); 2515 mes = i18n("KO/Pi:Exported to %1").arg(fn );
2516 setCaption(mes); 2516 setCaption(mes);
2517 } 2517 }
2518 } 2518 }
2519 2519
2520} 2520}
2521QString MainWindow::sentSyncFile() 2521QString MainWindow::sentSyncFile()
2522{ 2522{
2523#ifdef DESKTOP_VERSION 2523#ifdef DESKTOP_VERSION
2524 return locateLocal( "tmp", "copysynccal.ics" ); 2524 return locateLocal( "tmp", "copysynccal.ics" );
2525#else 2525#else
2526 return QString( "/tmp/copysynccal.ics" ); 2526 return QString( "/tmp/copysynccal.ics" );
2527#endif 2527#endif
2528} 2528}
2529 2529
2530void MainWindow::syncFileRequest() 2530void MainWindow::syncFileRequest()
2531{ 2531{
2532 if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) { 2532 if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) {
2533 mSyncManager->slotSyncMenu( 999 ); 2533 mSyncManager->slotSyncMenu( 999 );
2534 } 2534 }
2535 2535
2536 setCaption(i18n("Saving Data to temp file ..." )); 2536 setCaption(i18n("Saving Data to temp file ..." ));
2537 mView->saveCalendar( sentSyncFile() ); 2537 mView->saveCalendar( sentSyncFile() );
2538 setCaption(i18n("Data saved to temp file!" )); 2538 setCaption(i18n("Data saved to temp file!" ));
2539 2539
2540} 2540}
2541void MainWindow::getFile( bool success ) 2541void MainWindow::getFile( bool success )
2542{ 2542{
2543 if ( ! success ) { 2543 if ( ! success ) {
2544 setCaption( i18n("Error receiving file. Nothing changed!") ); 2544 setCaption( i18n("Error receiving file. Nothing changed!") );
2545 return; 2545 return;
2546 } 2546 }
2547 mView->openCalendar( sentSyncFile() ); 2547 mView->mergeFile( sentSyncFile() );
2548 if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) { 2548 if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) {
2549 mSyncManager->slotSyncMenu( 999 ); 2549 mSyncManager->slotSyncMenu( 999 );
2550 } 2550 }
2551 setCaption( i18n("Pi-Sync successful!") ); 2551 setCaption( i18n("Pi-Sync successful!") );
2552} 2552}
2553void MainWindow::printListView() 2553void MainWindow::printListView()
2554{ 2554{
2555 2555
2556 QString message = i18n("You can make a printout of the <b>List View</b> and the list view in the <b>Search Dialog</b>! To do this, please go to the <b>List View/Search Dialog</b>. Right click on the list. Select in the popup menu the entry <b>Print complete list</b>. That prints the list as you see it. You can remove items from the list before printing without deleting the corresponding event/todo! Simply select all items you do not want to print out. Then right click on one of the items and choose <b>Hide selected items</b>. After that you can print the list without these items."); 2556 QString message = i18n("You can make a printout of the <b>List View</b> and the list view in the <b>Search Dialog</b>! To do this, please go to the <b>List View/Search Dialog</b>. Right click on the list. Select in the popup menu the entry <b>Print complete list</b>. That prints the list as you see it. You can remove items from the list before printing without deleting the corresponding event/todo! Simply select all items you do not want to print out. Then right click on one of the items and choose <b>Hide selected items</b>. After that you can print the list without these items.");
2557 2557
2558 KMessageBox::information( this, message); 2558 KMessageBox::information( this, message);
2559} 2559}
2560void MainWindow::printSel( ) 2560void MainWindow::printSel( )
2561{ 2561{
2562 mView->viewManager()->agendaView()->agenda()->printSelection(); 2562 mView->viewManager()->agendaView()->agenda()->printSelection();
2563} 2563}
2564 2564
2565void MainWindow::printCal() 2565void MainWindow::printCal()
2566{ 2566{
2567 mView->print();//mCp->showDialog(); 2567 mView->print();//mCp->showDialog();
2568} 2568}
2569 2569
2570 2570
2571#include "libkdepim/kdatepicker.h" 2571#include "libkdepim/kdatepicker.h"
2572#include <kdatetbl.h> 2572#include <kdatetbl.h>
2573 2573
2574void MainWindow::weekAction() 2574void MainWindow::weekAction()
2575{ 2575{
2576 int month; 2576 int month;
2577 KPopupFrame* popup = new KPopupFrame(this); 2577 KPopupFrame* popup = new KPopupFrame(this);
2578 KDateInternalWeekPicker* picker = new KDateInternalWeekPicker(popup); 2578 KDateInternalWeekPicker* picker = new KDateInternalWeekPicker(popup);
2579 // ----- 2579 // -----
2580 picker->resize(picker->sizeHint()); 2580 picker->resize(picker->sizeHint());
2581 popup->setMainWidget(picker); 2581 popup->setMainWidget(picker);
2582 picker->setFocus(); 2582 picker->setFocus();
2583 connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int))); 2583 connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int)));
2584 int x = 0; 2584 int x = 0;
2585 int y = iconToolBar->height(); 2585 int y = iconToolBar->height();
2586 int dX = 0; 2586 int dX = 0;
2587 int dY = 0; 2587 int dY = 0;
2588 if ( iconToolBar->orientation () == Qt:: Horizontal ) { 2588 if ( iconToolBar->orientation () == Qt:: Horizontal ) {
2589 if ( iconToolBar->y() > height()/2 ) { 2589 if ( iconToolBar->y() > height()/2 ) {
2590 dY = picker->sizeHint().height()+8; 2590 dY = picker->sizeHint().height()+8;
2591 y = 0; 2591 y = 0;
2592 } 2592 }
2593 } else { 2593 } else {
2594 if ( iconToolBar->x() > width()/2 ) { // right side 2594 if ( iconToolBar->x() > width()/2 ) { // right side
2595 x=0; 2595 x=0;
2596 dX= picker->sizeHint().width()+8; 2596 dX= picker->sizeHint().width()+8;
2597 y = 0; 2597 y = 0;
2598 } else { 2598 } else {
2599 x= iconToolBar->width(); 2599 x= iconToolBar->width();
2600 y = 0; 2600 y = 0;
2601 } 2601 }
2602 } 2602 }
2603 //qDebug("dax %d dy %d %d %d ", dX, dY, iconToolBar->x(), iconToolBar->y() ); 2603 //qDebug("dax %d dy %d %d %d ", dX, dY, iconToolBar->x(), iconToolBar->y() );
2604 if(popup->exec(iconToolBar->mapToGlobal(QPoint(x,y)-QPoint( dX,dY)))) 2604 if(popup->exec(iconToolBar->mapToGlobal(QPoint(x,y)-QPoint( dX,dY))))
2605 { 2605 {
2606 month = picker->getResult(); 2606 month = picker->getResult();
2607 emit selectWeek ( month ); 2607 emit selectWeek ( month );
2608 //qDebug("weekSelected %d ", month); 2608 //qDebug("weekSelected %d ", month);
2609 } 2609 }
2610 delete popup; 2610 delete popup;
2611} 2611}
2612 2612
2613void MainWindow::hideEvent ( QHideEvent * ) 2613void MainWindow::hideEvent ( QHideEvent * )
2614{ 2614{
2615 QString message; 2615 QString message;
2616 QDateTime nextA = mCalendar->nextAlarmEventDateTime(); 2616 QDateTime nextA = mCalendar->nextAlarmEventDateTime();
2617 if ( nextA.isValid() ) { 2617 if ( nextA.isValid() ) {
2618 QString sum = mCalendar->nextSummary(); 2618 QString sum = mCalendar->nextSummary();
2619 2619
2620 message = i18n("%1 %2 - %3 (next event/todo with alarm)").arg( KGlobal::locale()->formatTime(nextA.time() , false)).arg(sum ).arg( KGlobal::locale()->formatDate(nextA.date() , false)); 2620 message = i18n("%1 %2 - %3 (next event/todo with alarm)").arg( KGlobal::locale()->formatTime(nextA.time() , false)).arg(sum ).arg( KGlobal::locale()->formatDate(nextA.date() , false));
2621 setCaption( message ); 2621 setCaption( message );
2622 } 2622 }
2623} 2623}
2624 2624
2625void MainWindow::resizeEvent( QResizeEvent* e) 2625void MainWindow::resizeEvent( QResizeEvent* e)
2626{ 2626{
2627#ifndef DESKTOP_VERSION 2627#ifndef DESKTOP_VERSION
2628 if ( !KOPrefs::instance()->mShowIconFilter && !KOPrefs::instance()->mShowIconOnetoolbar && QApplication::desktop()->width() > 320) { 2628 if ( !KOPrefs::instance()->mShowIconFilter && !KOPrefs::instance()->mShowIconOnetoolbar && QApplication::desktop()->width() > 320) {
2629 if (QApplication::desktop()->width() > QApplication::desktop()->height() ) 2629 if (QApplication::desktop()->width() > QApplication::desktop()->height() )
2630 filterToolBar->hide(); 2630 filterToolBar->hide();
2631 else 2631 else
2632 filterToolBar->show(); 2632 filterToolBar->show();
2633 } 2633 }
2634#endif 2634#endif
2635 QMainWindow::resizeEvent( e); 2635 QMainWindow::resizeEvent( e);
2636} 2636}
diff --git a/libkcal/calendar.cpp b/libkcal/calendar.cpp
index a662eeb..b7990d4 100644
--- a/libkcal/calendar.cpp
+++ b/libkcal/calendar.cpp
@@ -107,382 +107,383 @@ void Calendar::init()
107// KOPrefs::instance()->writeConfig(); 107// KOPrefs::instance()->writeConfig();
108} 108}
109 109
110Calendar::~Calendar() 110Calendar::~Calendar()
111{ 111{
112 delete mDefaultFilter; 112 delete mDefaultFilter;
113 if ( mUndoIncidence ) 113 if ( mUndoIncidence )
114 delete mUndoIncidence; 114 delete mUndoIncidence;
115} 115}
116void Calendar::setDontDeleteIncidencesOnClose () 116void Calendar::setDontDeleteIncidencesOnClose ()
117{ 117{
118 mDeleteIncidencesOnClose = false; 118 mDeleteIncidencesOnClose = false;
119} 119}
120void Calendar::setDefaultCalendar( int d ) 120void Calendar::setDefaultCalendar( int d )
121{ 121{
122 mDefaultCalendar = d; 122 mDefaultCalendar = d;
123} 123}
124int Calendar::defaultCalendar() 124int Calendar::defaultCalendar()
125{ 125{
126 return mDefaultCalendar; 126 return mDefaultCalendar;
127} 127}
128const QString &Calendar::getOwner() const 128const QString &Calendar::getOwner() const
129{ 129{
130 return mOwner; 130 return mOwner;
131} 131}
132 132
133bool Calendar::undoDeleteIncidence() 133bool Calendar::undoDeleteIncidence()
134{ 134{
135 if (!mUndoIncidence) 135 if (!mUndoIncidence)
136 return false; 136 return false;
137 addIncidence(mUndoIncidence); 137 addIncidence(mUndoIncidence);
138 mUndoIncidence = 0; 138 mUndoIncidence = 0;
139 return true; 139 return true;
140} 140}
141void Calendar::setOwner(const QString &os) 141void Calendar::setOwner(const QString &os)
142{ 142{
143 int i; 143 int i;
144 mOwner = os; 144 mOwner = os;
145 i = mOwner.find(','); 145 i = mOwner.find(',');
146 if (i != -1) 146 if (i != -1)
147 mOwner = mOwner.left(i); 147 mOwner = mOwner.left(i);
148 148
149 setModified( true ); 149 setModified( true );
150} 150}
151 151
152void Calendar::setTimeZone(const QString & tz) 152void Calendar::setTimeZone(const QString & tz)
153{ 153{
154 bool neg = FALSE; 154 bool neg = FALSE;
155 int hours, minutes; 155 int hours, minutes;
156 QString tmpStr(tz); 156 QString tmpStr(tz);
157 157
158 if (tmpStr.left(1) == "-") 158 if (tmpStr.left(1) == "-")
159 neg = TRUE; 159 neg = TRUE;
160 if (tmpStr.left(1) == "-" || tmpStr.left(1) == "+") 160 if (tmpStr.left(1) == "-" || tmpStr.left(1) == "+")
161 tmpStr.remove(0, 1); 161 tmpStr.remove(0, 1);
162 hours = tmpStr.left(2).toInt(); 162 hours = tmpStr.left(2).toInt();
163 if (tmpStr.length() > 2) 163 if (tmpStr.length() > 2)
164 minutes = tmpStr.right(2).toInt(); 164 minutes = tmpStr.right(2).toInt();
165 else 165 else
166 minutes = 0; 166 minutes = 0;
167 mTimeZone = (60*hours+minutes); 167 mTimeZone = (60*hours+minutes);
168 if (neg) 168 if (neg)
169 mTimeZone = -mTimeZone; 169 mTimeZone = -mTimeZone;
170 mLocalTime = false; 170 mLocalTime = false;
171 171
172 setModified( true ); 172 setModified( true );
173} 173}
174 174
175QString Calendar::getTimeZoneStr() const 175QString Calendar::getTimeZoneStr() const
176{ 176{
177 if (mLocalTime) 177 if (mLocalTime)
178 return ""; 178 return "";
179 QString tmpStr; 179 QString tmpStr;
180 int hours = abs(mTimeZone / 60); 180 int hours = abs(mTimeZone / 60);
181 int minutes = abs(mTimeZone % 60); 181 int minutes = abs(mTimeZone % 60);
182 bool neg = mTimeZone < 0; 182 bool neg = mTimeZone < 0;
183 183
184 tmpStr.sprintf("%c%.2d%.2d", 184 tmpStr.sprintf("%c%.2d%.2d",
185 (neg ? '-' : '+'), 185 (neg ? '-' : '+'),
186 hours, minutes); 186 hours, minutes);
187 return tmpStr; 187 return tmpStr;
188} 188}
189 189
190void Calendar::setTimeZone(int tz) 190void Calendar::setTimeZone(int tz)
191{ 191{
192 mTimeZone = tz; 192 mTimeZone = tz;
193 mLocalTime = false; 193 mLocalTime = false;
194 194
195 setModified( true ); 195 setModified( true );
196} 196}
197 197
198int Calendar::getTimeZone() const 198int Calendar::getTimeZone() const
199{ 199{
200 return mTimeZone; 200 return mTimeZone;
201} 201}
202 202
203void Calendar::setTimeZoneId(const QString &id) 203void Calendar::setTimeZoneId(const QString &id)
204{ 204{
205 mTimeZoneId = id; 205 mTimeZoneId = id;
206 mLocalTime = false; 206 mLocalTime = false;
207 mTimeZone = KGlobal::locale()->timezoneOffset(mTimeZoneId); 207 mTimeZone = KGlobal::locale()->timezoneOffset(mTimeZoneId);
208 if ( mTimeZone > 1000) 208 if ( mTimeZone > 1000)
209 setLocalTime(); 209 setLocalTime();
210 //qDebug("Calendar::setTimeZoneOffset %s %d ",mTimeZoneId.latin1(), mTimeZone); 210 //qDebug("Calendar::setTimeZoneOffset %s %d ",mTimeZoneId.latin1(), mTimeZone);
211 setModified( true ); 211 setModified( true );
212} 212}
213 213
214QString Calendar::timeZoneId() const 214QString Calendar::timeZoneId() const
215{ 215{
216 return mTimeZoneId; 216 return mTimeZoneId;
217} 217}
218 218
219void Calendar::setLocalTime() 219void Calendar::setLocalTime()
220{ 220{
221 //qDebug("Calendar::setLocalTime() "); 221 //qDebug("Calendar::setLocalTime() ");
222 mLocalTime = true; 222 mLocalTime = true;
223 mTimeZone = 0; 223 mTimeZone = 0;
224 mTimeZoneId = ""; 224 mTimeZoneId = "";
225 225
226 setModified( true ); 226 setModified( true );
227} 227}
228 228
229bool Calendar::isLocalTime() const 229bool Calendar::isLocalTime() const
230{ 230{
231 return mLocalTime; 231 return mLocalTime;
232} 232}
233 233
234const QString &Calendar::getEmail() 234const QString &Calendar::getEmail()
235{ 235{
236 return mOwnerEmail; 236 return mOwnerEmail;
237} 237}
238 238
239void Calendar::setEmail(const QString &e) 239void Calendar::setEmail(const QString &e)
240{ 240{
241 mOwnerEmail = e; 241 mOwnerEmail = e;
242 242
243 setModified( true ); 243 setModified( true );
244} 244}
245 245
246void Calendar::setFilter(CalFilter *filter) 246void Calendar::setFilter(CalFilter *filter)
247{ 247{
248 mFilter = filter; 248 mFilter = filter;
249} 249}
250 250
251CalFilter *Calendar::filter() 251CalFilter *Calendar::filter()
252{ 252{
253 return mFilter; 253 return mFilter;
254} 254}
255 255
256QPtrList<Incidence> Calendar::incidences() 256QPtrList<Incidence> Calendar::incidences()
257{ 257{
258 QPtrList<Incidence> incidences; 258 QPtrList<Incidence> incidences;
259 259
260 Incidence *i; 260 Incidence *i;
261 261
262 QPtrList<Event> e = events(); 262 QPtrList<Event> e = events();
263 for( i = e.first(); i; i = e.next() ) incidences.append( i ); 263 for( i = e.first(); i; i = e.next() ) incidences.append( i );
264 264
265 QPtrList<Todo> t = todos(); 265 QPtrList<Todo> t = todos();
266 for( i = t.first(); i; i = t.next() ) incidences.append( i ); 266 for( i = t.first(); i; i = t.next() ) incidences.append( i );
267 267
268 QPtrList<Journal> j = journals(); 268 QPtrList<Journal> j = journals();
269 for( i = j.first(); i; i = j.next() ) incidences.append( i ); 269 for( i = j.first(); i; i = j.next() ) incidences.append( i );
270 270
271 return incidences; 271 return incidences;
272} 272}
273 273
274void Calendar::resetPilotStat(int id ) 274void Calendar::resetPilotStat(int id )
275{ 275{
276 QPtrList<Incidence> incidences; 276 QPtrList<Incidence> incidences;
277 277
278 Incidence *i; 278 Incidence *i;
279 279
280 QPtrList<Event> e = rawEvents(); 280 QPtrList<Event> e = rawEvents();
281 for( i = e.first(); i; i = e.next() ) i->setPilotId( id ); 281 for( i = e.first(); i; i = e.next() ) i->setPilotId( id );
282 282
283 QPtrList<Todo> t = rawTodos(); 283 QPtrList<Todo> t = rawTodos();
284 for( i = t.first(); i; i = t.next() ) i->setPilotId( id ); 284 for( i = t.first(); i; i = t.next() ) i->setPilotId( id );
285 285
286 QPtrList<Journal> j = journals(); 286 QPtrList<Journal> j = journals();
287 for( i = j.first(); i; i = j.next() ) i->setPilotId( id ); 287 for( i = j.first(); i; i = j.next() ) i->setPilotId( id );
288} 288}
289void Calendar::resetTempSyncStat() 289void Calendar::resetTempSyncStat()
290{ 290{
291 QPtrList<Incidence> incidences; 291 QPtrList<Incidence> incidences;
292 292
293 Incidence *i; 293 Incidence *i;
294 294
295 QPtrList<Event> e = rawEvents(); 295 QPtrList<Event> e = rawEvents();
296 for( i = e.first(); i; i = e.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 296 for( i = e.first(); i; i = e.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
297 297
298 QPtrList<Todo> t = rawTodos(); 298 QPtrList<Todo> t = rawTodos();
299 for( i = t.first(); i; i = t.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 299 for( i = t.first(); i; i = t.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
300 300
301 QPtrList<Journal> j = journals(); 301 QPtrList<Journal> j = journals();
302 for( i = j.first(); i; i = j.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 302 for( i = j.first(); i; i = j.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
303} 303}
304QPtrList<Incidence> Calendar::rawIncidences() 304QPtrList<Incidence> Calendar::rawIncidences()
305{ 305{
306 QPtrList<Incidence> incidences; 306 QPtrList<Incidence> incidences;
307 307
308 Incidence *i; 308 Incidence *i;
309 309
310 QPtrList<Event> e = rawEvents(); 310 QPtrList<Event> e = rawEvents();
311 for( i = e.first(); i; i = e.next() ) incidences.append( i ); 311 for( i = e.first(); i; i = e.next() ) incidences.append( i );
312 312
313 QPtrList<Todo> t = rawTodos(); 313 QPtrList<Todo> t = rawTodos();
314 for( i = t.first(); i; i = t.next() ) incidences.append( i ); 314 for( i = t.first(); i; i = t.next() ) incidences.append( i );
315 315
316 QPtrList<Journal> j = journals(); 316 QPtrList<Journal> j = journals();
317 for( i = j.first(); i; i = j.next() ) incidences.append( i ); 317 for( i = j.first(); i; i = j.next() ) incidences.append( i );
318 318
319 return incidences; 319 return incidences;
320} 320}
321 321
322QPtrList<Event> Calendar::events( const QDate &date, bool sorted ) 322QPtrList<Event> Calendar::events( const QDate &date, bool sorted )
323{ 323{
324 QPtrList<Event> el = rawEventsForDate(date,sorted); 324 QPtrList<Event> el = rawEventsForDate(date,sorted);
325 mFilter->apply(&el); 325 mFilter->apply(&el);
326 return el; 326 return el;
327} 327}
328 328
329QPtrList<Event> Calendar::events( const QDateTime &qdt ) 329QPtrList<Event> Calendar::events( const QDateTime &qdt )
330{ 330{
331 QPtrList<Event> el = rawEventsForDate(qdt); 331 QPtrList<Event> el = rawEventsForDate(qdt);
332 mFilter->apply(&el); 332 mFilter->apply(&el);
333 return el; 333 return el;
334} 334}
335 335
336QPtrList<Event> Calendar::events( const QDate &start, const QDate &end, 336QPtrList<Event> Calendar::events( const QDate &start, const QDate &end,
337 bool inclusive) 337 bool inclusive)
338{ 338{
339 QPtrList<Event> el = rawEvents(start,end,inclusive); 339 QPtrList<Event> el = rawEvents(start,end,inclusive);
340 mFilter->apply(&el); 340 mFilter->apply(&el);
341 return el; 341 return el;
342} 342}
343 343
344QPtrList<Event> Calendar::events() 344QPtrList<Event> Calendar::events()
345{ 345{
346 QPtrList<Event> el = rawEvents(); 346 QPtrList<Event> el = rawEvents();
347 mFilter->apply(&el); 347 mFilter->apply(&el);
348 return el; 348 return el;
349} 349}
350void Calendar::addIncidenceBranch(Incidence *i) 350void Calendar::addIncidenceBranch(Incidence *i)
351{ 351{
352 addIncidence( i ); 352 addIncidence( i );
353 Incidence * inc; 353 Incidence * inc;
354 QPtrList<Incidence> Relations = i->relations(); 354 QPtrList<Incidence> Relations = i->relations();
355 for (inc=Relations.first();inc;inc=Relations.next()) { 355 for (inc=Relations.first();inc;inc=Relations.next()) {
356 addIncidenceBranch( inc ); 356 addIncidenceBranch( inc );
357 } 357 }
358} 358}
359 359
360bool Calendar::addIncidence(Incidence *i) 360bool Calendar::addIncidence(Incidence *i)
361{ 361{
362 Incidence::AddVisitor<Calendar> v(this); 362 Incidence::AddVisitor<Calendar> v(this);
363 i->setCalID( mDefaultCalendar ); 363 if ( i->calID() == 0 )
364 i->setCalID( mDefaultCalendar );
364 i->setCalEnabled( true ); 365 i->setCalEnabled( true );
365 return i->accept(v); 366 return i->accept(v);
366} 367}
367void Calendar::deleteIncidence(Incidence *in) 368void Calendar::deleteIncidence(Incidence *in)
368{ 369{
369 if ( in->typeID() == eventID ) 370 if ( in->typeID() == eventID )
370 deleteEvent( (Event*) in ); 371 deleteEvent( (Event*) in );
371 else if ( in->typeID() == todoID ) 372 else if ( in->typeID() == todoID )
372 deleteTodo( (Todo*) in); 373 deleteTodo( (Todo*) in);
373 else if ( in->typeID() == journalID ) 374 else if ( in->typeID() == journalID )
374 deleteJournal( (Journal*) in ); 375 deleteJournal( (Journal*) in );
375} 376}
376 377
377Incidence* Calendar::incidence( const QString& uid ) 378Incidence* Calendar::incidence( const QString& uid )
378{ 379{
379 Incidence* i; 380 Incidence* i;
380 381
381 if( (i = todo( uid )) != 0 ) 382 if( (i = todo( uid )) != 0 )
382 return i; 383 return i;
383 if( (i = event( uid )) != 0 ) 384 if( (i = event( uid )) != 0 )
384 return i; 385 return i;
385 if( (i = journal( uid )) != 0 ) 386 if( (i = journal( uid )) != 0 )
386 return i; 387 return i;
387 388
388 return 0; 389 return 0;
389} 390}
390 391
391QPtrList<Todo> Calendar::todos() 392QPtrList<Todo> Calendar::todos()
392{ 393{
393 QPtrList<Todo> tl = rawTodos(); 394 QPtrList<Todo> tl = rawTodos();
394 mFilter->apply( &tl ); 395 mFilter->apply( &tl );
395 return tl; 396 return tl;
396} 397}
397 398
398// When this is called, the todo have already been added to the calendar. 399// When this is called, the todo have already been added to the calendar.
399// This method is only about linking related todos 400// This method is only about linking related todos
400void Calendar::setupRelations( Incidence *incidence ) 401void Calendar::setupRelations( Incidence *incidence )
401{ 402{
402 QString uid = incidence->uid(); 403 QString uid = incidence->uid();
403 //qDebug("Calendar::setupRelations "); 404 //qDebug("Calendar::setupRelations ");
404 // First, go over the list of orphans and see if this is their parent 405 // First, go over the list of orphans and see if this is their parent
405 while( Incidence* i = mOrphans[ uid ] ) { 406 while( Incidence* i = mOrphans[ uid ] ) {
406 mOrphans.remove( uid ); 407 mOrphans.remove( uid );
407 i->setRelatedTo( incidence ); 408 i->setRelatedTo( incidence );
408 incidence->addRelation( i ); 409 incidence->addRelation( i );
409 mOrphanUids.remove( i->uid() ); 410 mOrphanUids.remove( i->uid() );
410 } 411 }
411 412
412 // Now see about this incidences parent 413 // Now see about this incidences parent
413 if( !incidence->relatedTo() && !incidence->relatedToUid().isEmpty() ) { 414 if( !incidence->relatedTo() && !incidence->relatedToUid().isEmpty() ) {
414 // This incidence has a uid it is related to, but is not registered to it yet 415 // This incidence has a uid it is related to, but is not registered to it yet
415 // Try to find it 416 // Try to find it
416 Incidence* parent = this->incidence( incidence->relatedToUid() ); 417 Incidence* parent = this->incidence( incidence->relatedToUid() );
417 if( parent ) { 418 if( parent ) {
418 // Found it 419 // Found it
419 incidence->setRelatedTo( parent ); 420 incidence->setRelatedTo( parent );
420 parent->addRelation( incidence ); 421 parent->addRelation( incidence );
421 } else { 422 } else {
422 // Not found, put this in the mOrphans list 423 // Not found, put this in the mOrphans list
423 mOrphans.insert( incidence->relatedToUid(), incidence ); 424 mOrphans.insert( incidence->relatedToUid(), incidence );
424 mOrphanUids.insert( incidence->uid(), incidence ); 425 mOrphanUids.insert( incidence->uid(), incidence );
425 } 426 }
426 } 427 }
427} 428}
428 429
429// If a task with subtasks is deleted, move it's subtasks to the orphans list 430// If a task with subtasks is deleted, move it's subtasks to the orphans list
430void Calendar::removeRelations( Incidence *incidence ) 431void Calendar::removeRelations( Incidence *incidence )
431{ 432{
432 // qDebug("Calendar::removeRelations "); 433 // qDebug("Calendar::removeRelations ");
433 QString uid = incidence->uid(); 434 QString uid = incidence->uid();
434 435
435 QPtrList<Incidence> relations = incidence->relations(); 436 QPtrList<Incidence> relations = incidence->relations();
436 for( Incidence* i = relations.first(); i; i = relations.next() ) 437 for( Incidence* i = relations.first(); i; i = relations.next() )
437 if( !mOrphanUids.find( i->uid() ) ) { 438 if( !mOrphanUids.find( i->uid() ) ) {
438 mOrphans.insert( uid, i ); 439 mOrphans.insert( uid, i );
439 mOrphanUids.insert( i->uid(), i ); 440 mOrphanUids.insert( i->uid(), i );
440 i->setRelatedTo( 0 ); 441 i->setRelatedTo( 0 );
441 i->setRelatedToUid( uid ); 442 i->setRelatedToUid( uid );
442 } 443 }
443 444
444 // If this incidence is related to something else, tell that about it 445 // If this incidence is related to something else, tell that about it
445 if( incidence->relatedTo() ) 446 if( incidence->relatedTo() )
446 incidence->relatedTo()->removeRelation( incidence ); 447 incidence->relatedTo()->removeRelation( incidence );
447 448
448 // Remove this one from the orphans list 449 // Remove this one from the orphans list
449 if( mOrphanUids.remove( uid ) ) 450 if( mOrphanUids.remove( uid ) )
450 // This incidence is located in the orphans list - it should be removed 451 // This incidence is located in the orphans list - it should be removed
451 if( !( incidence->relatedTo() != 0 && mOrphans.remove( incidence->relatedTo()->uid() ) ) ) { 452 if( !( incidence->relatedTo() != 0 && mOrphans.remove( incidence->relatedTo()->uid() ) ) ) {
452 // Removing wasn't that easy 453 // Removing wasn't that easy
453 for( QDictIterator<Incidence> it( mOrphans ); it.current(); ++it ) { 454 for( QDictIterator<Incidence> it( mOrphans ); it.current(); ++it ) {
454 if( it.current()->uid() == uid ) { 455 if( it.current()->uid() == uid ) {
455 mOrphans.remove( it.currentKey() ); 456 mOrphans.remove( it.currentKey() );
456 break; 457 break;
457 } 458 }
458 } 459 }
459 } 460 }
460} 461}
461 462
462void Calendar::registerObserver( Observer *observer ) 463void Calendar::registerObserver( Observer *observer )
463{ 464{
464 mObserver = observer; 465 mObserver = observer;
465 mNewObserver = true; 466 mNewObserver = true;
466} 467}
467 468
468void Calendar::setModified( bool modified ) 469void Calendar::setModified( bool modified )
469{ 470{
470 if ( mObserver ) mObserver->calendarModified( modified, this ); 471 if ( mObserver ) mObserver->calendarModified( modified, this );
471 if ( modified != mModified || mNewObserver ) { 472 if ( modified != mModified || mNewObserver ) {
472 mNewObserver = false; 473 mNewObserver = false;
473 // if ( mObserver ) mObserver->calendarModified( modified, this ); 474 // if ( mObserver ) mObserver->calendarModified( modified, this );
474 mModified = modified; 475 mModified = modified;
475 } 476 }
476} 477}
477 478
478void Calendar::setLoadedProductId( const QString &id ) 479void Calendar::setLoadedProductId( const QString &id )
479{ 480{
480 mLoadedProductId = id; 481 mLoadedProductId = id;
481} 482}
482 483
483QString Calendar::loadedProductId() 484QString Calendar::loadedProductId()
484{ 485{
485 return mLoadedProductId; 486 return mLoadedProductId;
486} 487}
487 488
488//#include "calendar.moc" 489//#include "calendar.moc"
diff --git a/libkcal/calendar.h b/libkcal/calendar.h
index 4652fe5..14a1a45 100644
--- a/libkcal/calendar.h
+++ b/libkcal/calendar.h
@@ -1,334 +1,335 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 Copyright (c) 1998 Preston Brown 3 Copyright (c) 1998 Preston Brown
4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22#ifndef CALENDAR_H 22#ifndef CALENDAR_H
23#define CALENDAR_H 23#define CALENDAR_H
24 24
25#include <qobject.h> 25#include <qobject.h>
26#include <qstring.h> 26#include <qstring.h>
27#include <qdatetime.h> 27#include <qdatetime.h>
28#include <qptrlist.h> 28#include <qptrlist.h>
29#include <qdict.h> 29#include <qdict.h>
30 30
31#include "customproperties.h" 31#include "customproperties.h"
32#include "event.h" 32#include "event.h"
33#include "todo.h" 33#include "todo.h"
34#include "journal.h" 34#include "journal.h"
35#include "calfilter.h" 35#include "calfilter.h"
36 36
37//#define _TIME_ZONE "-0500" /* hardcoded, overridden in config file. */ 37//#define _TIME_ZONE "-0500" /* hardcoded, overridden in config file. */
38 38
39class KConfig; 39class KConfig;
40 40
41namespace KCal { 41namespace KCal {
42 42
43 43
44/** 44/**
45 This is the main "calendar" object class for KOrganizer. It holds 45 This is the main "calendar" object class for KOrganizer. It holds
46 information like all appointments/events, user information, etc. etc. 46 information like all appointments/events, user information, etc. etc.
47 one calendar is associated with each CalendarView (@see calendarview.h). 47 one calendar is associated with each CalendarView (@see calendarview.h).
48 This is an abstract base class defining the interface to a calendar. It is 48 This is an abstract base class defining the interface to a calendar. It is
49 implemented by subclasses like @see CalendarLocal, which use different 49 implemented by subclasses like @see CalendarLocal, which use different
50 methods to store and access the data. 50 methods to store and access the data.
51 51
52 Ownership of events etc. is handled by the following policy: As soon as an 52 Ownership of events etc. is handled by the following policy: As soon as an
53 event (or any other subclass of IncidenceBase) object is added to the 53 event (or any other subclass of IncidenceBase) object is added to the
54 Calendar by addEvent() it is owned by the Calendar object. The Calendar takes 54 Calendar by addEvent() it is owned by the Calendar object. The Calendar takes
55 care of deleting it. All Events returned by the query functions are returned 55 care of deleting it. All Events returned by the query functions are returned
56 as pointers, that means all changes to the returned events are immediately 56 as pointers, that means all changes to the returned events are immediately
57 visible in the Calendar. You shouldn't delete any Event object you get from 57 visible in the Calendar. You shouldn't delete any Event object you get from
58 Calendar. 58 Calendar.
59*/ 59*/
60class Calendar : public QObject, public CustomProperties, 60class Calendar : public QObject, public CustomProperties,
61 public IncidenceBase::Observer 61 public IncidenceBase::Observer
62{ 62{
63 Q_OBJECT 63 Q_OBJECT
64public: 64public:
65 Calendar(); 65 Calendar();
66 Calendar(const QString &timeZoneId); 66 Calendar(const QString &timeZoneId);
67 virtual ~Calendar(); 67 virtual ~Calendar();
68 Incidence * undoIncidence() { return mUndoIncidence; }; 68 Incidence * undoIncidence() { return mUndoIncidence; };
69 bool undoDeleteIncidence(); 69 bool undoDeleteIncidence();
70 void deleteIncidence(Incidence *in); 70 void deleteIncidence(Incidence *in);
71 void resetTempSyncStat(); 71 void resetTempSyncStat();
72 void resetPilotStat(int id); 72 void resetPilotStat(int id);
73 /** 73 /**
74 Clears out the current calendar, freeing all used memory etc. 74 Clears out the current calendar, freeing all used memory etc.
75 */ 75 */
76 virtual void close() = 0; 76 virtual void close() = 0;
77 virtual void addCalendar( Calendar* ) = 0; 77 virtual void addCalendar( Calendar* ) = 0;
78 virtual bool addCalendarFile( QString name, int id ) = 0; 78 virtual bool addCalendarFile( QString name, int id ) = 0;
79 virtual bool mergeCalendarFile( QString name ) = 0;
79 virtual void setSyncEventsReadOnly() = 0; 80 virtual void setSyncEventsReadOnly() = 0;
80 virtual void stopAllTodos() = 0; 81 virtual void stopAllTodos() = 0;
81 82
82 /** 83 /**
83 Sync changes in memory to persistant storage. 84 Sync changes in memory to persistant storage.
84 */ 85 */
85 virtual void save() = 0; 86 virtual void save() = 0;
86 virtual QPtrList<Event> getExternLastSyncEvents() = 0; 87 virtual QPtrList<Event> getExternLastSyncEvents() = 0;
87 virtual void removeSyncInfo( QString syncProfile) = 0; 88 virtual void removeSyncInfo( QString syncProfile) = 0;
88 virtual bool isSaving() { return false; } 89 virtual bool isSaving() { return false; }
89 90
90 /** 91 /**
91 Return the owner of the calendar's full name. 92 Return the owner of the calendar's full name.
92 */ 93 */
93 const QString &getOwner() const; 94 const QString &getOwner() const;
94 /** 95 /**
95 Set the owner of the calendar. Should be owner's full name. 96 Set the owner of the calendar. Should be owner's full name.
96 */ 97 */
97 void setOwner( const QString &os ); 98 void setOwner( const QString &os );
98 /** 99 /**
99 Return the email address of the calendar owner. 100 Return the email address of the calendar owner.
100 */ 101 */
101 const QString &getEmail(); 102 const QString &getEmail();
102 /** 103 /**
103 Set the email address of the calendar owner. 104 Set the email address of the calendar owner.
104 */ 105 */
105 void setEmail( const QString & ); 106 void setEmail( const QString & );
106 107
107 /** 108 /**
108 Set time zone from a timezone string (e.g. -2:00) 109 Set time zone from a timezone string (e.g. -2:00)
109 */ 110 */
110 void setTimeZone( const QString &tz ); 111 void setTimeZone( const QString &tz );
111 /** 112 /**
112 Set time zone from a minutes value (e.g. -60) 113 Set time zone from a minutes value (e.g. -60)
113 */ 114 */
114 void setTimeZone( int tz ); 115 void setTimeZone( int tz );
115 /** 116 /**
116 Return time zone as offest in minutes. 117 Return time zone as offest in minutes.
117 */ 118 */
118 int getTimeZone() const; 119 int getTimeZone() const;
119 /** 120 /**
120 Compute an ISO 8601 format string from the time zone. 121 Compute an ISO 8601 format string from the time zone.
121 */ 122 */
122 QString getTimeZoneStr() const; 123 QString getTimeZoneStr() const;
123 /** 124 /**
124 Set time zone id (see /usr/share/zoneinfo/zone.tab for list of legal 125 Set time zone id (see /usr/share/zoneinfo/zone.tab for list of legal
125 values). 126 values).
126 */ 127 */
127 void setTimeZoneId( const QString & ); 128 void setTimeZoneId( const QString & );
128 /** 129 /**
129 Return time zone id. 130 Return time zone id.
130 */ 131 */
131 QString timeZoneId() const; 132 QString timeZoneId() const;
132 /** 133 /**
133 Use local time, not UTC or a time zone. 134 Use local time, not UTC or a time zone.
134 */ 135 */
135 void setLocalTime(); 136 void setLocalTime();
136 /** 137 /**
137 Return whether local time is being used. 138 Return whether local time is being used.
138 */ 139 */
139 bool isLocalTime() const; 140 bool isLocalTime() const;
140 141
141 /** 142 /**
142 Add an incidence to calendar. 143 Add an incidence to calendar.
143 144
144 @return true on success, false on error. 145 @return true on success, false on error.
145 */ 146 */
146 virtual bool addIncidence( Incidence * ); 147 virtual bool addIncidence( Incidence * );
147 148
148 // Adds an incidence and all relatedto incidences to the cal 149 // Adds an incidence and all relatedto incidences to the cal
149 void addIncidenceBranch( Incidence * ); 150 void addIncidenceBranch( Incidence * );
150 /** 151 /**
151 Return filtered list of all incidences of this calendar. 152 Return filtered list of all incidences of this calendar.
152 */ 153 */
153 virtual QPtrList<Incidence> incidences(); 154 virtual QPtrList<Incidence> incidences();
154 155
155 /** 156 /**
156 Return unfiltered list of all incidences of this calendar. 157 Return unfiltered list of all incidences of this calendar.
157 */ 158 */
158 virtual QPtrList<Incidence> rawIncidences(); 159 virtual QPtrList<Incidence> rawIncidences();
159 160
160 /** 161 /**
161 Adds a Event to this calendar object. 162 Adds a Event to this calendar object.
162 @param anEvent a pointer to the event to add 163 @param anEvent a pointer to the event to add
163 164
164 @return true on success, false on error. 165 @return true on success, false on error.
165 */ 166 */
166 virtual bool addEventNoDup( Event *event ) = 0; 167 virtual bool addEventNoDup( Event *event ) = 0;
167 virtual bool addAnniversaryNoDup( Event *event ) = 0; 168 virtual bool addAnniversaryNoDup( Event *event ) = 0;
168 virtual bool addEvent( Event *anEvent ) = 0; 169 virtual bool addEvent( Event *anEvent ) = 0;
169 /** 170 /**
170 Delete event from calendar. 171 Delete event from calendar.
171 */ 172 */
172 virtual void deleteEvent( Event * ) = 0; 173 virtual void deleteEvent( Event * ) = 0;
173 /** 174 /**
174 Retrieves an event on the basis of the unique string ID. 175 Retrieves an event on the basis of the unique string ID.
175 */ 176 */
176 virtual Event *event( const QString &UniqueStr ) = 0; 177 virtual Event *event( const QString &UniqueStr ) = 0;
177 virtual Event *event( QString, QString ) = 0; 178 virtual Event *event( QString, QString ) = 0;
178 /** 179 /**
179 Builds and then returns a list of all events that match for the 180 Builds and then returns a list of all events that match for the
180 date specified. useful for dayView, etc. etc. 181 date specified. useful for dayView, etc. etc.
181 The calendar filter is applied. 182 The calendar filter is applied.
182 */ 183 */
183 QPtrList<Event> events( const QDate &date, bool sorted = false); 184 QPtrList<Event> events( const QDate &date, bool sorted = false);
184 /** 185 /**
185 Get events, which occur on the given date. 186 Get events, which occur on the given date.
186 The calendar filter is applied. 187 The calendar filter is applied.
187 */ 188 */
188 QPtrList<Event> events( const QDateTime &qdt ); 189 QPtrList<Event> events( const QDateTime &qdt );
189 /** 190 /**
190 Get events in a range of dates. If inclusive is set to true, only events 191 Get events in a range of dates. If inclusive is set to true, only events
191 are returned, which are completely included in the range. 192 are returned, which are completely included in the range.
192 The calendar filter is applied. 193 The calendar filter is applied.
193 */ 194 */
194 QPtrList<Event> events( const QDate &start, const QDate &end, 195 QPtrList<Event> events( const QDate &start, const QDate &end,
195 bool inclusive = false); 196 bool inclusive = false);
196 /** 197 /**
197 Return filtered list of all events in calendar. 198 Return filtered list of all events in calendar.
198 */ 199 */
199 virtual QPtrList<Event> events(); 200 virtual QPtrList<Event> events();
200 /** 201 /**
201 Return unfiltered list of all events in calendar. 202 Return unfiltered list of all events in calendar.
202 */ 203 */
203 virtual QPtrList<Event> rawEvents() = 0; 204 virtual QPtrList<Event> rawEvents() = 0;
204 205
205 /** 206 /**
206 Add a todo to the todolist. 207 Add a todo to the todolist.
207 208
208 @return true on success, false on error. 209 @return true on success, false on error.
209 */ 210 */
210 virtual bool addTodo( Todo *todo ) = 0; 211 virtual bool addTodo( Todo *todo ) = 0;
211 virtual bool addTodoNoDup( Todo *todo ) = 0; 212 virtual bool addTodoNoDup( Todo *todo ) = 0;
212 /** 213 /**
213 Remove a todo from the todolist. 214 Remove a todo from the todolist.
214 */ 215 */
215 virtual void deleteTodo( Todo * ) = 0; 216 virtual void deleteTodo( Todo * ) = 0;
216 virtual void deleteJournal( Journal * ) = 0; 217 virtual void deleteJournal( Journal * ) = 0;
217 /** 218 /**
218 Return filterd list of todos. 219 Return filterd list of todos.
219 */ 220 */
220 virtual QPtrList<Todo> todos(); 221 virtual QPtrList<Todo> todos();
221 /** 222 /**
222 Searches todolist for an event with this unique string identifier, 223 Searches todolist for an event with this unique string identifier,
223 returns a pointer or null. 224 returns a pointer or null.
224 */ 225 */
225 virtual Todo *todo( const QString &uid ) = 0; 226 virtual Todo *todo( const QString &uid ) = 0;
226 virtual Todo *todo( QString, QString ) = 0; 227 virtual Todo *todo( QString, QString ) = 0;
227 /** 228 /**
228 Returns list of todos due on the specified date. 229 Returns list of todos due on the specified date.
229 */ 230 */
230 virtual QPtrList<Todo> todos( const QDate &date ) = 0; 231 virtual QPtrList<Todo> todos( const QDate &date ) = 0;
231 /** 232 /**
232 Return unfiltered list of todos. 233 Return unfiltered list of todos.
233 */ 234 */
234 virtual QPtrList<Todo> rawTodos() = 0; 235 virtual QPtrList<Todo> rawTodos() = 0;
235 236
236 /** 237 /**
237 Add a Journal entry to calendar. 238 Add a Journal entry to calendar.
238 239
239 @return true on success, false on error. 240 @return true on success, false on error.
240 */ 241 */
241 virtual bool addJournal( Journal * ) = 0; 242 virtual bool addJournal( Journal * ) = 0;
242 /** 243 /**
243 Return Journal for given date. 244 Return Journal for given date.
244 */ 245 */
245 virtual Journal *journal( const QDate & ) = 0; 246 virtual Journal *journal( const QDate & ) = 0;
246 virtual QPtrList<Journal> journals4Date( const QDate & ) = 0; 247 virtual QPtrList<Journal> journals4Date( const QDate & ) = 0;
247 /** 248 /**
248 Return Journal with given UID. 249 Return Journal with given UID.
249 */ 250 */
250 virtual Journal *journal( const QString &UID ) = 0; 251 virtual Journal *journal( const QString &UID ) = 0;
251 /** 252 /**
252 Return list of all Journal entries. 253 Return list of all Journal entries.
253 */ 254 */
254 virtual QPtrList<Journal> journals() = 0; 255 virtual QPtrList<Journal> journals() = 0;
255 256
256 /** 257 /**
257 Searches all incidence types for an incidence with this unique 258 Searches all incidence types for an incidence with this unique
258 string identifier, returns a pointer or null. 259 string identifier, returns a pointer or null.
259 */ 260 */
260 Incidence* incidence( const QString&UID ); 261 Incidence* incidence( const QString&UID );
261 262
262 /** 263 /**
263 Setup relations for an incidence. 264 Setup relations for an incidence.
264 */ 265 */
265 virtual void setupRelations( Incidence * ); 266 virtual void setupRelations( Incidence * );
266 /** 267 /**
267 Remove all relations to an incidence 268 Remove all relations to an incidence
268 */ 269 */
269 virtual void removeRelations( Incidence * ); 270 virtual void removeRelations( Incidence * );
270 271
271 /** 272 /**
272 Set calendar filter, which filters events for the events() functions. 273 Set calendar filter, which filters events for the events() functions.
273 The Filter object is owned by the caller. 274 The Filter object is owned by the caller.
274 */ 275 */
275 void setFilter( CalFilter * ); 276 void setFilter( CalFilter * );
276 /** 277 /**
277 Return calendar filter. 278 Return calendar filter.
278 */ 279 */
279 CalFilter *filter(); 280 CalFilter *filter();
280 virtual QDateTime nextAlarm( int daysTo ) = 0; 281 virtual QDateTime nextAlarm( int daysTo ) = 0;
281 virtual QString nextSummary( ) const = 0; 282 virtual QString nextSummary( ) const = 0;
282 virtual void reInitAlarmSettings() = 0; 283 virtual void reInitAlarmSettings() = 0;
283 virtual QDateTime nextAlarmEventDateTime() const = 0; 284 virtual QDateTime nextAlarmEventDateTime() const = 0;
284 virtual void checkAlarmForIncidence( Incidence *, bool ) = 0; 285 virtual void checkAlarmForIncidence( Incidence *, bool ) = 0;
285 /** 286 /**
286 Return all alarms, which ocur in the given time interval. 287 Return all alarms, which ocur in the given time interval.
287 */ 288 */
288 virtual Alarm::List alarms( const QDateTime &from, 289 virtual Alarm::List alarms( const QDateTime &from,
289 const QDateTime &to ) = 0; 290 const QDateTime &to ) = 0;
290 291
291 class Observer { 292 class Observer {
292 public: 293 public:
293 virtual void calendarModified( bool, Calendar * ) = 0; 294 virtual void calendarModified( bool, Calendar * ) = 0;
294 }; 295 };
295 296
296 void registerObserver( Observer * ); 297 void registerObserver( Observer * );
297 298
298 void setModified( bool ); 299 void setModified( bool );
299 300
300 /** 301 /**
301 Set product id returned by loadedProductId(). This function is only 302 Set product id returned by loadedProductId(). This function is only
302 useful for the calendar loading code. 303 useful for the calendar loading code.
303 */ 304 */
304 void setLoadedProductId( const QString & ); 305 void setLoadedProductId( const QString & );
305 /** 306 /**
306 Return product id taken from file that has been loaded. Returns 307 Return product id taken from file that has been loaded. Returns
307 QString::null, if no calendar has been loaded. 308 QString::null, if no calendar has been loaded.
308 */ 309 */
309 QString loadedProductId(); 310 QString loadedProductId();
310 int defaultCalendar(); 311 int defaultCalendar();
311 void setDontDeleteIncidencesOnClose (); 312 void setDontDeleteIncidencesOnClose ();
312 public slots: 313 public slots:
313 void setDefaultCalendar( int ); 314 void setDefaultCalendar( int );
314 virtual void setCalendarEnabled( int id, bool enable ) = 0; 315 virtual void setCalendarEnabled( int id, bool enable ) = 0;
315 virtual void setAlarmEnabled( int id, bool enable ) = 0; 316 virtual void setAlarmEnabled( int id, bool enable ) = 0;
316 virtual void setReadOnly( int id, bool enable ) = 0; 317 virtual void setReadOnly( int id, bool enable ) = 0;
317 virtual void setDefaultCalendarEnabledOnly() = 0; 318 virtual void setDefaultCalendarEnabledOnly() = 0;
318 virtual void setCalendarRemove( int id ) = 0; 319 virtual void setCalendarRemove( int id ) = 0;
319 signals: 320 signals:
320 void calendarChanged(); 321 void calendarChanged();
321 void calendarSaved(); 322 void calendarSaved();
322 void calendarLoaded(); 323 void calendarLoaded();
323 void addAlarm(const QDateTime &qdt, const QString &noti ); 324 void addAlarm(const QDateTime &qdt, const QString &noti );
324 void removeAlarm(const QDateTime &qdt, const QString &noti ); 325 void removeAlarm(const QDateTime &qdt, const QString &noti );
325 326
326 protected: 327 protected:
327 /** 328 /**
328 Get unfiltered events, which occur on the given date. 329 Get unfiltered events, which occur on the given date.
329 */ 330 */
330 virtual QPtrList<Event> rawEventsForDate( const QDateTime &qdt ) = 0; 331 virtual QPtrList<Event> rawEventsForDate( const QDateTime &qdt ) = 0;
331 /** 332 /**
332 Get unfiltered events, which occur on the given date. 333 Get unfiltered events, which occur on the given date.
333 */ 334 */
334 virtual QPtrList<Event> rawEventsForDate( const QDate &date, 335 virtual QPtrList<Event> rawEventsForDate( const QDate &date,
diff --git a/libkcal/calendarlocal.cpp b/libkcal/calendarlocal.cpp
index cce798f..3e42ec0 100644
--- a/libkcal/calendarlocal.cpp
+++ b/libkcal/calendarlocal.cpp
@@ -1,326 +1,401 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 1998 Preston Brown 4 Copyright (c) 1998 Preston Brown
5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org> 5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org>
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
11 11
12 This library is distributed in the hope that it will be useful, 12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details. 15 Library General Public License for more details.
16 16
17 You should have received a copy of the GNU Library General Public License 17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to 18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. 20 Boston, MA 02111-1307, USA.
21*/ 21*/
22 22
23#include <qdatetime.h> 23#include <qdatetime.h>
24#include <qstring.h> 24#include <qstring.h>
25#include <qptrlist.h> 25#include <qptrlist.h>
26 26
27#include <kdebug.h> 27#include <kdebug.h>
28#include <kconfig.h> 28#include <kconfig.h>
29#include <kglobal.h> 29#include <kglobal.h>
30#include <klocale.h> 30#include <klocale.h>
31 31
32#include "vcaldrag.h" 32#include "vcaldrag.h"
33#include "vcalformat.h" 33#include "vcalformat.h"
34#include "icalformat.h" 34#include "icalformat.h"
35#include "exceptions.h" 35#include "exceptions.h"
36#include "incidence.h" 36#include "incidence.h"
37#include "journal.h" 37#include "journal.h"
38#include "filestorage.h" 38#include "filestorage.h"
39#include "calfilter.h" 39#include "calfilter.h"
40 40
41#include "calendarlocal.h" 41#include "calendarlocal.h"
42 42
43// #ifndef DESKTOP_VERSION 43// #ifndef DESKTOP_VERSION
44// #include <qtopia/alarmserver.h> 44// #include <qtopia/alarmserver.h>
45// #endif 45// #endif
46using namespace KCal; 46using namespace KCal;
47 47
48CalendarLocal::CalendarLocal() 48CalendarLocal::CalendarLocal()
49 : Calendar() 49 : Calendar()
50{ 50{
51 init(); 51 init();
52} 52}
53 53
54CalendarLocal::CalendarLocal(const QString &timeZoneId) 54CalendarLocal::CalendarLocal(const QString &timeZoneId)
55 : Calendar(timeZoneId) 55 : Calendar(timeZoneId)
56{ 56{
57 init(); 57 init();
58} 58}
59 59
60void CalendarLocal::init() 60void CalendarLocal::init()
61{ 61{
62 mNextAlarmIncidence = 0; 62 mNextAlarmIncidence = 0;
63} 63}
64 64
65 65
66CalendarLocal::~CalendarLocal() 66CalendarLocal::~CalendarLocal()
67{ 67{
68 if ( mDeleteIncidencesOnClose ) 68 if ( mDeleteIncidencesOnClose )
69 close(); 69 close();
70} 70}
71bool CalendarLocal::mergeCalendarFile( QString name )
72{
73 CalendarLocal calendar( timeZoneId() );
74 calendar.setDefaultCalendar( 1 );
75 if ( calendar.load( name ) ) {
76 mergeCalendar( &calendar );
77 return true;
78 }
79 return false;
80}
81
82Incidence* CalendarLocal::incidenceForUid( const QString& uid )
83{
84 Todo *todo;;
85 Incidence *retVal = 0;
86 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
87 if ( todo->uid() == uid ) {
88 if ( retVal ) {
89 if ( retVal->calID() > todo->calID() ) {
90 retVal = todo;
91 }
92 } else {
93 retVal = todo;
94 }
95 }
96 }
97 if ( retVal ) return retVal;
98 Event *event;
99 for ( event = mEventList.first(); event; event = mEventList.next() ) {
100 if ( event->uid() == uid ) {
101 if ( retVal ) {
102 if ( retVal->calID() > event->calID() ) {
103 retVal = event;
104 }
105 } else {
106 retVal = event;
107 }
108 }
109 }
110 if ( retVal ) return retVal;
111 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
112 if ( it->uid() == uid ) {
113 if ( retVal ) {
114 if ( retVal->calID() > it->calID() ) {
115 retVal = it;
116 }
117 } else {
118 retVal = it;
119 }
120 }
121 return retVal;
122}
123
124bool CalendarLocal::mergeCalendar( Calendar* remote )
125{
126 QPtrList<Incidence> er = remote->rawIncidences();
127 Incidence* inR = er.first();
128 Incidence* inL;
129 while ( inR ) {
130 inL = incidenceForUid( inR->uid() );
131 if ( inL ) {
132 int calID = inL->calID();
133 deleteIncidence( inL );
134 inL = inR->clone();
135 inL->setCalID( calID );
136 addIncidence( inL );
137 } else {
138 inL = inR->clone();
139 inL->setCalID( 0 );// add to default cal
140 addIncidence( inL );
141 }
142 inR = er.next();
143 }
144 return true;
145}
71bool CalendarLocal::addCalendarFile( QString name, int id ) 146bool CalendarLocal::addCalendarFile( QString name, int id )
72{ 147{
73 CalendarLocal calendar( timeZoneId() ); 148 CalendarLocal calendar( timeZoneId() );
74 calendar.setDefaultCalendar( id ); 149 calendar.setDefaultCalendar( id );
75 if ( calendar.load( name ) ) { 150 if ( calendar.load( name ) ) {
76 addCalendar( &calendar ); 151 addCalendar( &calendar );
77 return true; 152 return true;
78 } 153 }
79 return false; 154 return false;
80} 155}
81void CalendarLocal::setSyncEventsReadOnly() 156void CalendarLocal::setSyncEventsReadOnly()
82{ 157{
83 Event * ev; 158 Event * ev;
84 ev = mEventList.first(); 159 ev = mEventList.first();
85 while ( ev ) { 160 while ( ev ) {
86 if ( ev->uid().left(15) == QString("last-syncEvent-") ) 161 if ( ev->uid().left(15) == QString("last-syncEvent-") )
87 ev->setReadOnly( true ); 162 ev->setReadOnly( true );
88 ev = mEventList.next(); 163 ev = mEventList.next();
89 } 164 }
90} 165}
91void CalendarLocal::addCalendar( Calendar* cal ) 166void CalendarLocal::addCalendar( Calendar* cal )
92{ 167{
93 cal->setDontDeleteIncidencesOnClose(); 168 cal->setDontDeleteIncidencesOnClose();
94 { 169 {
95 QPtrList<Event> EventList = cal->rawEvents(); 170 QPtrList<Event> EventList = cal->rawEvents();
96 Event * ev = EventList.first(); 171 Event * ev = EventList.first();
97 while ( ev ) { 172 while ( ev ) {
98 ev->unRegisterObserver( cal ); 173 ev->unRegisterObserver( cal );
99 ev->registerObserver( this ); 174 ev->registerObserver( this );
100 mEventList.append( ev ); 175 mEventList.append( ev );
101 ev = EventList.next(); 176 ev = EventList.next();
102 } 177 }
103 } 178 }
104 { 179 {
105 180
106 QPtrList<Todo> TodoList = cal->rawTodos(); 181 QPtrList<Todo> TodoList = cal->rawTodos();
107 Todo * ev = TodoList.first(); 182 Todo * ev = TodoList.first();
108 while ( ev ) { 183 while ( ev ) {
109 QString rel = ev->relatedToUid(); 184 QString rel = ev->relatedToUid();
110 if ( !rel.isEmpty() ){ 185 if ( !rel.isEmpty() ){
111 ev->setRelatedTo ( 0 ); 186 ev->setRelatedTo ( 0 );
112 ev->setRelatedToUid( rel ); 187 ev->setRelatedToUid( rel );
113 } 188 }
114 ev = TodoList.next(); 189 ev = TodoList.next();
115 } 190 }
116 //TodoList = cal->rawTodos(); 191 //TodoList = cal->rawTodos();
117 ev = TodoList.first(); 192 ev = TodoList.first();
118 while ( ev ) { 193 while ( ev ) {
119 ev->unRegisterObserver( cal ); 194 ev->unRegisterObserver( cal );
120 ev->registerObserver( this ); 195 ev->registerObserver( this );
121 mTodoList.append( ev ); 196 mTodoList.append( ev );
122 setupRelations( ev ); 197 setupRelations( ev );
123 ev = TodoList.next(); 198 ev = TodoList.next();
124 } 199 }
125 } 200 }
126 { 201 {
127 QPtrList<Journal> JournalList = cal->journals(); 202 QPtrList<Journal> JournalList = cal->journals();
128 Journal * ev = JournalList.first(); 203 Journal * ev = JournalList.first();
129 while ( ev ) { 204 while ( ev ) {
130 ev->unRegisterObserver( cal ); 205 ev->unRegisterObserver( cal );
131 ev->registerObserver( this ); 206 ev->registerObserver( this );
132 mJournalList.append( ev ); 207 mJournalList.append( ev );
133 ev = JournalList.next(); 208 ev = JournalList.next();
134 } 209 }
135 } 210 }
136 setModified( true ); 211 setModified( true );
137} 212}
138bool CalendarLocal::load( const QString &fileName ) 213bool CalendarLocal::load( const QString &fileName )
139{ 214{
140 FileStorage storage( this, fileName ); 215 FileStorage storage( this, fileName );
141 return storage.load(); 216 return storage.load();
142} 217}
143 218
144bool CalendarLocal::save( const QString &fileName, CalFormat *format ) 219bool CalendarLocal::save( const QString &fileName, CalFormat *format )
145{ 220{
146 FileStorage storage( this, fileName, format ); 221 FileStorage storage( this, fileName, format );
147 return storage.save(); 222 return storage.save();
148} 223}
149 224
150void CalendarLocal::stopAllTodos() 225void CalendarLocal::stopAllTodos()
151{ 226{
152 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 227 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
153 it->setRunning( false ); 228 it->setRunning( false );
154 229
155} 230}
156void CalendarLocal::close() 231void CalendarLocal::close()
157{ 232{
158 233
159 Todo * i; 234 Todo * i;
160 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false); 235 for( i = mTodoList.first(); i; i = mTodoList.next() ) i->setRunning(false);
161 236
162 mEventList.setAutoDelete( true ); 237 mEventList.setAutoDelete( true );
163 mTodoList.setAutoDelete( true ); 238 mTodoList.setAutoDelete( true );
164 mJournalList.setAutoDelete( false ); 239 mJournalList.setAutoDelete( false );
165 240
166 mEventList.clear(); 241 mEventList.clear();
167 mTodoList.clear(); 242 mTodoList.clear();
168 mJournalList.clear(); 243 mJournalList.clear();
169 244
170 mEventList.setAutoDelete( false ); 245 mEventList.setAutoDelete( false );
171 mTodoList.setAutoDelete( false ); 246 mTodoList.setAutoDelete( false );
172 mJournalList.setAutoDelete( false ); 247 mJournalList.setAutoDelete( false );
173 248
174 setModified( false ); 249 setModified( false );
175} 250}
176 251
177bool CalendarLocal::addAnniversaryNoDup( Event *event ) 252bool CalendarLocal::addAnniversaryNoDup( Event *event )
178{ 253{
179 QString cat; 254 QString cat;
180 bool isBirthday = true; 255 bool isBirthday = true;
181 if( event->categoriesStr() == i18n( "Anniversary" ) ) { 256 if( event->categoriesStr() == i18n( "Anniversary" ) ) {
182 isBirthday = false; 257 isBirthday = false;
183 cat = i18n( "Anniversary" ); 258 cat = i18n( "Anniversary" );
184 } else if( event->categoriesStr() == i18n( "Birthday" ) ) { 259 } else if( event->categoriesStr() == i18n( "Birthday" ) ) {
185 isBirthday = true; 260 isBirthday = true;
186 cat = i18n( "Birthday" ); 261 cat = i18n( "Birthday" );
187 } else { 262 } else {
188 qDebug("addAnniversaryNoDup called without fitting category! "); 263 qDebug("addAnniversaryNoDup called without fitting category! ");
189 return false; 264 return false;
190 } 265 }
191 Event * eve; 266 Event * eve;
192 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 267 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
193 if ( !(eve->categories().contains( cat ) )) 268 if ( !(eve->categories().contains( cat ) ))
194 continue; 269 continue;
195 // now we have an event with fitting category 270 // now we have an event with fitting category
196 if ( eve->dtStart().date() != event->dtStart().date() ) 271 if ( eve->dtStart().date() != event->dtStart().date() )
197 continue; 272 continue;
198 // now we have an event with fitting category+date 273 // now we have an event with fitting category+date
199 if ( eve->summary() != event->summary() ) 274 if ( eve->summary() != event->summary() )
200 continue; 275 continue;
201 // now we have an event with fitting category+date+summary 276 // now we have an event with fitting category+date+summary
202 return false; 277 return false;
203 } 278 }
204 return addEvent( event ); 279 return addEvent( event );
205 280
206} 281}
207bool CalendarLocal::addEventNoDup( Event *event ) 282bool CalendarLocal::addEventNoDup( Event *event )
208{ 283{
209 Event * eve; 284 Event * eve;
210 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 285 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
211 if ( *eve == *event ) { 286 if ( *eve == *event ) {
212 //qDebug("CalendarLocal::Duplicate event found! Not inserted! "); 287 //qDebug("CalendarLocal::Duplicate event found! Not inserted! ");
213 return false; 288 return false;
214 } 289 }
215 } 290 }
216 return addEvent( event ); 291 return addEvent( event );
217} 292}
218 293
219bool CalendarLocal::addEvent( Event *event ) 294bool CalendarLocal::addEvent( Event *event )
220{ 295{
221 insertEvent( event ); 296 insertEvent( event );
222 297
223 event->registerObserver( this ); 298 event->registerObserver( this );
224 299
225 setModified( true ); 300 setModified( true );
226 if ( event->calID() == 0 ) 301 if ( event->calID() == 0 )
227 event->setCalID( mDefaultCalendar ); 302 event->setCalID( mDefaultCalendar );
228 event->setCalEnabled( true ); 303 event->setCalEnabled( true );
229 304
230 return true; 305 return true;
231} 306}
232 307
233void CalendarLocal::deleteEvent( Event *event ) 308void CalendarLocal::deleteEvent( Event *event )
234{ 309{
235 if ( mUndoIncidence ) delete mUndoIncidence; 310 if ( mUndoIncidence ) delete mUndoIncidence;
236 mUndoIncidence = event->clone(); 311 mUndoIncidence = event->clone();
237 if ( mEventList.removeRef( event ) ) { 312 if ( mEventList.removeRef( event ) ) {
238 setModified( true ); 313 setModified( true );
239 } 314 }
240} 315}
241 316
242 317
243Event *CalendarLocal::event( const QString &uid ) 318Event *CalendarLocal::event( const QString &uid )
244{ 319{
245 Event *event; 320 Event *event;
246 Event *retVal = 0; 321 Event *retVal = 0;
247 for ( event = mEventList.first(); event; event = mEventList.next() ) { 322 for ( event = mEventList.first(); event; event = mEventList.next() ) {
248 if ( event->calEnabled() && event->uid() == uid ) { 323 if ( event->calEnabled() && event->uid() == uid ) {
249 if ( retVal ) { 324 if ( retVal ) {
250 if ( retVal->calID() > event->calID() ) { 325 if ( retVal->calID() > event->calID() ) {
251 retVal = event; 326 retVal = event;
252 } 327 }
253 } else { 328 } else {
254 retVal = event; 329 retVal = event;
255 } 330 }
256 } 331 }
257 } 332 }
258 return retVal; 333 return retVal;
259} 334}
260bool CalendarLocal::addTodoNoDup( Todo *todo ) 335bool CalendarLocal::addTodoNoDup( Todo *todo )
261{ 336{
262 Todo * eve; 337 Todo * eve;
263 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) { 338 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) {
264 if ( *eve == *todo ) { 339 if ( *eve == *todo ) {
265 //qDebug("duplicate todo found! not inserted! "); 340 //qDebug("duplicate todo found! not inserted! ");
266 return false; 341 return false;
267 } 342 }
268 } 343 }
269 return addTodo( todo ); 344 return addTodo( todo );
270} 345}
271bool CalendarLocal::addTodo( Todo *todo ) 346bool CalendarLocal::addTodo( Todo *todo )
272{ 347{
273 mTodoList.append( todo ); 348 mTodoList.append( todo );
274 349
275 todo->registerObserver( this ); 350 todo->registerObserver( this );
276 351
277 // Set up subtask relations 352 // Set up subtask relations
278 setupRelations( todo ); 353 setupRelations( todo );
279 354
280 setModified( true ); 355 setModified( true );
281 if ( todo->calID() == 0 ) 356 if ( todo->calID() == 0 )
282 todo->setCalID( mDefaultCalendar ); 357 todo->setCalID( mDefaultCalendar );
283 todo->setCalEnabled( true ); 358 todo->setCalEnabled( true );
284 return true; 359 return true;
285} 360}
286 361
287void CalendarLocal::deleteTodo( Todo *todo ) 362void CalendarLocal::deleteTodo( Todo *todo )
288{ 363{
289 // Handle orphaned children 364 // Handle orphaned children
290 if ( mUndoIncidence ) delete mUndoIncidence; 365 if ( mUndoIncidence ) delete mUndoIncidence;
291 removeRelations( todo ); 366 removeRelations( todo );
292 mUndoIncidence = todo->clone(); 367 mUndoIncidence = todo->clone();
293 368
294 if ( mTodoList.removeRef( todo ) ) { 369 if ( mTodoList.removeRef( todo ) ) {
295 setModified( true ); 370 setModified( true );
296 } 371 }
297} 372}
298 373
299QPtrList<Todo> CalendarLocal::rawTodos() 374QPtrList<Todo> CalendarLocal::rawTodos()
300{ 375{
301 QPtrList<Todo> el; 376 QPtrList<Todo> el;
302 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() ) 377 for ( Todo *it = mTodoList.first(); it; it = mTodoList.next() )
303 if ( it->calEnabled() ) el.append( it ); 378 if ( it->calEnabled() ) el.append( it );
304 return el; 379 return el;
305} 380}
306Todo *CalendarLocal::todo( QString syncProf, QString id ) 381Todo *CalendarLocal::todo( QString syncProf, QString id )
307{ 382{
308 Todo *todo; 383 Todo *todo;
309 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 384 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
310 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo; 385 if ( todo->calEnabled() && todo->getID( syncProf ) == id ) return todo;
311 } 386 }
312 387
313 return 0; 388 return 0;
314} 389}
315void CalendarLocal::removeSyncInfo( QString syncProfile) 390void CalendarLocal::removeSyncInfo( QString syncProfile)
316{ 391{
317 QPtrList<Incidence> all = rawIncidences() ; 392 QPtrList<Incidence> all = rawIncidences() ;
318 Incidence *inc; 393 Incidence *inc;
319 for ( inc = all.first(); inc; inc = all.next() ) { 394 for ( inc = all.first(); inc; inc = all.next() ) {
320 inc->removeID( syncProfile ); 395 inc->removeID( syncProfile );
321 } 396 }
322 if ( syncProfile.isEmpty() ) { 397 if ( syncProfile.isEmpty() ) {
323 QPtrList<Event> el; 398 QPtrList<Event> el;
324 Event *todo; 399 Event *todo;
325 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 400 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
326 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 401 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
diff --git a/libkcal/calendarlocal.h b/libkcal/calendarlocal.h
index 98d16a3..23b0542 100644
--- a/libkcal/calendarlocal.h
+++ b/libkcal/calendarlocal.h
@@ -1,227 +1,230 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 1998 Preston Brown 4 Copyright (c) 1998 Preston Brown
5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org> 5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org>
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
11 11
12 This library is distributed in the hope that it will be useful, 12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details. 15 Library General Public License for more details.
16 16
17 You should have received a copy of the GNU Library General Public License 17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to 18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. 20 Boston, MA 02111-1307, USA.
21*/ 21*/
22#ifndef KCAL_CALENDARLOCAL_H 22#ifndef KCAL_CALENDARLOCAL_H
23#define KCAL_CALENDARLOCAL_H 23#define KCAL_CALENDARLOCAL_H
24 24
25#include "calendar.h" 25#include "calendar.h"
26 26
27namespace KCal { 27namespace KCal {
28 28
29class CalFormat; 29class CalFormat;
30 30
31/** 31/**
32 This class provides a calendar stored as a local file. 32 This class provides a calendar stored as a local file.
33*/ 33*/
34class CalendarLocal : public Calendar 34class CalendarLocal : public Calendar
35{ 35{
36 public: 36 public:
37 /** 37 /**
38 Constructs a new calendar, with variables initialized to sane values. 38 Constructs a new calendar, with variables initialized to sane values.
39 */ 39 */
40 CalendarLocal(); 40 CalendarLocal();
41 /** 41 /**
42 Constructs a new calendar, with variables initialized to sane values. 42 Constructs a new calendar, with variables initialized to sane values.
43 */ 43 */
44 CalendarLocal( const QString &timeZoneId ); 44 CalendarLocal( const QString &timeZoneId );
45 ~CalendarLocal(); 45 ~CalendarLocal();
46 void addCalendar( Calendar* ); 46 void addCalendar( Calendar* );
47 bool addCalendarFile( QString name, int id ); 47 bool addCalendarFile( QString name, int id );
48 bool mergeCalendarFile( QString name );
49 bool mergeCalendar( Calendar* cal );
50 Incidence* incidenceForUid( const QString& uid );
48 void setSyncEventsReadOnly(); 51 void setSyncEventsReadOnly();
49 void stopAllTodos(); 52 void stopAllTodos();
50 /** 53 /**
51 Loads a calendar on disk in vCalendar or iCalendar format into the current 54 Loads a calendar on disk in vCalendar or iCalendar format into the current
52 calendar. Any information already present is lost. 55 calendar. Any information already present is lost.
53 @return true, if successfull, false on error. 56 @return true, if successfull, false on error.
54 @param fileName the name of the calendar on disk. 57 @param fileName the name of the calendar on disk.
55 */ 58 */
56 bool load( const QString &fileName ); 59 bool load( const QString &fileName );
57 /** 60 /**
58 Writes out the calendar to disk in the specified \a format. 61 Writes out the calendar to disk in the specified \a format.
59 CalendarLocal takes ownership of the CalFormat object. 62 CalendarLocal takes ownership of the CalFormat object.
60 @return true, if successfull, false on error. 63 @return true, if successfull, false on error.
61 @param fileName the name of the file 64 @param fileName the name of the file
62 */ 65 */
63 bool save( const QString &fileName, CalFormat *format = 0 ); 66 bool save( const QString &fileName, CalFormat *format = 0 );
64 67
65 /** 68 /**
66 Clears out the current calendar, freeing all used memory etc. etc. 69 Clears out the current calendar, freeing all used memory etc. etc.
67 */ 70 */
68 void close(); 71 void close();
69 72
70 void save() {} 73 void save() {}
71 74
72 /** 75 /**
73 Add Event to calendar. 76 Add Event to calendar.
74 */ 77 */
75 void removeSyncInfo( QString syncProfile); 78 void removeSyncInfo( QString syncProfile);
76 bool addAnniversaryNoDup( Event *event ); 79 bool addAnniversaryNoDup( Event *event );
77 bool addEventNoDup( Event *event ); 80 bool addEventNoDup( Event *event );
78 bool addEvent( Event *event ); 81 bool addEvent( Event *event );
79 /** 82 /**
80 Deletes an event from this calendar. 83 Deletes an event from this calendar.
81 */ 84 */
82 void deleteEvent( Event *event ); 85 void deleteEvent( Event *event );
83 86
84 /** 87 /**
85 Retrieves an event on the basis of the unique string ID. 88 Retrieves an event on the basis of the unique string ID.
86 */ 89 */
87 Event *event( const QString &uid ); 90 Event *event( const QString &uid );
88 /** 91 /**
89 Return unfiltered list of all events in calendar. 92 Return unfiltered list of all events in calendar.
90 */ 93 */
91 QPtrList<Event> rawEvents(); 94 QPtrList<Event> rawEvents();
92 QPtrList<Event> getExternLastSyncEvents(); 95 QPtrList<Event> getExternLastSyncEvents();
93 /** 96 /**
94 Add a todo to the todolist. 97 Add a todo to the todolist.
95 */ 98 */
96 bool addTodo( Todo *todo ); 99 bool addTodo( Todo *todo );
97 bool addTodoNoDup( Todo *todo ); 100 bool addTodoNoDup( Todo *todo );
98 /** 101 /**
99 Remove a todo from the todolist. 102 Remove a todo from the todolist.
100 */ 103 */
101 void deleteTodo( Todo * ); 104 void deleteTodo( Todo * );
102 /** 105 /**
103 Searches todolist for an event with this unique string identifier, 106 Searches todolist for an event with this unique string identifier,
104 returns a pointer or null. 107 returns a pointer or null.
105 */ 108 */
106 Todo *todo( const QString &uid ); 109 Todo *todo( const QString &uid );
107 /** 110 /**
108 Return list of all todos. 111 Return list of all todos.
109 */ 112 */
110 QPtrList<Todo> rawTodos(); 113 QPtrList<Todo> rawTodos();
111 /** 114 /**
112 Returns list of todos due on the specified date. 115 Returns list of todos due on the specified date.
113 */ 116 */
114 QPtrList<Todo> todos( const QDate &date ); 117 QPtrList<Todo> todos( const QDate &date );
115 /** 118 /**
116 Return list of all todos. 119 Return list of all todos.
117 120
118 Workaround because compiler does not recognize function of base class. 121 Workaround because compiler does not recognize function of base class.
119 */ 122 */
120 QPtrList<Todo> todos() { return Calendar::todos(); } 123 QPtrList<Todo> todos() { return Calendar::todos(); }
121 124
122 /** 125 /**
123 Add a Journal entry to calendar. 126 Add a Journal entry to calendar.
124 */ 127 */
125 bool addJournal( Journal * ); 128 bool addJournal( Journal * );
126 /** 129 /**
127 Remove a Journal from the calendar. 130 Remove a Journal from the calendar.
128 */ 131 */
129 void deleteJournal( Journal * ); 132 void deleteJournal( Journal * );
130 /** 133 /**
131 Return Journal for given date. 134 Return Journal for given date.
132 */ 135 */
133 Journal *journal( const QDate & ); 136 Journal *journal( const QDate & );
134 QPtrList<Journal> journals4Date( const QDate & ); 137 QPtrList<Journal> journals4Date( const QDate & );
135 /** 138 /**
136 Return Journal with given UID. 139 Return Journal with given UID.
137 */ 140 */
138 Journal *journal( const QString &uid ); 141 Journal *journal( const QString &uid );
139 /** 142 /**
140 Return list of all Journals stored in calendar. 143 Return list of all Journals stored in calendar.
141 */ 144 */
142 QPtrList<Journal> journals(); 145 QPtrList<Journal> journals();
143 146
144 /** 147 /**
145 Return all alarms, which ocur in the given time interval. 148 Return all alarms, which ocur in the given time interval.
146 */ 149 */
147 Alarm::List alarms( const QDateTime &from, const QDateTime &to ); 150 Alarm::List alarms( const QDateTime &from, const QDateTime &to );
148 151
149 /** 152 /**
150 Return all alarms, which ocur before given date. 153 Return all alarms, which ocur before given date.
151 */ 154 */
152 Alarm::List alarmsTo( const QDateTime &to ); 155 Alarm::List alarmsTo( const QDateTime &to );
153 156
154 QDateTime nextAlarm( int daysTo ) ; 157 QDateTime nextAlarm( int daysTo ) ;
155 QDateTime nextAlarmEventDateTime() const; 158 QDateTime nextAlarmEventDateTime() const;
156 void checkAlarmForIncidence( Incidence *, bool deleted ) ; 159 void checkAlarmForIncidence( Incidence *, bool deleted ) ;
157 void registerAlarm(); 160 void registerAlarm();
158 void deRegisterAlarm(); 161 void deRegisterAlarm();
159 QString getAlarmNotification(); 162 QString getAlarmNotification();
160 QString nextSummary() const ; 163 QString nextSummary() const ;
161 /** 164 /**
162 This method should be called whenever a Event is modified directly 165 This method should be called whenever a Event is modified directly
163 via it's pointer. It makes sure that the calendar is internally 166 via it's pointer. It makes sure that the calendar is internally
164 consistent. 167 consistent.
165 */ 168 */
166 void update( IncidenceBase *incidence ); 169 void update( IncidenceBase *incidence );
167 170
168 /** 171 /**
169 Builds and then returns a list of all events that match for the 172 Builds and then returns a list of all events that match for the
170 date specified. useful for dayView, etc. etc. 173 date specified. useful for dayView, etc. etc.
171 */ 174 */
172 QPtrList<Event> rawEventsForDate( const QDate &date, bool sorted = false ); 175 QPtrList<Event> rawEventsForDate( const QDate &date, bool sorted = false );
173 /** 176 /**
174 Get unfiltered events for date \a qdt. 177 Get unfiltered events for date \a qdt.
175 */ 178 */
176 QPtrList<Event> rawEventsForDate( const QDateTime &qdt ); 179 QPtrList<Event> rawEventsForDate( const QDateTime &qdt );
177 /** 180 /**
178 Get unfiltered events in a range of dates. If inclusive is set to true, 181 Get unfiltered events in a range of dates. If inclusive is set to true,
179 only events are returned, which are completely included in the range. 182 only events are returned, which are completely included in the range.
180 */ 183 */
181 QPtrList<Event> rawEvents( const QDate &start, const QDate &end, 184 QPtrList<Event> rawEvents( const QDate &start, const QDate &end,
182 bool inclusive = false ); 185 bool inclusive = false );
183 Todo *todo( QString, QString ); 186 Todo *todo( QString, QString );
184 Event *event( QString, QString ); 187 Event *event( QString, QString );
185 188
186public slots: 189public slots:
187 void setCalendarEnabled( int id, bool enable ); 190 void setCalendarEnabled( int id, bool enable );
188 void setAlarmEnabled( int id, bool enable ); 191 void setAlarmEnabled( int id, bool enable );
189 void setReadOnly( int id, bool enable ); 192 void setReadOnly( int id, bool enable );
190 void setDefaultCalendarEnabledOnly(); 193 void setDefaultCalendarEnabledOnly();
191 void setCalendarRemove( int id ); 194 void setCalendarRemove( int id );
192 195
193 protected: 196 protected:
194 197
195 // Event* mNextAlarmEvent; 198 // Event* mNextAlarmEvent;
196 QString mNextSummary; 199 QString mNextSummary;
197 QString mNextAlarmEventDateTimeString; 200 QString mNextAlarmEventDateTimeString;
198 QString mLastAlarmNotificationString; 201 QString mLastAlarmNotificationString;
199 QDateTime mNextAlarmEventDateTime; 202 QDateTime mNextAlarmEventDateTime;
200 QDateTime mNextAlarmDateTime; 203 QDateTime mNextAlarmDateTime;
201 void reInitAlarmSettings(); 204 void reInitAlarmSettings();
202 205
203 /** Notification function of IncidenceBase::Observer. */ 206 /** Notification function of IncidenceBase::Observer. */
204 void incidenceUpdated( IncidenceBase *i ) { update( i ); } 207 void incidenceUpdated( IncidenceBase *i ) { update( i ); }
205 208
206 /** inserts an event into its "proper place" in the calendar. */ 209 /** inserts an event into its "proper place" in the calendar. */
207 void insertEvent( Event *event ); 210 void insertEvent( Event *event );
208 211
209 /** Append alarms of incidence in interval to list of alarms. */ 212 /** Append alarms of incidence in interval to list of alarms. */
210 void appendAlarms( Alarm::List &alarms, Incidence *incidence, 213 void appendAlarms( Alarm::List &alarms, Incidence *incidence,
211 const QDateTime &from, const QDateTime &to ); 214 const QDateTime &from, const QDateTime &to );
212 215
213 /** Append alarms of recurring events in interval to list of alarms. */ 216 /** Append alarms of recurring events in interval to list of alarms. */
214 void appendRecurringAlarms( Alarm::List &alarms, Incidence *incidence, 217 void appendRecurringAlarms( Alarm::List &alarms, Incidence *incidence,
215 const QDateTime &from, const QDateTime &to ); 218 const QDateTime &from, const QDateTime &to );
216 219
217 private: 220 private:
218 void init(); 221 void init();
219 222
220 QPtrList<Event> mEventList; 223 QPtrList<Event> mEventList;
221 QPtrList<Todo> mTodoList; 224 QPtrList<Todo> mTodoList;
222 QPtrList<Journal> mJournalList; 225 QPtrList<Journal> mJournalList;
223}; 226};
224 227
225} 228}
226 229
227#endif 230#endif