summaryrefslogtreecommitdiffabout
path: root/korganizer
Unidiff
Diffstat (limited to 'korganizer') (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
5 files changed, 46 insertions, 2 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 940ea91..ccacc52 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1262,506 +1262,515 @@ int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , b
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.") );
@@ -1954,384 +1963,393 @@ bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a
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;
@@ -3169,390 +3187,392 @@ void CalendarView::moveIncidence(Incidence * inc )
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{
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index 706d05d..799c297 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -1,332 +1,333 @@
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
diff --git a/korganizer/journalentry.cpp b/korganizer/journalentry.cpp
index b8a4cf2..f0e0f86 100644
--- a/korganizer/journalentry.cpp
+++ b/korganizer/journalentry.cpp
@@ -1,322 +1,342 @@
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 }
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
@@ -2355,282 +2355,282 @@ void MainWindow::setCaptionToDates()
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}