summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 898da6c..e3b62de 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1497,3073 +1497,3073 @@ int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , b
1497 return 0; 1497 return 0;
1498 if ( lastSync > remoteMod ) 1498 if ( lastSync > remoteMod )
1499 return 1; 1499 return 1;
1500 if ( lastSync > localMod ) 1500 if ( lastSync > localMod )
1501 return 2; 1501 return 2;
1502 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 1502 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
1503 localIsNew = localMod >= remoteMod; 1503 localIsNew = localMod >= remoteMod;
1504 if ( localIsNew ) 1504 if ( localIsNew )
1505 getEventViewerDialog()->setColorMode( 1 ); 1505 getEventViewerDialog()->setColorMode( 1 );
1506 else 1506 else
1507 getEventViewerDialog()->setColorMode( 2 ); 1507 getEventViewerDialog()->setColorMode( 2 );
1508 getEventViewerDialog()->setIncidence(local); 1508 getEventViewerDialog()->setIncidence(local);
1509 if ( localIsNew ) 1509 if ( localIsNew )
1510 getEventViewerDialog()->setColorMode( 2 ); 1510 getEventViewerDialog()->setColorMode( 2 );
1511 else 1511 else
1512 getEventViewerDialog()->setColorMode( 1 ); 1512 getEventViewerDialog()->setColorMode( 1 );
1513 getEventViewerDialog()->addIncidence(remote); 1513 getEventViewerDialog()->addIncidence(remote);
1514 getEventViewerDialog()->setColorMode( 0 ); 1514 getEventViewerDialog()->setColorMode( 0 );
1515 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 1515 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
1516 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 1516 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
1517 getEventViewerDialog()->showMe(); 1517 getEventViewerDialog()->showMe();
1518 result = getEventViewerDialog()->executeS( localIsNew ); 1518 result = getEventViewerDialog()->executeS( localIsNew );
1519 return result; 1519 return result;
1520 1520
1521 break; 1521 break;
1522 case SYNC_PREF_FORCE_LOCAL: 1522 case SYNC_PREF_FORCE_LOCAL:
1523 return 1; 1523 return 1;
1524 break; 1524 break;
1525 case SYNC_PREF_FORCE_REMOTE: 1525 case SYNC_PREF_FORCE_REMOTE:
1526 return 2; 1526 return 2;
1527 break; 1527 break;
1528 1528
1529 default: 1529 default:
1530 // SYNC_PREF_TAKE_BOTH not implemented 1530 // SYNC_PREF_TAKE_BOTH not implemented
1531 break; 1531 break;
1532 } 1532 }
1533 return 0; 1533 return 0;
1534} 1534}
1535Event* CalendarView::getLastSyncEvent() 1535Event* CalendarView::getLastSyncEvent()
1536{ 1536{
1537 Event* lse; 1537 Event* lse;
1538 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 1538 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
1539 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 1539 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
1540 if (!lse) { 1540 if (!lse) {
1541 lse = new Event(); 1541 lse = new Event();
1542 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 1542 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
1543 QString sum = ""; 1543 QString sum = "";
1544 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 1544 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
1545 sum = "E: "; 1545 sum = "E: ";
1546 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 1546 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
1547 lse->setDtStart( mLastCalendarSync ); 1547 lse->setDtStart( mLastCalendarSync );
1548 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1548 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1549 lse->setCategories( i18n("SyncEvent") ); 1549 lse->setCategories( i18n("SyncEvent") );
1550 lse->setReadOnly( true ); 1550 lse->setReadOnly( true );
1551 mCalendar->addEvent( lse ); 1551 mCalendar->addEvent( lse );
1552 } 1552 }
1553 1553
1554 return lse; 1554 return lse;
1555 1555
1556} 1556}
1557 1557
1558// we check, if the to delete event has a id for a profile 1558// we check, if the to delete event has a id for a profile
1559// if yes, we set this id in the profile to delete 1559// if yes, we set this id in the profile to delete
1560void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 1560void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
1561{ 1561{
1562 if ( lastSync.count() == 0 ) { 1562 if ( lastSync.count() == 0 ) {
1563 //qDebug(" lastSync.count() == 0"); 1563 //qDebug(" lastSync.count() == 0");
1564 return; 1564 return;
1565 } 1565 }
1566 if ( toDelete->typeID() == journalID ) 1566 if ( toDelete->typeID() == journalID )
1567 return; 1567 return;
1568 1568
1569 Event* eve = lastSync.first(); 1569 Event* eve = lastSync.first();
1570 1570
1571 while ( eve ) { 1571 while ( eve ) {
1572 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 1572 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
1573 if ( !id.isEmpty() ) { 1573 if ( !id.isEmpty() ) {
1574 QString des = eve->description(); 1574 QString des = eve->description();
1575 QString pref = "e"; 1575 QString pref = "e";
1576 if ( toDelete->typeID() == todoID ) 1576 if ( toDelete->typeID() == todoID )
1577 pref = "t"; 1577 pref = "t";
1578 des += pref+ id + ","; 1578 des += pref+ id + ",";
1579 eve->setReadOnly( false ); 1579 eve->setReadOnly( false );
1580 eve->setDescription( des ); 1580 eve->setDescription( des );
1581 //qDebug("setdes %s ", des.latin1()); 1581 //qDebug("setdes %s ", des.latin1());
1582 eve->setReadOnly( true ); 1582 eve->setReadOnly( true );
1583 } 1583 }
1584 eve = lastSync.next(); 1584 eve = lastSync.next();
1585 } 1585 }
1586 1586
1587} 1587}
1588void CalendarView::checkExternalId( Incidence * inc ) 1588void CalendarView::checkExternalId( Incidence * inc )
1589{ 1589{
1590 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 1590 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
1591 checkExternSyncEvent( lastSync, inc ); 1591 checkExternSyncEvent( lastSync, inc );
1592 1592
1593} 1593}
1594bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 1594bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
1595{ 1595{
1596 bool syncOK = true; 1596 bool syncOK = true;
1597 int addedEvent = 0; 1597 int addedEvent = 0;
1598 int addedEventR = 0; 1598 int addedEventR = 0;
1599 int deletedEventR = 0; 1599 int deletedEventR = 0;
1600 int deletedEventL = 0; 1600 int deletedEventL = 0;
1601 int changedLocal = 0; 1601 int changedLocal = 0;
1602 int changedRemote = 0; 1602 int changedRemote = 0;
1603 int filteredIN = 0; 1603 int filteredIN = 0;
1604 int filteredOUT = 0; 1604 int filteredOUT = 0;
1605 //QPtrList<Event> el = local->rawEvents(); 1605 //QPtrList<Event> el = local->rawEvents();
1606 Event* eventR; 1606 Event* eventR;
1607 QString uid; 1607 QString uid;
1608 int take; 1608 int take;
1609 Event* eventRSync; 1609 Event* eventRSync;
1610 Event* eventLSync; 1610 Event* eventLSync;
1611 clearAllViews(); 1611 clearAllViews();
1612 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 1612 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
1613 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 1613 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
1614 bool fullDateRange = false; 1614 bool fullDateRange = false;
1615 local->resetTempSyncStat(); 1615 local->resetTempSyncStat();
1616 mLastCalendarSync = QDateTime::currentDateTime(); 1616 mLastCalendarSync = QDateTime::currentDateTime();
1617 if ( mSyncManager->syncWithDesktop() ) { 1617 if ( mSyncManager->syncWithDesktop() ) {
1618 remote->resetPilotStat(1); 1618 remote->resetPilotStat(1);
1619 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 1619 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
1620 mLastCalendarSync = KSyncManager::mRequestedSyncEvent; 1620 mLastCalendarSync = KSyncManager::mRequestedSyncEvent;
1621 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() ); 1621 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() );
1622 } else { 1622 } else {
1623 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime "); 1623 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime ");
1624 } 1624 }
1625 } 1625 }
1626 QDateTime modifiedCalendar = mLastCalendarSync; 1626 QDateTime modifiedCalendar = mLastCalendarSync;
1627 eventLSync = getLastSyncEvent(); 1627 eventLSync = getLastSyncEvent();
1628 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 1628 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
1629 if ( eventR ) { 1629 if ( eventR ) {
1630 qDebug("last-syncEvent on remote found "); 1630 qDebug("last-syncEvent on remote found ");
1631 eventRSync = (Event*) eventR->clone(); 1631 eventRSync = (Event*) eventR->clone();
1632 remote->deleteEvent(eventR ); 1632 remote->deleteEvent(eventR );
1633 1633
1634 } else { 1634 } else {
1635 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) { 1635 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) {
1636 eventRSync = (Event*)eventLSync->clone(); 1636 eventRSync = (Event*)eventLSync->clone();
1637 } else { 1637 } else {
1638 fullDateRange = true; 1638 fullDateRange = true;
1639 eventRSync = new Event(); 1639 eventRSync = new Event();
1640 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 1640 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
1641 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 1641 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
1642 eventRSync->setDtStart( mLastCalendarSync ); 1642 eventRSync->setDtStart( mLastCalendarSync );
1643 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 1643 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
1644 eventRSync->setCategories( i18n("SyncEvent") ); 1644 eventRSync->setCategories( i18n("SyncEvent") );
1645 } 1645 }
1646 } 1646 }
1647 if ( eventLSync->dtStart() == mLastCalendarSync ) 1647 if ( eventLSync->dtStart() == mLastCalendarSync )
1648 fullDateRange = true; 1648 fullDateRange = true;
1649 1649
1650 if ( ! fullDateRange ) { 1650 if ( ! fullDateRange ) {
1651 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 1651 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
1652 1652
1653 qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 1653 qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
1654 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 1654 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
1655 fullDateRange = true; 1655 fullDateRange = true;
1656 } 1656 }
1657 } 1657 }
1658 if ( mSyncManager->syncWithDesktop() ) { 1658 if ( mSyncManager->syncWithDesktop() ) {
1659 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync ); 1659 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync );
1660 } 1660 }
1661 if ( fullDateRange ) 1661 if ( fullDateRange )
1662 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 1662 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
1663 else 1663 else
1664 mLastCalendarSync = eventLSync->dtStart(); 1664 mLastCalendarSync = eventLSync->dtStart();
1665 // for resyncing if own file has changed 1665 // for resyncing if own file has changed
1666 if ( mCurrentSyncDevice == "deleteaftersync" ) { 1666 if ( mCurrentSyncDevice == "deleteaftersync" ) {
1667 mLastCalendarSync = loadedFileVersion; 1667 mLastCalendarSync = loadedFileVersion;
1668 //qDebug("setting mLastCalendarSync "); 1668 //qDebug("setting mLastCalendarSync ");
1669 } 1669 }
1670 //qDebug("*************************** "); 1670 //qDebug("*************************** ");
1671 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange); 1671 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange);
1672 QPtrList<Incidence> er = remote->rawIncidences(); 1672 QPtrList<Incidence> er = remote->rawIncidences();
1673 Incidence* inR = er.first(); 1673 Incidence* inR = er.first();
1674 Incidence* inL; 1674 Incidence* inL;
1675 QProgressBar bar( er.count(),0 ); 1675 QProgressBar bar( er.count(),0 );
1676 bar.setCaption (i18n("Syncing - close to abort!") ); 1676 bar.setCaption (i18n("Syncing - close to abort!") );
1677 1677
1678 // ************** setting up filter ************* 1678 // ************** setting up filter *************
1679 CalFilter *filterIN = 0; 1679 CalFilter *filterIN = 0;
1680 CalFilter *filterOUT = 0; 1680 CalFilter *filterOUT = 0;
1681 CalFilter *filter = mFilters.first(); 1681 CalFilter *filter = mFilters.first();
1682 while(filter) { 1682 while(filter) {
1683 if ( filter->name() == mSyncManager->mFilterInCal ) 1683 if ( filter->name() == mSyncManager->mFilterInCal )
1684 filterIN = filter; 1684 filterIN = filter;
1685 if ( filter->name() == mSyncManager->mFilterOutCal ) 1685 if ( filter->name() == mSyncManager->mFilterOutCal )
1686 filterOUT = filter; 1686 filterOUT = filter;
1687 filter = mFilters.next(); 1687 filter = mFilters.next();
1688 } 1688 }
1689 int w = 300; 1689 int w = 300;
1690 if ( QApplication::desktop()->width() < 320 ) 1690 if ( QApplication::desktop()->width() < 320 )
1691 w = 220; 1691 w = 220;
1692 int h = bar.sizeHint().height() ; 1692 int h = bar.sizeHint().height() ;
1693 int dw = QApplication::desktop()->width(); 1693 int dw = QApplication::desktop()->width();
1694 int dh = QApplication::desktop()->height(); 1694 int dh = QApplication::desktop()->height();
1695 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1695 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1696 bar.show(); 1696 bar.show();
1697 int modulo = (er.count()/10)+1; 1697 int modulo = (er.count()/10)+1;
1698 int incCounter = 0; 1698 int incCounter = 0;
1699 while ( inR ) { 1699 while ( inR ) {
1700 if ( ! bar.isVisible() ) 1700 if ( ! bar.isVisible() )
1701 return false; 1701 return false;
1702 if ( incCounter % modulo == 0 ) 1702 if ( incCounter % modulo == 0 )
1703 bar.setProgress( incCounter ); 1703 bar.setProgress( incCounter );
1704 ++incCounter; 1704 ++incCounter;
1705 uid = inR->uid(); 1705 uid = inR->uid();
1706 bool skipIncidence = false; 1706 bool skipIncidence = false;
1707 if ( uid.left(15) == QString("last-syncEvent-") ) 1707 if ( uid.left(15) == QString("last-syncEvent-") )
1708 skipIncidence = true; 1708 skipIncidence = true;
1709 QString idS; 1709 QString idS;
1710 qApp->processEvents(); 1710 qApp->processEvents();
1711 if ( !skipIncidence ) { 1711 if ( !skipIncidence ) {
1712 inL = local->incidenceForUid( uid , false ); 1712 inL = local->incidenceForUid( uid , false );
1713 if ( inL ) { // maybe conflict - same uid in both calendars 1713 if ( inL ) { // maybe conflict - same uid in both calendars
1714 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1714 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1715 //qDebug("take %d %s ", take, inL->summary().latin1()); 1715 //qDebug("take %d %s ", take, inL->summary().latin1());
1716 if ( take == 3 ) 1716 if ( take == 3 )
1717 return false; 1717 return false;
1718 if ( take == 1 ) {// take local ********************** 1718 if ( take == 1 ) {// take local **********************
1719 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 1719 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
1720 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1720 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1721 else 1721 else
1722 idS = inR->IDStr(); 1722 idS = inR->IDStr();
1723 int calID = inR->calID(); 1723 int calID = inR->calID();
1724 remote->deleteIncidence( inR ); 1724 remote->deleteIncidence( inR );
1725 inR = inL->clone(); 1725 inR = inL->clone();
1726 inR->setCalID( calID ); 1726 inR->setCalID( calID );
1727 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1727 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1728 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) 1728 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
1729 inR->setIDStr( idS ); 1729 inR->setIDStr( idS );
1730 remote->addIncidence( inR ); 1730 remote->addIncidence( inR );
1731 if ( mSyncManager->syncWithDesktop() ) 1731 if ( mSyncManager->syncWithDesktop() )
1732 inR->setPilotId( 2 ); 1732 inR->setPilotId( 2 );
1733 ++changedRemote; 1733 ++changedRemote;
1734 } else {// take remote ********************** 1734 } else {// take remote **********************
1735 if ( !inL->isReadOnly() ) { 1735 if ( !inL->isReadOnly() ) {
1736 idS = inL->IDStr(); 1736 idS = inL->IDStr();
1737 int pid = inL->pilotId(); 1737 int pid = inL->pilotId();
1738 int calID = inL->calID(); 1738 int calID = inL->calID();
1739 local->deleteIncidence( inL ); 1739 local->deleteIncidence( inL );
1740 inL = inR->clone(); 1740 inL = inR->clone();
1741 inL->setCalID( calID ); 1741 inL->setCalID( calID );
1742 if ( mSyncManager->syncWithDesktop() ) 1742 if ( mSyncManager->syncWithDesktop() )
1743 inL->setPilotId( pid ); 1743 inL->setPilotId( pid );
1744 inL->setIDStr( idS ); 1744 inL->setIDStr( idS );
1745 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1745 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1746 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1746 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1747 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1747 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1748 } 1748 }
1749 local->addIncidence( inL ); 1749 local->addIncidence( inL );
1750 ++changedLocal; 1750 ++changedLocal;
1751 } 1751 }
1752 } 1752 }
1753 } 1753 }
1754 } else { // no conflict ********** add or delete remote 1754 } else { // no conflict ********** add or delete remote
1755 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){ 1755 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){
1756 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1756 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1757 QString des = eventLSync->description(); 1757 QString des = eventLSync->description();
1758 QString pref = "e"; 1758 QString pref = "e";
1759 if ( inR->typeID() == todoID ) 1759 if ( inR->typeID() == todoID )
1760 pref = "t"; 1760 pref = "t";
1761 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1761 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1762 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1762 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1763 //remote->deleteIncidence( inR ); 1763 //remote->deleteIncidence( inR );
1764 ++deletedEventR; 1764 ++deletedEventR;
1765 } else { 1765 } else {
1766 inR->setLastModified( modifiedCalendar ); 1766 inR->setLastModified( modifiedCalendar );
1767 inL = inR->clone(); 1767 inL = inR->clone();
1768 inL->setIDStr( ":" ); 1768 inL->setIDStr( ":" );
1769 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1769 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1770 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1770 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1771 1771
1772 inL->setCalID( 0 );// add to default cal 1772 inL->setCalID( 0 );// add to default cal
1773 local->addIncidence( inL ); 1773 local->addIncidence( inL );
1774 ++addedEvent; 1774 ++addedEvent;
1775 1775
1776 } 1776 }
1777 } else { 1777 } else {
1778 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1778 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1779 inR->setLastModified( modifiedCalendar ); 1779 inR->setLastModified( modifiedCalendar );
1780 inL = inR->clone(); 1780 inL = inR->clone();
1781 inL->setIDStr( ":" ); 1781 inL->setIDStr( ":" );
1782 inL->setCalID( 0 );// add to default cal 1782 inL->setCalID( 0 );// add to default cal
1783 local->addIncidence( inL ); 1783 local->addIncidence( inL );
1784 ++addedEvent; 1784 ++addedEvent;
1785 1785
1786 } else { 1786 } else {
1787 checkExternSyncEvent(eventRSyncSharp, inR); 1787 checkExternSyncEvent(eventRSyncSharp, inR);
1788 remote->deleteIncidence( inR ); 1788 remote->deleteIncidence( inR );
1789 ++deletedEventR; 1789 ++deletedEventR;
1790 } 1790 }
1791 } 1791 }
1792 } else { 1792 } else {
1793 ++filteredIN; 1793 ++filteredIN;
1794 } 1794 }
1795 } 1795 }
1796 } 1796 }
1797 inR = er.next(); 1797 inR = er.next();
1798 } 1798 }
1799 QPtrList<Incidence> el = local->rawIncidences(); 1799 QPtrList<Incidence> el = local->rawIncidences();
1800 inL = el.first(); 1800 inL = el.first();
1801 modulo = (el.count()/10)+1; 1801 modulo = (el.count()/10)+1;
1802 bar.setCaption (i18n("Add / remove events") ); 1802 bar.setCaption (i18n("Add / remove events") );
1803 bar.setTotalSteps ( el.count() ) ; 1803 bar.setTotalSteps ( el.count() ) ;
1804 bar.show(); 1804 bar.show();
1805 incCounter = 0; 1805 incCounter = 0;
1806 1806
1807 while ( inL ) { 1807 while ( inL ) {
1808 1808
1809 qApp->processEvents(); 1809 qApp->processEvents();
1810 if ( ! bar.isVisible() ) 1810 if ( ! bar.isVisible() )
1811 return false; 1811 return false;
1812 if ( incCounter % modulo == 0 ) 1812 if ( incCounter % modulo == 0 )
1813 bar.setProgress( incCounter ); 1813 bar.setProgress( incCounter );
1814 ++incCounter; 1814 ++incCounter;
1815 uid = inL->uid(); 1815 uid = inL->uid();
1816 bool skipIncidence = false; 1816 bool skipIncidence = false;
1817 if ( uid.left(15) == QString("last-syncEvent-") ) 1817 if ( uid.left(15) == QString("last-syncEvent-") )
1818 skipIncidence = true; 1818 skipIncidence = true;
1819 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID ) 1819 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->typeID() == journalID )
1820 skipIncidence = true; 1820 skipIncidence = true;
1821 if ( !skipIncidence ) { 1821 if ( !skipIncidence ) {
1822 inR = remote->incidenceForUid( uid , true ); 1822 inR = remote->incidenceForUid( uid , true );
1823 if ( ! inR ) { 1823 if ( ! inR ) {
1824 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){ 1824 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){
1825 // no conflict ********** add or delete local 1825 // no conflict ********** add or delete local
1826 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1826 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1827 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1827 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1828 checkExternSyncEvent(eventLSyncSharp, inL); 1828 checkExternSyncEvent(eventLSyncSharp, inL);
1829 local->deleteIncidence( inL ); 1829 local->deleteIncidence( inL );
1830 ++deletedEventL; 1830 ++deletedEventL;
1831 } else { 1831 } else {
1832 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1832 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1833 inL->removeID(mCurrentSyncDevice ); 1833 inL->removeID(mCurrentSyncDevice );
1834 ++addedEventR; 1834 ++addedEventR;
1835 //qDebug("remote added Incidence %s ", inL->summary().latin1()); 1835 //qDebug("remote added Incidence %s ", inL->summary().latin1());
1836 inL->setLastModified( modifiedCalendar ); 1836 inL->setLastModified( modifiedCalendar );
1837 inR = inL->clone(); 1837 inR = inL->clone();
1838 inR->setIDStr( ":" ); 1838 inR->setIDStr( ":" );
1839 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1839 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1840 inR->setCalID( 0 );// add to default cal 1840 inR->setCalID( 0 );// add to default cal
1841 remote->addIncidence( inR ); 1841 remote->addIncidence( inR );
1842 } 1842 }
1843 } 1843 }
1844 } else { 1844 } else {
1845 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1845 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1846 checkExternSyncEvent(eventLSyncSharp, inL); 1846 checkExternSyncEvent(eventLSyncSharp, inL);
1847 local->deleteIncidence( inL ); 1847 local->deleteIncidence( inL );
1848 ++deletedEventL; 1848 ++deletedEventL;
1849 } else { 1849 } else {
1850 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1850 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1851 ++addedEventR; 1851 ++addedEventR;
1852 inL->setLastModified( modifiedCalendar ); 1852 inL->setLastModified( modifiedCalendar );
1853 inR = inL->clone(); 1853 inR = inL->clone();
1854 inR->setIDStr( ":" ); 1854 inR->setIDStr( ":" );
1855 inR->setCalID( 0 );// add to default cal 1855 inR->setCalID( 0 );// add to default cal
1856 remote->addIncidence( inR ); 1856 remote->addIncidence( inR );
1857 } 1857 }
1858 } 1858 }
1859 } 1859 }
1860 } else { 1860 } else {
1861 ++filteredOUT; 1861 ++filteredOUT;
1862 } 1862 }
1863 } 1863 }
1864 } 1864 }
1865 inL = el.next(); 1865 inL = el.next();
1866 } 1866 }
1867 int delFut = 0; 1867 int delFut = 0;
1868 int remRem = 0; 1868 int remRem = 0;
1869 if ( mSyncManager->mWriteBackInFuture ) { 1869 if ( mSyncManager->mWriteBackInFuture ) {
1870 er = remote->rawIncidences(); 1870 er = remote->rawIncidences();
1871 remRem = er.count(); 1871 remRem = er.count();
1872 inR = er.first(); 1872 inR = er.first();
1873 QDateTime dt; 1873 QDateTime dt;
1874 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) ); 1874 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) );
1875 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 ); 1875 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 );
1876 while ( inR ) { 1876 while ( inR ) {
1877 if ( inR->typeID() == todoID ) { 1877 if ( inR->typeID() == todoID ) {
1878 Todo * t = (Todo*)inR; 1878 Todo * t = (Todo*)inR;
1879 if ( t->hasDueDate() ) 1879 if ( t->hasDueDate() )
1880 dt = t->dtDue(); 1880 dt = t->dtDue();
1881 else 1881 else
1882 dt = cur.addSecs( 62 ); 1882 dt = cur.addSecs( 62 );
1883 } 1883 }
1884 else if (inR->typeID() == eventID ) { 1884 else if (inR->typeID() == eventID ) {
1885 bool ok; 1885 bool ok;
1886 dt = inR->getNextOccurence( cur, &ok ); 1886 dt = inR->getNextOccurence( cur, &ok );
1887 if ( !ok ) 1887 if ( !ok )
1888 dt = cur.addSecs( -62 ); 1888 dt = cur.addSecs( -62 );
1889 } 1889 }
1890 else 1890 else
1891 dt = inR->dtStart(); 1891 dt = inR->dtStart();
1892 if ( dt < cur || dt > end ) { 1892 if ( dt < cur || dt > end ) {
1893 remote->deleteIncidence( inR ); 1893 remote->deleteIncidence( inR );
1894 ++delFut; 1894 ++delFut;
1895 } 1895 }
1896 inR = er.next(); 1896 inR = er.next();
1897 } 1897 }
1898 } 1898 }
1899 bar.hide(); 1899 bar.hide();
1900 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1900 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1901 eventLSync->setReadOnly( false ); 1901 eventLSync->setReadOnly( false );
1902 eventLSync->setDtStart( mLastCalendarSync ); 1902 eventLSync->setDtStart( mLastCalendarSync );
1903 eventRSync->setDtStart( mLastCalendarSync ); 1903 eventRSync->setDtStart( mLastCalendarSync );
1904 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1904 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1905 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1905 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1906 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1906 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1907 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1907 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1908 eventLSync->setReadOnly( true ); 1908 eventLSync->setReadOnly( true );
1909 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL ); 1909 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL );
1910 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop()) // kde is abnormal... 1910 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop()) // kde is abnormal...
1911 remote->addEvent( eventRSync ); 1911 remote->addEvent( eventRSync );
1912 else 1912 else
1913 delete eventRSync; 1913 delete eventRSync;
1914 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() ); 1914 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() );
1915 QString mes; 1915 QString mes;
1916 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR, filteredIN, filteredOUT ); 1916 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR, filteredIN, filteredOUT );
1917 QString delmess; 1917 QString delmess;
1918 if ( delFut ) { 1918 if ( delFut ) {
1919 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are more\nthan %d weeks in the past or\nmore than %d weeks in the future.\nAfter skipping, remote has\n%d calendar/todo items."), delFut,mSyncManager->mWriteBackInPast,mSyncManager->mWriteBackInFuture, remRem-delFut); 1919 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are more\nthan %d weeks in the past or\nmore than %d weeks in the future.\nAfter skipping, remote has\n%d calendar/todo items."), delFut,mSyncManager->mWriteBackInPast,mSyncManager->mWriteBackInFuture, remRem-delFut);
1920 mes += delmess; 1920 mes += delmess;
1921 } 1921 }
1922 mes = i18n("Local calendar changed!\n") +mes; 1922 mes = i18n("Local calendar changed!\n") +mes;
1923 mCalendar->checkAlarmForIncidence( 0, true ); 1923 mCalendar->checkAlarmForIncidence( 0, true );
1924 qDebug( mes ); 1924 qDebug( mes );
1925 if ( mSyncManager->mShowSyncSummary ) { 1925 if ( mSyncManager->mShowSyncSummary ) {
1926 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes, 1926 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes,
1927 i18n("KO/Pi Synchronization"),i18n("Write back"))) { 1927 i18n("KO/Pi Synchronization"),i18n("Write back"))) {
1928 qDebug("KO: WB cancelled "); 1928 qDebug("KO: WB cancelled ");
1929 mSyncManager->mWriteBackFile = false; 1929 mSyncManager->mWriteBackFile = false;
1930 return syncOK; 1930 return syncOK;
1931 } 1931 }
1932 } 1932 }
1933 return syncOK; 1933 return syncOK;
1934} 1934}
1935 1935
1936void CalendarView::setSyncDevice( QString s ) 1936void CalendarView::setSyncDevice( QString s )
1937{ 1937{
1938 mCurrentSyncDevice= s; 1938 mCurrentSyncDevice= s;
1939} 1939}
1940void CalendarView::setSyncName( QString s ) 1940void CalendarView::setSyncName( QString s )
1941{ 1941{
1942 mCurrentSyncName= s; 1942 mCurrentSyncName= s;
1943} 1943}
1944bool CalendarView::syncCalendar(QString filename, int mode) 1944bool CalendarView::syncCalendar(QString filename, int mode)
1945{ 1945{
1946 //qDebug("syncCalendar %s ", filename.latin1()); 1946 //qDebug("syncCalendar %s ", filename.latin1());
1947 mGlobalSyncMode = SYNC_MODE_NORMAL; 1947 mGlobalSyncMode = SYNC_MODE_NORMAL;
1948 CalendarLocal* calendar = new CalendarLocal(); 1948 CalendarLocal* calendar = new CalendarLocal();
1949 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1949 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1950 FileStorage* storage = new FileStorage( calendar ); 1950 FileStorage* storage = new FileStorage( calendar );
1951 bool syncOK = false; 1951 bool syncOK = false;
1952 storage->setFileName( filename ); 1952 storage->setFileName( filename );
1953 // qDebug("loading ... "); 1953 // qDebug("loading ... ");
1954 if ( storage->load() ) { 1954 if ( storage->load() ) {
1955 getEventViewerDialog()->setSyncMode( true ); 1955 getEventViewerDialog()->setSyncMode( true );
1956 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1956 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1957 getEventViewerDialog()->setSyncMode( false ); 1957 getEventViewerDialog()->setSyncMode( false );
1958 if ( syncOK ) { 1958 if ( syncOK ) {
1959 if ( mSyncManager->mWriteBackFile ) 1959 if ( mSyncManager->mWriteBackFile )
1960 { 1960 {
1961 storage->setSaveFormat( new ICalFormat() ); 1961 storage->setSaveFormat( new ICalFormat() );
1962 storage->save(); 1962 storage->save();
1963 } 1963 }
1964 } 1964 }
1965 setModified( true ); 1965 setModified( true );
1966 } 1966 }
1967 delete storage; 1967 delete storage;
1968 delete calendar; 1968 delete calendar;
1969 if ( syncOK ) 1969 if ( syncOK )
1970 updateView(); 1970 updateView();
1971 return syncOK; 1971 return syncOK;
1972} 1972}
1973 1973
1974void CalendarView::syncExternal( int mode ) 1974void CalendarView::syncExternal( int mode )
1975{ 1975{
1976 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1976 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1977 1977
1978 qApp->processEvents(); 1978 qApp->processEvents();
1979 CalendarLocal* calendar = new CalendarLocal(); 1979 CalendarLocal* calendar = new CalendarLocal();
1980 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1980 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1981 bool syncOK = false; 1981 bool syncOK = false;
1982 bool loadSuccess = false; 1982 bool loadSuccess = false;
1983 PhoneFormat* phoneFormat = 0; 1983 PhoneFormat* phoneFormat = 0;
1984 emit tempDisableBR(true); 1984 emit tempDisableBR(true);
1985#ifndef DESKTOP_VERSION 1985#ifndef DESKTOP_VERSION
1986 SharpFormat* sharpFormat = 0; 1986 SharpFormat* sharpFormat = 0;
1987 if ( mode == 0 ) { // sharp 1987 if ( mode == 0 ) { // sharp
1988 sharpFormat = new SharpFormat () ; 1988 sharpFormat = new SharpFormat () ;
1989 loadSuccess = sharpFormat->load( calendar, mCalendar ); 1989 loadSuccess = sharpFormat->load( calendar, mCalendar );
1990 1990
1991 } else 1991 } else
1992#endif 1992#endif
1993 if ( mode == 1 ) { // phone 1993 if ( mode == 1 ) { // phone
1994 phoneFormat = new PhoneFormat (mCurrentSyncDevice, 1994 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
1995 mSyncManager->mPhoneDevice, 1995 mSyncManager->mPhoneDevice,
1996 mSyncManager->mPhoneConnection, 1996 mSyncManager->mPhoneConnection,
1997 mSyncManager->mPhoneModel); 1997 mSyncManager->mPhoneModel);
1998 loadSuccess = phoneFormat->load( calendar,mCalendar); 1998 loadSuccess = phoneFormat->load( calendar,mCalendar);
1999 1999
2000 } else { 2000 } else {
2001 emit tempDisableBR(false); 2001 emit tempDisableBR(false);
2002 return; 2002 return;
2003 } 2003 }
2004 if ( loadSuccess ) { 2004 if ( loadSuccess ) {
2005 getEventViewerDialog()->setSyncMode( true ); 2005 getEventViewerDialog()->setSyncMode( true );
2006 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2006 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2007 getEventViewerDialog()->setSyncMode( false ); 2007 getEventViewerDialog()->setSyncMode( false );
2008 qApp->processEvents(); 2008 qApp->processEvents();
2009 if ( syncOK ) { 2009 if ( syncOK ) {
2010 if ( mSyncManager->mWriteBackFile ) 2010 if ( mSyncManager->mWriteBackFile )
2011 { 2011 {
2012 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 2012 QPtrList<Incidence> iL = mCalendar->rawIncidences();
2013 Incidence* inc = iL.first(); 2013 Incidence* inc = iL.first();
2014 if ( phoneFormat ) { 2014 if ( phoneFormat ) {
2015 while ( inc ) { 2015 while ( inc ) {
2016 inc->removeID(mCurrentSyncDevice); 2016 inc->removeID(mCurrentSyncDevice);
2017 inc = iL.next(); 2017 inc = iL.next();
2018 } 2018 }
2019 } 2019 }
2020#ifndef DESKTOP_VERSION 2020#ifndef DESKTOP_VERSION
2021 if ( sharpFormat ) 2021 if ( sharpFormat )
2022 sharpFormat->save(calendar); 2022 sharpFormat->save(calendar);
2023#endif 2023#endif
2024 if ( phoneFormat ) 2024 if ( phoneFormat )
2025 phoneFormat->save(calendar); 2025 phoneFormat->save(calendar);
2026 iL = calendar->rawIncidences(); 2026 iL = calendar->rawIncidences();
2027 inc = iL.first(); 2027 inc = iL.first();
2028 Incidence* loc; 2028 Incidence* loc;
2029 while ( inc ) { 2029 while ( inc ) {
2030 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 2030 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
2031 loc = mCalendar->incidence(inc->uid() ); 2031 loc = mCalendar->incidence(inc->uid() );
2032 if ( loc ) { 2032 if ( loc ) {
2033 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 2033 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
2034 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 2034 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
2035 } 2035 }
2036 } 2036 }
2037 inc = iL.next(); 2037 inc = iL.next();
2038 } 2038 }
2039 Incidence* lse = getLastSyncEvent(); 2039 Incidence* lse = getLastSyncEvent();
2040 if ( lse ) { 2040 if ( lse ) {
2041 lse->setReadOnly( false ); 2041 lse->setReadOnly( false );
2042 lse->setDescription( "" ); 2042 lse->setDescription( "" );
2043 lse->setReadOnly( true ); 2043 lse->setReadOnly( true );
2044 } 2044 }
2045 } 2045 }
2046 } else { 2046 } else {
2047 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); 2047 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") );
2048 } 2048 }
2049 setModified( true ); 2049 setModified( true );
2050 } else { 2050 } else {
2051 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 2051 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
2052 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 2052 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
2053 question, i18n("Ok")) ; 2053 question, i18n("Ok")) ;
2054 2054
2055 } 2055 }
2056 delete calendar; 2056 delete calendar;
2057 updateView(); 2057 updateView();
2058 emit tempDisableBR(false); 2058 emit tempDisableBR(false);
2059 return ;//syncOK; 2059 return ;//syncOK;
2060 2060
2061} 2061}
2062 2062
2063bool CalendarView::importBday() 2063bool CalendarView::importBday()
2064{ 2064{
2065#ifndef KORG_NOKABC 2065#ifndef KORG_NOKABC
2066 2066
2067#ifdef DESKTOP_VERSION 2067#ifdef DESKTOP_VERSION
2068 int curCal = mCalendar->defaultCalendar(); 2068 int curCal = mCalendar->defaultCalendar();
2069 int bd = mCalEditView->getBirtdayID(); 2069 int bd = mCalEditView->getBirtdayID();
2070 if ( bd == 0 ) 2070 if ( bd == 0 )
2071 return false; 2071 return false;
2072 mCalendar->setDefaultCalendar( bd ); 2072 mCalendar->setDefaultCalendar( bd );
2073 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 2073 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
2074 KABC::AddressBook::Iterator it; 2074 KABC::AddressBook::Iterator it;
2075 int count = 0; 2075 int count = 0;
2076 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 2076 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
2077 ++count; 2077 ++count;
2078 } 2078 }
2079 QProgressBar bar(count,0 ); 2079 QProgressBar bar(count,0 );
2080 int w = 300; 2080 int w = 300;
2081 if ( QApplication::desktop()->width() < 320 ) 2081 if ( QApplication::desktop()->width() < 320 )
2082 w = 220; 2082 w = 220;
2083 int h = bar.sizeHint().height() ; 2083 int h = bar.sizeHint().height() ;
2084 int dw = QApplication::desktop()->width(); 2084 int dw = QApplication::desktop()->width();
2085 int dh = QApplication::desktop()->height(); 2085 int dh = QApplication::desktop()->height();
2086 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2086 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2087 bar.show(); 2087 bar.show();
2088 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 2088 bar.setCaption (i18n("Reading addressbook - close to abort!") );
2089 qApp->processEvents(); 2089 qApp->processEvents();
2090 count = 0; 2090 count = 0;
2091 int addCount = 0; 2091 int addCount = 0;
2092 KCal::Attendee* a = 0; 2092 KCal::Attendee* a = 0;
2093 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 2093 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
2094 if ( ! bar.isVisible() ) 2094 if ( ! bar.isVisible() )
2095 return false; 2095 return false;
2096 bar.setProgress( count++ ); 2096 bar.setProgress( count++ );
2097 qApp->processEvents(); 2097 qApp->processEvents();
2098 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 2098 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
2099 if ( (*it).birthday().date().isValid() ){ 2099 if ( (*it).birthday().date().isValid() ){
2100 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 2100 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
2101 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 2101 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
2102 ++addCount; 2102 ++addCount;
2103 } 2103 }
2104 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 2104 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
2105 if ( anni.isValid() ){ 2105 if ( anni.isValid() ){
2106 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 2106 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
2107 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 2107 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
2108 ++addCount; 2108 ++addCount;
2109 } 2109 }
2110 } 2110 }
2111 mCalendar->setDefaultCalendar( curCal ); 2111 mCalendar->setDefaultCalendar( curCal );
2112 updateView(); 2112 updateView();
2113 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 2113 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
2114#else //DESKTOP_VERSION 2114#else //DESKTOP_VERSION
2115 2115
2116 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); 2116 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/);
2117 // the result should now arrive through method insertBirthdays 2117 // the result should now arrive through method insertBirthdays
2118 2118
2119#endif //DESKTOP_VERSION 2119#endif //DESKTOP_VERSION
2120 2120
2121#endif //KORG_NOKABC 2121#endif //KORG_NOKABC
2122 2122
2123 2123
2124 return true; 2124 return true;
2125} 2125}
2126 2126
2127// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI 2127// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI
2128void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList, 2128void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList,
2129 const QStringList& anniversaryList, const QStringList& realNameList, 2129 const QStringList& anniversaryList, const QStringList& realNameList,
2130 const QStringList& emailList, const QStringList& assembledNameList, 2130 const QStringList& emailList, const QStringList& assembledNameList,
2131 const QStringList& uidList) 2131 const QStringList& uidList)
2132{ 2132{
2133 2133
2134 //qDebug("KO::CalendarView::insertBirthdays"); 2134 //qDebug("KO::CalendarView::insertBirthdays");
2135 if (uid == this->name()) 2135 if (uid == this->name())
2136 { 2136 {
2137 int curCal = mCalendar->defaultCalendar(); 2137 int curCal = mCalendar->defaultCalendar();
2138 int bd = mCalEditView->getBirtdayID(); 2138 int bd = mCalEditView->getBirtdayID();
2139 if ( bd == 0 ) 2139 if ( bd == 0 )
2140 return; 2140 return;
2141 mCalendar->setDefaultCalendar( bd ); 2141 mCalendar->setDefaultCalendar( bd );
2142 2142
2143 2143
2144 int count = birthdayList.count(); 2144 int count = birthdayList.count();
2145 int addCount = 0; 2145 int addCount = 0;
2146 KCal::Attendee* a = 0; 2146 KCal::Attendee* a = 0;
2147 2147
2148 //qDebug("CalView 1 %i", count); 2148 //qDebug("CalView 1 %i", count);
2149 2149
2150 QProgressBar bar(count,0 ); 2150 QProgressBar bar(count,0 );
2151 int w = 300; 2151 int w = 300;
2152 if ( QApplication::desktop()->width() < 320 ) 2152 if ( QApplication::desktop()->width() < 320 )
2153 w = 220; 2153 w = 220;
2154 int h = bar.sizeHint().height() ; 2154 int h = bar.sizeHint().height() ;
2155 int dw = QApplication::desktop()->width(); 2155 int dw = QApplication::desktop()->width();
2156 int dh = QApplication::desktop()->height(); 2156 int dh = QApplication::desktop()->height();
2157 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2157 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2158 bar.show(); 2158 bar.show();
2159 bar.setCaption (i18n("inserting birthdays - close to abort!") ); 2159 bar.setCaption (i18n("inserting birthdays - close to abort!") );
2160 qApp->processEvents(); 2160 qApp->processEvents();
2161 2161
2162 QDate birthday; 2162 QDate birthday;
2163 QDate anniversary; 2163 QDate anniversary;
2164 QString realName; 2164 QString realName;
2165 QString email; 2165 QString email;
2166 QString assembledName; 2166 QString assembledName;
2167 QString uid; 2167 QString uid;
2168 bool ok = true; 2168 bool ok = true;
2169 for ( int i = 0; i < count; i++) 2169 for ( int i = 0; i < count; i++)
2170 { 2170 {
2171 if ( ! bar.isVisible() ) 2171 if ( ! bar.isVisible() )
2172 return; 2172 return;
2173 bar.setProgress( i ); 2173 bar.setProgress( i );
2174 qApp->processEvents(); 2174 qApp->processEvents();
2175 2175
2176 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok); 2176 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok);
2177 if (!ok) { 2177 if (!ok) {
2178 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1()); 2178 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1());
2179 } 2179 }
2180 2180
2181 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok); 2181 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok);
2182 if (!ok) { 2182 if (!ok) {
2183 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1()); 2183 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1());
2184 } 2184 }
2185 realName = realNameList[i]; 2185 realName = realNameList[i];
2186 email = emailList[i]; 2186 email = emailList[i];
2187 assembledName = assembledNameList[i]; 2187 assembledName = assembledNameList[i];
2188 uid = uidList[i]; 2188 uid = uidList[i];
2189 //qDebug("insert birthday in KO/Pi: %s,%s,%s,%s: %s, %s", realName.latin1(), email.latin1(), assembledName.latin1(), uid.latin1(), birthdayList[i].latin1(), anniversaryList[i].latin1() ); 2189 //qDebug("insert birthday in KO/Pi: %s,%s,%s,%s: %s, %s", realName.latin1(), email.latin1(), assembledName.latin1(), uid.latin1(), birthdayList[i].latin1(), anniversaryList[i].latin1() );
2190 2190
2191 if ( birthday.isValid() ){ 2191 if ( birthday.isValid() ){
2192 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 2192 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
2193 KCal::Attendee::ReqParticipant,uid) ; 2193 KCal::Attendee::ReqParticipant,uid) ;
2194 if ( addAnniversary( birthday, assembledName, a, true ) ) 2194 if ( addAnniversary( birthday, assembledName, a, true ) )
2195 ++addCount; 2195 ++addCount;
2196 } 2196 }
2197 2197
2198 if ( anniversary.isValid() ){ 2198 if ( anniversary.isValid() ){
2199 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 2199 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
2200 KCal::Attendee::ReqParticipant,uid) ; 2200 KCal::Attendee::ReqParticipant,uid) ;
2201 if ( addAnniversary( anniversary, assembledName, a, false ) ) 2201 if ( addAnniversary( anniversary, assembledName, a, false ) )
2202 ++addCount; 2202 ++addCount;
2203 } 2203 }
2204 } 2204 }
2205 2205
2206 mCalendar->setDefaultCalendar( curCal ); 2206 mCalendar->setDefaultCalendar( curCal );
2207 updateView(); 2207 updateView();
2208 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 2208 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
2209 2209
2210 } 2210 }
2211 2211
2212} 2212}
2213 2213
2214 2214
2215 2215
2216bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 2216bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
2217{ 2217{
2218 //qDebug("addAnni "); 2218 //qDebug("addAnni ");
2219 Event * ev = new Event(); 2219 Event * ev = new Event();
2220 ev->setOrganizer(KOPrefs::instance()->email()); 2220 ev->setOrganizer(KOPrefs::instance()->email());
2221 if ( a ) { 2221 if ( a ) {
2222 ev->addAttendee( a ); 2222 ev->addAttendee( a );
2223 } 2223 }
2224 QString kind; 2224 QString kind;
2225 if ( birthday ) { 2225 if ( birthday ) {
2226 kind = i18n( "Birthday" ); 2226 kind = i18n( "Birthday" );
2227 ev->setSummary( name + " (" + QString::number(date.year()) +")"); 2227 ev->setSummary( name + " (" + QString::number(date.year()) +")");
2228 } 2228 }
2229 else { 2229 else {
2230 kind = i18n( "Anniversary" ); 2230 kind = i18n( "Anniversary" );
2231 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind ); 2231 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind );
2232 } 2232 }
2233 ev->setCategories( kind ); 2233 ev->setCategories( kind );
2234 ev->setDtStart( QDateTime(date) ); 2234 ev->setDtStart( QDateTime(date) );
2235 ev->setDtEnd( QDateTime(date) ); 2235 ev->setDtEnd( QDateTime(date) );
2236 ev->setFloats( true ); 2236 ev->setFloats( true );
2237 Recurrence * rec = ev->recurrence(); 2237 Recurrence * rec = ev->recurrence();
2238 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 2238 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
2239 rec->addYearlyNum( date.month() ); 2239 rec->addYearlyNum( date.month() );
2240 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 2240 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
2241 delete ev; 2241 delete ev;
2242 return false; 2242 return false;
2243 } 2243 }
2244 return true; 2244 return true;
2245 2245
2246} 2246}
2247bool CalendarView::importQtopia( const QString &categories, 2247bool CalendarView::importQtopia( const QString &categories,
2248 const QString &datebook, 2248 const QString &datebook,
2249 const QString &todolist ) 2249 const QString &todolist )
2250{ 2250{
2251 2251
2252 QtopiaFormat qtopiaFormat; 2252 QtopiaFormat qtopiaFormat;
2253 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2253 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
2254 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 2254 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
2255 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 2255 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
2256 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 2256 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
2257 2257
2258 updateView(); 2258 updateView();
2259 return true; 2259 return true;
2260 2260
2261#if 0 2261#if 0
2262 mGlobalSyncMode = SYNC_MODE_QTOPIA; 2262 mGlobalSyncMode = SYNC_MODE_QTOPIA;
2263 mCurrentSyncDevice = "qtopia-XML"; 2263 mCurrentSyncDevice = "qtopia-XML";
2264 if ( mSyncManager->mAskForPreferences ) 2264 if ( mSyncManager->mAskForPreferences )
2265 edit_sync_options(); 2265 edit_sync_options();
2266 qApp->processEvents(); 2266 qApp->processEvents();
2267 CalendarLocal* calendar = new CalendarLocal(); 2267 CalendarLocal* calendar = new CalendarLocal();
2268 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2268 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2269 bool syncOK = false; 2269 bool syncOK = false;
2270 QtopiaFormat qtopiaFormat; 2270 QtopiaFormat qtopiaFormat;
2271 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 2271 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
2272 bool loadOk = true; 2272 bool loadOk = true;
2273 if ( !categories.isEmpty() ) 2273 if ( !categories.isEmpty() )
2274 loadOk = qtopiaFormat.load( calendar, categories ); 2274 loadOk = qtopiaFormat.load( calendar, categories );
2275 if ( loadOk && !datebook.isEmpty() ) 2275 if ( loadOk && !datebook.isEmpty() )
2276 loadOk = qtopiaFormat.load( calendar, datebook ); 2276 loadOk = qtopiaFormat.load( calendar, datebook );
2277 if ( loadOk && !todolist.isEmpty() ) 2277 if ( loadOk && !todolist.isEmpty() )
2278 loadOk = qtopiaFormat.load( calendar, todolist ); 2278 loadOk = qtopiaFormat.load( calendar, todolist );
2279 2279
2280 if ( loadOk ) { 2280 if ( loadOk ) {
2281 getEventViewerDialog()->setSyncMode( true ); 2281 getEventViewerDialog()->setSyncMode( true );
2282 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 2282 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
2283 getEventViewerDialog()->setSyncMode( false ); 2283 getEventViewerDialog()->setSyncMode( false );
2284 qApp->processEvents(); 2284 qApp->processEvents();
2285 if ( syncOK ) { 2285 if ( syncOK ) {
2286 if ( mSyncManager->mWriteBackFile ) 2286 if ( mSyncManager->mWriteBackFile )
2287 { 2287 {
2288 // write back XML file 2288 // write back XML file
2289 2289
2290 } 2290 }
2291 setModified( true ); 2291 setModified( true );
2292 } 2292 }
2293 } else { 2293 } else {
2294 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 2294 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
2295 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 2295 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
2296 question, i18n("Ok")) ; 2296 question, i18n("Ok")) ;
2297 } 2297 }
2298 delete calendar; 2298 delete calendar;
2299 updateView(); 2299 updateView();
2300 return syncOK; 2300 return syncOK;
2301 2301
2302 2302
2303#endif 2303#endif
2304 2304
2305} 2305}
2306 2306
2307void CalendarView::setSyncEventsReadOnly() 2307void CalendarView::setSyncEventsReadOnly()
2308{ 2308{
2309 mCalendar->setSyncEventsReadOnly(); 2309 mCalendar->setSyncEventsReadOnly();
2310} 2310}
2311 2311
2312bool CalendarView::loadCalendars() 2312bool CalendarView::loadCalendars()
2313{ 2313{
2314 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2314 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2315 KopiCalendarFile * cal = calendars.first(); 2315 KopiCalendarFile * cal = calendars.first();
2316 mCalendar->setDefaultCalendar( 1 ); 2316 mCalendar->setDefaultCalendar( 1 );
2317 openCalendar( MainWindow::defaultFileName(), false ); 2317 openCalendar( MainWindow::defaultFileName(), false );
2318 cal = calendars.next(); 2318 cal = calendars.next();
2319 while ( cal ) { 2319 while ( cal ) {
2320 addCalendar( cal ); 2320 addCalendar( cal );
2321 cal = calendars.next(); 2321 cal = calendars.next();
2322 } 2322 }
2323 restoreCalendarSettings(); 2323 restoreCalendarSettings();
2324 return true; 2324 return true;
2325} 2325}
2326bool CalendarView::restoreCalendarSettings() 2326bool CalendarView::restoreCalendarSettings()
2327{ 2327{
2328 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2328 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2329 KopiCalendarFile * cal = calendars.first(); 2329 KopiCalendarFile * cal = calendars.first();
2330 while ( cal ) { 2330 while ( cal ) {
2331 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled ); 2331 mCalendar->setCalendarEnabled( cal->mCalNumber,cal->isEnabled );
2332 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled ); 2332 mCalendar->setAlarmEnabled( cal->mCalNumber, cal->isAlarmEnabled );
2333 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly ); 2333 mCalendar->setReadOnly( cal->mCalNumber, cal->isReadOnly );
2334 if ( cal->isStandard ) 2334 if ( cal->isStandard )
2335 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2335 mCalendar->setDefaultCalendar( cal->mCalNumber );
2336 cal = calendars.next(); 2336 cal = calendars.next();
2337 } 2337 }
2338 setSyncEventsReadOnly(); 2338 setSyncEventsReadOnly();
2339 mCalendar->reInitAlarmSettings(); 2339 mCalendar->reInitAlarmSettings();
2340 updateUnmanagedViews(); 2340 updateUnmanagedViews();
2341 updateView(); 2341 updateView();
2342 return true; 2342 return true;
2343} 2343}
2344void CalendarView::addCalendarId( int id ) 2344void CalendarView::addCalendarId( int id )
2345{ 2345{
2346 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id ); 2346 KopiCalendarFile * cal = KOPrefs::instance()->getCalendar( id );
2347 if ( cal ) 2347 if ( cal )
2348 addCalendar( cal ); 2348 addCalendar( cal );
2349} 2349}
2350bool CalendarView::addCalendar( KopiCalendarFile * cal ) 2350bool CalendarView::addCalendar( KopiCalendarFile * cal )
2351{ 2351{
2352 cal->mErrorOnLoad = false; 2352 cal->mErrorOnLoad = false;
2353 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) { 2353 if ( mCalendar->addCalendarFile( cal->mFileName, cal->mCalNumber )) {
2354 cal->mLoadDt = QDateTime::currentDateTime(); 2354 cal->mLoadDt = QDateTime::currentDateTime();
2355 return true; 2355 return true;
2356 } 2356 }
2357 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() ); 2357 qDebug("KO: Error adding calendar file %s ",cal->mFileName.latin1() );
2358 cal->mErrorOnLoad = true; 2358 cal->mErrorOnLoad = true;
2359 return false; 2359 return false;
2360} 2360}
2361bool CalendarView::openCalendar(QString filename, bool merge) 2361bool CalendarView::openCalendar(QString filename, bool merge)
2362{ 2362{
2363 2363
2364 if (filename.isEmpty()) { 2364 if (filename.isEmpty()) {
2365 return false; 2365 return false;
2366 } 2366 }
2367 2367
2368 if (!QFile::exists(filename)) { 2368 if (!QFile::exists(filename)) {
2369 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 2369 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
2370 return false; 2370 return false;
2371 } 2371 }
2372 2372
2373 globalFlagBlockAgenda = 1; 2373 globalFlagBlockAgenda = 1;
2374 clearAllViews(); 2374 clearAllViews();
2375 if (!merge) { 2375 if (!merge) {
2376 mViewManager->setDocumentId( filename ); 2376 mViewManager->setDocumentId( filename );
2377 mCalendar->close(); 2377 mCalendar->close();
2378 } 2378 }
2379 mStorage->setFileName( filename ); 2379 mStorage->setFileName( filename );
2380 2380
2381 if ( mStorage->load() ) { 2381 if ( mStorage->load() ) {
2382 if ( merge ) ;//setModified( true ); 2382 if ( merge ) ;//setModified( true );
2383 else { 2383 else {
2384 //setModified( true ); 2384 //setModified( true );
2385 mViewManager->setDocumentId( filename ); 2385 mViewManager->setDocumentId( filename );
2386 mDialogManager->setDocumentId( filename ); 2386 mDialogManager->setDocumentId( filename );
2387 mTodoList->setDocumentId( filename ); 2387 mTodoList->setDocumentId( filename );
2388 } 2388 }
2389 globalFlagBlockAgenda = 2; 2389 globalFlagBlockAgenda = 2;
2390 // if ( getLastSyncEvent() ) 2390 // if ( getLastSyncEvent() )
2391 // getLastSyncEvent()->setReadOnly( true ); 2391 // getLastSyncEvent()->setReadOnly( true );
2392 mCalendar->reInitAlarmSettings(); 2392 mCalendar->reInitAlarmSettings();
2393 setSyncEventsReadOnly(); 2393 setSyncEventsReadOnly();
2394 updateUnmanagedViews(); 2394 updateUnmanagedViews();
2395 updateView(); 2395 updateView();
2396 if ( filename != MainWindow::defaultFileName() ) { 2396 if ( filename != MainWindow::defaultFileName() ) {
2397 saveCalendar( MainWindow::defaultFileName() ); 2397 saveCalendar( MainWindow::defaultFileName() );
2398 } else { 2398 } else {
2399 QFileInfo finf ( MainWindow::defaultFileName()); 2399 QFileInfo finf ( MainWindow::defaultFileName());
2400 if ( finf.exists() ) { 2400 if ( finf.exists() ) {
2401 setLoadedFileVersion( finf.lastModified () ); 2401 setLoadedFileVersion( finf.lastModified () );
2402 } 2402 }
2403 } 2403 }
2404 return true; 2404 return true;
2405 } else { 2405 } else {
2406 // while failing to load, the calendar object could 2406 // while failing to load, the calendar object could
2407 // have become partially populated. Clear it out. 2407 // have become partially populated. Clear it out.
2408 if ( !merge ) { 2408 if ( !merge ) {
2409 mCalendar->close(); 2409 mCalendar->close();
2410 mViewManager->setDocumentId( filename ); 2410 mViewManager->setDocumentId( filename );
2411 mDialogManager->setDocumentId( filename ); 2411 mDialogManager->setDocumentId( filename );
2412 mTodoList->setDocumentId( filename ); 2412 mTodoList->setDocumentId( filename );
2413 } 2413 }
2414 2414
2415 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 2415 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
2416 2416
2417 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); 2417 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) );
2418 globalFlagBlockAgenda = 2; 2418 globalFlagBlockAgenda = 2;
2419 mCalendar->reInitAlarmSettings(); 2419 mCalendar->reInitAlarmSettings();
2420 setSyncEventsReadOnly(); 2420 setSyncEventsReadOnly();
2421 updateUnmanagedViews(); 2421 updateUnmanagedViews();
2422 updateView(); 2422 updateView();
2423 } 2423 }
2424 return false; 2424 return false;
2425} 2425}
2426void CalendarView::mergeFile( QString fn ) 2426void CalendarView::mergeFile( QString fn )
2427{ 2427{
2428 clearAllViews(); 2428 clearAllViews();
2429 mCalendar->mergeCalendarFile( fn ); 2429 mCalendar->mergeCalendarFile( fn );
2430 mCalendar->reInitAlarmSettings(); 2430 mCalendar->reInitAlarmSettings();
2431 setSyncEventsReadOnly(); 2431 setSyncEventsReadOnly();
2432 updateUnmanagedViews(); 2432 updateUnmanagedViews();
2433 updateView(); 2433 updateView();
2434} 2434}
2435void CalendarView::showOpenError() 2435void CalendarView::showOpenError()
2436{ 2436{
2437 KMessageBox::error(this,i18n("Couldn't load calendar\n.")); 2437 KMessageBox::error(this,i18n("Couldn't load calendar\n."));
2438} 2438}
2439void CalendarView::setLoadedFileVersion(QDateTime dt) 2439void CalendarView::setLoadedFileVersion(QDateTime dt)
2440{ 2440{
2441 loadedFileVersion = dt; 2441 loadedFileVersion = dt;
2442} 2442}
2443bool CalendarView::checkFileChanged(QString fn) 2443bool CalendarView::checkFileChanged(QString fn)
2444{ 2444{
2445 QFileInfo finf ( fn ); 2445 QFileInfo finf ( fn );
2446 if ( !finf.exists() ) 2446 if ( !finf.exists() )
2447 return true; 2447 return true;
2448 QDateTime dt = finf.lastModified (); 2448 QDateTime dt = finf.lastModified ();
2449 if ( dt <= loadedFileVersion ) 2449 if ( dt <= loadedFileVersion )
2450 return false; 2450 return false;
2451 return true; 2451 return true;
2452 2452
2453} 2453}
2454void CalendarView::watchSavedFile() 2454void CalendarView::watchSavedFile()
2455{ 2455{
2456 QFileInfo finf ( MainWindow::defaultFileName()); 2456 QFileInfo finf ( MainWindow::defaultFileName());
2457 if ( !finf.exists() ) 2457 if ( !finf.exists() )
2458 return; 2458 return;
2459 QDateTime dt = finf.lastModified (); 2459 QDateTime dt = finf.lastModified ();
2460 if ( dt < loadedFileVersion ) { 2460 if ( dt < loadedFileVersion ) {
2461 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); 2461 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1());
2462 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); 2462 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) );
2463 return; 2463 return;
2464 } 2464 }
2465 loadedFileVersion = dt; 2465 loadedFileVersion = dt;
2466} 2466}
2467bool CalendarView::checkAllFileVersions() 2467bool CalendarView::checkAllFileVersions()
2468{ 2468{
2469 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2469 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2470 KopiCalendarFile * cal = calendars.first(); 2470 KopiCalendarFile * cal = calendars.first();
2471 mCalendar->setDefaultCalendar( 1 ); 2471 mCalendar->setDefaultCalendar( 1 );
2472 mCalendar->setDefaultCalendarEnabledOnly(); 2472 mCalendar->setDefaultCalendarEnabledOnly();
2473 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2473 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2474 if ( !checkFileVersion(MainWindow::defaultFileName())) { 2474 if ( !checkFileVersion(MainWindow::defaultFileName())) {
2475 restoreCalendarSettings(); 2475 restoreCalendarSettings();
2476 return false; 2476 return false;
2477 } 2477 }
2478 } 2478 }
2479 cal = calendars.next(); 2479 cal = calendars.next();
2480 QDateTime storeTemp = loadedFileVersion; 2480 QDateTime storeTemp = loadedFileVersion;
2481 while ( cal ) { 2481 while ( cal ) {
2482 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2482 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2483 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2483 mCalendar->setDefaultCalendar( cal->mCalNumber );
2484 mCalendar->setDefaultCalendarEnabledOnly(); 2484 mCalendar->setDefaultCalendarEnabledOnly();
2485 loadedFileVersion = cal->mLoadDt.addSecs( 15 ); 2485 loadedFileVersion = cal->mLoadDt.addSecs( 15 );
2486 if ( !checkFileVersion(cal->mFileName )) { 2486 if ( !checkFileVersion(cal->mFileName )) {
2487 loadedFileVersion = storeTemp; 2487 loadedFileVersion = storeTemp;
2488 restoreCalendarSettings(); 2488 restoreCalendarSettings();
2489 return false; 2489 return false;
2490 } 2490 }
2491 } 2491 }
2492 cal = calendars.next(); 2492 cal = calendars.next();
2493 } 2493 }
2494 loadedFileVersion = storeTemp; 2494 loadedFileVersion = storeTemp;
2495 return true; 2495 return true;
2496} 2496}
2497bool CalendarView::checkFileVersion(QString fn) 2497bool CalendarView::checkFileVersion(QString fn)
2498{ 2498{
2499 QFileInfo finf ( fn ); 2499 QFileInfo finf ( fn );
2500 if ( !finf.exists() ) 2500 if ( !finf.exists() )
2501 return true; 2501 return true;
2502 QDateTime dt = finf.lastModified (); 2502 QDateTime dt = finf.lastModified ();
2503 qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1()); 2503 qDebug("loaded file version %s %s", fn.latin1(), loadedFileVersion.toString().latin1());
2504 qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1()); 2504 qDebug("file on disk version %s %s", fn.latin1(),dt.toString().latin1());
2505 if ( dt <= loadedFileVersion ) 2505 if ( dt <= loadedFileVersion )
2506 return true; 2506 return true;
2507 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg(KGlobal::formatMessage(fn,0)).arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) , 2507 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file\n%1\non disk has changed!\nFile size: %2 bytes.\nLast modified: %3\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg(KGlobal::formatMessage(fn,0)).arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) ,
2508 i18n("KO/Pi Warning"),i18n("Overwrite"), 2508 i18n("KO/Pi Warning"),i18n("Overwrite"),
2509 i18n("Sync+save")); 2509 i18n("Sync+save"));
2510 2510
2511 if ( km == KMessageBox::Cancel ) 2511 if ( km == KMessageBox::Cancel )
2512 return false; 2512 return false;
2513 if ( km == KMessageBox::Yes ) 2513 if ( km == KMessageBox::Yes )
2514 return true; 2514 return true;
2515 2515
2516 setSyncDevice("deleteaftersync" ); 2516 setSyncDevice("deleteaftersync" );
2517 mSyncManager->mAskForPreferences = true; 2517 mSyncManager->mAskForPreferences = true;
2518 mSyncManager->mSyncAlgoPrefs = 3; 2518 mSyncManager->mSyncAlgoPrefs = 3;
2519 mSyncManager->mWriteBackFile = false; 2519 mSyncManager->mWriteBackFile = false;
2520 mSyncManager->mWriteBackExistingOnly = false; 2520 mSyncManager->mWriteBackExistingOnly = false;
2521 mSyncManager->mShowSyncSummary = false; 2521 mSyncManager->mShowSyncSummary = false;
2522 syncCalendar( fn, 3 ); 2522 syncCalendar( fn, 3 );
2523 Event * e = getLastSyncEvent(); 2523 Event * e = getLastSyncEvent();
2524 if ( e ) 2524 if ( e )
2525 mCalendar->deleteEvent( e ); 2525 mCalendar->deleteEvent( e );
2526 return true; 2526 return true;
2527} 2527}
2528bool CalendarView::saveCalendars() 2528bool CalendarView::saveCalendars()
2529{ 2529{
2530 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars; 2530 QPtrList<KopiCalendarFile> calendars = KOPrefs::instance()->mCalendars;
2531 KopiCalendarFile * cal = calendars.first(); 2531 KopiCalendarFile * cal = calendars.first();
2532 mCalendar->setDefaultCalendar( 1 ); 2532 mCalendar->setDefaultCalendar( 1 );
2533 mCalendar->setDefaultCalendarEnabledOnly(); 2533 mCalendar->setDefaultCalendarEnabledOnly();
2534 QString saveError; 2534 QString saveError;
2535 if ( !saveCalendar( MainWindow::defaultFileName() ) ) 2535 if ( !saveCalendar( MainWindow::defaultFileName() ) )
2536 saveError = cal->mName +"\n"; 2536 saveError = cal->mName +"\n";
2537 cal = calendars.next(); 2537 cal = calendars.next();
2538 while ( cal ) { 2538 while ( cal ) {
2539 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) { 2539 if ( !cal->isReadOnly && !cal->mErrorOnLoad ) {
2540 mCalendar->setDefaultCalendar( cal->mCalNumber ); 2540 mCalendar->setDefaultCalendar( cal->mCalNumber );
2541 mCalendar->setDefaultCalendarEnabledOnly(); 2541 mCalendar->setDefaultCalendarEnabledOnly();
2542 if ( saveCalendar( cal->mFileName ) ) 2542 if ( saveCalendar( cal->mFileName ) )
2543 cal->mLoadDt = QDateTime::currentDateTime(); 2543 cal->mLoadDt = QDateTime::currentDateTime();
2544 else 2544 else
2545 saveError += cal->mName + "\n"; 2545 saveError += cal->mName + "\n";
2546 } 2546 }
2547 cal = calendars.next(); 2547 cal = calendars.next();
2548 } 2548 }
2549 restoreCalendarSettings(); 2549 restoreCalendarSettings();
2550 if ( !saveError.isEmpty() ) { 2550 if ( !saveError.isEmpty() ) {
2551 saveError = KGlobal::formatMessage( i18n("Calendar(s) not saved:"),0 )+"\n" + saveError; 2551 saveError = KGlobal::formatMessage( i18n("Calendar(s) not saved:"),0 )+"\n" + saveError;
2552 KMessageBox::error(this, saveError, i18n("Error saving data")); 2552 KMessageBox::error(this, saveError, i18n("Error saving data"));
2553 return false; 2553 return false;
2554 } 2554 }
2555 return true; 2555 return true;
2556} 2556}
2557bool CalendarView::saveCalendar( QString filename ) 2557bool CalendarView::saveCalendar( QString filename )
2558{ 2558{
2559 2559
2560 // Store back all unsaved data into calendar object 2560 // Store back all unsaved data into calendar object
2561 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 2561 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
2562 if ( mViewManager->currentView() ) 2562 if ( mViewManager->currentView() )
2563 mViewManager->currentView()->flushView(); 2563 mViewManager->currentView()->flushView();
2564 2564
2565 2565
2566 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); 2566 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2);
2567 mStorage->setSaveFormat( new ICalFormat() ); 2567 mStorage->setSaveFormat( new ICalFormat() );
2568 mStorage->setFileName( filename ); 2568 mStorage->setFileName( filename );
2569 bool success; 2569 bool success;
2570 success = mStorage->save(); 2570 success = mStorage->save();
2571 if ( !success ) { 2571 if ( !success ) {
2572 return false; 2572 return false;
2573 } 2573 }
2574 if ( filename == MainWindow::defaultFileName() ) { 2574 if ( filename == MainWindow::defaultFileName() ) {
2575 setLoadedFileVersion( lfv ); 2575 setLoadedFileVersion( lfv );
2576 watchSavedFile(); 2576 watchSavedFile();
2577 } 2577 }
2578 return true; 2578 return true;
2579} 2579}
2580 2580
2581void CalendarView::closeCalendar() 2581void CalendarView::closeCalendar()
2582{ 2582{
2583 2583
2584 // child windows no longer valid 2584 // child windows no longer valid
2585 clearAllViews(); 2585 clearAllViews();
2586 emit closingDown(); 2586 emit closingDown();
2587 2587
2588 mCalendar->close(); 2588 mCalendar->close();
2589 setModified(false); 2589 setModified(false);
2590 updateView(); 2590 updateView();
2591} 2591}
2592 2592
2593void CalendarView::archiveCalendar() 2593void CalendarView::archiveCalendar()
2594{ 2594{
2595 mDialogManager->showArchiveDialog(); 2595 mDialogManager->showArchiveDialog();
2596} 2596}
2597 2597
2598 2598
2599void CalendarView::readSettings() 2599void CalendarView::readSettings()
2600{ 2600{
2601 2601
2602 2602
2603 // mViewManager->showAgendaView(); 2603 // mViewManager->showAgendaView();
2604 QString str; 2604 QString str;
2605 //qDebug("CalendarView::readSettings() "); 2605 //qDebug("CalendarView::readSettings() ");
2606 // read settings from the KConfig, supplying reasonable 2606 // read settings from the KConfig, supplying reasonable
2607 // defaults where none are to be found 2607 // defaults where none are to be found
2608 KConfig *config = KOGlobals::config(); 2608 KConfig *config = KOGlobals::config();
2609#ifndef KORG_NOSPLITTER 2609#ifndef KORG_NOSPLITTER
2610 config->setGroup("KOrganizer Geometry"); 2610 config->setGroup("KOrganizer Geometry");
2611 2611
2612 QValueList<int> sizes = config->readIntListEntry("Separator1"); 2612 QValueList<int> sizes = config->readIntListEntry("Separator1");
2613 if (sizes.count() != 2) { 2613 if (sizes.count() != 2) {
2614 sizes << mDateNavigator->minimumSizeHint().width(); 2614 sizes << mDateNavigator->minimumSizeHint().width();
2615 sizes << 300; 2615 sizes << 300;
2616 } 2616 }
2617 mPanner->setSizes(sizes); 2617 mPanner->setSizes(sizes);
2618 2618
2619 sizes = config->readIntListEntry("Separator2"); 2619 sizes = config->readIntListEntry("Separator2");
2620 if ( ( mResourceView && sizes.count() == 4 ) || 2620 if ( ( mResourceView && sizes.count() == 4 ) ||
2621 ( !mResourceView && sizes.count() == 3 ) ) { 2621 ( !mResourceView && sizes.count() == 3 ) ) {
2622 mLeftSplitter->setSizes(sizes); 2622 mLeftSplitter->setSizes(sizes);
2623 } 2623 }
2624#endif 2624#endif
2625 globalFlagBlockAgenda = 1; 2625 globalFlagBlockAgenda = 1;
2626 mViewManager->showAgendaView(); 2626 mViewManager->showAgendaView();
2627 //mViewManager->readSettings( config ); 2627 //mViewManager->readSettings( config );
2628 mTodoList->restoreLayout(config,QString("Todo Layout")); 2628 mTodoList->restoreLayout(config,QString("Todo Layout"));
2629 readFilterSettings(config); 2629 readFilterSettings(config);
2630 2630
2631#ifdef DESKTOP_VERSION 2631#ifdef DESKTOP_VERSION
2632 config->setGroup("WidgetLayout"); 2632 config->setGroup("WidgetLayout");
2633 QStringList list; 2633 QStringList list;
2634 list = config->readListEntry("MainLayout"); 2634 list = config->readListEntry("MainLayout");
2635 int x,y,w,h; 2635 int x,y,w,h;
2636 if ( ! list.isEmpty() ) { 2636 if ( ! list.isEmpty() ) {
2637 x = list[0].toInt(); 2637 x = list[0].toInt();
2638 y = list[1].toInt(); 2638 y = list[1].toInt();
2639 w = list[2].toInt(); 2639 w = list[2].toInt();
2640 h = list[3].toInt(); 2640 h = list[3].toInt();
2641 KApplication::testCoords( &x,&y,&w,&h ); 2641 KApplication::testCoords( &x,&y,&w,&h );
2642 topLevelWidget()->setGeometry(x,y,w,h); 2642 topLevelWidget()->setGeometry(x,y,w,h);
2643 2643
2644 } else { 2644 } else {
2645 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 2645 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
2646 } 2646 }
2647 list = config->readListEntry("EditEventLayout"); 2647 list = config->readListEntry("EditEventLayout");
2648 if ( ! list.isEmpty() ) { 2648 if ( ! list.isEmpty() ) {
2649 x = list[0].toInt(); 2649 x = list[0].toInt();
2650 y = list[1].toInt(); 2650 y = list[1].toInt();
2651 w = list[2].toInt(); 2651 w = list[2].toInt();
2652 h = list[3].toInt(); 2652 h = list[3].toInt();
2653 KApplication::testCoords( &x,&y,&w,&h ); 2653 KApplication::testCoords( &x,&y,&w,&h );
2654 mEventEditor->setGeometry(x,y,w,h); 2654 mEventEditor->setGeometry(x,y,w,h);
2655 2655
2656 } 2656 }
2657 list = config->readListEntry("EditTodoLayout"); 2657 list = config->readListEntry("EditTodoLayout");
2658 if ( ! list.isEmpty() ) { 2658 if ( ! list.isEmpty() ) {
2659 x = list[0].toInt(); 2659 x = list[0].toInt();
2660 y = list[1].toInt(); 2660 y = list[1].toInt();
2661 w = list[2].toInt(); 2661 w = list[2].toInt();
2662 h = list[3].toInt(); 2662 h = list[3].toInt();
2663 KApplication::testCoords( &x,&y,&w,&h ); 2663 KApplication::testCoords( &x,&y,&w,&h );
2664 mTodoEditor->setGeometry(x,y,w,h); 2664 mTodoEditor->setGeometry(x,y,w,h);
2665 2665
2666 } 2666 }
2667 list = config->readListEntry("ViewerLayout"); 2667 list = config->readListEntry("ViewerLayout");
2668 if ( ! list.isEmpty() ) { 2668 if ( ! list.isEmpty() ) {
2669 x = list[0].toInt(); 2669 x = list[0].toInt();
2670 y = list[1].toInt(); 2670 y = list[1].toInt();
2671 w = list[2].toInt(); 2671 w = list[2].toInt();
2672 h = list[3].toInt(); 2672 h = list[3].toInt();
2673 KApplication::testCoords( &x,&y,&w,&h ); 2673 KApplication::testCoords( &x,&y,&w,&h );
2674 getEventViewerDialog()->setGeometry(x,y,w,h); 2674 getEventViewerDialog()->setGeometry(x,y,w,h);
2675 } 2675 }
2676#endif 2676#endif
2677 config->setGroup( "Views" ); 2677 config->setGroup( "Views" );
2678 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 2678 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
2679 2679
2680 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame"); 2680 QValueList<int> sizes = config->readIntListEntry("Left Splitter Frame");
2681 2681
2682 int resetval = 0; 2682 int resetval = 0;
2683 int maxVal = 0; 2683 int maxVal = 0;
2684 if (sizes.count() != 3) { 2684 if (sizes.count() != 3) {
2685 if ( KOPrefs::instance()->mVerticalScreen ) { 2685 if ( KOPrefs::instance()->mVerticalScreen ) {
2686 resetval = mDateNavigator->sizeHint().width()+2; 2686 resetval = mDateNavigator->sizeHint().width()+2;
2687 } else { 2687 } else {
2688 resetval = mDateNavigator->sizeHint().height()+2; 2688 resetval = mDateNavigator->sizeHint().height()+2;
2689 } 2689 }
2690 } 2690 }
2691 if ( resetval ) { 2691 if ( resetval ) {
2692 sizes.clear(); 2692 sizes.clear();
2693 if ( KOPrefs::instance()->mVerticalScreen ) { 2693 if ( KOPrefs::instance()->mVerticalScreen ) {
2694 maxVal = QApplication::desktop()->width() -10; 2694 maxVal = QApplication::desktop()->width() -10;
2695 } else { 2695 } else {
2696 maxVal = QApplication::desktop()->height()-10; 2696 maxVal = QApplication::desktop()->height()-10;
2697 } 2697 }
2698 sizes << resetval; 2698 sizes << resetval;
2699 if ( maxVal < resetval + resetval) 2699 if ( maxVal < resetval + resetval)
2700 resetval = maxVal - resetval; 2700 resetval = maxVal - resetval;
2701 sizes << resetval; 2701 sizes << resetval;
2702 sizes << 100; 2702 sizes << 100;
2703 } 2703 }
2704 mLeftFrame->setSizes(sizes); 2704 mLeftFrame->setSizes(sizes);
2705 sizes = config->readIntListEntry("Main Splitter Frame"); 2705 sizes = config->readIntListEntry("Main Splitter Frame");
2706 resetval = 0; 2706 resetval = 0;
2707 maxVal = 0; 2707 maxVal = 0;
2708 if (sizes.count() != 2) { 2708 if (sizes.count() != 2) {
2709 if ( !KOPrefs::instance()->mVerticalScreen ) { 2709 if ( !KOPrefs::instance()->mVerticalScreen ) {
2710 resetval = mDateNavigator->sizeHint().width()+2; 2710 resetval = mDateNavigator->sizeHint().width()+2;
2711 } else { 2711 } else {
2712 resetval = mDateNavigator->sizeHint().height()+2; 2712 resetval = mDateNavigator->sizeHint().height()+2;
2713 } 2713 }
2714 } 2714 }
2715 if ( resetval ) { 2715 if ( resetval ) {
2716 sizes.clear(); 2716 sizes.clear();
2717 if ( !KOPrefs::instance()->mVerticalScreen ) { 2717 if ( !KOPrefs::instance()->mVerticalScreen ) {
2718 maxVal = QApplication::desktop()->width() -10; 2718 maxVal = QApplication::desktop()->width() -10;
2719 } else { 2719 } else {
2720 maxVal = QApplication::desktop()->height()-10; 2720 maxVal = QApplication::desktop()->height()-10;
2721 } 2721 }
2722 sizes << resetval; 2722 sizes << resetval;
2723 if ( maxVal < resetval + resetval) 2723 if ( maxVal < resetval + resetval)
2724 resetval = maxVal - resetval; 2724 resetval = maxVal - resetval;
2725 sizes << resetval; 2725 sizes << resetval;
2726 } 2726 }
2727 mMainFrame->setSizes(sizes); 2727 mMainFrame->setSizes(sizes);
2728 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 2728 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
2729 else if ( dateCount == 7 ) mNavigator->selectWeek(); 2729 else if ( dateCount == 7 ) mNavigator->selectWeek();
2730 else mNavigator->selectDates( dateCount ); 2730 else mNavigator->selectDates( dateCount );
2731 // mViewManager->readSettings( config ); 2731 // mViewManager->readSettings( config );
2732 updateConfig(); 2732 updateConfig();
2733 globalFlagBlockAgenda = 2; 2733 globalFlagBlockAgenda = 2;
2734 mViewManager->readSettings( config ); 2734 mViewManager->readSettings( config );
2735 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) ); 2735 QTimer::singleShot( 1, mDateNavigator, SLOT ( setResizeEnabled() ) );
2736} 2736}
2737 2737
2738void CalendarView::checkSuspendAlarm() 2738void CalendarView::checkSuspendAlarm()
2739{ 2739{
2740 if ( mSuspendTimer->isActive() ) { 2740 if ( mSuspendTimer->isActive() ) {
2741 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm")); 2741 KMessageBox::information( this, i18n("<b>WARNING:</b> There is a pending suspended alarm!"), i18n("Pending Suspend Alarm"));
2742 } 2742 }
2743} 2743}
2744void CalendarView::writeSettings() 2744void CalendarView::writeSettings()
2745{ 2745{
2746 // kdDebug() << "CalendarView::writeSettings" << endl; 2746 // kdDebug() << "CalendarView::writeSettings" << endl;
2747 2747
2748 KConfig *config = KOGlobals::config(); 2748 KConfig *config = KOGlobals::config();
2749 2749
2750 mViewManager->writeSettings( config ); 2750 mViewManager->writeSettings( config );
2751 mTodoList->saveLayout(config,QString("Todo Layout")); 2751 mTodoList->saveLayout(config,QString("Todo Layout"));
2752 mDialogManager->writeSettings( config ); 2752 mDialogManager->writeSettings( config );
2753 //KOPrefs::instance()->usrWriteConfig(); 2753 //KOPrefs::instance()->usrWriteConfig();
2754 KOPrefs::instance()->writeConfig(); 2754 KOPrefs::instance()->writeConfig();
2755 2755
2756 writeFilterSettings(config); 2756 writeFilterSettings(config);
2757 config->setGroup( "AppRun" ); 2757 config->setGroup( "AppRun" );
2758 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) ); 2758 QDateTime dt ( QDate (2005,1,1), QTime( 0,0,0 ) );
2759 int days = dt.daysTo( QDate::currentDate() ); 2759 int days = dt.daysTo( QDate::currentDate() );
2760 dt = dt.addDays( days ); 2760 dt = dt.addDays( days );
2761 int secs = dt.secsTo( QDateTime::currentDateTime() ); 2761 int secs = dt.secsTo( QDateTime::currentDateTime() );
2762 config->writeEntry( "LatestProgramStopDays", days ); 2762 config->writeEntry( "LatestProgramStopDays", days );
2763 config->writeEntry( "LatestProgramStopSecs", secs ); 2763 config->writeEntry( "LatestProgramStopSecs", secs );
2764 //qDebug("KO: Writing stop time: %d ", secs); 2764 //qDebug("KO: Writing stop time: %d ", secs);
2765 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() ); 2765 //qDebug("KO: Current Time %s ",QDateTime::currentDateTime().toString().latin1() );
2766 //QDateTime latest = dt.addSecs ( secs ); 2766 //QDateTime latest = dt.addSecs ( secs );
2767 //qDebug("KO: Termination on %s ", latest.toString().latin1()); 2767 //qDebug("KO: Termination on %s ", latest.toString().latin1());
2768 config->setGroup( "Views" ); 2768 config->setGroup( "Views" );
2769 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 2769 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
2770 2770
2771#if 0 2771#if 0
2772 qDebug("********************* "); 2772 qDebug("********************* ");
2773 qDebug("Testcode secsto "); 2773 qDebug("Testcode secsto ");
2774 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) ); 2774 QDateTime dt_nodaylight ( QDate (2005,3,26), QTime( 0,0,0 ) );
2775 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) ); 2775 QDateTime dt_daylight ( QDate (2005,3,29), QTime( 0,0,0 ) );
2776 int secsto = dt_nodaylight.secsTo( dt_daylight ); 2776 int secsto = dt_nodaylight.secsTo( dt_daylight );
2777 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto ); 2777 QDateTime dt_daylight_wrong = dt_nodaylight.addSecs( secsto );
2778 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() ); 2778 qDebug("dt nodaylight %s ",dt_nodaylight.toString().latin1() );
2779 qDebug("dt daylight %s ",dt_daylight.toString().latin1() ); 2779 qDebug("dt daylight %s ",dt_daylight.toString().latin1() );
2780 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() ); 2780 qDebug("dt daylight_wrong %s ",dt_daylight_wrong.toString().latin1() );
2781 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600); 2781 qDebug("Computed secsTo %d . in minutes: %d . in hours: %d ", secsto, secsto/60, secsto/3600);
2782 qDebug("********************* testcode end"); 2782 qDebug("********************* testcode end");
2783 2783
2784#endif 2784#endif
2785 2785
2786 QValueList<int> listINT = mLeftFrame->sizes(); 2786 QValueList<int> listINT = mLeftFrame->sizes();
2787 config->writeEntry("Left Splitter Frame",listINT); 2787 config->writeEntry("Left Splitter Frame",listINT);
2788 QValueList<int> listINT2 = mMainFrame->sizes(); 2788 QValueList<int> listINT2 = mMainFrame->sizes();
2789 config->writeEntry("Main Splitter Frame",listINT2); 2789 config->writeEntry("Main Splitter Frame",listINT2);
2790#ifdef DESKTOP_VERSION 2790#ifdef DESKTOP_VERSION
2791 config->setGroup("WidgetLayout"); 2791 config->setGroup("WidgetLayout");
2792 QStringList list ;//= config->readListEntry("MainLayout"); 2792 QStringList list ;//= config->readListEntry("MainLayout");
2793 int x,y,w,h; 2793 int x,y,w,h;
2794 QWidget* wid; 2794 QWidget* wid;
2795 wid = topLevelWidget(); 2795 wid = topLevelWidget();
2796 x = wid->geometry().x(); 2796 x = wid->geometry().x();
2797 y = wid->geometry().y(); 2797 y = wid->geometry().y();
2798 w = wid->width(); 2798 w = wid->width();
2799 h = wid->height(); 2799 h = wid->height();
2800 list.clear(); 2800 list.clear();
2801 list << QString::number( x ); 2801 list << QString::number( x );
2802 list << QString::number( y ); 2802 list << QString::number( y );
2803 list << QString::number( w ); 2803 list << QString::number( w );
2804 list << QString::number( h ); 2804 list << QString::number( h );
2805 config->writeEntry("MainLayout",list ); 2805 config->writeEntry("MainLayout",list );
2806 2806
2807 wid = mEventEditor; 2807 wid = mEventEditor;
2808 x = wid->geometry().x(); 2808 x = wid->geometry().x();
2809 y = wid->geometry().y(); 2809 y = wid->geometry().y();
2810 w = wid->width(); 2810 w = wid->width();
2811 h = wid->height(); 2811 h = wid->height();
2812 list.clear(); 2812 list.clear();
2813 list << QString::number( x ); 2813 list << QString::number( x );
2814 list << QString::number( y ); 2814 list << QString::number( y );
2815 list << QString::number( w ); 2815 list << QString::number( w );
2816 list << QString::number( h ); 2816 list << QString::number( h );
2817 config->writeEntry("EditEventLayout",list ); 2817 config->writeEntry("EditEventLayout",list );
2818 2818
2819 wid = mTodoEditor; 2819 wid = mTodoEditor;
2820 x = wid->geometry().x(); 2820 x = wid->geometry().x();
2821 y = wid->geometry().y(); 2821 y = wid->geometry().y();
2822 w = wid->width(); 2822 w = wid->width();
2823 h = wid->height(); 2823 h = wid->height();
2824 list.clear(); 2824 list.clear();
2825 list << QString::number( x ); 2825 list << QString::number( x );
2826 list << QString::number( y ); 2826 list << QString::number( y );
2827 list << QString::number( w ); 2827 list << QString::number( w );
2828 list << QString::number( h ); 2828 list << QString::number( h );
2829 config->writeEntry("EditTodoLayout",list ); 2829 config->writeEntry("EditTodoLayout",list );
2830 wid = getEventViewerDialog(); 2830 wid = getEventViewerDialog();
2831 x = wid->geometry().x(); 2831 x = wid->geometry().x();
2832 y = wid->geometry().y(); 2832 y = wid->geometry().y();
2833 w = wid->width(); 2833 w = wid->width();
2834 h = wid->height(); 2834 h = wid->height();
2835 list.clear(); 2835 list.clear();
2836 list << QString::number( x ); 2836 list << QString::number( x );
2837 list << QString::number( y ); 2837 list << QString::number( y );
2838 list << QString::number( w ); 2838 list << QString::number( w );
2839 list << QString::number( h ); 2839 list << QString::number( h );
2840 config->writeEntry("ViewerLayout",list ); 2840 config->writeEntry("ViewerLayout",list );
2841 wid = mDialogManager->getSearchDialog(); 2841 wid = mDialogManager->getSearchDialog();
2842 if ( wid ) { 2842 if ( wid ) {
2843 x = wid->geometry().x(); 2843 x = wid->geometry().x();
2844 y = wid->geometry().y(); 2844 y = wid->geometry().y();
2845 w = wid->width(); 2845 w = wid->width();
2846 h = wid->height(); 2846 h = wid->height();
2847 list.clear(); 2847 list.clear();
2848 list << QString::number( x ); 2848 list << QString::number( x );
2849 list << QString::number( y ); 2849 list << QString::number( y );
2850 list << QString::number( w ); 2850 list << QString::number( w );
2851 list << QString::number( h ); 2851 list << QString::number( h );
2852 config->writeEntry("SearchLayout",list ); 2852 config->writeEntry("SearchLayout",list );
2853 } 2853 }
2854#endif 2854#endif
2855 2855
2856 2856
2857 config->sync(); 2857 config->sync();
2858} 2858}
2859 2859
2860void CalendarView::readFilterSettings(KConfig *config) 2860void CalendarView::readFilterSettings(KConfig *config)
2861{ 2861{
2862 // kdDebug() << "CalendarView::readFilterSettings()" << endl; 2862 // kdDebug() << "CalendarView::readFilterSettings()" << endl;
2863 2863
2864 mFilters.clear(); 2864 mFilters.clear();
2865 2865
2866 config->setGroup("General"); 2866 config->setGroup("General");
2867 QStringList filterList = config->readListEntry("CalendarFilters"); 2867 QStringList filterList = config->readListEntry("CalendarFilters");
2868 2868
2869 QStringList::ConstIterator it = filterList.begin(); 2869 QStringList::ConstIterator it = filterList.begin();
2870 QStringList::ConstIterator end = filterList.end(); 2870 QStringList::ConstIterator end = filterList.end();
2871 while(it != end) { 2871 while(it != end) {
2872 // kdDebug() << " filter: " << (*it) << endl; 2872 // kdDebug() << " filter: " << (*it) << endl;
2873 2873
2874 CalFilter *filter; 2874 CalFilter *filter;
2875 filter = new CalFilter(*it); 2875 filter = new CalFilter(*it);
2876 config->setGroup("Filter_" + (*it).utf8()); 2876 config->setGroup("Filter_" + (*it).utf8());
2877 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); 2877 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) );
2878 filter->setCriteria(config->readNumEntry("Criteria",0)); 2878 filter->setCriteria(config->readNumEntry("Criteria",0));
2879 filter->setCategoryList(config->readListEntry("CategoryList")); 2879 filter->setCategoryList(config->readListEntry("CategoryList"));
2880 mFilters.append(filter); 2880 mFilters.append(filter);
2881 2881
2882 ++it; 2882 ++it;
2883 } 2883 }
2884 2884
2885 if (mFilters.count() == 0) { 2885 if (mFilters.count() == 0) {
2886 CalFilter *filter = new CalFilter(i18n("Default")); 2886 CalFilter *filter = new CalFilter(i18n("Default"));
2887 mFilters.append(filter); 2887 mFilters.append(filter);
2888 } 2888 }
2889 mFilterView->updateFilters(); 2889 mFilterView->updateFilters();
2890 config->setGroup("FilterView"); 2890 config->setGroup("FilterView");
2891 2891
2892 mFilterView->blockSignals(true); 2892 mFilterView->blockSignals(true);
2893 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); 2893 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled"));
2894 mFilterView->setSelectedFilter(config->readEntry("Current Filter")); 2894 mFilterView->setSelectedFilter(config->readEntry("Current Filter"));
2895 mFilterView->blockSignals(false); 2895 mFilterView->blockSignals(false);
2896 // We do it manually to avoid it being done twice by the above calls 2896 // We do it manually to avoid it being done twice by the above calls
2897 updateFilter(); 2897 updateFilter();
2898} 2898}
2899 2899
2900void CalendarView::writeFilterSettings(KConfig *config) 2900void CalendarView::writeFilterSettings(KConfig *config)
2901{ 2901{
2902 // kdDebug() << "CalendarView::writeFilterSettings()" << endl; 2902 // kdDebug() << "CalendarView::writeFilterSettings()" << endl;
2903 2903
2904 QStringList filterList; 2904 QStringList filterList;
2905 2905
2906 CalFilter *filter = mFilters.first(); 2906 CalFilter *filter = mFilters.first();
2907 while(filter) { 2907 while(filter) {
2908 // kdDebug() << " fn: " << filter->name() << endl; 2908 // kdDebug() << " fn: " << filter->name() << endl;
2909 filterList << filter->name(); 2909 filterList << filter->name();
2910 config->setGroup("Filter_" + filter->name().utf8()); 2910 config->setGroup("Filter_" + filter->name().utf8());
2911 config->writeEntry("Criteria",filter->criteria()); 2911 config->writeEntry("Criteria",filter->criteria());
2912 config->writeEntry("CategoryList",filter->categoryList()); 2912 config->writeEntry("CategoryList",filter->categoryList());
2913 filter = mFilters.next(); 2913 filter = mFilters.next();
2914 } 2914 }
2915 config->setGroup("General"); 2915 config->setGroup("General");
2916 config->writeEntry("CalendarFilters",filterList); 2916 config->writeEntry("CalendarFilters",filterList);
2917 2917
2918 config->setGroup("FilterView"); 2918 config->setGroup("FilterView");
2919 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); 2919 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled());
2920 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); 2920 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name());
2921} 2921}
2922 2922
2923 2923
2924void CalendarView::goToday() 2924void CalendarView::goToday()
2925{ 2925{
2926 if ( mViewManager->currentView()->isMonthView() ) 2926 if ( mViewManager->currentView()->isMonthView() )
2927 mNavigator->selectTodayMonth(); 2927 mNavigator->selectTodayMonth();
2928 else 2928 else
2929 mNavigator->selectToday(); 2929 mNavigator->selectToday();
2930} 2930}
2931 2931
2932void CalendarView::goNext() 2932void CalendarView::goNext()
2933{ 2933{
2934 mNavigator->selectNext(); 2934 mNavigator->selectNext();
2935} 2935}
2936 2936
2937void CalendarView::goPrevious() 2937void CalendarView::goPrevious()
2938{ 2938{
2939 mNavigator->selectPrevious(); 2939 mNavigator->selectPrevious();
2940} 2940}
2941void CalendarView::goNextMonth() 2941void CalendarView::goNextMonth()
2942{ 2942{
2943 mNavigator->selectNextMonth(); 2943 mNavigator->selectNextMonth();
2944} 2944}
2945 2945
2946void CalendarView::goPreviousMonth() 2946void CalendarView::goPreviousMonth()
2947{ 2947{
2948 mNavigator->selectPreviousMonth(); 2948 mNavigator->selectPreviousMonth();
2949} 2949}
2950 2950
2951void CalendarView::updateConfig() 2951void CalendarView::updateConfig()
2952{ 2952{
2953 if ( KOPrefs::instance()->mUseAppColors ) 2953 if ( KOPrefs::instance()->mUseAppColors )
2954 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 2954 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
2955 emit configChanged(); 2955 emit configChanged();
2956 mTodoList->updateConfig(); 2956 mTodoList->updateConfig();
2957 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); 2957 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont);
2958 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2958 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2959 // To make the "fill window" configurations work 2959 // To make the "fill window" configurations work
2960 //mViewManager->raiseCurrentView(); 2960 //mViewManager->raiseCurrentView();
2961} 2961}
2962 2962
2963 2963
2964void CalendarView::eventChanged(Event *event) 2964void CalendarView::eventChanged(Event *event)
2965{ 2965{
2966 changeEventDisplay(event,KOGlobals::EVENTEDITED); 2966 changeEventDisplay(event,KOGlobals::EVENTEDITED);
2967 //updateUnmanagedViews(); 2967 //updateUnmanagedViews();
2968} 2968}
2969 2969
2970void CalendarView::eventAdded(Event *event) 2970void CalendarView::eventAdded(Event *event)
2971{ 2971{
2972 changeEventDisplay(event,KOGlobals::EVENTADDED); 2972 changeEventDisplay(event,KOGlobals::EVENTADDED);
2973} 2973}
2974 2974
2975void CalendarView::eventToBeDeleted(Event *) 2975void CalendarView::eventToBeDeleted(Event *)
2976{ 2976{
2977 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 2977 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
2978} 2978}
2979 2979
2980void CalendarView::eventDeleted() 2980void CalendarView::eventDeleted()
2981{ 2981{
2982 changeEventDisplay(0,KOGlobals::EVENTDELETED); 2982 changeEventDisplay(0,KOGlobals::EVENTDELETED);
2983} 2983}
2984void CalendarView::changeTodoDisplay(Todo *which, int action) 2984void CalendarView::changeTodoDisplay(Todo *which, int action)
2985{ 2985{
2986 changeIncidenceDisplay((Incidence *)which, action); 2986 changeIncidenceDisplay((Incidence *)which, action);
2987 mDateNavigator->updateView(); //LR 2987 mDateNavigator->updateView(); //LR
2988 //mDialogManager->updateSearchDialog(); 2988 //mDialogManager->updateSearchDialog();
2989 2989
2990 if (which) { 2990 if (which) {
2991 mViewManager->updateWNview(); 2991 mViewManager->updateWNview();
2992 //mTodoList->updateView(); 2992 //mTodoList->updateView();
2993 } 2993 }
2994 2994
2995} 2995}
2996 2996
2997void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 2997void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
2998{ 2998{
2999 updateUnmanagedViews(); 2999 updateUnmanagedViews();
3000 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 3000 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
3001 if ( action == KOGlobals::EVENTDELETED ) { //delete 3001 if ( action == KOGlobals::EVENTDELETED ) { //delete
3002 mCalendar->checkAlarmForIncidence( 0, true ); 3002 mCalendar->checkAlarmForIncidence( 0, true );
3003 if ( mEventViewerDialog ) 3003 if ( mEventViewerDialog )
3004 mEventViewerDialog->hide(); 3004 mEventViewerDialog->hide();
3005 } 3005 }
3006 else 3006 else
3007 mCalendar->checkAlarmForIncidence( which , false ); 3007 mCalendar->checkAlarmForIncidence( which , false );
3008} 3008}
3009 3009
3010// most of the changeEventDisplays() right now just call the view's 3010// most of the changeEventDisplays() right now just call the view's
3011// total update mode, but they SHOULD be recoded to be more refresh-efficient. 3011// total update mode, but they SHOULD be recoded to be more refresh-efficient.
3012void CalendarView::changeEventDisplay(Event *which, int action) 3012void CalendarView::changeEventDisplay(Event *which, int action)
3013{ 3013{
3014 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 3014 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
3015 changeIncidenceDisplay((Incidence *)which, action); 3015 changeIncidenceDisplay((Incidence *)which, action);
3016 static bool clearallviews = false; 3016 static bool clearallviews = false;
3017 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 3017 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
3018 if ( clearallviews ) { 3018 if ( clearallviews ) {
3019 clearAllViews(); 3019 clearAllViews();
3020 clearallviews = false; 3020 clearallviews = false;
3021 } 3021 }
3022 return; 3022 return;
3023 } 3023 }
3024 clearallviews = true; 3024 clearallviews = true;
3025 mDateNavigator->updateView(); 3025 mDateNavigator->updateView();
3026 //mDialogManager->updateSearchDialog(); 3026 //mDialogManager->updateSearchDialog();
3027 if (which) { 3027 if (which) {
3028 // If there is an event view visible update the display 3028 // If there is an event view visible update the display
3029 mViewManager->currentView()->changeEventDisplay(which,action); 3029 mViewManager->currentView()->changeEventDisplay(which,action);
3030 // TODO: check, if update needed 3030 // TODO: check, if update needed
3031 // if (which->getTodoStatus()) { 3031 // if (which->getTodoStatus()) {
3032 mTodoList->updateView(); 3032 mTodoList->updateView();
3033 if ( action != KOGlobals::EVENTDELETED ) { 3033 if ( action != KOGlobals::EVENTDELETED && KOPrefs::instance()->mDetectConflicts ) {
3034 mConflictingEvent = which ; 3034 mConflictingEvent = which ;
3035 int time = 1000; 3035 int time = 1000;
3036#ifdef DESKTOP_VERSION 3036#ifdef DESKTOP_VERSION
3037 time = 500; 3037 time = 500;
3038#endif 3038#endif
3039 bool checkC = false; 3039 bool checkC = false;
3040 if ( mConflictingEvent->doesFloat() ) { 3040 if ( mConflictingEvent->doesFloat() ) {
3041 checkC = KOPrefs::instance()->mCheckConflictsAllDayAllDay 3041 checkC = KOPrefs::instance()->mCheckConflictsAllDayAllDay
3042 || KOPrefs::instance()->mCheckConflictsAllDayNonAD; 3042 || KOPrefs::instance()->mCheckConflictsAllDayNonAD;
3043 } else { 3043 } else {
3044 checkC = KOPrefs::instance()->mCheckConflictsNonADAllDay 3044 checkC = KOPrefs::instance()->mCheckConflictsNonADAllDay
3045 || KOPrefs::instance()->mCheckConflictsNonADNonAD; 3045 || KOPrefs::instance()->mCheckConflictsNonADNonAD;
3046 } 3046 }
3047 if ( checkC ) 3047 if ( checkC )
3048 QTimer::singleShot( time, this, SLOT ( checkConflictForEvent() ) ); 3048 QTimer::singleShot( time, this, SLOT ( checkConflictForEvent() ) );
3049 } 3049 }
3050 // } 3050 // }
3051 } else { 3051 } else {
3052 mViewManager->currentView()->updateView(); 3052 mViewManager->currentView()->updateView();
3053 } 3053 }
3054} 3054}
3055void CalendarView::checkConflictForEvent() 3055void CalendarView::checkConflictForEvent()
3056{ 3056{
3057 3057
3058 if (!KOPrefs::instance()->mConfirm) 3058 if (!KOPrefs::instance()->mConfirm)
3059 return; 3059 return;
3060 if ( ! mConflictingEvent ) return; 3060 if ( ! mConflictingEvent ) return;
3061 Event * conflictingEvent = mConflictingEvent; 3061 Event * conflictingEvent = mConflictingEvent;
3062 mConflictingEvent = 0; 3062 mConflictingEvent = 0;
3063 QDateTime current = QDateTime::currentDateTime(); 3063 QDateTime current = QDateTime::currentDateTime();
3064 if ( ! conflictingEvent->matchTime( &current, 0 ) ) { 3064 if ( ! conflictingEvent->matchTime( &current, 0 ) ) {
3065 return; 3065 return;
3066 } 3066 }
3067 CalFilter *filterIN = 0; 3067 CalFilter *filterIN = 0;
3068 CalFilter *filterALL = 0; 3068 CalFilter *filterALL = 0;
3069 CalFilter *filter = mFilters.first(); 3069 CalFilter *filter = mFilters.first();
3070 while(filter) { 3070 while(filter) {
3071 if ( filter->name() == KOPrefs::instance()->mFilterConflictEditItem) 3071 if ( filter->name() == KOPrefs::instance()->mFilterConflictEditItem)
3072 filterIN = filter; 3072 filterIN = filter;
3073 if ( filter->name() == KOPrefs::instance()->mFilterConflictAllItem ) 3073 if ( filter->name() == KOPrefs::instance()->mFilterConflictAllItem )
3074 filterALL = filter; 3074 filterALL = filter;
3075 filter = mFilters.next(); 3075 filter = mFilters.next();
3076 } 3076 }
3077 if ( filterIN ) { 3077 if ( filterIN ) {
3078 if ( !filterIN->filterCalendarItem( conflictingEvent ) ) { 3078 if ( !filterIN->filterCalendarItem( conflictingEvent ) ) {
3079 return; 3079 return;
3080 } 3080 }
3081 } 3081 }
3082 QPtrList<Event> testlist = mCalendar->events(); 3082 QPtrList<Event> testlist = mCalendar->events();
3083 Event * test = testlist.first(); 3083 Event * test = testlist.first();
3084 QDateTime conflict; 3084 QDateTime conflict;
3085 QDateTime retVal; 3085 QDateTime retVal;
3086 bool found = false; 3086 bool found = false;
3087 Event * cE = 0; 3087 Event * cE = 0;
3088 bool chAD = KOPrefs::instance()->mCheckConflictsAllDayAllDay; 3088 bool chAD = KOPrefs::instance()->mCheckConflictsAllDayAllDay;
3089 bool chNad = KOPrefs::instance()->mCheckConflictsAllDayNonAD; 3089 bool chNad = KOPrefs::instance()->mCheckConflictsAllDayNonAD;
3090 if ( !conflictingEvent->doesFloat() ) { 3090 if ( !conflictingEvent->doesFloat() ) {
3091 chAD = KOPrefs::instance()->mCheckConflictsNonADAllDay; 3091 chAD = KOPrefs::instance()->mCheckConflictsNonADAllDay;
3092 chNad = KOPrefs::instance()->mCheckConflictsNonADNonAD; 3092 chNad = KOPrefs::instance()->mCheckConflictsNonADNonAD;
3093 } 3093 }
3094 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") ); 3094 topLevelWidget()->setCaption( i18n("Checking conflicts ... please wait") );
3095 while ( test ) { 3095 while ( test ) {
3096 qApp->processEvents(); 3096 qApp->processEvents();
3097 bool skip = ( test->doesFloat() && !chAD ) || ( !test->doesFloat() && !chNad ); 3097 bool skip = ( test->doesFloat() && !chAD ) || ( !test->doesFloat() && !chNad );
3098 if ( !skip ) { 3098 if ( !skip ) {
3099 if ( filterALL ) { 3099 if ( filterALL ) {
3100 if ( !filterALL->filterCalendarItem( test ) ) { 3100 if ( !filterALL->filterCalendarItem( test ) ) {
3101 skip = true; 3101 skip = true;
3102 } 3102 }
3103 } 3103 }
3104 if ( !skip ) { 3104 if ( !skip ) {
3105 if ( found ) 3105 if ( found )
3106 skip = !test->matchTime( &current, &conflict ); 3106 skip = !test->matchTime( &current, &conflict );
3107 else 3107 else
3108 skip = !test->matchTime( &current, 0 ); 3108 skip = !test->matchTime( &current, 0 );
3109 if ( !skip ) { 3109 if ( !skip ) {
3110 if ( conflictingEvent->isOverlapping ( test, &retVal, &current ) ) { 3110 if ( conflictingEvent->isOverlapping ( test, &retVal, &current ) ) {
3111 if ( ! found ) { 3111 if ( ! found ) {
3112 conflict = retVal; 3112 conflict = retVal;
3113 cE = test; 3113 cE = test;
3114 } else { 3114 } else {
3115 if ( retVal < conflict ) { 3115 if ( retVal < conflict ) {
3116 conflict = retVal; 3116 conflict = retVal;
3117 cE = test; 3117 cE = test;
3118 } 3118 }
3119 } 3119 }
3120 found = true; 3120 found = true;
3121 } 3121 }
3122 } 3122 }
3123 } 3123 }
3124 } 3124 }
3125 test = testlist.next(); 3125 test = testlist.next();
3126 } 3126 }
3127 topLevelWidget()->setCaption( i18n("KO/Pi") ); 3127 topLevelWidget()->setCaption( i18n("KO/Pi") );
3128 if ( found ) { 3128 if ( found ) {
3129 QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( conflictingEvent->summary(),0 ) ).arg( KGlobal::formatMessage ( cE->summary(),0 )).arg(KGlobal::locale()->formatDate(conflict.date()) ) ; 3129 QString mess = i18n("The event\n%1\nconflicts with event\n%2\nat date\n%3.\n").arg(KGlobal::formatMessage ( conflictingEvent->summary(),0 ) ).arg( KGlobal::formatMessage ( cE->summary(),0 )).arg(KGlobal::locale()->formatDate(conflict.date()) ) ;
3130 qApp->processEvents(); 3130 qApp->processEvents();
3131 int km = KMessageBox::warningContinueCancel(this,mess, 3131 int km = KMessageBox::warningContinueCancel(this,mess,
3132 i18n("KO/Pi Conflict detected"),i18n("Show date"),i18n("No problem!")); 3132 i18n("KO/Pi Conflict detected"),i18n("Show date"),i18n("No problem!"));
3133 if ( km != KMessageBox::Continue ) { 3133 if ( km != KMessageBox::Continue ) {
3134 return; 3134 return;
3135 } 3135 }
3136 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 ) 3136 if ( mViewManager->currentView() != mViewManager->agendaView() || mNavigator->selectedDates().count() > 1 )
3137 mViewManager->showDayView(); 3137 mViewManager->showDayView();
3138 mNavigator->slotDaySelect( conflict.date() ); 3138 mNavigator->slotDaySelect( conflict.date() );
3139 int hour = conflict.time().hour(); 3139 int hour = conflict.time().hour();
3140 mViewManager->agendaView()->setStartHour( hour ); 3140 mViewManager->agendaView()->setStartHour( hour );
3141 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( conflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) ); 3141 topLevelWidget()->setCaption( i18n("Conflict %1 <-> %2"). arg( conflictingEvent->summary().left( 20 ) ).arg( cE->summary().left( 20 ) ) );
3142 } else 3142 } else
3143 topLevelWidget()->setCaption( i18n("No conflict found") ); 3143 topLevelWidget()->setCaption( i18n("No conflict found") );
3144 return; 3144 return;
3145 3145
3146} 3146}
3147 3147
3148void CalendarView::updateTodoViews() 3148void CalendarView::updateTodoViews()
3149{ 3149{
3150 mTodoList->updateView(); 3150 mTodoList->updateView();
3151 mViewManager->currentView()->updateView(); 3151 mViewManager->currentView()->updateView();
3152 3152
3153} 3153}
3154 3154
3155 3155
3156 3156
3157void CalendarView::clearAllViews() 3157void CalendarView::clearAllViews()
3158{ 3158{
3159 mTodoList->clearList(); 3159 mTodoList->clearList();
3160 mViewManager->clearAllViews(); 3160 mViewManager->clearAllViews();
3161 SearchDialog * sd = mDialogManager->getSearchDialog(); 3161 SearchDialog * sd = mDialogManager->getSearchDialog();
3162 if ( sd ) { 3162 if ( sd ) {
3163 KOListView* kol = sd->listview(); 3163 KOListView* kol = sd->listview();
3164 if ( kol ) 3164 if ( kol )
3165 kol->clearList(); 3165 kol->clearList();
3166 } 3166 }
3167} 3167}
3168void CalendarView::updateView() 3168void CalendarView::updateView()
3169{ 3169{
3170 static bool clearallviews = false; 3170 static bool clearallviews = false;
3171 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) { 3171 if ( KOPrefs::instance()->mGlobalUpdateDisabled ) {
3172 if ( clearallviews ) { 3172 if ( clearallviews ) {
3173 clearAllViews(); 3173 clearAllViews();
3174 clearallviews = false; 3174 clearallviews = false;
3175 } 3175 }
3176 return; 3176 return;
3177 } 3177 }
3178 clearallviews = true; 3178 clearallviews = true;
3179 DateList tmpList = mNavigator->selectedDates(); 3179 DateList tmpList = mNavigator->selectedDates();
3180 3180
3181 if ( KOPrefs::instance()->mHideNonStartedTodos ) 3181 if ( KOPrefs::instance()->mHideNonStartedTodos )
3182 mTodoList->updateView(); 3182 mTodoList->updateView();
3183 // We assume that the navigator only selects consecutive days. 3183 // We assume that the navigator only selects consecutive days.
3184 updateView( tmpList.first(), tmpList.last() ); 3184 updateView( tmpList.first(), tmpList.last() );
3185} 3185}
3186 3186
3187void CalendarView::updateUnmanagedViews() 3187void CalendarView::updateUnmanagedViews()
3188{ 3188{
3189 mDateNavigator->updateDayMatrix(); 3189 mDateNavigator->updateDayMatrix();
3190} 3190}
3191 3191
3192int CalendarView::msgItemDelete(const QString name) 3192int CalendarView::msgItemDelete(const QString name)
3193{ 3193{
3194 return KMessageBox::warningContinueCancel(this,name +"\n\n"+ 3194 return KMessageBox::warningContinueCancel(this,name +"\n\n"+
3195 i18n("This item will be\npermanently deleted."), 3195 i18n("This item will be\npermanently deleted."),
3196 i18n("KO/Pi Confirmation"),i18n("Delete")); 3196 i18n("KO/Pi Confirmation"),i18n("Delete"));
3197} 3197}
3198 3198
3199 3199
3200void CalendarView::edit_cut() 3200void CalendarView::edit_cut()
3201{ 3201{
3202 Event *anEvent=0; 3202 Event *anEvent=0;
3203 3203
3204 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3204 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3205 3205
3206 if (mViewManager->currentView()->isEventView()) { 3206 if (mViewManager->currentView()->isEventView()) {
3207 if ( incidence && incidence->typeID() == eventID ) { 3207 if ( incidence && incidence->typeID() == eventID ) {
3208 anEvent = static_cast<Event *>(incidence); 3208 anEvent = static_cast<Event *>(incidence);
3209 } 3209 }
3210 } 3210 }
3211 3211
3212 if (!anEvent) { 3212 if (!anEvent) {
3213 KNotifyClient::beep(); 3213 KNotifyClient::beep();
3214 return; 3214 return;
3215 } 3215 }
3216 DndFactory factory( mCalendar ); 3216 DndFactory factory( mCalendar );
3217 factory.cutIncidence(anEvent); 3217 factory.cutIncidence(anEvent);
3218 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 3218 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
3219} 3219}
3220 3220
3221void CalendarView::edit_copy() 3221void CalendarView::edit_copy()
3222{ 3222{
3223 Event *anEvent=0; 3223 Event *anEvent=0;
3224 3224
3225 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3225 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3226 3226
3227 if (mViewManager->currentView()->isEventView()) { 3227 if (mViewManager->currentView()->isEventView()) {
3228 if ( incidence && incidence->typeID() == eventID ) { 3228 if ( incidence && incidence->typeID() == eventID ) {
3229 anEvent = static_cast<Event *>(incidence); 3229 anEvent = static_cast<Event *>(incidence);
3230 } 3230 }
3231 } 3231 }
3232 3232
3233 if (!anEvent) { 3233 if (!anEvent) {
3234 KNotifyClient::beep(); 3234 KNotifyClient::beep();
3235 return; 3235 return;
3236 } 3236 }
3237 DndFactory factory( mCalendar ); 3237 DndFactory factory( mCalendar );
3238 factory.copyIncidence(anEvent); 3238 factory.copyIncidence(anEvent);
3239} 3239}
3240 3240
3241void CalendarView::edit_paste() 3241void CalendarView::edit_paste()
3242{ 3242{
3243 QDate date = mNavigator->selectedDates().first(); 3243 QDate date = mNavigator->selectedDates().first();
3244 3244
3245 DndFactory factory( mCalendar ); 3245 DndFactory factory( mCalendar );
3246 Event *pastedEvent = (Event *)factory.pasteIncidence( date ); 3246 Event *pastedEvent = (Event *)factory.pasteIncidence( date );
3247 3247
3248 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 3248 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
3249} 3249}
3250void CalendarView::edit_global_options() 3250void CalendarView::edit_global_options()
3251{ 3251{
3252 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId; 3252 QString tz = KPimGlobalPrefs::instance()->mTimeZoneId;
3253 emit save(); 3253 emit save();
3254 emit saveStopTimer(); 3254 emit saveStopTimer();
3255 mDialogManager->showGlobalOptionsDialog(); 3255 mDialogManager->showGlobalOptionsDialog();
3256 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) { 3256 if ( tz != KPimGlobalPrefs::instance()->mTimeZoneId) {
3257 emit saveStopTimer(); 3257 emit saveStopTimer();
3258 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"), 3258 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, i18n("The timezone has changed!\nShould the calendar be reloaded\nto shift the time of the events?\nPlease read Menu: Help->FAQ:\n\"How do I change the timezone?\"\nas well!"),
3259 i18n("Timezone settings"),i18n("Reload"))) { 3259 i18n("Timezone settings"),i18n("Reload"))) {
3260 qDebug("KO: TZ reload cancelled "); 3260 qDebug("KO: TZ reload cancelled ");
3261 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3261 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
3262 return; 3262 return;
3263 } 3263 }
3264 qDebug("KO: Timezone change "); 3264 qDebug("KO: Timezone change ");
3265 loadCalendars(); 3265 loadCalendars();
3266 setModified(true); 3266 setModified(true);
3267 } 3267 }
3268 else 3268 else
3269 qDebug("KO: No tz change "); 3269 qDebug("KO: No tz change ");
3270} 3270}
3271void CalendarView::edit_options() 3271void CalendarView::edit_options()
3272{ 3272{
3273 mDialogManager->showOptionsDialog(); 3273 mDialogManager->showOptionsDialog();
3274} 3274}
3275 3275
3276 3276
3277void CalendarView::slotSelectPickerDate( QDate d) 3277void CalendarView::slotSelectPickerDate( QDate d)
3278{ 3278{
3279 mDateFrame->hide(); 3279 mDateFrame->hide();
3280 if ( mDatePickerMode == 1 ) { 3280 if ( mDatePickerMode == 1 ) {
3281 mNavigator->slotDaySelect( d ); 3281 mNavigator->slotDaySelect( d );
3282 } else if ( mDatePickerMode == 2 ) { 3282 } else if ( mDatePickerMode == 2 ) {
3283 if ( mMoveIncidence->typeID() == todoID ) { 3283 if ( mMoveIncidence->typeID() == todoID ) {
3284 Todo * to = (Todo *) mMoveIncidence; 3284 Todo * to = (Todo *) mMoveIncidence;
3285 QTime tim; 3285 QTime tim;
3286 int len = 0; 3286 int len = 0;
3287 if ( to->hasStartDate() && to->hasDueDate() ) 3287 if ( to->hasStartDate() && to->hasDueDate() )
3288 len = to->dtStart().secsTo( to->dtDue()); 3288 len = to->dtStart().secsTo( to->dtDue());
3289 if ( to->hasDueDate() ) 3289 if ( to->hasDueDate() )
3290 tim = to->dtDue().time(); 3290 tim = to->dtDue().time();
3291 else { 3291 else {
3292 tim = QTime ( 0,0,0 ); 3292 tim = QTime ( 0,0,0 );
3293 to->setFloats( true ); 3293 to->setFloats( true );
3294 to->setHasDueDate( true ); 3294 to->setHasDueDate( true );
3295 } 3295 }
3296 QDateTime dt ( d,tim ); 3296 QDateTime dt ( d,tim );
3297 to->setDtDue( dt ); 3297 to->setDtDue( dt );
3298 3298
3299 if ( to->hasStartDate() ) { 3299 if ( to->hasStartDate() ) {
3300 if ( len>0 ) 3300 if ( len>0 )
3301 to->setDtStart(to->dtDue().addSecs( -len )); 3301 to->setDtStart(to->dtDue().addSecs( -len ));
3302 else 3302 else
3303 if (to->dtStart() > to->dtDue() ) 3303 if (to->dtStart() > to->dtDue() )
3304 to->setDtStart(to->dtDue().addDays( -3 )); 3304 to->setDtStart(to->dtDue().addDays( -3 ));
3305 } 3305 }
3306 3306
3307 todoChanged( to ); 3307 todoChanged( to );
3308 } else if ( mMoveIncidence->typeID() == eventID ) { 3308 } else if ( mMoveIncidence->typeID() == eventID ) {
3309 if ( mMoveIncidence->doesRecur() ) { 3309 if ( mMoveIncidence->doesRecur() ) {
3310#if 0 3310#if 0
3311 // PENDING implement this 3311 // PENDING implement this
3312 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate ); 3312 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate );
3313 mCalendar()->addIncidence( newInc ); 3313 mCalendar()->addIncidence( newInc );
3314 if ( mMoveIncidence->typeID() == todoID ) 3314 if ( mMoveIncidence->typeID() == todoID )
3315 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED ); 3315 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED );
3316 else 3316 else
3317 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED); 3317 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED);
3318 mMoveIncidence = newInc; 3318 mMoveIncidence = newInc;
3319 3319
3320#endif 3320#endif
3321 } 3321 }
3322 QTime tim = mMoveIncidence->dtStart().time(); 3322 QTime tim = mMoveIncidence->dtStart().time();
3323 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 3323 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
3324 QDateTime dt ( d,tim ); 3324 QDateTime dt ( d,tim );
3325 mMoveIncidence->setDtStart( dt ); 3325 mMoveIncidence->setDtStart( dt );
3326 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 3326 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
3327 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 3327 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
3328 } else if ( mMoveIncidence->typeID() == journalID ) { 3328 } else if ( mMoveIncidence->typeID() == journalID ) {
3329 QTime tim = mMoveIncidence->dtStart().time(); 3329 QTime tim = mMoveIncidence->dtStart().time();
3330 QDateTime dt ( d,tim ); 3330 QDateTime dt ( d,tim );
3331 mMoveIncidence->setDtStart( dt ); 3331 mMoveIncidence->setDtStart( dt );
3332 updateView(); 3332 updateView();
3333 } 3333 }
3334 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 3334 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
3335 } 3335 }
3336} 3336}
3337 3337
3338void CalendarView::removeCategories() 3338void CalendarView::removeCategories()
3339{ 3339{
3340 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 3340 QPtrList<Incidence> incList = mCalendar->rawIncidences();
3341 QStringList catList = KOPrefs::instance()->mCustomCategories; 3341 QStringList catList = KOPrefs::instance()->mCustomCategories;
3342 QStringList catIncList; 3342 QStringList catIncList;
3343 QStringList newCatList; 3343 QStringList newCatList;
3344 Incidence* inc = incList.first(); 3344 Incidence* inc = incList.first();
3345 uint i; 3345 uint i;
3346 while ( inc ) { 3346 while ( inc ) {
3347 newCatList.clear(); 3347 newCatList.clear();
3348 catIncList = inc->categories() ; 3348 catIncList = inc->categories() ;
3349 for( i = 0; i< catIncList.count(); ++i ) { 3349 for( i = 0; i< catIncList.count(); ++i ) {
3350 if ( catList.contains (catIncList[i])) 3350 if ( catList.contains (catIncList[i]))
3351 newCatList.append( catIncList[i] ); 3351 newCatList.append( catIncList[i] );
3352 } 3352 }
3353 newCatList.sort(); 3353 newCatList.sort();
3354 inc->setCategories( newCatList.join(",") ); 3354 inc->setCategories( newCatList.join(",") );
3355 inc = incList.next(); 3355 inc = incList.next();
3356 } 3356 }
3357} 3357}
3358 3358
3359int CalendarView::addCategories() 3359int CalendarView::addCategories()
3360{ 3360{
3361 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 3361 QPtrList<Incidence> incList = mCalendar->rawIncidences();
3362 QStringList catList = KOPrefs::instance()->mCustomCategories; 3362 QStringList catList = KOPrefs::instance()->mCustomCategories;
3363 QStringList catIncList; 3363 QStringList catIncList;
3364 Incidence* inc = incList.first(); 3364 Incidence* inc = incList.first();
3365 uint i; 3365 uint i;
3366 int count = 0; 3366 int count = 0;
3367 while ( inc ) { 3367 while ( inc ) {
3368 catIncList = inc->categories() ; 3368 catIncList = inc->categories() ;
3369 for( i = 0; i< catIncList.count(); ++i ) { 3369 for( i = 0; i< catIncList.count(); ++i ) {
3370 if ( !catList.contains (catIncList[i])) { 3370 if ( !catList.contains (catIncList[i])) {
3371 catList.append( catIncList[i] ); 3371 catList.append( catIncList[i] );
3372 //qDebug("add cat %s ", catIncList[i].latin1()); 3372 //qDebug("add cat %s ", catIncList[i].latin1());
3373 ++count; 3373 ++count;
3374 } 3374 }
3375 } 3375 }
3376 inc = incList.next(); 3376 inc = incList.next();
3377 } 3377 }
3378 catList.sort(); 3378 catList.sort();
3379 KOPrefs::instance()->mCustomCategories = catList; 3379 KOPrefs::instance()->mCustomCategories = catList;
3380 return count; 3380 return count;
3381} 3381}
3382 3382
3383void CalendarView::editCategories() 3383void CalendarView::editCategories()
3384{ 3384{
3385 qDebug("CalendarView::editCategories() "); 3385 qDebug("CalendarView::editCategories() ");
3386 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this ); 3386 KPIM::CategoryEditDialog ced (KOPrefs::instance(),this );
3387 ced.exec(); 3387 ced.exec();
3388} 3388}
3389void CalendarView::manageCategories() 3389void CalendarView::manageCategories()
3390{ 3390{
3391 KOCatPrefs* cp = new KOCatPrefs(); 3391 KOCatPrefs* cp = new KOCatPrefs();
3392 cp->show(); 3392 cp->show();
3393 int w =cp->sizeHint().width() ; 3393 int w =cp->sizeHint().width() ;
3394 int h = cp->sizeHint().height() ; 3394 int h = cp->sizeHint().height() ;
3395 int dw = QApplication::desktop()->width(); 3395 int dw = QApplication::desktop()->width();
3396 int dh = QApplication::desktop()->height(); 3396 int dh = QApplication::desktop()->height();
3397 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 3397 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
3398 if ( !cp->exec() ) { 3398 if ( !cp->exec() ) {
3399 delete cp; 3399 delete cp;
3400 return; 3400 return;
3401 } 3401 }
3402 int count = 0; 3402 int count = 0;
3403 if ( cp->addCat() ) { 3403 if ( cp->addCat() ) {
3404 count = addCategories(); 3404 count = addCategories();
3405 if ( count ) { 3405 if ( count ) {
3406 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); 3406 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! "));
3407 writeSettings(); 3407 writeSettings();
3408 } else 3408 } else
3409 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! ")); 3409 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! "));
3410 } else { 3410 } else {
3411 removeCategories(); 3411 removeCategories();
3412 updateView(); 3412 updateView();
3413 } 3413 }
3414 delete cp; 3414 delete cp;
3415} 3415}
3416 3416
3417void CalendarView::beamIncidence(Incidence * Inc) 3417void CalendarView::beamIncidence(Incidence * Inc)
3418{ 3418{
3419 QPtrList<Incidence> delSel ; 3419 QPtrList<Incidence> delSel ;
3420 delSel.append(Inc); 3420 delSel.append(Inc);
3421 beamIncidenceList( delSel ); 3421 beamIncidenceList( delSel );
3422} 3422}
3423void CalendarView::beamCalendar() 3423void CalendarView::beamCalendar()
3424{ 3424{
3425 QPtrList<Incidence> delSel = mCalendar->rawIncidences(); 3425 QPtrList<Incidence> delSel = mCalendar->rawIncidences();
3426 //qDebug("beamCalendar() "); 3426 //qDebug("beamCalendar() ");
3427 beamIncidenceList( delSel ); 3427 beamIncidenceList( delSel );
3428} 3428}
3429void CalendarView::beamFilteredCalendar() 3429void CalendarView::beamFilteredCalendar()
3430{ 3430{
3431 QPtrList<Incidence> delSel = mCalendar->incidences(); 3431 QPtrList<Incidence> delSel = mCalendar->incidences();
3432 //qDebug("beamFilteredCalendar() "); 3432 //qDebug("beamFilteredCalendar() ");
3433 beamIncidenceList( delSel ); 3433 beamIncidenceList( delSel );
3434} 3434}
3435void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) 3435void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
3436{ 3436{
3437 3437
3438 KOBeamPrefs beamDialog; 3438 KOBeamPrefs beamDialog;
3439 if ( beamDialog.exec () == QDialog::Rejected ) 3439 if ( beamDialog.exec () == QDialog::Rejected )
3440 return; 3440 return;
3441#ifdef DESKTOP_VERSION 3441#ifdef DESKTOP_VERSION
3442 QString fn = locateLocal( "tmp", "kopibeamfile" ); 3442 QString fn = locateLocal( "tmp", "kopibeamfile" );
3443#else 3443#else
3444 QString fn = "/tmp/kopibeamfile"; 3444 QString fn = "/tmp/kopibeamfile";
3445#endif 3445#endif
3446 QString mes; 3446 QString mes;
3447 bool createbup = true; 3447 bool createbup = true;
3448 if ( createbup ) { 3448 if ( createbup ) {
3449 QString description = "\n"; 3449 QString description = "\n";
3450 CalendarLocal* cal = new CalendarLocal(); 3450 CalendarLocal* cal = new CalendarLocal();
3451 if ( beamDialog.beamLocal() ) 3451 if ( beamDialog.beamLocal() )
3452 cal->setLocalTime(); 3452 cal->setLocalTime();
3453 else 3453 else
3454 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 3454 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
3455 Incidence *incidence = delSel.first(); 3455 Incidence *incidence = delSel.first();
3456 bool addText = false; 3456 bool addText = false;
3457 if ( delSel.count() < 10 ) 3457 if ( delSel.count() < 10 )
3458 addText = true; 3458 addText = true;
3459 else { 3459 else {
3460 description.sprintf(i18n(" %d items?"),delSel.count() ); 3460 description.sprintf(i18n(" %d items?"),delSel.count() );
3461 } 3461 }
3462 while ( incidence ) { 3462 while ( incidence ) {
3463 Incidence *in = incidence->clone(); 3463 Incidence *in = incidence->clone();
3464 if ( ! in->summary().isEmpty() ) { 3464 if ( ! in->summary().isEmpty() ) {
3465 in->setDescription(""); 3465 in->setDescription("");
3466 } else { 3466 } else {
3467 in->setSummary( in->description().left(20)); 3467 in->setSummary( in->description().left(20));
3468 in->setDescription(""); 3468 in->setDescription("");
3469 } 3469 }
3470 if ( addText ) 3470 if ( addText )
3471 description += in->summary() + "\n"; 3471 description += in->summary() + "\n";
3472 cal->addIncidence( in ); 3472 cal->addIncidence( in );
3473 incidence = delSel.next(); 3473 incidence = delSel.next();
3474 } 3474 }
3475 if ( beamDialog.beamVcal() ) { 3475 if ( beamDialog.beamVcal() ) {
3476 fn += ".vcs"; 3476 fn += ".vcs";
3477 FileStorage storage( cal, fn, new VCalFormat ); 3477 FileStorage storage( cal, fn, new VCalFormat );
3478 storage.save(); 3478 storage.save();
3479 } else { 3479 } else {
3480 fn += ".ics"; 3480 fn += ".ics";
3481 FileStorage storage( cal, fn, new ICalFormat( ) ); 3481 FileStorage storage( cal, fn, new ICalFormat( ) );
3482 storage.save(); 3482 storage.save();
3483 } 3483 }
3484 delete cal; 3484 delete cal;
3485 mes = i18n("KO/Pi: Ready for beaming"); 3485 mes = i18n("KO/Pi: Ready for beaming");
3486 topLevelWidget()->setCaption(mes); 3486 topLevelWidget()->setCaption(mes);
3487 KApplication::convert2latin1( fn ); 3487 KApplication::convert2latin1( fn );
3488#ifndef DESKTOP_VERSION 3488#ifndef DESKTOP_VERSION
3489 Ir *ir = new Ir( this ); 3489 Ir *ir = new Ir( this );
3490 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 3490 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
3491 ir->send( fn, description, "text/x-vCalendar" ); 3491 ir->send( fn, description, "text/x-vCalendar" );
3492#endif 3492#endif
3493 } 3493 }
3494} 3494}
3495 3495
3496#ifndef DESKTOP_VERSION 3496#ifndef DESKTOP_VERSION
3497void CalendarView::beamDone( Ir *ir ) 3497void CalendarView::beamDone( Ir *ir )
3498{ 3498{
3499 delete ir; 3499 delete ir;
3500 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") ); 3500 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") );
3501 topLevelWidget()->raise(); 3501 topLevelWidget()->raise();
3502} 3502}
3503#else 3503#else
3504void CalendarView::beamDone( Ir *){;} 3504void CalendarView::beamDone( Ir *){;}
3505#endif 3505#endif
3506void CalendarView::moveIncidence(Incidence * inc ) 3506void CalendarView::moveIncidence(Incidence * inc )
3507{ 3507{
3508 if ( !inc ) return; 3508 if ( !inc ) return;
3509 showDatePickerPopup(); 3509 showDatePickerPopup();
3510 mDatePickerMode = 2; 3510 mDatePickerMode = 2;
3511 mMoveIncidence = inc ; 3511 mMoveIncidence = inc ;
3512 QDate da; 3512 QDate da;
3513 if ( mMoveIncidence->typeID() == todoID ) { 3513 if ( mMoveIncidence->typeID() == todoID ) {
3514 Todo * to = (Todo *) mMoveIncidence; 3514 Todo * to = (Todo *) mMoveIncidence;
3515 if ( to->hasDueDate() ) 3515 if ( to->hasDueDate() )
3516 da = to->dtDue().date(); 3516 da = to->dtDue().date();
3517 else 3517 else
3518 da = QDate::currentDate(); 3518 da = QDate::currentDate();
3519 } else { 3519 } else {
3520 da = mMoveIncidence->dtStart().date(); 3520 da = mMoveIncidence->dtStart().date();
3521 } 3521 }
3522 //PENDING set date for recurring incidence to date of recurrence 3522 //PENDING set date for recurring incidence to date of recurrence
3523 //mMoveIncidenceOldDate; 3523 //mMoveIncidenceOldDate;
3524 mDatePicker->setDate( da ); 3524 mDatePicker->setDate( da );
3525} 3525}
3526void CalendarView::showDatePickerPopup() 3526void CalendarView::showDatePickerPopup()
3527{ 3527{
3528 if ( mDateFrame->isVisible() ) 3528 if ( mDateFrame->isVisible() )
3529 mDateFrame->hide(); 3529 mDateFrame->hide();
3530 else { 3530 else {
3531 int offX = 0, offY = 0; 3531 int offX = 0, offY = 0;
3532#ifdef DESKTOP_VERSION 3532#ifdef DESKTOP_VERSION
3533 int w =mDatePicker->sizeHint().width() ; 3533 int w =mDatePicker->sizeHint().width() ;
3534 int h = mDatePicker->sizeHint().height() ; 3534 int h = mDatePicker->sizeHint().height() ;
3535 int dw = topLevelWidget()->width(); 3535 int dw = topLevelWidget()->width();
3536 int dh = topLevelWidget()->height(); 3536 int dh = topLevelWidget()->height();
3537 offX = topLevelWidget()->x(); 3537 offX = topLevelWidget()->x();
3538 offY = topLevelWidget()->y(); 3538 offY = topLevelWidget()->y();
3539#else 3539#else
3540 int w =mDatePicker->sizeHint().width() ; 3540 int w =mDatePicker->sizeHint().width() ;
3541 int h = mDatePicker->sizeHint().height() ; 3541 int h = mDatePicker->sizeHint().height() ;
3542 int dw = QApplication::desktop()->width(); 3542 int dw = QApplication::desktop()->width();
3543 int dh = QApplication::desktop()->height(); 3543 int dh = QApplication::desktop()->height();
3544#endif 3544#endif
3545 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h ); 3545 mDateFrame->setGeometry( (dw-w)/2+offX, (dh - h )/2+offY ,w,h );
3546 mDateFrame->show(); 3546 mDateFrame->show();
3547 } 3547 }
3548} 3548}
3549void CalendarView::showDatePicker( ) 3549void CalendarView::showDatePicker( )
3550{ 3550{
3551 showDatePickerPopup(); 3551 showDatePickerPopup();
3552 mDatePickerMode = 1; 3552 mDatePickerMode = 1;
3553 mDatePicker->setDate( mNavigator->selectedDates().first() ); 3553 mDatePicker->setDate( mNavigator->selectedDates().first() );
3554} 3554}
3555 3555
3556void CalendarView::showEventEditor() 3556void CalendarView::showEventEditor()
3557{ 3557{
3558#ifdef DESKTOP_VERSION 3558#ifdef DESKTOP_VERSION
3559 int x,y,w,h; 3559 int x,y,w,h;
3560 x = mEventEditor->geometry().x(); 3560 x = mEventEditor->geometry().x();
3561 y = mEventEditor->geometry().y(); 3561 y = mEventEditor->geometry().y();
3562 w = mEventEditor->width(); 3562 w = mEventEditor->width();
3563 h = mEventEditor->height(); 3563 h = mEventEditor->height();
3564 mEventEditor->show(); 3564 mEventEditor->show();
3565 mEventEditor->setGeometry(x,y,w,h); 3565 mEventEditor->setGeometry(x,y,w,h);
3566#else 3566#else
3567 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) { 3567 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) {
3568 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3568 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3569 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() ); 3569 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() );
3570 qApp->processEvents(); 3570 qApp->processEvents();
3571 delete mEventEditor; 3571 delete mEventEditor;
3572 mEventEditor = mDialogManager->getEventEditor(); 3572 mEventEditor = mDialogManager->getEventEditor();
3573 topLevelWidget()->setCaption( i18n("") ); 3573 topLevelWidget()->setCaption( i18n("") );
3574 } 3574 }
3575 mEventEditor->showMaximized(); 3575 mEventEditor->showMaximized();
3576#endif 3576#endif
3577} 3577}
3578void CalendarView::showTodoEditor() 3578void CalendarView::showTodoEditor()
3579{ 3579{
3580#ifdef DESKTOP_VERSION 3580#ifdef DESKTOP_VERSION
3581 int x,y,w,h; 3581 int x,y,w,h;
3582 x = mTodoEditor->geometry().x(); 3582 x = mTodoEditor->geometry().x();
3583 y = mTodoEditor->geometry().y(); 3583 y = mTodoEditor->geometry().y();
3584 w = mTodoEditor->width(); 3584 w = mTodoEditor->width();
3585 h = mTodoEditor->height(); 3585 h = mTodoEditor->height();
3586 mTodoEditor->show(); 3586 mTodoEditor->show();
3587 mTodoEditor->setGeometry(x,y,w,h); 3587 mTodoEditor->setGeometry(x,y,w,h);
3588#else 3588#else
3589 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) { 3589 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) {
3590 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 3590 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
3591 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() ); 3591 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() );
3592 qApp->processEvents(); 3592 qApp->processEvents();
3593 delete mTodoEditor; 3593 delete mTodoEditor;
3594 mTodoEditor = mDialogManager->getTodoEditor(); 3594 mTodoEditor = mDialogManager->getTodoEditor();
3595 topLevelWidget()->setCaption( i18n("") ); 3595 topLevelWidget()->setCaption( i18n("") );
3596 } 3596 }
3597 mTodoEditor->showMaximized(); 3597 mTodoEditor->showMaximized();
3598#endif 3598#endif
3599} 3599}
3600 3600
3601void CalendarView::cloneIncidence() 3601void CalendarView::cloneIncidence()
3602{ 3602{
3603 Incidence *incidence = currentSelection(); 3603 Incidence *incidence = currentSelection();
3604 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3604 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3605 if ( incidence ) { 3605 if ( incidence ) {
3606 cloneIncidence(incidence); 3606 cloneIncidence(incidence);
3607 } 3607 }
3608} 3608}
3609void CalendarView::moveIncidence() 3609void CalendarView::moveIncidence()
3610{ 3610{
3611 Incidence *incidence = currentSelection(); 3611 Incidence *incidence = currentSelection();
3612 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3612 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3613 if ( incidence ) { 3613 if ( incidence ) {
3614 moveIncidence(incidence); 3614 moveIncidence(incidence);
3615 } 3615 }
3616} 3616}
3617void CalendarView::beamIncidence() 3617void CalendarView::beamIncidence()
3618{ 3618{
3619 Incidence *incidence = currentSelection(); 3619 Incidence *incidence = currentSelection();
3620 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3620 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3621 if ( incidence ) { 3621 if ( incidence ) {
3622 beamIncidence(incidence); 3622 beamIncidence(incidence);
3623 } 3623 }
3624} 3624}
3625void CalendarView::toggleCancelIncidence() 3625void CalendarView::toggleCancelIncidence()
3626{ 3626{
3627 Incidence *incidence = currentSelection(); 3627 Incidence *incidence = currentSelection();
3628 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3628 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3629 if ( incidence ) { 3629 if ( incidence ) {
3630 cancelIncidence(incidence); 3630 cancelIncidence(incidence);
3631 } 3631 }
3632} 3632}
3633 3633
3634 3634
3635void CalendarView::cancelIncidence(Incidence * inc ) 3635void CalendarView::cancelIncidence(Incidence * inc )
3636{ 3636{
3637 inc->setCancelled( ! inc->cancelled() ); 3637 inc->setCancelled( ! inc->cancelled() );
3638 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 3638 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
3639 updateView(); 3639 updateView();
3640} 3640}
3641void CalendarView::cloneIncidence(Incidence * orgInc ) 3641void CalendarView::cloneIncidence(Incidence * orgInc )
3642{ 3642{
3643 Incidence * newInc = orgInc->clone(); 3643 Incidence * newInc = orgInc->clone();
3644 newInc->recreate(); 3644 newInc->recreate();
3645 3645
3646 if ( newInc->typeID() == todoID ) { 3646 if ( newInc->typeID() == todoID ) {
3647 Todo* t = (Todo*) newInc; 3647 Todo* t = (Todo*) newInc;
3648 bool cloneSub = false; 3648 bool cloneSub = false;
3649 if ( orgInc->relations().count() ) { 3649 if ( orgInc->relations().count() ) {
3650 int result = KMessageBox::warningYesNoCancel(this, 3650 int result = KMessageBox::warningYesNoCancel(this,
3651 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 ) ), 3651 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 ) ),
3652 i18n("Todo has subtodos"), 3652 i18n("Todo has subtodos"),
3653 i18n("Yes"), 3653 i18n("Yes"),
3654 i18n("No")); 3654 i18n("No"));
3655 3655
3656 if ( result == KMessageBox::Cancel ) { 3656 if ( result == KMessageBox::Cancel ) {
3657 delete t; 3657 delete t;
3658 return; 3658 return;
3659 } 3659 }
3660 if (result == KMessageBox::Yes) cloneSub = true; 3660 if (result == KMessageBox::Yes) cloneSub = true;
3661 } 3661 }
3662 showTodoEditor(); 3662 showTodoEditor();
3663 mTodoEditor->editTodo( t ); 3663 mTodoEditor->editTodo( t );
3664 if ( mTodoEditor->exec() ) { 3664 if ( mTodoEditor->exec() ) {
3665 if ( cloneSub ) { 3665 if ( cloneSub ) {
3666 orgInc->cloneRelations( t ); 3666 orgInc->cloneRelations( t );
3667 mCalendar->addIncidenceBranch( t ); 3667 mCalendar->addIncidenceBranch( t );
3668 updateView(); 3668 updateView();
3669 3669
3670 } else { 3670 } else {
3671 mCalendar->addTodo( t ); 3671 mCalendar->addTodo( t );
3672 updateView(); 3672 updateView();
3673 } 3673 }
3674 } else { 3674 } else {
3675 delete t; 3675 delete t;
3676 } 3676 }
3677 } 3677 }
3678 else if ( newInc->typeID() == eventID ) { 3678 else if ( newInc->typeID() == eventID ) {
3679 Event* e = (Event*) newInc; 3679 Event* e = (Event*) newInc;
3680 showEventEditor(); 3680 showEventEditor();
3681 mEventEditor->editEvent( e ); 3681 mEventEditor->editEvent( e );
3682 if ( mEventEditor->exec() ) { 3682 if ( mEventEditor->exec() ) {
3683 mCalendar->addEvent( e ); 3683 mCalendar->addEvent( e );
3684 updateView(); 3684 updateView();
3685 } else { 3685 } else {
3686 delete e; 3686 delete e;
3687 } 3687 }
3688 } else if ( newInc->typeID() == journalID ) { 3688 } else if ( newInc->typeID() == journalID ) {
3689 mCalendar->addJournal( (Journal*) newInc ); 3689 mCalendar->addJournal( (Journal*) newInc );
3690 editJournal( (Journal*) newInc ); 3690 editJournal( (Journal*) newInc );
3691 } 3691 }
3692 setActiveWindow(); 3692 setActiveWindow();
3693} 3693}
3694 3694
3695void CalendarView::newEvent() 3695void CalendarView::newEvent()
3696{ 3696{
3697 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 3697 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
3698 KOAgendaView *aView = mViewManager->agendaView(); 3698 KOAgendaView *aView = mViewManager->agendaView();
3699 if (aView) { 3699 if (aView) {
3700 if (aView->selectionStart().isValid()) { 3700 if (aView->selectionStart().isValid()) {
3701 if (aView->selectedIsAllDay()) { 3701 if (aView->selectedIsAllDay()) {
3702 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 3702 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
3703 } else { 3703 } else {
3704 newEvent(aView->selectionStart(),aView->selectionEnd()); 3704 newEvent(aView->selectionStart(),aView->selectionEnd());
3705 } 3705 }
3706 return; 3706 return;
3707 } 3707 }
3708 } 3708 }
3709 3709
3710 QDate date = mNavigator->selectedDates().first(); 3710 QDate date = mNavigator->selectedDates().first();
3711#if 0 3711#if 0
3712 QDateTime current = QDateTime::currentDateTime(); 3712 QDateTime current = QDateTime::currentDateTime();
3713 if ( date <= current.date() ) { 3713 if ( date <= current.date() ) {
3714 int hour = current.time().hour() +1; 3714 int hour = current.time().hour() +1;
3715 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 3715 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
3716 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3716 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3717 } else 3717 } else
3718#endif 3718#endif
3719 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 3719 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
3720 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 3720 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
3721 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 3721 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
3722} 3722}
3723 3723
3724void CalendarView::newEvent(QDateTime fh) 3724void CalendarView::newEvent(QDateTime fh)
3725{ 3725{
3726 newEvent(fh, 3726 newEvent(fh,
3727 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 3727 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
3728} 3728}
3729 3729
3730void CalendarView::newEvent(QDate dt) 3730void CalendarView::newEvent(QDate dt)
3731{ 3731{
3732 newEvent(QDateTime(dt, QTime(0,0,0)), 3732 newEvent(QDateTime(dt, QTime(0,0,0)),
3733 QDateTime(dt, QTime(0,0,0)), true); 3733 QDateTime(dt, QTime(0,0,0)), true);
3734} 3734}
3735void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint) 3735void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint)
3736{ 3736{
3737 newEvent(fromHint, toHint, false); 3737 newEvent(fromHint, toHint, false);
3738} 3738}
3739void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 3739void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
3740{ 3740{
3741 3741
3742 showEventEditor(); 3742 showEventEditor();
3743 mEventEditor->newEvent(fromHint,toHint,allDay); 3743 mEventEditor->newEvent(fromHint,toHint,allDay);
3744 if ( mFilterView->filtersEnabled() ) { 3744 if ( mFilterView->filtersEnabled() ) {
3745 CalFilter *filter = mFilterView->selectedFilter(); 3745 CalFilter *filter = mFilterView->selectedFilter();
3746 if (filter && filter->showCategories()) { 3746 if (filter && filter->showCategories()) {
3747 mEventEditor->setCategories(filter->categoryList().join(",") ); 3747 mEventEditor->setCategories(filter->categoryList().join(",") );
3748 } 3748 }
3749 if ( filter ) 3749 if ( filter )
3750 mEventEditor->setSecrecy( filter->getSecrecy() ); 3750 mEventEditor->setSecrecy( filter->getSecrecy() );
3751 } 3751 }
3752 mEventEditor->exec(); 3752 mEventEditor->exec();
3753 setActiveWindow(); 3753 setActiveWindow();
3754} 3754}
3755void CalendarView::todoAdded(Todo * t) 3755void CalendarView::todoAdded(Todo * t)
3756{ 3756{
3757 3757
3758 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 3758 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
3759 updateTodoViews(); 3759 updateTodoViews();
3760} 3760}
3761void CalendarView::todoChanged(Todo * t) 3761void CalendarView::todoChanged(Todo * t)
3762{ 3762{
3763 emit todoModified( t, 4 ); 3763 emit todoModified( t, 4 );
3764 // updateTodoViews(); 3764 // updateTodoViews();
3765} 3765}
3766void CalendarView::todoToBeDeleted(Todo *) 3766void CalendarView::todoToBeDeleted(Todo *)
3767{ 3767{
3768 //qDebug("todoToBeDeleted(Todo *) "); 3768 //qDebug("todoToBeDeleted(Todo *) ");
3769 updateTodoViews(); 3769 updateTodoViews();
3770} 3770}
3771void CalendarView::todoDeleted() 3771void CalendarView::todoDeleted()
3772{ 3772{
3773 //qDebug(" todoDeleted()"); 3773 //qDebug(" todoDeleted()");
3774 updateTodoViews(); 3774 updateTodoViews();
3775} 3775}
3776 3776
3777 3777
3778void CalendarView::newTodoDateTime( QDateTime dt, bool allday ) 3778void CalendarView::newTodoDateTime( QDateTime dt, bool allday )
3779{ 3779{
3780 showTodoEditor(); 3780 showTodoEditor();
3781 mTodoEditor->newTodo(dt,0,allday); 3781 mTodoEditor->newTodo(dt,0,allday);
3782 if ( mFilterView->filtersEnabled() ) { 3782 if ( mFilterView->filtersEnabled() ) {
3783 CalFilter *filter = mFilterView->selectedFilter(); 3783 CalFilter *filter = mFilterView->selectedFilter();
3784 if (filter && filter->showCategories()) { 3784 if (filter && filter->showCategories()) {
3785 mTodoEditor->setCategories(filter->categoryList().join(",") ); 3785 mTodoEditor->setCategories(filter->categoryList().join(",") );
3786 } 3786 }
3787 if ( filter ) 3787 if ( filter )
3788 mTodoEditor->setSecrecy( filter->getSecrecy() ); 3788 mTodoEditor->setSecrecy( filter->getSecrecy() );
3789 } 3789 }
3790 mTodoEditor->exec(); 3790 mTodoEditor->exec();
3791 setActiveWindow(); 3791 setActiveWindow();
3792} 3792}
3793 3793
3794void CalendarView::newTodo() 3794void CalendarView::newTodo()
3795{ 3795{
3796 newTodoDateTime( QDateTime(),true ); 3796 newTodoDateTime( QDateTime(),true );
3797} 3797}
3798 3798
3799void CalendarView::newSubTodo() 3799void CalendarView::newSubTodo()
3800{ 3800{
3801 Todo *todo = selectedTodo(); 3801 Todo *todo = selectedTodo();
3802 if ( todo ) newSubTodo( todo ); 3802 if ( todo ) newSubTodo( todo );
3803} 3803}
3804 3804
3805void CalendarView::newSubTodo(Todo *parentEvent) 3805void CalendarView::newSubTodo(Todo *parentEvent)
3806{ 3806{
3807 3807
3808 showTodoEditor(); 3808 showTodoEditor();
3809 mTodoEditor->newTodo(QDateTime(),parentEvent,true); 3809 mTodoEditor->newTodo(QDateTime(),parentEvent,true);
3810 mTodoEditor->exec(); 3810 mTodoEditor->exec();
3811 setActiveWindow(); 3811 setActiveWindow();
3812} 3812}
3813 3813
3814void CalendarView::newFloatingEvent() 3814void CalendarView::newFloatingEvent()
3815{ 3815{
3816 DateList tmpList = mNavigator->selectedDates(); 3816 DateList tmpList = mNavigator->selectedDates();
3817 QDate date = tmpList.first(); 3817 QDate date = tmpList.first();
3818 3818
3819 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 3819 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
3820 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 3820 QDateTime( date, QTime( 12, 0, 0 ) ), true );
3821} 3821}
3822 3822
3823 3823
3824void CalendarView::editEvent( Event *event ) 3824void CalendarView::editEvent( Event *event )
3825{ 3825{
3826 3826
3827 if ( !event ) return; 3827 if ( !event ) return;
3828 if ( event->isReadOnly() ) { 3828 if ( event->isReadOnly() ) {
3829 showEvent( event ); 3829 showEvent( event );
3830 return; 3830 return;
3831 } 3831 }
3832 showEventEditor(); 3832 showEventEditor();
3833 mEventEditor->editEvent( event , mFlagEditDescription); 3833 mEventEditor->editEvent( event , mFlagEditDescription);
3834 mEventEditor->exec(); 3834 mEventEditor->exec();
3835 setActiveWindow(); 3835 setActiveWindow();
3836 3836
3837} 3837}
3838void CalendarView::editJournal( Journal *jour ) 3838void CalendarView::editJournal( Journal *jour )
3839{ 3839{
3840 if ( !jour ) return; 3840 if ( !jour ) return;
3841 mDialogManager->hideSearchDialog(); 3841 mDialogManager->hideSearchDialog();
3842 mViewManager->showJournalView(); 3842 mViewManager->showJournalView();
3843 mNavigator->slotDaySelect( jour->dtStart().date() ); 3843 mNavigator->slotDaySelect( jour->dtStart().date() );
3844} 3844}
3845void CalendarView::editTodo( Todo *todo ) 3845void CalendarView::editTodo( Todo *todo )
3846{ 3846{
3847 if ( !todo ) return; 3847 if ( !todo ) return;
3848 3848
3849 if ( todo->isReadOnly() ) { 3849 if ( todo->isReadOnly() ) {
3850 showTodo( todo ); 3850 showTodo( todo );
3851 return; 3851 return;
3852 } 3852 }
3853 showTodoEditor(); 3853 showTodoEditor();
3854 mTodoEditor->editTodo( todo ,mFlagEditDescription); 3854 mTodoEditor->editTodo( todo ,mFlagEditDescription);
3855 mTodoEditor->exec(); 3855 mTodoEditor->exec();
3856 setActiveWindow(); 3856 setActiveWindow();
3857 3857
3858} 3858}
3859 3859
3860KOEventViewerDialog* CalendarView::getEventViewerDialog() 3860KOEventViewerDialog* CalendarView::getEventViewerDialog()
3861{ 3861{
3862 if ( !mEventViewerDialog ) { 3862 if ( !mEventViewerDialog ) {
3863 mEventViewerDialog = new KOEventViewerDialog(0); 3863 mEventViewerDialog = new KOEventViewerDialog(0);
3864 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 3864 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
3865 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 3865 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
3866 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 3866 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
3867 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 3867 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
3868 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 3868 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
3869 viewManager(), SLOT( showAgendaView( bool ) ) ); 3869 viewManager(), SLOT( showAgendaView( bool ) ) );
3870 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()), 3870 connect( mEventViewerDialog, SIGNAL(signalViewerClosed()),
3871 this, SLOT( slotViewerClosed() ) ); 3871 this, SLOT( slotViewerClosed() ) );
3872 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ), 3872 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ),
3873 this, SLOT( todoChanged(Todo *) ) ); 3873 this, SLOT( todoChanged(Todo *) ) );
3874 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) )); 3874 connect( mEventViewerDialog, SIGNAL( showIncidence( QString ) ),SLOT( showIncidence( QString ) ));
3875 mEventViewerDialog->resize( 640, 480 ); 3875 mEventViewerDialog->resize( 640, 480 );
3876 3876
3877 } 3877 }
3878 return mEventViewerDialog; 3878 return mEventViewerDialog;
3879} 3879}
3880void CalendarView::showEvent(Event *event) 3880void CalendarView::showEvent(Event *event)
3881{ 3881{
3882 getEventViewerDialog()->setEvent(event); 3882 getEventViewerDialog()->setEvent(event);
3883 getEventViewerDialog()->showMe(); 3883 getEventViewerDialog()->showMe();
3884} 3884}
3885 3885
3886void CalendarView::showTodo(Todo *event) 3886void CalendarView::showTodo(Todo *event)
3887{ 3887{
3888 getEventViewerDialog()->setTodo(event); 3888 getEventViewerDialog()->setTodo(event);
3889 getEventViewerDialog()->showMe(); 3889 getEventViewerDialog()->showMe();
3890} 3890}
3891void CalendarView::showJournal( Journal *jour ) 3891void CalendarView::showJournal( Journal *jour )
3892{ 3892{
3893 getEventViewerDialog()->setJournal(jour); 3893 getEventViewerDialog()->setJournal(jour);
3894 getEventViewerDialog()->showMe(); 3894 getEventViewerDialog()->showMe();
3895 3895
3896} 3896}
3897// void CalendarView::todoModified (Todo *event, int changed) 3897// void CalendarView::todoModified (Todo *event, int changed)
3898// { 3898// {
3899// // if (mDialogList.find (event) != mDialogList.end ()) { 3899// // if (mDialogList.find (event) != mDialogList.end ()) {
3900// // kdDebug() << "Todo modified and open" << endl; 3900// // kdDebug() << "Todo modified and open" << endl;
3901// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; 3901// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event];
3902// // temp->modified (changed); 3902// // temp->modified (changed);
3903 3903
3904// // } 3904// // }
3905 3905
3906// mViewManager->updateView(); 3906// mViewManager->updateView();
3907// } 3907// }
3908 3908
3909void CalendarView::appointment_show() 3909void CalendarView::appointment_show()
3910{ 3910{
3911 Event *anEvent = 0; 3911 Event *anEvent = 0;
3912 3912
3913 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3913 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3914 3914
3915 if (mViewManager->currentView()->isEventView()) { 3915 if (mViewManager->currentView()->isEventView()) {
3916 if ( incidence && incidence->typeID() == eventID ) { 3916 if ( incidence && incidence->typeID() == eventID ) {
3917 anEvent = static_cast<Event *>(incidence); 3917 anEvent = static_cast<Event *>(incidence);
3918 } 3918 }
3919 } 3919 }
3920 3920
3921 if (!anEvent) { 3921 if (!anEvent) {
3922 KNotifyClient::beep(); 3922 KNotifyClient::beep();
3923 return; 3923 return;
3924 } 3924 }
3925 3925
3926 showEvent(anEvent); 3926 showEvent(anEvent);
3927} 3927}
3928 3928
3929void CalendarView::appointment_edit() 3929void CalendarView::appointment_edit()
3930{ 3930{
3931 Event *anEvent = 0; 3931 Event *anEvent = 0;
3932 3932
3933 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3933 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3934 3934
3935 if (mViewManager->currentView()->isEventView()) { 3935 if (mViewManager->currentView()->isEventView()) {
3936 if ( incidence && incidence->typeID() == eventID ) { 3936 if ( incidence && incidence->typeID() == eventID ) {
3937 anEvent = static_cast<Event *>(incidence); 3937 anEvent = static_cast<Event *>(incidence);
3938 } 3938 }
3939 } 3939 }
3940 3940
3941 if (!anEvent) { 3941 if (!anEvent) {
3942 KNotifyClient::beep(); 3942 KNotifyClient::beep();
3943 return; 3943 return;
3944 } 3944 }
3945 3945
3946 editEvent(anEvent); 3946 editEvent(anEvent);
3947} 3947}
3948 3948
3949void CalendarView::appointment_delete() 3949void CalendarView::appointment_delete()
3950{ 3950{
3951 Event *anEvent = 0; 3951 Event *anEvent = 0;
3952 3952
3953 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 3953 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
3954 3954
3955 if (mViewManager->currentView()->isEventView()) { 3955 if (mViewManager->currentView()->isEventView()) {
3956 if ( incidence && incidence->typeID() == eventID ) { 3956 if ( incidence && incidence->typeID() == eventID ) {
3957 anEvent = static_cast<Event *>(incidence); 3957 anEvent = static_cast<Event *>(incidence);
3958 } 3958 }
3959 } 3959 }
3960 3960
3961 if (!anEvent) { 3961 if (!anEvent) {
3962 KNotifyClient::beep(); 3962 KNotifyClient::beep();
3963 return; 3963 return;
3964 } 3964 }
3965 3965
3966 deleteEvent(anEvent); 3966 deleteEvent(anEvent);
3967} 3967}
3968 3968
3969void CalendarView::todo_resub( Todo * parent, Todo * sub ) 3969void CalendarView::todo_resub( Todo * parent, Todo * sub )
3970{ 3970{
3971 if (!sub) return; 3971 if (!sub) return;
3972 if ( sub->relatedTo() == parent ) 3972 if ( sub->relatedTo() == parent )
3973 return; 3973 return;
3974 sub->setRelatedTo(parent); 3974 sub->setRelatedTo(parent);
3975 sub->updated(); 3975 sub->updated();
3976 setModified(true); 3976 setModified(true);
3977 updateView(); 3977 updateView();
3978} 3978}
3979void CalendarView::todo_unsub(Todo *anTodo ) 3979void CalendarView::todo_unsub(Todo *anTodo )
3980{ 3980{
3981 todo_resub( 0, anTodo ); 3981 todo_resub( 0, anTodo );
3982} 3982}
3983 3983
3984void CalendarView::deleteTodo(Todo *todo) 3984void CalendarView::deleteTodo(Todo *todo)
3985{ 3985{
3986 if (!todo) { 3986 if (!todo) {
3987 KNotifyClient::beep(); 3987 KNotifyClient::beep();
3988 return; 3988 return;
3989 } 3989 }
3990 if (KOPrefs::instance()->mConfirm) { 3990 if (KOPrefs::instance()->mConfirm) {
3991 QString text = KGlobal::formatMessage ( todo->summary(),0 ); 3991 QString text = KGlobal::formatMessage ( todo->summary(),0 );
3992 if (!todo->relations().isEmpty()) { 3992 if (!todo->relations().isEmpty()) {
3993 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!"); 3993 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!");
3994 3994
3995 } 3995 }
3996 switch (msgItemDelete(i18n("Todo:") +"\n"+text)) { 3996 switch (msgItemDelete(i18n("Todo:") +"\n"+text)) {
3997 case KMessageBox::Continue: // OK 3997 case KMessageBox::Continue: // OK
3998 bool deleteT = false; 3998 bool deleteT = false;
3999 if (!todo->relations().isEmpty()) { 3999 if (!todo->relations().isEmpty()) {
4000 deleteT = removeCompletedSubTodos( todo ); 4000 deleteT = removeCompletedSubTodos( todo );
4001 } 4001 }
4002 // deleteT == true: todo already deleted in removeCompletedSubTodos 4002 // deleteT == true: todo already deleted in removeCompletedSubTodos
4003 if ( !deleteT ) { 4003 if ( !deleteT ) {
4004 checkExternalId( todo ); 4004 checkExternalId( todo );
4005 calendar()->deleteTodo(todo); 4005 calendar()->deleteTodo(todo);
4006 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 4006 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
4007 updateView(); 4007 updateView();
4008 } 4008 }
4009 break; 4009 break;
4010 } // switch 4010 } // switch
4011 } else { 4011 } else {
4012 checkExternalId( todo ); 4012 checkExternalId( todo );
4013 mCalendar->deleteTodo(todo); 4013 mCalendar->deleteTodo(todo);
4014 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 4014 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
4015 updateView(); 4015 updateView();
4016 } 4016 }
4017 4017
4018 emit updateSearchDialog(); 4018 emit updateSearchDialog();
4019} 4019}
4020void CalendarView::deleteJournal(Journal *jour) 4020void CalendarView::deleteJournal(Journal *jour)
4021{ 4021{
4022 if (!jour) { 4022 if (!jour) {
4023 KNotifyClient::beep(); 4023 KNotifyClient::beep();
4024 return; 4024 return;
4025 } 4025 }
4026 if (KOPrefs::instance()->mConfirm) { 4026 if (KOPrefs::instance()->mConfirm) {
4027 4027
4028 QString des; 4028 QString des;
4029 if ( !jour->summary().isEmpty() ) { 4029 if ( !jour->summary().isEmpty() ) {
4030 des = jour->summary(); 4030 des = jour->summary();
4031 } else { 4031 } else {
4032 des = jour->description().left(30); 4032 des = jour->description().left(30);
4033 des = des.simplifyWhiteSpace (); 4033 des = des.simplifyWhiteSpace ();
4034 des.replace (QRegExp ("\\n"),"" ); 4034 des.replace (QRegExp ("\\n"),"" );
4035 des.replace (QRegExp ("\\r"),"" ); 4035 des.replace (QRegExp ("\\r"),"" );
4036 } 4036 }
4037 switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) { 4037 switch (msgItemDelete( i18n("Journal:") +"\n"+KGlobal::formatMessage ( des,0 ))) {
4038 case KMessageBox::Continue: // OK 4038 case KMessageBox::Continue: // OK
4039 calendar()->deleteJournal(jour); 4039 calendar()->deleteJournal(jour);
4040 updateView(); 4040 updateView();
4041 break; 4041 break;
4042 } // switch 4042 } // switch
4043 } else { 4043 } else {
4044 calendar()->deleteJournal(jour);; 4044 calendar()->deleteJournal(jour);;
4045 updateView(); 4045 updateView();
4046 } 4046 }
4047 emit updateSearchDialog(); 4047 emit updateSearchDialog();
4048} 4048}
4049 4049
4050void CalendarView::deleteEvent(Event *anEvent) 4050void CalendarView::deleteEvent(Event *anEvent)
4051{ 4051{
4052 if (!anEvent) { 4052 if (!anEvent) {
4053 KNotifyClient::beep(); 4053 KNotifyClient::beep();
4054 return; 4054 return;
4055 } 4055 }
4056 4056
4057 if (anEvent->doesRecur()) { 4057 if (anEvent->doesRecur()) {
4058 QDate itemDate = mViewManager->currentSelectionDate(); 4058 QDate itemDate = mViewManager->currentSelectionDate();
4059 int km; 4059 int km;
4060 if (!itemDate.isValid()) { 4060 if (!itemDate.isValid()) {
4061 //kdDebug() << "Date Not Valid" << endl; 4061 //kdDebug() << "Date Not Valid" << endl;
4062 if (KOPrefs::instance()->mConfirm) { 4062 if (KOPrefs::instance()->mConfirm) {
4063 km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4063 km = KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
4064 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), 4064 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
4065 i18n("KO/Pi Confirmation"),i18n("Delete All")); 4065 i18n("KO/Pi Confirmation"),i18n("Delete All"));
4066 if ( km == KMessageBox::Continue ) 4066 if ( km == KMessageBox::Continue )
4067 km = KMessageBox::No; // No = all below 4067 km = KMessageBox::No; // No = all below
4068 } else 4068 } else
4069 km = KMessageBox::No; 4069 km = KMessageBox::No;
4070 } else { 4070 } else {
4071 km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4071 km = KMessageBox::warningYesNoCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
4072 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ 4072 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
4073 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), 4073 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
4074 i18n("KO/Pi Confirmation"),i18n("Current"), 4074 i18n("KO/Pi Confirmation"),i18n("Current"),
4075 i18n("All")); 4075 i18n("All"));
4076 } 4076 }
4077 switch(km) { 4077 switch(km) {
4078 4078
4079 case KMessageBox::No: // Continue // all 4079 case KMessageBox::No: // Continue // all
4080 //qDebug("KMessageBox::No "); 4080 //qDebug("KMessageBox::No ");
4081 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4081 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
4082 schedule(Scheduler::Cancel,anEvent); 4082 schedule(Scheduler::Cancel,anEvent);
4083 4083
4084 checkExternalId( anEvent); 4084 checkExternalId( anEvent);
4085 mCalendar->deleteEvent(anEvent); 4085 mCalendar->deleteEvent(anEvent);
4086 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); 4086 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED);
4087 break; 4087 break;
4088 4088
4089 // Disabled because it does not work 4089 // Disabled because it does not work
4090 //#if 0 4090 //#if 0
4091 case KMessageBox::Yes: // just this one 4091 case KMessageBox::Yes: // just this one
4092 //QDate qd = mNavigator->selectedDates().first(); 4092 //QDate qd = mNavigator->selectedDates().first();
4093 //if (!qd.isValid()) { 4093 //if (!qd.isValid()) {
4094 // kdDebug() << "no date selected, or invalid date" << endl; 4094 // kdDebug() << "no date selected, or invalid date" << endl;
4095 // KNotifyClient::beep(); 4095 // KNotifyClient::beep();
4096 // return; 4096 // return;
4097 //} 4097 //}
4098 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); 4098 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1);
4099 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { 4099 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) {
4100 anEvent->addExDate(itemDate); 4100 anEvent->addExDate(itemDate);
4101 int duration = anEvent->recurrence()->duration(); 4101 int duration = anEvent->recurrence()->duration();
4102 if ( duration > 0 ) { 4102 if ( duration > 0 ) {
4103 anEvent->recurrence()->setDuration( duration - 1 ); 4103 anEvent->recurrence()->setDuration( duration - 1 );
4104 } 4104 }
4105 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); 4105 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED);
4106 } 4106 }
4107 break; 4107 break;
4108 //#endif 4108 //#endif
4109 } // switch 4109 } // switch
4110 } else { 4110 } else {
4111 if (KOPrefs::instance()->mConfirm) { 4111 if (KOPrefs::instance()->mConfirm) {
4112 switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) + 4112 switch (KMessageBox::warningContinueCancel(this,KGlobal::formatMessage ( anEvent->summary(),0 ) +
4113 i18n("\nAre you sure you want\nto delete this event?"), 4113 i18n("\nAre you sure you want\nto delete this event?"),
4114 i18n("KO/Pi Confirmation"),i18n("Delete"))) { 4114 i18n("KO/Pi Confirmation"),i18n("Delete"))) {
4115 case KMessageBox::Continue: // OK 4115 case KMessageBox::Continue: // OK
4116 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4116 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
4117 schedule(Scheduler::Cancel,anEvent); 4117 schedule(Scheduler::Cancel,anEvent);
4118 checkExternalId( anEvent); 4118 checkExternalId( anEvent);
4119 mCalendar->deleteEvent(anEvent); 4119 mCalendar->deleteEvent(anEvent);
4120 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 4120 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
4121 break; 4121 break;
4122 } // switch 4122 } // switch
4123 } else { 4123 } else {
4124 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 4124 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
4125 schedule(Scheduler::Cancel,anEvent); 4125 schedule(Scheduler::Cancel,anEvent);
4126 checkExternalId( anEvent); 4126 checkExternalId( anEvent);
4127 mCalendar->deleteEvent(anEvent); 4127 mCalendar->deleteEvent(anEvent);
4128 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 4128 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
4129 } 4129 }
4130 } // if-else 4130 } // if-else
4131 emit updateSearchDialog(); 4131 emit updateSearchDialog();
4132} 4132}
4133 4133
4134bool CalendarView::deleteEvent(const QString &uid) 4134bool CalendarView::deleteEvent(const QString &uid)
4135{ 4135{
4136 Event *ev = mCalendar->event(uid); 4136 Event *ev = mCalendar->event(uid);
4137 if (ev) { 4137 if (ev) {
4138 deleteEvent(ev); 4138 deleteEvent(ev);
4139 return true; 4139 return true;
4140 } else { 4140 } else {
4141 return false; 4141 return false;
4142 } 4142 }
4143} 4143}
4144 4144
4145/*****************************************************************************/ 4145/*****************************************************************************/
4146 4146
4147void CalendarView::action_mail() 4147void CalendarView::action_mail()
4148{ 4148{
4149#ifndef KORG_NOMAIL 4149#ifndef KORG_NOMAIL
4150 KOMailClient mailClient; 4150 KOMailClient mailClient;
4151 4151
4152 Incidence *incidence = currentSelection(); 4152 Incidence *incidence = currentSelection();
4153 4153
4154 if (!incidence) { 4154 if (!incidence) {
4155 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 4155 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
4156 return; 4156 return;
4157 } 4157 }
4158 if(incidence->attendeeCount() == 0 ) { 4158 if(incidence->attendeeCount() == 0 ) {
4159 KMessageBox::sorry(this, 4159 KMessageBox::sorry(this,
4160 i18n("Can't generate mail:\nNo attendees defined.\n")); 4160 i18n("Can't generate mail:\nNo attendees defined.\n"));
4161 return; 4161 return;
4162 } 4162 }
4163 4163
4164 CalendarLocal cal_tmp; 4164 CalendarLocal cal_tmp;
4165 Event *event = 0; 4165 Event *event = 0;
4166 Event *ev = 0; 4166 Event *ev = 0;
4167 if ( incidence && incidence->typeID() == eventID ) { 4167 if ( incidence && incidence->typeID() == eventID ) {
4168 event = static_cast<Event *>(incidence); 4168 event = static_cast<Event *>(incidence);
4169 ev = new Event(*event); 4169 ev = new Event(*event);
4170 cal_tmp.addEvent(ev); 4170 cal_tmp.addEvent(ev);
4171 } 4171 }
4172 ICalFormat mForm(); 4172 ICalFormat mForm();
4173 QString attachment = mForm.toString( &cal_tmp ); 4173 QString attachment = mForm.toString( &cal_tmp );
4174 if (ev) delete(ev); 4174 if (ev) delete(ev);
4175 4175
4176 mailClient.mailAttendees(currentSelection(), attachment); 4176 mailClient.mailAttendees(currentSelection(), attachment);
4177 4177
4178#endif 4178#endif
4179 4179
4180#if 0 4180#if 0
4181 Event *anEvent = 0; 4181 Event *anEvent = 0;
4182 if (mViewManager->currentView()->isEventView()) { 4182 if (mViewManager->currentView()->isEventView()) {
4183 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first()); 4183 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first());
4184 } 4184 }
4185 4185
4186 if (!anEvent) { 4186 if (!anEvent) {
4187 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 4187 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
4188 return; 4188 return;
4189 } 4189 }
4190 if(anEvent->attendeeCount() == 0 ) { 4190 if(anEvent->attendeeCount() == 0 ) {
4191 KMessageBox::sorry(this, 4191 KMessageBox::sorry(this,
4192 i18n("Can't generate mail:\nNo attendees defined.\n")); 4192 i18n("Can't generate mail:\nNo attendees defined.\n"));
4193 return; 4193 return;
4194 } 4194 }
4195 4195
4196 mailobject.emailEvent(anEvent); 4196 mailobject.emailEvent(anEvent);
4197#endif 4197#endif
4198} 4198}
4199 4199
4200 4200
4201void CalendarView::schedule_publish(Incidence *incidence) 4201void CalendarView::schedule_publish(Incidence *incidence)
4202{ 4202{
4203 Event *event = 0; 4203 Event *event = 0;
4204 Todo *todo = 0; 4204 Todo *todo = 0;
4205 4205
4206 if (incidence == 0) { 4206 if (incidence == 0) {
4207 incidence = mViewManager->currentView()->selectedIncidences().first(); 4207 incidence = mViewManager->currentView()->selectedIncidences().first();
4208 if (incidence == 0) { 4208 if (incidence == 0) {
4209 incidence = mTodoList->selectedIncidences().first(); 4209 incidence = mTodoList->selectedIncidences().first();
4210 } 4210 }
4211 } 4211 }
4212 if ( incidence && incidence->typeID() == eventID ) { 4212 if ( incidence && incidence->typeID() == eventID ) {
4213 event = static_cast<Event *>(incidence); 4213 event = static_cast<Event *>(incidence);
4214 } else { 4214 } else {
4215 if ( incidence && incidence->typeID() == todoID ) { 4215 if ( incidence && incidence->typeID() == todoID ) {
4216 todo = static_cast<Todo *>(incidence); 4216 todo = static_cast<Todo *>(incidence);
4217 } 4217 }
4218 } 4218 }
4219 4219
4220 if (!event && !todo) { 4220 if (!event && !todo) {
4221 KMessageBox::sorry(this,i18n("No event selected.")); 4221 KMessageBox::sorry(this,i18n("No event selected."));
4222 return; 4222 return;
4223 } 4223 }
4224 4224
4225 PublishDialog *publishdlg = new PublishDialog(); 4225 PublishDialog *publishdlg = new PublishDialog();
4226 if (incidence->attendeeCount()>0) { 4226 if (incidence->attendeeCount()>0) {
4227 QPtrList<Attendee> attendees = incidence->attendees(); 4227 QPtrList<Attendee> attendees = incidence->attendees();
4228 attendees.first(); 4228 attendees.first();
4229 while ( attendees.current()!=0 ) { 4229 while ( attendees.current()!=0 ) {
4230 publishdlg->addAttendee(attendees.current()); 4230 publishdlg->addAttendee(attendees.current());
4231 attendees.next(); 4231 attendees.next();
4232 } 4232 }
4233 } 4233 }
4234 bool send = true; 4234 bool send = true;
4235 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) { 4235 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) {
4236 if ( publishdlg->exec() != QDialog::Accepted ) 4236 if ( publishdlg->exec() != QDialog::Accepted )
4237 send = false; 4237 send = false;
4238 } 4238 }
4239 if ( send ) { 4239 if ( send ) {
4240 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 4240 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
4241 if ( event ) { 4241 if ( event ) {
4242 Event *ev = new Event(*event); 4242 Event *ev = new Event(*event);
4243 ev->registerObserver(0); 4243 ev->registerObserver(0);
4244 ev->clearAttendees(); 4244 ev->clearAttendees();
4245 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 4245 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
4246 delete(ev); 4246 delete(ev);
4247 } 4247 }
4248 } else { 4248 } else {
4249 if ( todo ) { 4249 if ( todo ) {
4250 Todo *ev = new Todo(*todo); 4250 Todo *ev = new Todo(*todo);
4251 ev->registerObserver(0); 4251 ev->registerObserver(0);
4252 ev->clearAttendees(); 4252 ev->clearAttendees();
4253 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 4253 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
4254 delete(ev); 4254 delete(ev);
4255 } 4255 }
4256 } 4256 }
4257 } 4257 }
4258 } 4258 }
4259 delete publishdlg; 4259 delete publishdlg;
4260} 4260}
4261 4261
4262void CalendarView::schedule_request(Incidence *incidence) 4262void CalendarView::schedule_request(Incidence *incidence)
4263{ 4263{
4264 schedule(Scheduler::Request,incidence); 4264 schedule(Scheduler::Request,incidence);
4265} 4265}
4266 4266
4267void CalendarView::schedule_refresh(Incidence *incidence) 4267void CalendarView::schedule_refresh(Incidence *incidence)
4268{ 4268{
4269 schedule(Scheduler::Refresh,incidence); 4269 schedule(Scheduler::Refresh,incidence);
4270} 4270}
4271 4271
4272void CalendarView::schedule_cancel(Incidence *incidence) 4272void CalendarView::schedule_cancel(Incidence *incidence)
4273{ 4273{
4274 schedule(Scheduler::Cancel,incidence); 4274 schedule(Scheduler::Cancel,incidence);
4275} 4275}
4276 4276
4277void CalendarView::schedule_add(Incidence *incidence) 4277void CalendarView::schedule_add(Incidence *incidence)
4278{ 4278{
4279 schedule(Scheduler::Add,incidence); 4279 schedule(Scheduler::Add,incidence);
4280} 4280}
4281 4281
4282void CalendarView::schedule_reply(Incidence *incidence) 4282void CalendarView::schedule_reply(Incidence *incidence)
4283{ 4283{
4284 schedule(Scheduler::Reply,incidence); 4284 schedule(Scheduler::Reply,incidence);
4285} 4285}
4286 4286
4287void CalendarView::schedule_counter(Incidence *incidence) 4287void CalendarView::schedule_counter(Incidence *incidence)
4288{ 4288{
4289 schedule(Scheduler::Counter,incidence); 4289 schedule(Scheduler::Counter,incidence);
4290} 4290}
4291 4291
4292void CalendarView::schedule_declinecounter(Incidence *incidence) 4292void CalendarView::schedule_declinecounter(Incidence *incidence)
4293{ 4293{
4294 schedule(Scheduler::Declinecounter,incidence); 4294 schedule(Scheduler::Declinecounter,incidence);
4295} 4295}
4296 4296
4297void CalendarView::schedule_publish_freebusy(int daysToPublish) 4297void CalendarView::schedule_publish_freebusy(int daysToPublish)
4298{ 4298{
4299 QDateTime start = QDateTime::currentDateTime(); 4299 QDateTime start = QDateTime::currentDateTime();
4300 QDateTime end = start.addDays(daysToPublish); 4300 QDateTime end = start.addDays(daysToPublish);
4301 4301
4302 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); 4302 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end);
4303 freebusy->setOrganizer(KOPrefs::instance()->email()); 4303 freebusy->setOrganizer(KOPrefs::instance()->email());
4304 4304
4305 4305
4306 PublishDialog *publishdlg = new PublishDialog(); 4306 PublishDialog *publishdlg = new PublishDialog();
4307 if ( publishdlg->exec() == QDialog::Accepted ) { 4307 if ( publishdlg->exec() == QDialog::Accepted ) {
4308 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 4308 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
4309 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) { 4309 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) {
4310 delete(freebusy); 4310 delete(freebusy);
4311 } 4311 }
4312 } 4312 }
4313 delete publishdlg; 4313 delete publishdlg;
4314} 4314}
4315 4315
4316void CalendarView::schedule(Scheduler::Method method, Incidence *incidence) 4316void CalendarView::schedule(Scheduler::Method method, Incidence *incidence)
4317{ 4317{
4318 Event *event = 0; 4318 Event *event = 0;
4319 Todo *todo = 0; 4319 Todo *todo = 0;
4320 4320
4321 if (incidence == 0) { 4321 if (incidence == 0) {
4322 incidence = mViewManager->currentView()->selectedIncidences().first(); 4322 incidence = mViewManager->currentView()->selectedIncidences().first();
4323 if (incidence == 0) { 4323 if (incidence == 0) {
4324 incidence = mTodoList->selectedIncidences().first(); 4324 incidence = mTodoList->selectedIncidences().first();
4325 } 4325 }
4326 } 4326 }
4327 if ( incidence && incidence->typeID() == eventID ) { 4327 if ( incidence && incidence->typeID() == eventID ) {
4328 event = static_cast<Event *>(incidence); 4328 event = static_cast<Event *>(incidence);
4329 } 4329 }
4330 if ( incidence && incidence->typeID() == todoID ) { 4330 if ( incidence && incidence->typeID() == todoID ) {
4331 todo = static_cast<Todo *>(incidence); 4331 todo = static_cast<Todo *>(incidence);
4332 } 4332 }
4333 4333
4334 if (!event && !todo) { 4334 if (!event && !todo) {
4335 KMessageBox::sorry(this,i18n("No event selected.")); 4335 KMessageBox::sorry(this,i18n("No event selected."));
4336 return; 4336 return;
4337 } 4337 }
4338 4338
4339 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) { 4339 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) {
4340 KMessageBox::sorry(this,i18n("The event has no attendees.")); 4340 KMessageBox::sorry(this,i18n("The event has no attendees."));
4341 return; 4341 return;
4342 } 4342 }
4343 4343
4344 Event *ev = 0; 4344 Event *ev = 0;
4345 if (event) ev = new Event(*event); 4345 if (event) ev = new Event(*event);
4346 Todo *to = 0; 4346 Todo *to = 0;
4347 if (todo) to = new Todo(*todo); 4347 if (todo) to = new Todo(*todo);
4348 4348
4349 if (method == Scheduler::Reply || method == Scheduler::Refresh) { 4349 if (method == Scheduler::Reply || method == Scheduler::Refresh) {
4350 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 4350 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
4351 if (!me) { 4351 if (!me) {
4352 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails.")); 4352 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails."));
4353 return; 4353 return;
4354 } 4354 }
4355 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) { 4355 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) {
4356 StatusDialog *statdlg = new StatusDialog(this); 4356 StatusDialog *statdlg = new StatusDialog(this);
4357 if (!statdlg->exec()==QDialog::Accepted) return; 4357 if (!statdlg->exec()==QDialog::Accepted) return;
4358 me->setStatus( statdlg->status() ); 4358 me->setStatus( statdlg->status() );
4359 delete(statdlg); 4359 delete(statdlg);
4360 } 4360 }
4361 Attendee *menew = new Attendee(*me); 4361 Attendee *menew = new Attendee(*me);
4362 if (ev) { 4362 if (ev) {
4363 ev->clearAttendees(); 4363 ev->clearAttendees();
4364 ev->addAttendee(menew,false); 4364 ev->addAttendee(menew,false);
4365 } else { 4365 } else {
4366 if (to) { 4366 if (to) {
4367 todo->clearAttendees(); 4367 todo->clearAttendees();
4368 todo->addAttendee(menew,false); 4368 todo->addAttendee(menew,false);
4369 } 4369 }
4370 } 4370 }
4371 } 4371 }
4372 4372
4373 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 4373 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
4374 if (ev) { 4374 if (ev) {
4375 if ( !dlg->addMessage(ev,method) ) delete(ev); 4375 if ( !dlg->addMessage(ev,method) ) delete(ev);
4376 } else { 4376 } else {
4377 if (to) { 4377 if (to) {
4378 if ( !dlg->addMessage(to,method) ) delete(to); 4378 if ( !dlg->addMessage(to,method) ) delete(to);
4379 } 4379 }
4380 } 4380 }
4381} 4381}
4382 4382
4383void CalendarView::openAddressbook() 4383void CalendarView::openAddressbook()
4384{ 4384{
4385 KRun::runCommand("kaddressbook"); 4385 KRun::runCommand("kaddressbook");
4386} 4386}
4387 4387
4388void CalendarView::setModified(bool modified) 4388void CalendarView::setModified(bool modified)
4389{ 4389{
4390 //qDebug("CalendarView::setModified %d ", modified); 4390 //qDebug("CalendarView::setModified %d ", modified);
4391 if ( modified ) 4391 if ( modified )
4392 emit signalmodified(); 4392 emit signalmodified();
4393 mModified = modified; 4393 mModified = modified;
4394 if ( mModified ) 4394 if ( mModified )
4395 emit modifiedChanged(mModified); 4395 emit modifiedChanged(mModified);
4396 4396
4397} 4397}
4398 4398
4399bool CalendarView::isReadOnly() 4399bool CalendarView::isReadOnly()
4400{ 4400{
4401 return mReadOnly; 4401 return mReadOnly;
4402} 4402}
4403 4403
4404void CalendarView::setReadOnly(bool readOnly) 4404void CalendarView::setReadOnly(bool readOnly)
4405{ 4405{
4406 if (mReadOnly != readOnly) { 4406 if (mReadOnly != readOnly) {
4407 mReadOnly = readOnly; 4407 mReadOnly = readOnly;
4408 emit readOnlyChanged(mReadOnly); 4408 emit readOnlyChanged(mReadOnly);
4409 } 4409 }
4410} 4410}
4411 4411
4412bool CalendarView::isModified() 4412bool CalendarView::isModified()
4413{ 4413{
4414 return mModified; 4414 return mModified;
4415} 4415}
4416void CalendarView::slotprintSelInc() 4416void CalendarView::slotprintSelInc()
4417{ 4417{
4418 if ( currentSelection() == 0 ) { 4418 if ( currentSelection() == 0 ) {
4419 KMessageBox::sorry(this,i18n("There is nothing selected!")); 4419 KMessageBox::sorry(this,i18n("There is nothing selected!"));
4420 return; 4420 return;
4421 } 4421 }
4422 showIncidence(); 4422 showIncidence();
4423 getEventViewerDialog()->print(); 4423 getEventViewerDialog()->print();
4424 4424
4425} 4425}
4426void CalendarView::printSetup() 4426void CalendarView::printSetup()
4427{ 4427{
4428#ifndef KORG_NOPRINTER 4428#ifndef KORG_NOPRINTER
4429 createPrinter(); 4429 createPrinter();
4430 4430
4431 mCalPrinter->setupPrinter(); 4431 mCalPrinter->setupPrinter();
4432#endif 4432#endif
4433} 4433}
4434 4434
4435void CalendarView::print() 4435void CalendarView::print()
4436{ 4436{
4437#ifndef KORG_NOPRINTER 4437#ifndef KORG_NOPRINTER
4438 createPrinter(); 4438 createPrinter();
4439 4439
4440 DateList tmpDateList = mNavigator->selectedDates(); 4440 DateList tmpDateList = mNavigator->selectedDates();
4441 mCalPrinter->print(CalPrinter::Month, 4441 mCalPrinter->print(CalPrinter::Month,
4442 tmpDateList.first(), tmpDateList.last()); 4442 tmpDateList.first(), tmpDateList.last());
4443#endif 4443#endif
4444} 4444}
4445 4445
4446void CalendarView::printPreview() 4446void CalendarView::printPreview()
4447{ 4447{
4448#ifndef KORG_NOPRINTER 4448#ifndef KORG_NOPRINTER
4449 kdDebug() << "CalendarView::printPreview()" << endl; 4449 kdDebug() << "CalendarView::printPreview()" << endl;
4450 4450
4451 createPrinter(); 4451 createPrinter();
4452 4452
4453 DateList tmpDateList = mNavigator->selectedDates(); 4453 DateList tmpDateList = mNavigator->selectedDates();
4454 4454
4455 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(), 4455 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(),
4456 tmpDateList.last()); 4456 tmpDateList.last());
4457#endif 4457#endif
4458} 4458}
4459 4459
4460void CalendarView::exportICalendar() 4460void CalendarView::exportICalendar()
4461{ 4461{
4462 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this); 4462 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this);
4463 4463
4464 // Force correct extension 4464 // Force correct extension
4465 if (filename.right(4) != ".ics") filename += ".ics"; 4465 if (filename.right(4) != ".ics") filename += ".ics";
4466 4466
4467 FileStorage storage( mCalendar, filename, new ICalFormat() ); 4467 FileStorage storage( mCalendar, filename, new ICalFormat() );
4468 storage.save(); 4468 storage.save();
4469} 4469}
4470 4470
4471bool CalendarView::exportVCalendar( QString filename ) 4471bool CalendarView::exportVCalendar( QString filename )
4472{ 4472{
4473 if (mCalendar->journals().count() > 0) { 4473 if (mCalendar->journals().count() > 0) {
4474 int result = KMessageBox::warningContinueCancel(this, 4474 int result = KMessageBox::warningContinueCancel(this,
4475 i18n("The journal entries can not be\nexported to a vCalendar file."), 4475 i18n("The journal entries can not be\nexported to a vCalendar file."),
4476 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 4476 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
4477 true); 4477 true);
4478 if (result != KMessageBox::Continue) return false; 4478 if (result != KMessageBox::Continue) return false;
4479 } 4479 }
4480 4480
4481 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this); 4481 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this);
4482 4482
4483 // Force correct extension 4483 // Force correct extension
4484 if (filename.right(4) != ".vcs") filename += ".vcs"; 4484 if (filename.right(4) != ".vcs") filename += ".vcs";
4485 4485
4486 FileStorage storage( mCalendar, filename, new VCalFormat ); 4486 FileStorage storage( mCalendar, filename, new VCalFormat );
4487 return storage.save(); 4487 return storage.save();
4488 4488
4489} 4489}
4490 4490
4491void CalendarView::eventUpdated(Incidence *) 4491void CalendarView::eventUpdated(Incidence *)
4492{ 4492{
4493 setModified(); 4493 setModified();
4494 // Don't call updateView here. The code, which has caused the update of the 4494 // Don't call updateView here. The code, which has caused the update of the
4495 // event is responsible for updating the view. 4495 // event is responsible for updating the view.
4496 // updateView(); 4496 // updateView();
4497} 4497}
4498 4498
4499void CalendarView::adaptNavigationUnits() 4499void CalendarView::adaptNavigationUnits()
4500{ 4500{
4501 if (mViewManager->currentView()->isEventView()) { 4501 if (mViewManager->currentView()->isEventView()) {
4502 int days = mViewManager->currentView()->currentDateCount(); 4502 int days = mViewManager->currentView()->currentDateCount();
4503 if (days == 1) { 4503 if (days == 1) {
4504 emit changeNavStringPrev(i18n("&Previous Day")); 4504 emit changeNavStringPrev(i18n("&Previous Day"));
4505 emit changeNavStringNext(i18n("&Next Day")); 4505 emit changeNavStringNext(i18n("&Next Day"));
4506 } else { 4506 } else {
4507 emit changeNavStringPrev(i18n("&Previous Week")); 4507 emit changeNavStringPrev(i18n("&Previous Week"));
4508 emit changeNavStringNext(i18n("&Next Week")); 4508 emit changeNavStringNext(i18n("&Next Week"));
4509 } 4509 }
4510 } 4510 }
4511} 4511}
4512 4512
4513void CalendarView::processMainViewSelection( Incidence *incidence ) 4513void CalendarView::processMainViewSelection( Incidence *incidence )
4514{ 4514{
4515 if ( incidence ) mTodoList->clearSelection(); 4515 if ( incidence ) mTodoList->clearSelection();
4516 processIncidenceSelection( incidence ); 4516 processIncidenceSelection( incidence );
4517} 4517}
4518 4518
4519void CalendarView::processTodoListSelection( Incidence *incidence ) 4519void CalendarView::processTodoListSelection( Incidence *incidence )
4520{ 4520{
4521 if ( incidence && mViewManager->currentView() ) { 4521 if ( incidence && mViewManager->currentView() ) {
4522 mViewManager->currentView()->clearSelection(); 4522 mViewManager->currentView()->clearSelection();
4523 } 4523 }
4524 processIncidenceSelection( incidence ); 4524 processIncidenceSelection( incidence );
4525} 4525}
4526 4526
4527void CalendarView::processIncidenceSelection( Incidence *incidence ) 4527void CalendarView::processIncidenceSelection( Incidence *incidence )
4528{ 4528{
4529 emit incidenceSelected( incidence ); 4529 emit incidenceSelected( incidence );
4530 if ( incidence == mSelectedIncidence ) return; 4530 if ( incidence == mSelectedIncidence ) return;
4531 mSelectedIncidence = incidence; 4531 mSelectedIncidence = incidence;
4532 4532
4533 if ( incidence && incidence->typeID() == eventID ) { 4533 if ( incidence && incidence->typeID() == eventID ) {
4534 Event *event = static_cast<Event *>( incidence ); 4534 Event *event = static_cast<Event *>( incidence );
4535 if ( event->organizer() == KOPrefs::instance()->email() ) { 4535 if ( event->organizer() == KOPrefs::instance()->email() ) {
4536 emit organizerEventsSelected( true ); 4536 emit organizerEventsSelected( true );
4537 } else { 4537 } else {
4538 emit organizerEventsSelected(false); 4538 emit organizerEventsSelected(false);
4539 } 4539 }
4540 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 4540 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
4541 KOPrefs::instance()->email() ) ) { 4541 KOPrefs::instance()->email() ) ) {
4542 emit groupEventsSelected( true ); 4542 emit groupEventsSelected( true );
4543 } else { 4543 } else {
4544 emit groupEventsSelected(false); 4544 emit groupEventsSelected(false);
4545 } 4545 }
4546 return; 4546 return;
4547 } else { 4547 } else {
4548 if ( incidence && incidence->typeID() == todoID ) { 4548 if ( incidence && incidence->typeID() == todoID ) {
4549 emit todoSelected( true ); 4549 emit todoSelected( true );
4550 Todo *event = static_cast<Todo *>( incidence ); 4550 Todo *event = static_cast<Todo *>( incidence );
4551 if ( event->organizer() == KOPrefs::instance()->email() ) { 4551 if ( event->organizer() == KOPrefs::instance()->email() ) {
4552 emit organizerEventsSelected( true ); 4552 emit organizerEventsSelected( true );
4553 } else { 4553 } else {
4554 emit organizerEventsSelected(false); 4554 emit organizerEventsSelected(false);
4555 } 4555 }
4556 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 4556 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
4557 KOPrefs::instance()->email() ) ) { 4557 KOPrefs::instance()->email() ) ) {
4558 emit groupEventsSelected( true ); 4558 emit groupEventsSelected( true );
4559 } else { 4559 } else {
4560 emit groupEventsSelected(false); 4560 emit groupEventsSelected(false);
4561 } 4561 }
4562 return; 4562 return;
4563 } else { 4563 } else {
4564 emit todoSelected( false ); 4564 emit todoSelected( false );
4565 emit organizerEventsSelected(false); 4565 emit organizerEventsSelected(false);
4566 emit groupEventsSelected(false); 4566 emit groupEventsSelected(false);
4567 } 4567 }
4568 return; 4568 return;
4569 } 4569 }