summaryrefslogtreecommitdiffabout
path: root/kaddressbook
Unidiff
Diffstat (limited to 'kaddressbook') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/kabcore.cpp63
-rw-r--r--kaddressbook/viewmanager.cpp9
-rw-r--r--kaddressbook/viewmanager.h2
3 files changed, 47 insertions, 27 deletions
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index c6288fa..c5a36e2 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -2742,385 +2742,394 @@ int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, i
2742 return 2; 2742 return 2;
2743 return 1; 2743 return 1;
2744 break; 2744 break;
2745 case SYNC_PREF_REMOTE: 2745 case SYNC_PREF_REMOTE:
2746 if ( lastSync > remoteMod ) 2746 if ( lastSync > remoteMod )
2747 return 1; 2747 return 1;
2748 if ( lastSync > localMod ) 2748 if ( lastSync > localMod )
2749 return 2; 2749 return 2;
2750 return 2; 2750 return 2;
2751 break; 2751 break;
2752 case SYNC_PREF_NEWEST: 2752 case SYNC_PREF_NEWEST:
2753 if ( localMod > remoteMod ) 2753 if ( localMod > remoteMod )
2754 return 1; 2754 return 1;
2755 else 2755 else
2756 return 2; 2756 return 2;
2757 break; 2757 break;
2758 case SYNC_PREF_ASK: 2758 case SYNC_PREF_ASK:
2759 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 2759 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
2760 if ( lastSync > remoteMod ) 2760 if ( lastSync > remoteMod )
2761 return 1; 2761 return 1;
2762 if ( lastSync > localMod ) 2762 if ( lastSync > localMod )
2763 return 2; 2763 return 2;
2764 localIsNew = localMod >= remoteMod; 2764 localIsNew = localMod >= remoteMod;
2765 //qDebug("conflict! ************************************** "); 2765 //qDebug("conflict! ************************************** ");
2766 { 2766 {
2767 KPIM::AddresseeChooser acd ( *local,*remote, localIsNew , this ); 2767 KPIM::AddresseeChooser acd ( *local,*remote, localIsNew , this );
2768 result = acd.executeD(localIsNew); 2768 result = acd.executeD(localIsNew);
2769 return result; 2769 return result;
2770 } 2770 }
2771 break; 2771 break;
2772 case SYNC_PREF_FORCE_LOCAL: 2772 case SYNC_PREF_FORCE_LOCAL:
2773 return 1; 2773 return 1;
2774 break; 2774 break;
2775 case SYNC_PREF_FORCE_REMOTE: 2775 case SYNC_PREF_FORCE_REMOTE:
2776 return 2; 2776 return 2;
2777 break; 2777 break;
2778 2778
2779 default: 2779 default:
2780 // SYNC_PREF_TAKE_BOTH not implemented 2780 // SYNC_PREF_TAKE_BOTH not implemented
2781 break; 2781 break;
2782 } 2782 }
2783 return 0; 2783 return 0;
2784} 2784}
2785 2785
2786 2786
2787bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode) 2787bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode)
2788{ 2788{
2789 bool syncOK = true; 2789 bool syncOK = true;
2790 int addedAddressee = 0; 2790 int addedAddressee = 0;
2791 int addedAddresseeR = 0; 2791 int addedAddresseeR = 0;
2792 int deletedAddresseeR = 0; 2792 int deletedAddresseeR = 0;
2793 int deletedAddresseeL = 0; 2793 int deletedAddresseeL = 0;
2794 int changedLocal = 0; 2794 int changedLocal = 0;
2795 int changedRemote = 0; 2795 int changedRemote = 0;
2796 2796
2797 QString mCurrentSyncName = syncManager->getCurrentSyncName(); 2797 QString mCurrentSyncName = syncManager->getCurrentSyncName();
2798 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); 2798 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
2799 2799
2800 //QPtrList<Addressee> el = local->rawAddressees(); 2800 //QPtrList<Addressee> el = local->rawAddressees();
2801 Addressee addresseeR; 2801 Addressee addresseeR;
2802 QString uid; 2802 QString uid;
2803 int take; 2803 int take;
2804 Addressee addresseeL; 2804 Addressee addresseeL;
2805 Addressee addresseeRSync; 2805 Addressee addresseeRSync;
2806 Addressee addresseeLSync; 2806 Addressee addresseeLSync;
2807 // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees(); 2807 // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees();
2808 //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees(); 2808 //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees();
2809 bool fullDateRange = false; 2809 bool fullDateRange = false;
2810 local->resetTempSyncStat(); 2810 local->resetTempSyncStat();
2811 mLastAddressbookSync = QDateTime::currentDateTime(); 2811 mLastAddressbookSync = QDateTime::currentDateTime();
2812 if ( syncManager->syncWithDesktop() ) { 2812 if ( syncManager->syncWithDesktop() ) {
2813 // remote->removeSyncInfo( QString());//remove all info 2813 // remote->removeSyncInfo( QString());//remove all info
2814 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 2814 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
2815 mLastAddressbookSync = KSyncManager::mRequestedSyncEvent; 2815 mLastAddressbookSync = KSyncManager::mRequestedSyncEvent;
2816 qDebug("using extern time for calendar sync: %s ", mLastAddressbookSync.toString().latin1() ); 2816 qDebug("using extern time for calendar sync: %s ", mLastAddressbookSync.toString().latin1() );
2817 } else { 2817 } else {
2818 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime "); 2818 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime ");
2819 } 2819 }
2820 } 2820 }
2821 QDateTime modifiedCalendar = mLastAddressbookSync; 2821 QDateTime modifiedCalendar = mLastAddressbookSync;
2822 addresseeLSync = getLastSyncAddressee(); 2822 addresseeLSync = getLastSyncAddressee();
2823 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1()); 2823 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1());
2824 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName ); 2824 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName );
2825 if ( !addresseeR.isEmpty() ) { 2825 if ( !addresseeR.isEmpty() ) {
2826 addresseeRSync = addresseeR; 2826 addresseeRSync = addresseeR;
2827 remote->removeAddressee(addresseeR ); 2827 remote->removeAddressee(addresseeR );
2828 2828
2829 } else { 2829 } else {
2830 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2830 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2831 addresseeRSync = addresseeLSync ; 2831 addresseeRSync = addresseeLSync ;
2832 } else { 2832 } else {
2833 //qDebug("FULLDATE 1"); 2833 //qDebug("FULLDATE 1");
2834 fullDateRange = true; 2834 fullDateRange = true;
2835 Addressee newAdd; 2835 Addressee newAdd;
2836 addresseeRSync = newAdd; 2836 addresseeRSync = newAdd;
2837 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee")); 2837 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee"));
2838 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName ); 2838 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName );
2839 addresseeRSync.setRevision( mLastAddressbookSync ); 2839 addresseeRSync.setRevision( mLastAddressbookSync );
2840 addresseeRSync.setCategories( i18n("SyncAddressee") ); 2840 addresseeRSync.setCategories( i18n("SyncAddressee") );
2841 } 2841 }
2842 } 2842 }
2843 if ( addresseeLSync.revision() == mLastAddressbookSync ) { 2843 if ( addresseeLSync.revision() == mLastAddressbookSync ) {
2844 // qDebug("FULLDATE 2"); 2844 // qDebug("FULLDATE 2");
2845 fullDateRange = true; 2845 fullDateRange = true;
2846 } 2846 }
2847 if ( ! fullDateRange ) { 2847 if ( ! fullDateRange ) {
2848 if ( addresseeLSync.revision() != addresseeRSync.revision() ) { 2848 if ( addresseeLSync.revision() != addresseeRSync.revision() ) {
2849 2849
2850 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() ); 2850 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() );
2851 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec()); 2851 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec());
2852 fullDateRange = true; 2852 fullDateRange = true;
2853 //qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() ); 2853 //qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() );
2854 } 2854 }
2855 } 2855 }
2856 // fullDateRange = true; // debug only! 2856 // fullDateRange = true; // debug only!
2857 if ( fullDateRange ) 2857 if ( fullDateRange )
2858 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365); 2858 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365);
2859 else 2859 else
2860 mLastAddressbookSync = addresseeLSync.revision(); 2860 mLastAddressbookSync = addresseeLSync.revision();
2861 // for resyncing if own file has changed 2861 // for resyncing if own file has changed
2862 // PENDING fixme later when implemented 2862 // PENDING fixme later when implemented
2863#if 0 2863#if 0
2864 if ( mCurrentSyncDevice == "deleteaftersync" ) { 2864 if ( mCurrentSyncDevice == "deleteaftersync" ) {
2865 mLastAddressbookSync = loadedFileVersion; 2865 mLastAddressbookSync = loadedFileVersion;
2866 qDebug("setting mLastAddressbookSync "); 2866 qDebug("setting mLastAddressbookSync ");
2867 } 2867 }
2868#endif 2868#endif
2869 2869
2870
2871 // ********** setting filters ****************
2872 Filter filterIN = mViewManager->getFilterByName( syncManager->mFilterInAB );
2873 Filter filterOUT = mViewManager->getFilterByName( syncManager->mFilterOutAB );
2874
2870 //qDebug("*************************** "); 2875 //qDebug("*************************** ");
2871 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() ); 2876 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() );
2872 QStringList er = remote->uidList(); 2877 QStringList er = remote->uidList();
2873 Addressee inR ;//= er.first(); 2878 Addressee inR ;//= er.first();
2874 Addressee inL; 2879 Addressee inL;
2875 2880
2876 syncManager->showProgressBar(0, i18n("Syncing - close to abort!"), er.count()); 2881 syncManager->showProgressBar(0, i18n("Syncing - close to abort!"), er.count());
2877 2882
2878 int modulo = (er.count()/10)+1; 2883 int modulo = (er.count()/10)+1;
2879 int incCounter = 0; 2884 int incCounter = 0;
2880 while ( incCounter < er.count()) { 2885 while ( incCounter < er.count()) {
2881 if (syncManager->isProgressBarCanceled()) 2886 if (syncManager->isProgressBarCanceled())
2882 return false; 2887 return false;
2883 if ( incCounter % modulo == 0 ) 2888 if ( incCounter % modulo == 0 )
2884 syncManager->showProgressBar(incCounter); 2889 syncManager->showProgressBar(incCounter);
2885 2890
2886 uid = er[ incCounter ]; 2891 uid = er[ incCounter ];
2887 bool skipIncidence = false; 2892 bool skipIncidence = false;
2888 if ( uid.left(19) == QString("last-syncAddressee-") ) 2893 if ( uid.left(19) == QString("last-syncAddressee-") )
2889 skipIncidence = true; 2894 skipIncidence = true;
2890 QString idS,OidS; 2895 QString idS,OidS;
2891 qApp->processEvents(); 2896 qApp->processEvents();
2892 if ( !skipIncidence ) { 2897 if ( !skipIncidence ) {
2893 inL = local->findByUid( uid ); 2898 inL = local->findByUid( uid );
2894 inR = remote->findByUid( uid ); 2899 inR = remote->findByUid( uid );
2895 //inL.setResource( 0 ); 2900 //inL.setResource( 0 );
2896 //inR.setResource( 0 ); 2901 //inR.setResource( 0 );
2897 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars 2902 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars
2898 if ( !inL.resource() || inL.resource()->includeInSync() ) { 2903 if ( !inL.resource() || inL.resource()->includeInSync() ) {
2899 if ( (take = takeAddressee( &inL, &inR, mode, fullDateRange )) ) { 2904 if ( (take = takeAddressee( &inL, &inR, mode, fullDateRange )) ) {
2900 //qDebug("take %d %s ", take, inL.summary().latin1()); 2905 //qDebug("take %d %s ", take, inL.summary().latin1());
2901 if ( take == 3 ) 2906 if ( take == 3 )
2902 return false; 2907 return false;
2903 if ( take == 1 ) {// take local ********************** 2908 if ( take == 1 ) {// take local **********************
2904 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2909 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2905 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2910 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2906 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2911 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2907 local->insertAddressee( inL, false ); 2912 local->insertAddressee( inL, false );
2908 idS = inR.externalUID(); 2913 idS = inR.externalUID();
2909 OidS = inR.originalExternalUID(); 2914 OidS = inR.originalExternalUID();
2910 } 2915 }
2911 else 2916 else
2912 idS = inR.IDStr(); 2917 idS = inR.IDStr();
2913 remote->removeAddressee( inR ); 2918 remote->removeAddressee( inR );
2914 inR = inL; 2919 inR = inL;
2915 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 2920 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
2916 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2921 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2917 inR.setOriginalExternalUID( OidS ); 2922 inR.setOriginalExternalUID( OidS );
2918 inR.setExternalUID( idS ); 2923 inR.setExternalUID( idS );
2919 if ( syncManager->syncWithDesktop() ) { 2924 if ( syncManager->syncWithDesktop() ) {
2920 inR.setIDStr("changed" ); 2925 inR.setIDStr("changed" );
2921 } 2926 }
2922 //inR.insertCustom( "KADDRESSBOOK", "X-KDESYNC","changed" ); 2927 //inR.insertCustom( "KADDRESSBOOK", "X-KDESYNC","changed" );
2923 } else { 2928 } else {
2924 inR.setIDStr( idS ); 2929 inR.setIDStr( idS );
2925 } 2930 }
2926 inR.setResource( 0 ); 2931 inR.setResource( 0 );
2927 remote->insertAddressee( inR , false); 2932 remote->insertAddressee( inR , false);
2928 ++changedRemote; 2933 ++changedRemote;
2929 } else { // take == 2 take remote ********************** 2934 } else { // take == 2 take remote **********************
2930 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2935 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2931 if ( inR.revision().date().year() < 2004 ) 2936 if ( inR.revision().date().year() < 2004 )
2932 inR.setRevision( modifiedCalendar ); 2937 inR.setRevision( modifiedCalendar );
2933 } 2938 }
2934 idS = inL.IDStr(); 2939 idS = inL.IDStr();
2935 local->removeAddressee( inL ); 2940 local->removeAddressee( inL );
2936 inL = inR; 2941 inL = inR;
2937 inL.setIDStr( idS ); 2942 inL.setIDStr( idS );
2938 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2943 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2939 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2944 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2940 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2945 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2941 } 2946 }
2942 inL.setResource( 0 ); 2947 inL.setResource( 0 );
2943 local->insertAddressee( inL , false ); 2948 local->insertAddressee( inL , false );
2944 ++changedLocal; 2949 ++changedLocal;
2945 } 2950 }
2946 } 2951 }
2947 } 2952 }
2948 } else { // no conflict ********** add or delete remote 2953 } else { // no conflict ********** add or delete remote
2949 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2954 if ( filterIN.name().isEmpty() || filterIN.filterAddressee( inR ) ) {
2950 QString des = addresseeLSync.note(); 2955 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2951 if ( des.find( inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 2956 QString des = addresseeLSync.note();
2952 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 2957 if ( des.find( inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
2953 remote->insertAddressee( inR, false ); 2958 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE );
2954 ++deletedAddresseeR; 2959 remote->insertAddressee( inR, false );
2955 } else { 2960 ++deletedAddresseeR;
2956 inR.setRevision( modifiedCalendar ); 2961 } else {
2957 remote->insertAddressee( inR, false ); 2962 inR.setRevision( modifiedCalendar );
2958 inL = inR; 2963 remote->insertAddressee( inR, false );
2959 inL.setIDStr( ":" ); 2964 inL = inR;
2960 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2965 inL.setIDStr( ":" );
2961 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2966 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2962 inL.setResource( 0 ); 2967 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2963 local->insertAddressee( inL , false); 2968 inL.setResource( 0 );
2964 ++addedAddressee; 2969 local->insertAddressee( inL , false);
2965 } 2970 ++addedAddressee;
2966 } else { 2971 }
2967 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) {
2968 inR.setRevision( modifiedCalendar );
2969 remote->insertAddressee( inR, false );
2970 inR.setResource( 0 );
2971 local->insertAddressee( inR, false );
2972 ++addedAddressee;
2973 } else { 2972 } else {
2974 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR); 2973 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) {
2975 remote->removeAddressee( inR ); 2974 inR.setRevision( modifiedCalendar );
2976 ++deletedAddresseeR; 2975 remote->insertAddressee( inR, false );
2976 inR.setResource( 0 );
2977 local->insertAddressee( inR, false );
2978 ++addedAddressee;
2979 } else {
2980 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR);
2981 remote->removeAddressee( inR );
2982 ++deletedAddresseeR;
2983 }
2977 } 2984 }
2978 } 2985 }
2979 } 2986 }
2980 } 2987 }
2981 ++incCounter; 2988 ++incCounter;
2982 } 2989 }
2983 er.clear(); 2990 er.clear();
2984 QStringList el = local->uidList(); 2991 QStringList el = local->uidList();
2985 modulo = (el.count()/10)+1; 2992 modulo = (el.count()/10)+1;
2986 2993
2987 syncManager->showProgressBar(0, i18n("Add / remove addressees"), el.count()); 2994 syncManager->showProgressBar(0, i18n("Add / remove addressees"), el.count());
2988 incCounter = 0; 2995 incCounter = 0;
2989 while ( incCounter < el.count()) { 2996 while ( incCounter < el.count()) {
2990 qApp->processEvents(); 2997 qApp->processEvents();
2991 if (syncManager->isProgressBarCanceled()) 2998 if (syncManager->isProgressBarCanceled())
2992 return false; 2999 return false;
2993 if ( incCounter % modulo == 0 ) 3000 if ( incCounter % modulo == 0 )
2994 syncManager->showProgressBar(incCounter); 3001 syncManager->showProgressBar(incCounter);
2995 uid = el[ incCounter ]; 3002 uid = el[ incCounter ];
2996 bool skipIncidence = false; 3003 bool skipIncidence = false;
2997 if ( uid.left(19) == QString("last-syncAddressee-") ) 3004 if ( uid.left(19) == QString("last-syncAddressee-") )
2998 skipIncidence = true; 3005 skipIncidence = true;
3006 if ( !filterOUT.name().isEmpty() && ! filterOUT.filterAddressee( inL ) )
3007 skipIncidence = true;
2999 if ( !skipIncidence ) { 3008 if ( !skipIncidence ) {
3000 inL = local->findByUid( uid ); 3009 inL = local->findByUid( uid );
3001 if ( !inL.resource() || inL.resource()->includeInSync() ) { 3010 if ( !inL.resource() || inL.resource()->includeInSync() ) {
3002 inR = remote->findByUid( uid ); 3011 inR = remote->findByUid( uid );
3003 if ( inR.isEmpty() ) { // no conflict ********** add or delete local 3012 if ( inR.isEmpty() ) { // no conflict ********** add or delete local
3004 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 3013 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
3005 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 3014 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
3006 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 3015 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
3007 local->removeAddressee( inL ); 3016 local->removeAddressee( inL );
3008 ++deletedAddresseeL; 3017 ++deletedAddresseeL;
3009 } else { 3018 } else {
3010 if ( ! syncManager->mWriteBackExistingOnly ) { 3019 if ( ! syncManager->mWriteBackExistingOnly ) {
3011 inL.removeID(mCurrentSyncDevice ); 3020 inL.removeID(mCurrentSyncDevice );
3012 ++addedAddresseeR; 3021 ++addedAddresseeR;
3013 inL.setRevision( modifiedCalendar ); 3022 inL.setRevision( modifiedCalendar );
3014 local->insertAddressee( inL, false ); 3023 local->insertAddressee( inL, false );
3015 inR = inL; 3024 inR = inL;
3016 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL ); 3025 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL );
3017 inR.setResource( 0 ); 3026 inR.setResource( 0 );
3018 remote->insertAddressee( inR, false ); 3027 remote->insertAddressee( inR, false );
3019 } 3028 }
3020 } 3029 }
3021 } else { 3030 } else {
3022 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) { 3031 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) {
3023 //qDebug("data %s ", inL.revision().toString().latin1()); 3032 //qDebug("data %s ", inL.revision().toString().latin1());
3024 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 3033 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
3025 local->removeAddressee( inL ); 3034 local->removeAddressee( inL );
3026 ++deletedAddresseeL; 3035 ++deletedAddresseeL;
3027 } else { 3036 } else {
3028 if ( ! syncManager->mWriteBackExistingOnly ) { 3037 if ( ! syncManager->mWriteBackExistingOnly ) {
3029 ++addedAddresseeR; 3038 ++addedAddresseeR;
3030 inL.setRevision( modifiedCalendar ); 3039 inL.setRevision( modifiedCalendar );
3031 local->insertAddressee( inL, false ); 3040 local->insertAddressee( inL, false );
3032 inR = inL; 3041 inR = inL;
3033 inR.setIDStr( ":" ); 3042 inR.setIDStr( ":" );
3034 inR.setResource( 0 ); 3043 inR.setResource( 0 );
3035 remote->insertAddressee( inR, false ); 3044 remote->insertAddressee( inR, false );
3036 } 3045 }
3037 } 3046 }
3038 } 3047 }
3039 } 3048 }
3040 } 3049 }
3041 } 3050 }
3042 ++incCounter; 3051 ++incCounter;
3043 } 3052 }
3044 el.clear(); 3053 el.clear();
3045 syncManager->hideProgressBar(); 3054 syncManager->hideProgressBar();
3046 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 ); 3055 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 );
3047 // get rid of micro seconds 3056 // get rid of micro seconds
3048 QTime t = mLastAddressbookSync.time(); 3057 QTime t = mLastAddressbookSync.time();
3049 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 3058 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) );
3050 addresseeLSync.setRevision( mLastAddressbookSync ); 3059 addresseeLSync.setRevision( mLastAddressbookSync );
3051 addresseeRSync.setRevision( mLastAddressbookSync ); 3060 addresseeRSync.setRevision( mLastAddressbookSync );
3052 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ; 3061 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ;
3053 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName ); 3062 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName );
3054 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ; 3063 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ;
3055 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") ); 3064 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") );
3056 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ; 3065 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ;
3057 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() ); 3066 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() );
3058 addresseeRSync.setNote( "" ) ; 3067 addresseeRSync.setNote( "" ) ;
3059 addresseeLSync.setNote( "" ); 3068 addresseeLSync.setNote( "" );
3060 3069
3061 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 3070 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
3062 remote->insertAddressee( addresseeRSync, false ); 3071 remote->insertAddressee( addresseeRSync, false );
3063 local->insertAddressee( addresseeLSync, false ); 3072 local->insertAddressee( addresseeLSync, false );
3064 QString mes; 3073 QString mes;
3065 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"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR ); 3074 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"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR );
3066 qDebug( mes ); 3075 qDebug( mes );
3067 mes = i18n("Local addressbook changed!\n") +mes; 3076 mes = i18n("Local addressbook changed!\n") +mes;
3068 if ( syncManager->mShowSyncSummary ) { 3077 if ( syncManager->mShowSyncSummary ) {
3069 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes, 3078 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes,
3070 i18n("KA/Pi Synchronization"),i18n("Write back"))) { 3079 i18n("KA/Pi Synchronization"),i18n("Write back"))) {
3071 qDebug("cancelled "); 3080 qDebug("cancelled ");
3072 return false; 3081 return false;
3073 } 3082 }
3074 } 3083 }
3075 return syncOK; 3084 return syncOK;
3076} 3085}
3077 3086
3078 3087
3079//this is a overwritten callbackmethods from the syncinterface 3088//this is a overwritten callbackmethods from the syncinterface
3080bool KABCore::sync(KSyncManager* manager, QString filename, int mode) 3089bool KABCore::sync(KSyncManager* manager, QString filename, int mode)
3081{ 3090{
3082 3091
3083 //pending prepare addresseeview for output 3092 //pending prepare addresseeview for output
3084 //pending detect, if remote file has REV field. if not switch to external sync 3093 //pending detect, if remote file has REV field. if not switch to external sync
3085 mGlobalSyncMode = SYNC_MODE_NORMAL; 3094 mGlobalSyncMode = SYNC_MODE_NORMAL;
3086 if ( manager != syncManager ) 3095 if ( manager != syncManager )
3087 qDebug("KABCore::sync:: ERROR! :: manager != syncManager "); 3096 qDebug("KABCore::sync:: ERROR! :: manager != syncManager ");
3088 QString mCurrentSyncDevice = manager->getCurrentSyncDevice(); 3097 QString mCurrentSyncDevice = manager->getCurrentSyncDevice();
3089 3098
3090 AddressBook abLocal(filename,"syncContact"); 3099 AddressBook abLocal(filename,"syncContact");
3091 bool syncOK = false; 3100 bool syncOK = false;
3092 if ( abLocal.load() ) { 3101 if ( abLocal.load() ) {
3093 qDebug("AB loaded %s,sync mode %d",filename.latin1(), mode ); 3102 qDebug("AB loaded %s,sync mode %d",filename.latin1(), mode );
3094 bool external = false; 3103 bool external = false;
3095 bool isXML = false; 3104 bool isXML = false;
3096 if ( filename.right(4) == ".xml") { 3105 if ( filename.right(4) == ".xml") {
3097 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 3106 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
3098 isXML = true; 3107 isXML = true;
3099 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, true ); 3108 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, true );
3100 } else { 3109 } else {
3101 external = !manager->mIsKapiFile; 3110 external = !manager->mIsKapiFile;
3102 if ( external ) { 3111 if ( external ) {
3103 qDebug("Setting vcf mode to external "); 3112 qDebug("Setting vcf mode to external ");
3104 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 3113 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
3105 AddressBook::Iterator it; 3114 AddressBook::Iterator it;
3106 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 3115 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
3107 (*it).setID( mCurrentSyncDevice, (*it).uid() ); 3116 (*it).setID( mCurrentSyncDevice, (*it).uid() );
3108 (*it).computeCsum( mCurrentSyncDevice ); 3117 (*it).computeCsum( mCurrentSyncDevice );
3109 } 3118 }
3110 } 3119 }
3111 } 3120 }
3112 //AddressBook::Iterator it; 3121 //AddressBook::Iterator it;
3113 //QStringList vcards; 3122 //QStringList vcards;
3114 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 3123 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
3115 // qDebug("Name %s ", (*it).familyName().latin1()); 3124 // qDebug("Name %s ", (*it).familyName().latin1());
3116 //} 3125 //}
3117 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode ); 3126 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode );
3118 if ( syncOK ) { 3127 if ( syncOK ) {
3119 if ( syncManager->mWriteBackFile ) 3128 if ( syncManager->mWriteBackFile )
3120 { 3129 {
3121 if ( external ) 3130 if ( external )
3122 abLocal.removeSyncAddressees( !isXML); 3131 abLocal.removeSyncAddressees( !isXML);
3123 qDebug("Saving remote AB "); 3132 qDebug("Saving remote AB ");
3124 if ( ! abLocal.saveAB()) 3133 if ( ! abLocal.saveAB())
3125 qDebug("Error writing back AB to file "); 3134 qDebug("Error writing back AB to file ");
3126 if ( external ) { 3135 if ( external ) {
diff --git a/kaddressbook/viewmanager.cpp b/kaddressbook/viewmanager.cpp
index 59bddd9..9c3a641 100644
--- a/kaddressbook/viewmanager.cpp
+++ b/kaddressbook/viewmanager.cpp
@@ -493,234 +493,243 @@ void ViewManager::dropped( QDropEvent *e )
493 kdDebug(5720) << "ViewManager::dropped: got a drop event" << endl; 493 kdDebug(5720) << "ViewManager::dropped: got a drop event" << endl;
494 494
495#ifndef KAB_EMBEDDED 495#ifndef KAB_EMBEDDED
496 496
497 QString clipText, vcards; 497 QString clipText, vcards;
498 KURL::List urls; 498 KURL::List urls;
499 499
500 if ( KURLDrag::decode( e, urls) ) { 500 if ( KURLDrag::decode( e, urls) ) {
501 KURL::List::Iterator it = urls.begin(); 501 KURL::List::Iterator it = urls.begin();
502 int c = urls.count(); 502 int c = urls.count();
503 if ( c > 1 ) { 503 if ( c > 1 ) {
504 QString questionString = i18n( "Import one contact into your addressbook?", "Import %n contacts into your addressbook?", c ); 504 QString questionString = i18n( "Import one contact into your addressbook?", "Import %n contacts into your addressbook?", c );
505 if ( KMessageBox::questionYesNo( this, questionString, i18n( "Import Contacts?" ) ) == KMessageBox::Yes ) { 505 if ( KMessageBox::questionYesNo( this, questionString, i18n( "Import Contacts?" ) ) == KMessageBox::Yes ) {
506 for ( ; it != urls.end(); ++it ) 506 for ( ; it != urls.end(); ++it )
507 emit urlDropped( *it ); 507 emit urlDropped( *it );
508 } 508 }
509 } else if ( c == 1 ) 509 } else if ( c == 1 )
510 emit urlDropped( *it ); 510 emit urlDropped( *it );
511 } else if ( KVCardDrag::decode( e, vcards ) ) { 511 } else if ( KVCardDrag::decode( e, vcards ) ) {
512 KABC::Addressee addr; 512 KABC::Addressee addr;
513 KABC::VCardConverter converter; 513 KABC::VCardConverter converter;
514 QStringList list = QStringList::split( "\r\n\r\n", vcards ); 514 QStringList list = QStringList::split( "\r\n\r\n", vcards );
515 QStringList::Iterator it; 515 QStringList::Iterator it;
516 for ( it = list.begin(); it != list.end(); ++it ) { 516 for ( it = list.begin(); it != list.end(); ++it ) {
517 if ( converter.vCardToAddressee( (*it).stripWhiteSpace(), addr ) ) { 517 if ( converter.vCardToAddressee( (*it).stripWhiteSpace(), addr ) ) {
518 KABC::Addressee a = mCore->addressBook()->findByUid( addr.uid() ); 518 KABC::Addressee a = mCore->addressBook()->findByUid( addr.uid() );
519 if ( a.isEmpty() ) { 519 if ( a.isEmpty() ) {
520 mCore->addressBook()->insertAddressee( addr ); 520 mCore->addressBook()->insertAddressee( addr );
521 emit modified(); 521 emit modified();
522 } 522 }
523 } 523 }
524 } 524 }
525 525
526 mActiveView->refresh(); 526 mActiveView->refresh();
527 } 527 }
528#else //KAB_EMBEDDED 528#else //KAB_EMBEDDED
529qDebug("ViewManager::dropped() has to be changed!!" ); 529qDebug("ViewManager::dropped() has to be changed!!" );
530#endif //KAB_EMBEDDED 530#endif //KAB_EMBEDDED
531 531
532} 532}
533 533
534void ViewManager::startDrag() 534void ViewManager::startDrag()
535{ 535{
536 kdDebug(5720) << "ViewManager::startDrag: starting to drag" << endl; 536 kdDebug(5720) << "ViewManager::startDrag: starting to drag" << endl;
537 537
538#ifndef KAB_EMBEDDED 538#ifndef KAB_EMBEDDED
539 539
540 // Get the list of all the selected addressees 540 // Get the list of all the selected addressees
541 KABC::Addressee::List addrList; 541 KABC::Addressee::List addrList;
542 QStringList uidList = selectedUids(); 542 QStringList uidList = selectedUids();
543 QStringList::Iterator iter; 543 QStringList::Iterator iter;
544 for ( iter = uidList.begin(); iter != uidList.end(); ++iter ) 544 for ( iter = uidList.begin(); iter != uidList.end(); ++iter )
545 addrList.append( mCore->addressBook()->findByUid( *iter ) ); 545 addrList.append( mCore->addressBook()->findByUid( *iter ) );
546 546
547 KMultipleDrag *drag = new KMultipleDrag( this ); 547 KMultipleDrag *drag = new KMultipleDrag( this );
548 drag->addDragObject( new QTextDrag( AddresseeUtil::addresseesToClipboard(addrList), this ) ); 548 drag->addDragObject( new QTextDrag( AddresseeUtil::addresseesToClipboard(addrList), this ) );
549 KABC::Addressee::List::Iterator it; 549 KABC::Addressee::List::Iterator it;
550 QStringList vcards; 550 QStringList vcards;
551 for ( it = addrList.begin(); it != addrList.end(); ++it ) { 551 for ( it = addrList.begin(); it != addrList.end(); ++it ) {
552 QString vcard = QString::null; 552 QString vcard = QString::null;
553 KABC::VCardConverter converter; 553 KABC::VCardConverter converter;
554 if ( converter.addresseeToVCard( *it, vcard ) ) 554 if ( converter.addresseeToVCard( *it, vcard ) )
555 vcards.append( vcard ); 555 vcards.append( vcard );
556 } 556 }
557 drag->addDragObject( new KVCardDrag( vcards.join( "\r\n" ), this ) ); 557 drag->addDragObject( new KVCardDrag( vcards.join( "\r\n" ), this ) );
558 558
559 drag->setPixmap( KGlobal::iconLoader()->loadIcon( "vcard", KIcon::Desktop ) ); 559 drag->setPixmap( KGlobal::iconLoader()->loadIcon( "vcard", KIcon::Desktop ) );
560 drag->dragCopy(); 560 drag->dragCopy();
561 561
562#else //KAB_EMBEDDED 562#else //KAB_EMBEDDED
563qDebug("ViewManager::startDrag() has to be changed!!" ); 563qDebug("ViewManager::startDrag() has to be changed!!" );
564#endif //KAB_EMBEDDED 564#endif //KAB_EMBEDDED
565 565
566} 566}
567void ViewManager::doSearch( const QString& s,KABC::Field *field ) 567void ViewManager::doSearch( const QString& s,KABC::Field *field )
568{ 568{
569 if ( mActiveView ) 569 if ( mActiveView )
570 mActiveView->doSearch( s, field ); 570 mActiveView->doSearch( s, field );
571 571
572} 572}
573void ViewManager::setActiveFilter( int index ) 573void ViewManager::setActiveFilter( int index )
574{ 574{
575 Filter currentFilter; 575 Filter currentFilter;
576 576
577 if ( ( index - 1 ) < 0 ) 577 if ( ( index - 1 ) < 0 )
578 currentFilter = Filter(); 578 currentFilter = Filter();
579 else 579 else
580 currentFilter = mFilterList[ index - 1 ]; 580 currentFilter = mFilterList[ index - 1 ];
581 581
582 // Check if we have a view. Since the filter combo is created before 582 // Check if we have a view. Since the filter combo is created before
583 // the view, this slot could be called before there is a valid view. 583 // the view, this slot could be called before there is a valid view.
584 if ( mActiveView ) { 584 if ( mActiveView ) {
585 mActiveView->setFilter( currentFilter ); 585 mActiveView->setFilter( currentFilter );
586 mActiveView->refresh(); 586 mActiveView->refresh();
587 emit selected( QString::null ); 587 emit selected( QString::null );
588 } 588 }
589} 589}
590 590
591void ViewManager::configureFilters() 591void ViewManager::configureFilters()
592{ 592{
593 FilterDialog dlg( this ); 593 FilterDialog dlg( this );
594 594
595 dlg.setFilters( mFilterList ); 595 dlg.setFilters( mFilterList );
596 596
597 if ( dlg.exec() ) 597 if ( dlg.exec() )
598 mFilterList = dlg.filters(); 598 mFilterList = dlg.filters();
599 599
600 uint pos = mActionSelectFilter->currentItem(); 600 uint pos = mActionSelectFilter->currentItem();
601 mActionSelectFilter->setItems( filterNames() ); 601 mActionSelectFilter->setItems( filterNames() );
602 mActionSelectFilter->setCurrentItem( pos ); 602 mActionSelectFilter->setCurrentItem( pos );
603 setActiveFilter( pos ); 603 setActiveFilter( pos );
604 int cw = 150; 604 int cw = 150;
605 if (QApplication::desktop()->width() == 480 ) 605 if (QApplication::desktop()->width() == 480 )
606 cw = 0; 606 cw = 0;
607 mActionSelectFilter->setComboWidth( cw ); 607 mActionSelectFilter->setComboWidth( cw );
608 saveSettings(); 608 saveSettings();
609} 609}
610 610
611QStringList ViewManager::filterNames() const 611QStringList ViewManager::filterNames() const
612{ 612{
613 QStringList names( i18n( "No Filter" ) ); 613 QStringList names( i18n( "No Filter" ) );
614 614
615 Filter::List::ConstIterator it; 615 Filter::List::ConstIterator it;
616 for ( it = mFilterList.begin(); it != mFilterList.end(); ++it ) 616 for ( it = mFilterList.begin(); it != mFilterList.end(); ++it )
617 names.append( (*it).name() ); 617 names.append( (*it).name() );
618 618
619 return names; 619 return names;
620} 620}
621Filter ViewManager::getFilterByName( const QString &name ) const
622{
623 Filter::List::ConstIterator it;
624 for ( it = mFilterList.begin(); it != mFilterList.end(); ++it )
625 if ( name == (*it).name() )
626 return (*it);
627
628 return Filter();
629}
621 630
622int ViewManager::filterPosition( const QString &name ) const 631int ViewManager::filterPosition( const QString &name ) const
623{ 632{
624 int pos = 0; 633 int pos = 0;
625 634
626 Filter::List::ConstIterator it; 635 Filter::List::ConstIterator it;
627 for ( it = mFilterList.begin(); it != mFilterList.end(); ++it, ++pos ) 636 for ( it = mFilterList.begin(); it != mFilterList.end(); ++it, ++pos )
628 if ( name == (*it).name() ) 637 if ( name == (*it).name() )
629 return pos + 1; 638 return pos + 1;
630 639
631 return 0; 640 return 0;
632} 641}
633 642
634void ViewManager::initActions() 643void ViewManager::initActions()
635{ 644{
636//US <ActionList name="view_loadedviews"/> 645//US <ActionList name="view_loadedviews"/>
637//US <Separator/> 646//US <Separator/>
638 647
639#ifdef KAB_EMBEDDED 648#ifdef KAB_EMBEDDED
640 QPopupMenu *viewmenu = (QPopupMenu*)mCore->getViewMenu(); 649 QPopupMenu *viewmenu = (QPopupMenu*)mCore->getViewMenu();
641 QPopupMenu *settingsmenu = (QPopupMenu*)mCore->getSettingsMenu(); 650 QPopupMenu *settingsmenu = (QPopupMenu*)mCore->getSettingsMenu();
642 QPopupMenu *filtermenu = (QPopupMenu*)mCore->getFilterMenu(); 651 QPopupMenu *filtermenu = (QPopupMenu*)mCore->getFilterMenu();
643#endif //KAB_EMBEDDED 652#endif //KAB_EMBEDDED
644 653
645 mActionSelectView = new KSelectAction( i18n( "Select View" ), 0, mCore->actionCollection(), "select_view" ); 654 mActionSelectView = new KSelectAction( i18n( "Select View" ), 0, mCore->actionCollection(), "select_view" );
646#if KDE_VERSION >= 309 655#if KDE_VERSION >= 309
647 mActionSelectView->setMenuAccelsEnabled( false ); 656 mActionSelectView->setMenuAccelsEnabled( false );
648#endif 657#endif
649 connect( mActionSelectView, SIGNAL( activated( const QString& ) ), 658 connect( mActionSelectView, SIGNAL( activated( const QString& ) ),
650 SLOT( setActiveView( const QString& ) ) ); 659 SLOT( setActiveView( const QString& ) ) );
651 660
652 661
653#ifdef KAB_EMBEDDED 662#ifdef KAB_EMBEDDED
654 mActionSelectView->plug(viewmenu); 663 mActionSelectView->plug(viewmenu);
655 viewmenu->insertSeparator(); 664 viewmenu->insertSeparator();
656#endif //KAB_EMBEDDED 665#endif //KAB_EMBEDDED
657 666
658 KAction *action; 667 KAction *action;
659 668
660 action = new KAction( i18n( "Modify View..." ), "configure", 0, this, 669 action = new KAction( i18n( "Modify View..." ), "configure", 0, this,
661 SLOT( editView() ), mCore->actionCollection(), "view_modify" ); 670 SLOT( editView() ), mCore->actionCollection(), "view_modify" );
662#ifndef KAB_EMBEDDED 671#ifndef KAB_EMBEDDED
663 action->setWhatsThis( i18n( "By pressing this button a dialog opens that allows you to modify the view of the addressbook. There you can add or remove fields that you want to be shown or hidden in the addressbook like the name for example." ) ); 672 action->setWhatsThis( i18n( "By pressing this button a dialog opens that allows you to modify the view of the addressbook. There you can add or remove fields that you want to be shown or hidden in the addressbook like the name for example." ) );
664#else //KAB_EMBEDDED 673#else //KAB_EMBEDDED
665 action->plug(viewmenu); 674 action->plug(viewmenu);
666#endif //KAB_EMBEDDED 675#endif //KAB_EMBEDDED
667 676
668 action = new KAction( i18n( "Add View..." ), "window_new", 0, this, 677 action = new KAction( i18n( "Add View..." ), "window_new", 0, this,
669 SLOT( addView() ), mCore->actionCollection(), "view_add" ); 678 SLOT( addView() ), mCore->actionCollection(), "view_add" );
670#ifndef KAB_EMBEDDED 679#ifndef KAB_EMBEDDED
671 action->setWhatsThis( i18n( "You can add a new view by choosing one of the dialog that appears after pressing the button. You have to give the view a name, so that you can distinguish between the different views." ) ); 680 action->setWhatsThis( i18n( "You can add a new view by choosing one of the dialog that appears after pressing the button. You have to give the view a name, so that you can distinguish between the different views." ) );
672#else //KAB_EMBEDDED 681#else //KAB_EMBEDDED
673 action->plug(viewmenu); 682 action->plug(viewmenu);
674#endif //KAB_EMBEDDED 683#endif //KAB_EMBEDDED
675 684
676 mActionDeleteView = new KAction( i18n( "Delete View" ), "view_remove", 0, 685 mActionDeleteView = new KAction( i18n( "Delete View" ), "view_remove", 0,
677 this, SLOT( deleteView() ), 686 this, SLOT( deleteView() ),
678 mCore->actionCollection(), "view_delete" ); 687 mCore->actionCollection(), "view_delete" );
679#ifndef KAB_EMBEDDED 688#ifndef KAB_EMBEDDED
680 mActionDeleteView->setWhatsThis( i18n( "By pressing this button you can delete the actual view, which you have added before." ) ); 689 mActionDeleteView->setWhatsThis( i18n( "By pressing this button you can delete the actual view, which you have added before." ) );
681#else //KAB_EMBEDDED 690#else //KAB_EMBEDDED
682 mActionDeleteView->plug(viewmenu); 691 mActionDeleteView->plug(viewmenu);
683 viewmenu->insertSeparator(); 692 viewmenu->insertSeparator();
684#endif //KAB_EMBEDDED 693#endif //KAB_EMBEDDED
685 694
686#ifndef KAB_EMBEDDED 695#ifndef KAB_EMBEDDED
687 action = new KAction( i18n( "Refresh View" ), "reload", 0, this, 696 action = new KAction( i18n( "Refresh View" ), "reload", 0, this,
688 SLOT( refreshView(const QString &) ), mCore->actionCollection(), 697 SLOT( refreshView(const QString &) ), mCore->actionCollection(),
689 "view_refresh" ); 698 "view_refresh" );
690 action->setWhatsThis( i18n( "The view will be refreshed by pressing this button." ) ); 699 action->setWhatsThis( i18n( "The view will be refreshed by pressing this button." ) );
691#else //KAB_EMBEDDED 700#else //KAB_EMBEDDED
692 action = new KAction( i18n( "Refresh View" ), "reload", 0, this, 701 action = new KAction( i18n( "Refresh View" ), "reload", 0, this,
693 SLOT( refreshView()), mCore->actionCollection(), 702 SLOT( refreshView()), mCore->actionCollection(),
694 "view_refresh" ); 703 "view_refresh" );
695 action->plug(viewmenu); 704 action->plug(viewmenu);
696 viewmenu->insertSeparator(); 705 viewmenu->insertSeparator();
697#endif //KAB_EMBEDDED 706#endif //KAB_EMBEDDED
698 707
699 action = new KAction( i18n( "Edit &Filters..." ), "filter", 0, this, 708 action = new KAction( i18n( "Edit &Filters..." ), "filter", 0, this,
700 SLOT( configureFilters() ), mCore->actionCollection(), 709 SLOT( configureFilters() ), mCore->actionCollection(),
701 "options_edit_filters" ); 710 "options_edit_filters" );
702 711
703 mActionSelectFilter = new KSelectAction( i18n( "Select Filter" ), "filter", mCore->actionCollection(), "select_filter" ); 712 mActionSelectFilter = new KSelectAction( i18n( "Select Filter" ), "filter", mCore->actionCollection(), "select_filter" );
704#if KDE_VERSION >= 309 713#if KDE_VERSION >= 309
705 mActionSelectFilter->setMenuAccelsEnabled( false ); 714 mActionSelectFilter->setMenuAccelsEnabled( false );
706#endif 715#endif
707 connect( mActionSelectFilter, SIGNAL( activated( int ) ), 716 connect( mActionSelectFilter, SIGNAL( activated( int ) ),
708 SLOT( setActiveFilter( int ) ) ); 717 SLOT( setActiveFilter( int ) ) );
709 718
710#ifdef KAB_EMBEDDED 719#ifdef KAB_EMBEDDED
711 action->plug(settingsmenu); 720 action->plug(settingsmenu);
712 mActionSelectFilter->plug(viewmenu); 721 mActionSelectFilter->plug(viewmenu);
713#endif //KAB_EMBEDDED 722#endif //KAB_EMBEDDED
714 723
715} 724}
716 725
717void ViewManager::initGUI() 726void ViewManager::initGUI()
718{ 727{
719 QHBoxLayout *layout = new QHBoxLayout( this, 0, 0 ); 728 QHBoxLayout *layout = new QHBoxLayout( this, 0, 0 );
720 mViewWidgetStack = new QWidgetStack( this ); 729 mViewWidgetStack = new QWidgetStack( this );
721 layout->addWidget( mViewWidgetStack ); 730 layout->addWidget( mViewWidgetStack );
722} 731}
723 732
724#ifndef KAB_EMBEDDED 733#ifndef KAB_EMBEDDED
725#include "viewmanager.moc" 734#include "viewmanager.moc"
726#endif //KAB_EMBEDDED 735#endif //KAB_EMBEDDED
diff --git a/kaddressbook/viewmanager.h b/kaddressbook/viewmanager.h
index a03a83f..272e1b0 100644
--- a/kaddressbook/viewmanager.h
+++ b/kaddressbook/viewmanager.h
@@ -1,157 +1,159 @@
1/* 1/*
2 This file is part of KAddressBook. 2 This file is part of KAddressBook.
3 Copyright (c) 2002 Mike Pilone <mpilone@slac.com> 3 Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#ifndef VIEWMANAGER_H 24#ifndef VIEWMANAGER_H
25#define VIEWMANAGER_H 25#define VIEWMANAGER_H
26 26
27#include <qwidget.h> 27#include <qwidget.h>
28#include <qstringlist.h> 28#include <qstringlist.h>
29#include <kaddressbookview.h> 29#include <kaddressbookview.h>
30#include <qdict.h> 30#include <qdict.h>
31#include "filter.h"
31 32
32class KAction; 33class KAction;
33class KSelectAction; 34class KSelectAction;
34 35
35class KABCore; 36class KABCore;
36class QWidgetStack; 37class QWidgetStack;
37class QDropEvent; 38class QDropEvent;
38 39
39namespace KABC { class AddressBook; } 40namespace KABC { class AddressBook; }
40 41
41/** 42/**
42 The view manager manages the views and everything related to them. The 43 The view manager manages the views and everything related to them. The
43 manager will load the views at startup and display a view when told to 44 manager will load the views at startup and display a view when told to
44 make one active. 45 make one active.
45 46
46 The view manager will also create and manage all dialogs directly related to 47 The view manager will also create and manage all dialogs directly related to
47 views (ie: AddView, ConfigureView, DeleteView, etc). 48 views (ie: AddView, ConfigureView, DeleteView, etc).
48 */ 49 */
49class ViewManager : public QWidget 50class ViewManager : public QWidget
50{ 51{
51 Q_OBJECT 52 Q_OBJECT
52 public: 53 public:
53 ViewManager( KABCore *core, QWidget *parent, const char *name = 0 ); 54 ViewManager( KABCore *core, QWidget *parent, const char *name = 0 );
54 ~ViewManager(); 55 ~ViewManager();
55 56
56 void restoreSettings(); 57 void restoreSettings();
57 void saveSettings(); 58 void saveSettings();
58 void doSearch( const QString& s ,KABC::Field *field ); 59 void doSearch( const QString& s ,KABC::Field *field );
59 60
60 void unloadViews(); 61 void unloadViews();
61 KSelectAction * getFilterAction() { return mActionSelectFilter; } 62 KSelectAction * getFilterAction() { return mActionSelectFilter; }
63 Filter getFilterByName( const QString &name ) const;
62 64
63 QStringList selectedUids() const; 65 QStringList selectedUids() const;
64 QStringList selectedEmails() const; 66 QStringList selectedEmails() const;
65 KABC::Addressee::List selectedAddressees() const; 67 KABC::Addressee::List selectedAddressees() const;
66 void setListSelected(QStringList); 68 void setListSelected(QStringList);
67 void setFocusAV(); 69 void setFocusAV();
68 70
69 public slots: 71 public slots:
70 void scrollUP(); 72 void scrollUP();
71 void scrollDOWN(); 73 void scrollDOWN();
72 74
73//US void setSelected( const QString &uid = QString::null, bool selected = true ); 75//US void setSelected( const QString &uid = QString::null, bool selected = true );
74 void setSelected( const QString &uid, bool); 76 void setSelected( const QString &uid, bool);
75//US added another method with no parameter, since my moc compiler does not support default parameters. 77//US added another method with no parameter, since my moc compiler does not support default parameters.
76 void setSelected(); 78 void setSelected();
77 79
78 80
79 81
80//US added another method with no parameter, since my moc compiler does not support default parameters. 82//US added another method with no parameter, since my moc compiler does not support default parameters.
81 void refreshView(); 83 void refreshView();
82 void refreshView( const QString &uid); 84 void refreshView( const QString &uid);
83 85
84 void editView(); 86 void editView();
85 void deleteView(); 87 void deleteView();
86 void addView(); 88 void addView();
87 89
88 protected slots: 90 protected slots:
89 /** 91 /**
90 Called whenever the user drops something in the active view. 92 Called whenever the user drops something in the active view.
91 This method will try to decode what was dropped, and if it was 93 This method will try to decode what was dropped, and if it was
92 a valid addressee, add it to the addressbook. 94 a valid addressee, add it to the addressbook.
93 */ 95 */
94 void dropped( QDropEvent* ); 96 void dropped( QDropEvent* );
95 97
96 /** 98 /**
97 Called whenever the user attempts to start a drag in the view. 99 Called whenever the user attempts to start a drag in the view.
98 This method will convert all the selected addressees into text (vcard) 100 This method will convert all the selected addressees into text (vcard)
99 and create a drag object. 101 and create a drag object.
100 */ 102 */
101 void startDrag(); 103 void startDrag();
102 104
103 signals: 105 signals:
104 /** 106 /**
105 Emitted whenever the user selects an entry in the view. 107 Emitted whenever the user selects an entry in the view.
106 */ 108 */
107 void selected( const QString &uid ); 109 void selected( const QString &uid );
108 void deleteRequest( ); 110 void deleteRequest( );
109 111
110 /** 112 /**
111 Emitted whenever the user activates an entry in the view. 113 Emitted whenever the user activates an entry in the view.
112 */ 114 */
113 void executed( const QString &uid ); 115 void executed( const QString &uid );
114 116
115 /** 117 /**
116 Emitted whenever the address book is modified in some way. 118 Emitted whenever the address book is modified in some way.
117 */ 119 */
118 void modified(); 120 void modified();
119 121
120 /** 122 /**
121 Emitted whenever a url is dragged on a view. 123 Emitted whenever a url is dragged on a view.
122 */ 124 */
123 void urlDropped( const KURL& ); 125 void urlDropped( const KURL& );
124 126
125 private slots: 127 private slots:
126 void setActiveView( const QString &name ); 128 void setActiveView( const QString &name );
127 void setActiveFilter( int index ); 129 void setActiveFilter( int index );
128 void configureFilters(); 130 void configureFilters();
129 131
130 private: 132 private:
131 void createViewFactories(); 133 void createViewFactories();
132 QStringList filterNames() const; 134 QStringList filterNames() const;
133 int filterPosition( const QString &name ) const; 135 int filterPosition( const QString &name ) const;
134 QStringList viewNames() const; 136 QStringList viewNames() const;
135 int viewPosition( const QString &name ) const; 137 int viewPosition( const QString &name ) const;
136 void initActions(); 138 void initActions();
137 void initGUI(); 139 void initGUI();
138 140
139 KABCore *mCore; 141 KABCore *mCore;
140 142
141 Filter mCurrentFilter; 143 Filter mCurrentFilter;
142 Filter::List mFilterList; 144 Filter::List mFilterList;
143 145
144 QDict<KAddressBookView> mViewDict; 146 QDict<KAddressBookView> mViewDict;
145 QDict<ViewFactory> mViewFactoryDict; 147 QDict<ViewFactory> mViewFactoryDict;
146 QStringList mViewNameList; 148 QStringList mViewNameList;
147 149
148 QWidgetStack *mViewWidgetStack; 150 QWidgetStack *mViewWidgetStack;
149 KAddressBookView *mActiveView; 151 KAddressBookView *mActiveView;
150 152
151 KAction *mActionDeleteView; 153 KAction *mActionDeleteView;
152 KSelectAction *mActionSelectFilter; 154 KSelectAction *mActionSelectFilter;
153 KSelectAction *mActionSelectView; 155 KSelectAction *mActionSelectView;
154 156
155}; 157};
156 158
157#endif 159#endif