summaryrefslogtreecommitdiffabout
path: root/kaddressbook
Unidiff
Diffstat (limited to 'kaddressbook') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/kabcore.cpp6
-rw-r--r--kaddressbook/viewmanager.cpp4
2 files changed, 6 insertions, 4 deletions
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index 638abc9..5ebd3a4 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -913,2041 +913,2043 @@ void KABCore::copyContacts()
913 913
914 QClipboard *cb = QApplication::clipboard(); 914 QClipboard *cb = QApplication::clipboard();
915 cb->setText( clipText ); 915 cb->setText( clipText );
916} 916}
917 917
918void KABCore::cutContacts() 918void KABCore::cutContacts()
919{ 919{
920 QStringList uidList = mViewManager->selectedUids(); 920 QStringList uidList = mViewManager->selectedUids();
921 921
922//US if ( uidList.size() > 0 ) { 922//US if ( uidList.size() > 0 ) {
923 if ( uidList.count() > 0 ) { 923 if ( uidList.count() > 0 ) {
924 PwCutCommand *command = new PwCutCommand( mAddressBook, uidList ); 924 PwCutCommand *command = new PwCutCommand( mAddressBook, uidList );
925 UndoStack::instance()->push( command ); 925 UndoStack::instance()->push( command );
926 RedoStack::instance()->clear(); 926 RedoStack::instance()->clear();
927 927
928 setModified( true ); 928 setModified( true );
929 } 929 }
930} 930}
931 931
932void KABCore::pasteContacts() 932void KABCore::pasteContacts()
933{ 933{
934 QClipboard *cb = QApplication::clipboard(); 934 QClipboard *cb = QApplication::clipboard();
935 935
936 KABC::Addressee::List list = AddresseeUtil::clipboardToAddressees( cb->text() ); 936 KABC::Addressee::List list = AddresseeUtil::clipboardToAddressees( cb->text() );
937 937
938 pasteContacts( list ); 938 pasteContacts( list );
939} 939}
940 940
941void KABCore::pasteContacts( KABC::Addressee::List &list ) 941void KABCore::pasteContacts( KABC::Addressee::List &list )
942{ 942{
943 KABC::Resource *resource = requestResource( this ); 943 KABC::Resource *resource = requestResource( this );
944 KABC::Addressee::List::Iterator it; 944 KABC::Addressee::List::Iterator it;
945 for ( it = list.begin(); it != list.end(); ++it ) 945 for ( it = list.begin(); it != list.end(); ++it )
946 (*it).setResource( resource ); 946 (*it).setResource( resource );
947 947
948 PwPasteCommand *command = new PwPasteCommand( this, list ); 948 PwPasteCommand *command = new PwPasteCommand( this, list );
949 UndoStack::instance()->push( command ); 949 UndoStack::instance()->push( command );
950 RedoStack::instance()->clear(); 950 RedoStack::instance()->clear();
951 951
952 setModified( true ); 952 setModified( true );
953} 953}
954 954
955void KABCore::setWhoAmI() 955void KABCore::setWhoAmI()
956{ 956{
957 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 957 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
958 958
959 if ( addrList.count() > 1 ) { 959 if ( addrList.count() > 1 ) {
960 KMessageBox::sorry( this, i18n( "Please select only one contact." ) ); 960 KMessageBox::sorry( this, i18n( "Please select only one contact." ) );
961 return; 961 return;
962 } 962 }
963 963
964 QString text( i18n( "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>" ) ); 964 QString text( i18n( "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>" ) );
965 if ( KMessageBox::questionYesNo( this, text.arg( addrList[ 0 ].assembledName() ) ) == KMessageBox::Yes ) 965 if ( KMessageBox::questionYesNo( this, text.arg( addrList[ 0 ].assembledName() ) ) == KMessageBox::Yes )
966 static_cast<KABC::StdAddressBook*>( KABC::StdAddressBook::self() )->setWhoAmI( addrList[ 0 ] ); 966 static_cast<KABC::StdAddressBook*>( KABC::StdAddressBook::self() )->setWhoAmI( addrList[ 0 ] );
967} 967}
968 968
969void KABCore::setCategories() 969void KABCore::setCategories()
970{ 970{
971 KPIM::CategorySelectDialog dlg( KABPrefs::instance(), this, "", true ); 971 KPIM::CategorySelectDialog dlg( KABPrefs::instance(), this, "", true );
972 if ( !dlg.exec() ) 972 if ( !dlg.exec() )
973 return; 973 return;
974 974
975 bool merge = false; 975 bool merge = false;
976 QString msg = i18n( "Merge with existing categories?" ); 976 QString msg = i18n( "Merge with existing categories?" );
977 if ( KMessageBox::questionYesNo( this, msg ) == KMessageBox::Yes ) 977 if ( KMessageBox::questionYesNo( this, msg ) == KMessageBox::Yes )
978 merge = true; 978 merge = true;
979 979
980 QStringList categories = dlg.selectedCategories(); 980 QStringList categories = dlg.selectedCategories();
981 981
982 QStringList uids = mViewManager->selectedUids(); 982 QStringList uids = mViewManager->selectedUids();
983 QStringList::Iterator it; 983 QStringList::Iterator it;
984 for ( it = uids.begin(); it != uids.end(); ++it ) { 984 for ( it = uids.begin(); it != uids.end(); ++it ) {
985 KABC::Addressee addr = mAddressBook->findByUid( *it ); 985 KABC::Addressee addr = mAddressBook->findByUid( *it );
986 if ( !addr.isEmpty() ) { 986 if ( !addr.isEmpty() ) {
987 if ( !merge ) 987 if ( !merge )
988 addr.setCategories( categories ); 988 addr.setCategories( categories );
989 else { 989 else {
990 QStringList addrCategories = addr.categories(); 990 QStringList addrCategories = addr.categories();
991 QStringList::Iterator catIt; 991 QStringList::Iterator catIt;
992 for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) { 992 for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) {
993 if ( !addrCategories.contains( *catIt ) ) 993 if ( !addrCategories.contains( *catIt ) )
994 addrCategories.append( *catIt ); 994 addrCategories.append( *catIt );
995 } 995 }
996 addr.setCategories( addrCategories ); 996 addr.setCategories( addrCategories );
997 } 997 }
998 998
999 mAddressBook->insertAddressee( addr ); 999 mAddressBook->insertAddressee( addr );
1000 } 1000 }
1001 } 1001 }
1002 1002
1003 if ( uids.count() > 0 ) 1003 if ( uids.count() > 0 )
1004 setModified( true ); 1004 setModified( true );
1005} 1005}
1006 1006
1007void KABCore::setSearchFields( const KABC::Field::List &fields ) 1007void KABCore::setSearchFields( const KABC::Field::List &fields )
1008{ 1008{
1009 mIncSearchWidget->setFields( fields ); 1009 mIncSearchWidget->setFields( fields );
1010} 1010}
1011 1011
1012void KABCore::incrementalSearch( const QString& text ) 1012void KABCore::incrementalSearch( const QString& text )
1013{ 1013{
1014 mViewManager->doSearch( text, mIncSearchWidget->currentField() ); 1014 mViewManager->doSearch( text, mIncSearchWidget->currentField() );
1015} 1015}
1016 1016
1017void KABCore::setModified() 1017void KABCore::setModified()
1018{ 1018{
1019 setModified( true ); 1019 setModified( true );
1020} 1020}
1021 1021
1022void KABCore::setModifiedWOrefresh() 1022void KABCore::setModifiedWOrefresh()
1023{ 1023{
1024 // qDebug("KABCore::setModifiedWOrefresh() "); 1024 // qDebug("KABCore::setModifiedWOrefresh() ");
1025 mModified = true; 1025 mModified = true;
1026 mActionSave->setEnabled( mModified ); 1026 mActionSave->setEnabled( mModified );
1027#ifdef DESKTOP_VERSION 1027#ifdef DESKTOP_VERSION
1028 mDetails->refreshView(); 1028 mDetails->refreshView();
1029#endif 1029#endif
1030 1030
1031} 1031}
1032void KABCore::setModified( bool modified ) 1032void KABCore::setModified( bool modified )
1033{ 1033{
1034 mModified = modified; 1034 mModified = modified;
1035 mActionSave->setEnabled( mModified ); 1035 mActionSave->setEnabled( mModified );
1036 1036
1037 if ( modified ) 1037 if ( modified )
1038 mJumpButtonBar->recreateButtons(); 1038 mJumpButtonBar->recreateButtons();
1039 1039
1040 mViewManager->refreshView(); 1040 mViewManager->refreshView();
1041 mDetails->refreshView(); 1041 mDetails->refreshView();
1042 1042
1043} 1043}
1044 1044
1045bool KABCore::modified() const 1045bool KABCore::modified() const
1046{ 1046{
1047 return mModified; 1047 return mModified;
1048} 1048}
1049 1049
1050void KABCore::contactModified( const KABC::Addressee &addr ) 1050void KABCore::contactModified( const KABC::Addressee &addr )
1051{ 1051{
1052 1052
1053 Command *command = 0; 1053 Command *command = 0;
1054 QString uid; 1054 QString uid;
1055 1055
1056 // check if it exists already 1056 // check if it exists already
1057 KABC::Addressee origAddr = mAddressBook->findByUid( addr.uid() ); 1057 KABC::Addressee origAddr = mAddressBook->findByUid( addr.uid() );
1058 if ( origAddr.isEmpty() ) 1058 if ( origAddr.isEmpty() )
1059 command = new PwNewCommand( mAddressBook, addr ); 1059 command = new PwNewCommand( mAddressBook, addr );
1060 else { 1060 else {
1061 command = new PwEditCommand( mAddressBook, origAddr, addr ); 1061 command = new PwEditCommand( mAddressBook, origAddr, addr );
1062 uid = addr.uid(); 1062 uid = addr.uid();
1063 } 1063 }
1064 1064
1065 UndoStack::instance()->push( command ); 1065 UndoStack::instance()->push( command );
1066 RedoStack::instance()->clear(); 1066 RedoStack::instance()->clear();
1067 1067
1068 setModified( true ); 1068 setModified( true );
1069} 1069}
1070 1070
1071void KABCore::newContact() 1071void KABCore::newContact()
1072{ 1072{
1073 1073
1074 1074
1075 QPtrList<KABC::Resource> kabcResources = mAddressBook->resources(); 1075 QPtrList<KABC::Resource> kabcResources = mAddressBook->resources();
1076 1076
1077 QPtrList<KRES::Resource> kresResources; 1077 QPtrList<KRES::Resource> kresResources;
1078 QPtrListIterator<KABC::Resource> it( kabcResources ); 1078 QPtrListIterator<KABC::Resource> it( kabcResources );
1079 KABC::Resource *resource; 1079 KABC::Resource *resource;
1080 while ( ( resource = it.current() ) != 0 ) { 1080 while ( ( resource = it.current() ) != 0 ) {
1081 ++it; 1081 ++it;
1082 if ( !resource->readOnly() ) { 1082 if ( !resource->readOnly() ) {
1083 KRES::Resource *res = static_cast<KRES::Resource*>( resource ); 1083 KRES::Resource *res = static_cast<KRES::Resource*>( resource );
1084 if ( res ) 1084 if ( res )
1085 kresResources.append( res ); 1085 kresResources.append( res );
1086 } 1086 }
1087 } 1087 }
1088 1088
1089 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, this ); 1089 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, this );
1090 resource = static_cast<KABC::Resource*>( res ); 1090 resource = static_cast<KABC::Resource*>( res );
1091 1091
1092 if ( resource ) { 1092 if ( resource ) {
1093 KABC::Addressee addr; 1093 KABC::Addressee addr;
1094 addr.setResource( resource ); 1094 addr.setResource( resource );
1095 mEditorDialog->setAddressee( addr ); 1095 mEditorDialog->setAddressee( addr );
1096 KApplication::execDialog ( mEditorDialog ); 1096 KApplication::execDialog ( mEditorDialog );
1097 1097
1098 } else 1098 } else
1099 return; 1099 return;
1100 1100
1101 // mEditorDict.insert( dialog->addressee().uid(), dialog ); 1101 // mEditorDict.insert( dialog->addressee().uid(), dialog );
1102 1102
1103 1103
1104} 1104}
1105 1105
1106void KABCore::addEmail( QString aStr ) 1106void KABCore::addEmail( QString aStr )
1107{ 1107{
1108#ifndef KAB_EMBEDDED 1108#ifndef KAB_EMBEDDED
1109 QString fullName, email; 1109 QString fullName, email;
1110 1110
1111 KABC::Addressee::parseEmailAddress( aStr, fullName, email ); 1111 KABC::Addressee::parseEmailAddress( aStr, fullName, email );
1112 1112
1113 // Try to lookup the addressee matching the email address 1113 // Try to lookup the addressee matching the email address
1114 bool found = false; 1114 bool found = false;
1115 QStringList emailList; 1115 QStringList emailList;
1116 KABC::AddressBook::Iterator it; 1116 KABC::AddressBook::Iterator it;
1117 for ( it = mAddressBook->begin(); !found && (it != mAddressBook->end()); ++it ) { 1117 for ( it = mAddressBook->begin(); !found && (it != mAddressBook->end()); ++it ) {
1118 emailList = (*it).emails(); 1118 emailList = (*it).emails();
1119 if ( emailList.contains( email ) > 0 ) { 1119 if ( emailList.contains( email ) > 0 ) {
1120 found = true; 1120 found = true;
1121 (*it).setNameFromString( fullName ); 1121 (*it).setNameFromString( fullName );
1122 editContact( (*it).uid() ); 1122 editContact( (*it).uid() );
1123 } 1123 }
1124 } 1124 }
1125 1125
1126 if ( !found ) { 1126 if ( !found ) {
1127 KABC::Addressee addr; 1127 KABC::Addressee addr;
1128 addr.setNameFromString( fullName ); 1128 addr.setNameFromString( fullName );
1129 addr.insertEmail( email, true ); 1129 addr.insertEmail( email, true );
1130 1130
1131 mAddressBook->insertAddressee( addr ); 1131 mAddressBook->insertAddressee( addr );
1132 mViewManager->refreshView( addr.uid() ); 1132 mViewManager->refreshView( addr.uid() );
1133 editContact( addr.uid() ); 1133 editContact( addr.uid() );
1134 } 1134 }
1135#else //KAB_EMBEDDED 1135#else //KAB_EMBEDDED
1136 qDebug("KABCore::addEmail finsih method"); 1136 qDebug("KABCore::addEmail finsih method");
1137#endif //KAB_EMBEDDED 1137#endif //KAB_EMBEDDED
1138} 1138}
1139 1139
1140void KABCore::importVCard( const KURL &url, bool showPreview ) 1140void KABCore::importVCard( const KURL &url, bool showPreview )
1141{ 1141{
1142 mXXPortManager->importVCard( url, showPreview ); 1142 mXXPortManager->importVCard( url, showPreview );
1143} 1143}
1144void KABCore::importFromOL() 1144void KABCore::importFromOL()
1145{ 1145{
1146#ifdef _WIN32_ 1146#ifdef _WIN32_
1147 KAImportOLdialog* idgl = new KAImportOLdialog( i18n("Import Contacts from OL"), mAddressBook, this ); 1147 KAImportOLdialog* idgl = new KAImportOLdialog( i18n("Import Contacts from OL"), mAddressBook, this );
1148 idgl->exec(); 1148 idgl->exec();
1149 KABC::Addressee::List list = idgl->getAddressList(); 1149 KABC::Addressee::List list = idgl->getAddressList();
1150 if ( list.count() > 0 ) { 1150 if ( list.count() > 0 ) {
1151 KABC::Addressee::List listNew; 1151 KABC::Addressee::List listNew;
1152 KABC::Addressee::List listExisting; 1152 KABC::Addressee::List listExisting;
1153 KABC::Addressee::List::Iterator it; 1153 KABC::Addressee::List::Iterator it;
1154 KABC::AddressBook::Iterator iter; 1154 KABC::AddressBook::Iterator iter;
1155 for ( it = list.begin(); it != list.end(); ++it ) { 1155 for ( it = list.begin(); it != list.end(); ++it ) {
1156 if ( mAddressBook->findByUid((*it).uid() ).isEmpty()) 1156 if ( mAddressBook->findByUid((*it).uid() ).isEmpty())
1157 listNew.append( (*it) ); 1157 listNew.append( (*it) );
1158 else 1158 else
1159 listExisting.append( (*it) ); 1159 listExisting.append( (*it) );
1160 } 1160 }
1161 if ( listExisting.count() > 0 ) 1161 if ( listExisting.count() > 0 )
1162 KMessageBox::information( this, i18n("%1 contacts not added to addressbook\nbecause they were already in the addressbook!").arg( listExisting.count() )); 1162 KMessageBox::information( this, i18n("%1 contacts not added to addressbook\nbecause they were already in the addressbook!").arg( listExisting.count() ));
1163 if ( listNew.count() > 0 ) { 1163 if ( listNew.count() > 0 ) {
1164 pasteWithNewUid = false; 1164 pasteWithNewUid = false;
1165 pasteContacts( listNew ); 1165 pasteContacts( listNew );
1166 pasteWithNewUid = true; 1166 pasteWithNewUid = true;
1167 } 1167 }
1168 } 1168 }
1169 delete idgl; 1169 delete idgl;
1170#endif 1170#endif
1171} 1171}
1172 1172
1173void KABCore::importVCard( const QString &vCard, bool showPreview ) 1173void KABCore::importVCard( const QString &vCard, bool showPreview )
1174{ 1174{
1175 mXXPortManager->importVCard( vCard, showPreview ); 1175 mXXPortManager->importVCard( vCard, showPreview );
1176} 1176}
1177 1177
1178//US added a second method without defaultparameter 1178//US added a second method without defaultparameter
1179void KABCore::editContact2() { 1179void KABCore::editContact2() {
1180 editContact( QString::null ); 1180 editContact( QString::null );
1181} 1181}
1182 1182
1183void KABCore::editContact( const QString &uid ) 1183void KABCore::editContact( const QString &uid )
1184{ 1184{
1185 1185
1186 if ( mExtensionManager->isQuickEditVisible() ) 1186 if ( mExtensionManager->isQuickEditVisible() )
1187 return; 1187 return;
1188 1188
1189 // First, locate the contact entry 1189 // First, locate the contact entry
1190 QString localUID = uid; 1190 QString localUID = uid;
1191 if ( localUID.isNull() ) { 1191 if ( localUID.isNull() ) {
1192 QStringList uidList = mViewManager->selectedUids(); 1192 QStringList uidList = mViewManager->selectedUids();
1193 if ( uidList.count() > 0 ) 1193 if ( uidList.count() > 0 )
1194 localUID = *( uidList.at( 0 ) ); 1194 localUID = *( uidList.at( 0 ) );
1195 } 1195 }
1196 1196
1197 KABC::Addressee addr = mAddressBook->findByUid( localUID ); 1197 KABC::Addressee addr = mAddressBook->findByUid( localUID );
1198 if ( !addr.isEmpty() ) { 1198 if ( !addr.isEmpty() ) {
1199 mEditorDialog->setAddressee( addr ); 1199 mEditorDialog->setAddressee( addr );
1200 KApplication::execDialog ( mEditorDialog ); 1200 KApplication::execDialog ( mEditorDialog );
1201 } 1201 }
1202} 1202}
1203 1203
1204/** 1204/**
1205 Shows or edits the detail view for the given uid. If the uid is QString::null, 1205 Shows or edits the detail view for the given uid. If the uid is QString::null,
1206 the method will try to find a selected addressee in the view. 1206 the method will try to find a selected addressee in the view.
1207 */ 1207 */
1208void KABCore::executeContact( const QString &uid /*US = QString::null*/ ) 1208void KABCore::executeContact( const QString &uid /*US = QString::null*/ )
1209{ 1209{
1210 if ( mMultipleViewsAtOnce ) 1210 if ( mMultipleViewsAtOnce )
1211 { 1211 {
1212 editContact( uid ); 1212 editContact( uid );
1213 } 1213 }
1214 else 1214 else
1215 { 1215 {
1216 setDetailsVisible( true ); 1216 setDetailsVisible( true );
1217 mActionDetails->setChecked(true); 1217 mActionDetails->setChecked(true);
1218 } 1218 }
1219 1219
1220} 1220}
1221 1221
1222void KABCore::save() 1222void KABCore::save()
1223{ 1223{
1224 if (syncManager->blockSave()) 1224 if (syncManager->blockSave())
1225 return; 1225 return;
1226 if ( !mModified ) 1226 if ( !mModified )
1227 return; 1227 return;
1228 1228
1229 syncManager->setBlockSave(true); 1229 syncManager->setBlockSave(true);
1230 QString text = i18n( "There was an error while attempting to save\n the " 1230 QString text = i18n( "There was an error while attempting to save\n the "
1231 "address book. Please check that some \nother application is " 1231 "address book. Please check that some \nother application is "
1232 "not using it. " ); 1232 "not using it. " );
1233 message(i18n("Saving addressbook ... ")); 1233 message(i18n("Saving addressbook ... "));
1234#ifndef KAB_EMBEDDED 1234#ifndef KAB_EMBEDDED
1235 KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook ); 1235 KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook );
1236 if ( !b || !b->save() ) { 1236 if ( !b || !b->save() ) {
1237 KMessageBox::error( this, text, i18n( "Unable to Save" ) ); 1237 KMessageBox::error( this, text, i18n( "Unable to Save" ) );
1238 } 1238 }
1239#else //KAB_EMBEDDED 1239#else //KAB_EMBEDDED
1240 KABC::StdAddressBook *b = (KABC::StdAddressBook*)( mAddressBook ); 1240 KABC::StdAddressBook *b = (KABC::StdAddressBook*)( mAddressBook );
1241 if ( !b || !b->save() ) { 1241 if ( !b || !b->save() ) {
1242 QMessageBox::critical( this, i18n( "Unable to Save" ), text, i18n("Ok")); 1242 QMessageBox::critical( this, i18n( "Unable to Save" ), text, i18n("Ok"));
1243 } 1243 }
1244#endif //KAB_EMBEDDED 1244#endif //KAB_EMBEDDED
1245 1245
1246 message(i18n("Addressbook saved!")); 1246 message(i18n("Addressbook saved!"));
1247 setModified( false ); 1247 setModified( false );
1248 syncManager->setBlockSave(false); 1248 syncManager->setBlockSave(false);
1249} 1249}
1250 1250
1251 1251
1252void KABCore::undo() 1252void KABCore::undo()
1253{ 1253{
1254 UndoStack::instance()->undo(); 1254 UndoStack::instance()->undo();
1255 1255
1256 // Refresh the view 1256 // Refresh the view
1257 mViewManager->refreshView(); 1257 mViewManager->refreshView();
1258} 1258}
1259 1259
1260void KABCore::redo() 1260void KABCore::redo()
1261{ 1261{
1262 RedoStack::instance()->redo(); 1262 RedoStack::instance()->redo();
1263 1263
1264 // Refresh the view 1264 // Refresh the view
1265 mViewManager->refreshView(); 1265 mViewManager->refreshView();
1266} 1266}
1267 1267
1268void KABCore::setJumpButtonBarVisible( bool visible ) 1268void KABCore::setJumpButtonBarVisible( bool visible )
1269{ 1269{
1270 if (mMultipleViewsAtOnce) 1270 if (mMultipleViewsAtOnce)
1271 { 1271 {
1272 if ( visible ) 1272 if ( visible )
1273 mJumpButtonBar->show(); 1273 mJumpButtonBar->show();
1274 else 1274 else
1275 mJumpButtonBar->hide(); 1275 mJumpButtonBar->hide();
1276 } 1276 }
1277 else 1277 else
1278 { 1278 {
1279 // show the jumpbar only if "the details are hidden" == "viewmanager are shown" 1279 // show the jumpbar only if "the details are hidden" == "viewmanager are shown"
1280 if (mViewManager->isVisible()) 1280 if (mViewManager->isVisible())
1281 { 1281 {
1282 if ( visible ) 1282 if ( visible )
1283 mJumpButtonBar->show(); 1283 mJumpButtonBar->show();
1284 else 1284 else
1285 mJumpButtonBar->hide(); 1285 mJumpButtonBar->hide();
1286 } 1286 }
1287 else 1287 else
1288 { 1288 {
1289 mJumpButtonBar->hide(); 1289 mJumpButtonBar->hide();
1290 } 1290 }
1291 } 1291 }
1292} 1292}
1293 1293
1294 1294
1295void KABCore::setDetailsToState() 1295void KABCore::setDetailsToState()
1296{ 1296{
1297 setDetailsVisible( mActionDetails->isChecked() ); 1297 setDetailsVisible( mActionDetails->isChecked() );
1298} 1298}
1299void KABCore::setDetailsToggle() 1299void KABCore::setDetailsToggle()
1300{ 1300{
1301 mActionDetails->setChecked( !mActionDetails->isChecked() ); 1301 mActionDetails->setChecked( !mActionDetails->isChecked() );
1302 setDetailsToState(); 1302 setDetailsToState();
1303} 1303}
1304 1304
1305 1305
1306 1306
1307void KABCore::setDetailsVisible( bool visible ) 1307void KABCore::setDetailsVisible( bool visible )
1308{ 1308{
1309 if (visible && mDetails->isHidden()) 1309 if (visible && mDetails->isHidden())
1310 { 1310 {
1311 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 1311 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
1312 if ( addrList.count() > 0 ) 1312 if ( addrList.count() > 0 )
1313 mDetails->setAddressee( addrList[ 0 ] ); 1313 mDetails->setAddressee( addrList[ 0 ] );
1314 } 1314 }
1315 1315
1316 // mMultipleViewsAtOnce=false: mDetails is always visible. But we switch between 1316 // mMultipleViewsAtOnce=false: mDetails is always visible. But we switch between
1317 // the listview and the detailview. We do that by changing the splitbar size. 1317 // the listview and the detailview. We do that by changing the splitbar size.
1318 if (mMultipleViewsAtOnce) 1318 if (mMultipleViewsAtOnce)
1319 { 1319 {
1320 if ( visible ) 1320 if ( visible )
1321 mDetails->show(); 1321 mDetails->show();
1322 else 1322 else
1323 mDetails->hide(); 1323 mDetails->hide();
1324 } 1324 }
1325 else 1325 else
1326 { 1326 {
1327 if ( visible ) { 1327 if ( visible ) {
1328 mViewManager->hide(); 1328 mViewManager->hide();
1329 mDetails->show(); 1329 mDetails->show();
1330 mIncSearchWidget->setFocus(); 1330 mIncSearchWidget->setFocus();
1331 } 1331 }
1332 else { 1332 else {
1333 mViewManager->show(); 1333 mViewManager->show();
1334 mDetails->hide(); 1334 mDetails->hide();
1335 mViewManager->setFocusAV(); 1335 mViewManager->setFocusAV();
1336 } 1336 }
1337 setJumpButtonBarVisible( !visible ); 1337 setJumpButtonBarVisible( !visible );
1338 } 1338 }
1339 1339
1340} 1340}
1341 1341
1342void KABCore::extensionChanged( int id ) 1342void KABCore::extensionChanged( int id )
1343{ 1343{
1344 //change the details view only for non desktop systems 1344 //change the details view only for non desktop systems
1345#ifndef DESKTOP_VERSION 1345#ifndef DESKTOP_VERSION
1346 1346
1347 if (id == 0) 1347 if (id == 0)
1348 { 1348 {
1349 //the user disabled the extension. 1349 //the user disabled the extension.
1350 1350
1351 if (mMultipleViewsAtOnce) 1351 if (mMultipleViewsAtOnce)
1352 { // enable detailsview again 1352 { // enable detailsview again
1353 setDetailsVisible( true ); 1353 setDetailsVisible( true );
1354 mActionDetails->setChecked( true ); 1354 mActionDetails->setChecked( true );
1355 } 1355 }
1356 else 1356 else
1357 { //go back to the listview 1357 { //go back to the listview
1358 setDetailsVisible( false ); 1358 setDetailsVisible( false );
1359 mActionDetails->setChecked( false ); 1359 mActionDetails->setChecked( false );
1360 mActionDetails->setEnabled(true); 1360 mActionDetails->setEnabled(true);
1361 } 1361 }
1362 1362
1363 } 1363 }
1364 else 1364 else
1365 { 1365 {
1366 //the user enabled the extension. 1366 //the user enabled the extension.
1367 setDetailsVisible( false ); 1367 setDetailsVisible( false );
1368 mActionDetails->setChecked( false ); 1368 mActionDetails->setChecked( false );
1369 1369
1370 if (!mMultipleViewsAtOnce) 1370 if (!mMultipleViewsAtOnce)
1371 { 1371 {
1372 mActionDetails->setEnabled(false); 1372 mActionDetails->setEnabled(false);
1373 } 1373 }
1374 1374
1375 mExtensionManager->setSelectionChanged(); 1375 mExtensionManager->setSelectionChanged();
1376 1376
1377 } 1377 }
1378 1378
1379#endif// DESKTOP_VERSION 1379#endif// DESKTOP_VERSION
1380 1380
1381} 1381}
1382 1382
1383 1383
1384void KABCore::extensionModified( const KABC::Addressee::List &list ) 1384void KABCore::extensionModified( const KABC::Addressee::List &list )
1385{ 1385{
1386 1386
1387 if ( list.count() != 0 ) { 1387 if ( list.count() != 0 ) {
1388 KABC::Addressee::List::ConstIterator it; 1388 KABC::Addressee::List::ConstIterator it;
1389 for ( it = list.begin(); it != list.end(); ++it ) 1389 for ( it = list.begin(); it != list.end(); ++it )
1390 mAddressBook->insertAddressee( *it ); 1390 mAddressBook->insertAddressee( *it );
1391 if ( list.count() > 1 ) 1391 if ( list.count() > 1 )
1392 setModified(); 1392 setModified();
1393 else 1393 else
1394 setModifiedWOrefresh(); 1394 setModifiedWOrefresh();
1395 } 1395 }
1396 if ( list.count() == 0 ) 1396 if ( list.count() == 0 )
1397 mViewManager->refreshView(); 1397 mViewManager->refreshView();
1398 else 1398 else
1399 mViewManager->refreshView( list[ 0 ].uid() ); 1399 mViewManager->refreshView( list[ 0 ].uid() );
1400 1400
1401 1401
1402 1402
1403} 1403}
1404 1404
1405QString KABCore::getNameByPhone( const QString &phone ) 1405QString KABCore::getNameByPhone( const QString &phone )
1406{ 1406{
1407#ifndef KAB_EMBEDDED 1407#ifndef KAB_EMBEDDED
1408 QRegExp r( "[/*/-/ ]" ); 1408 QRegExp r( "[/*/-/ ]" );
1409 QString localPhone( phone ); 1409 QString localPhone( phone );
1410 1410
1411 bool found = false; 1411 bool found = false;
1412 QString ownerName = ""; 1412 QString ownerName = "";
1413 KABC::AddressBook::Iterator iter; 1413 KABC::AddressBook::Iterator iter;
1414 KABC::PhoneNumber::List::Iterator phoneIter; 1414 KABC::PhoneNumber::List::Iterator phoneIter;
1415 KABC::PhoneNumber::List phoneList; 1415 KABC::PhoneNumber::List phoneList;
1416 for ( iter = mAddressBook->begin(); !found && ( iter != mAddressBook->end() ); ++iter ) { 1416 for ( iter = mAddressBook->begin(); !found && ( iter != mAddressBook->end() ); ++iter ) {
1417 phoneList = (*iter).phoneNumbers(); 1417 phoneList = (*iter).phoneNumbers();
1418 for ( phoneIter = phoneList.begin(); !found && ( phoneIter != phoneList.end() ); 1418 for ( phoneIter = phoneList.begin(); !found && ( phoneIter != phoneList.end() );
1419 ++phoneIter) { 1419 ++phoneIter) {
1420 // Get rid of separator chars so just the numbers are compared. 1420 // Get rid of separator chars so just the numbers are compared.
1421 if ( (*phoneIter).number().replace( r, "" ) == localPhone.replace( r, "" ) ) { 1421 if ( (*phoneIter).number().replace( r, "" ) == localPhone.replace( r, "" ) ) {
1422 ownerName = (*iter).formattedName(); 1422 ownerName = (*iter).formattedName();
1423 found = true; 1423 found = true;
1424 } 1424 }
1425 } 1425 }
1426 } 1426 }
1427 1427
1428 return ownerName; 1428 return ownerName;
1429#else //KAB_EMBEDDED 1429#else //KAB_EMBEDDED
1430 qDebug("KABCore::getNameByPhone finsih method"); 1430 qDebug("KABCore::getNameByPhone finsih method");
1431 return ""; 1431 return "";
1432#endif //KAB_EMBEDDED 1432#endif //KAB_EMBEDDED
1433 1433
1434} 1434}
1435 1435
1436void KABCore::openConfigDialog() 1436void KABCore::openConfigDialog()
1437{ 1437{
1438 KCMultiDialog* ConfigureDialog = new KCMultiDialog( "PIM", this ,"kabconfigdialog", true ); 1438 KCMultiDialog* ConfigureDialog = new KCMultiDialog( "PIM", this ,"kabconfigdialog", true );
1439 KCMKabConfig* kabcfg = new KCMKabConfig( ConfigureDialog->getNewVBoxPage(i18n( "Addressbook")) , "KCMKabConfig" ); 1439 KCMKabConfig* kabcfg = new KCMKabConfig( ConfigureDialog->getNewVBoxPage(i18n( "Addressbook")) , "KCMKabConfig" );
1440 ConfigureDialog->addModule(kabcfg ); 1440 ConfigureDialog->addModule(kabcfg );
1441 KCMKdePimConfig* kdelibcfg = new KCMKdePimConfig( ConfigureDialog->getNewVBoxPage(i18n( "Global")) , "KCMKdeLibConfig" ); 1441 KCMKdePimConfig* kdelibcfg = new KCMKdePimConfig( ConfigureDialog->getNewVBoxPage(i18n( "Global")) , "KCMKdeLibConfig" );
1442 ConfigureDialog->addModule(kdelibcfg ); 1442 ConfigureDialog->addModule(kdelibcfg );
1443 1443
1444 connect( ConfigureDialog, SIGNAL( applyClicked() ), 1444 connect( ConfigureDialog, SIGNAL( applyClicked() ),
1445 this, SLOT( configurationChanged() ) ); 1445 this, SLOT( configurationChanged() ) );
1446 connect( ConfigureDialog, SIGNAL( okClicked() ), 1446 connect( ConfigureDialog, SIGNAL( okClicked() ),
1447 this, SLOT( configurationChanged() ) ); 1447 this, SLOT( configurationChanged() ) );
1448 saveSettings(); 1448 saveSettings();
1449#ifndef DESKTOP_VERSION 1449#ifndef DESKTOP_VERSION
1450 ConfigureDialog->showMaximized(); 1450 ConfigureDialog->showMaximized();
1451#endif 1451#endif
1452 if ( ConfigureDialog->exec() ) 1452 if ( ConfigureDialog->exec() )
1453 KMessageBox::information( this, i18n("Some changes are only\neffective after a restart!\n") ); 1453 KMessageBox::information( this, i18n("Some changes are only\neffective after a restart!\n") );
1454 delete ConfigureDialog; 1454 delete ConfigureDialog;
1455} 1455}
1456 1456
1457void KABCore::openLDAPDialog() 1457void KABCore::openLDAPDialog()
1458{ 1458{
1459#ifndef KAB_EMBEDDED 1459#ifndef KAB_EMBEDDED
1460 if ( !mLdapSearchDialog ) { 1460 if ( !mLdapSearchDialog ) {
1461 mLdapSearchDialog = new LDAPSearchDialog( mAddressBook, this ); 1461 mLdapSearchDialog = new LDAPSearchDialog( mAddressBook, this );
1462 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), mViewManager, 1462 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), mViewManager,
1463 SLOT( refreshView() ) ); 1463 SLOT( refreshView() ) );
1464 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), this, 1464 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), this,
1465 SLOT( setModified() ) ); 1465 SLOT( setModified() ) );
1466 } else 1466 } else
1467 mLdapSearchDialog->restoreSettings(); 1467 mLdapSearchDialog->restoreSettings();
1468 1468
1469 if ( mLdapSearchDialog->isOK() ) 1469 if ( mLdapSearchDialog->isOK() )
1470 mLdapSearchDialog->exec(); 1470 mLdapSearchDialog->exec();
1471#else //KAB_EMBEDDED 1471#else //KAB_EMBEDDED
1472 qDebug("KABCore::openLDAPDialog() finsih method"); 1472 qDebug("KABCore::openLDAPDialog() finsih method");
1473#endif //KAB_EMBEDDED 1473#endif //KAB_EMBEDDED
1474} 1474}
1475 1475
1476void KABCore::print() 1476void KABCore::print()
1477{ 1477{
1478#ifndef KAB_EMBEDDED 1478#ifndef KAB_EMBEDDED
1479 KPrinter printer; 1479 KPrinter printer;
1480 if ( !printer.setup( this ) ) 1480 if ( !printer.setup( this ) )
1481 return; 1481 return;
1482 1482
1483 KABPrinting::PrintingWizard wizard( &printer, mAddressBook, 1483 KABPrinting::PrintingWizard wizard( &printer, mAddressBook,
1484 mViewManager->selectedUids(), this ); 1484 mViewManager->selectedUids(), this );
1485 1485
1486 wizard.exec(); 1486 wizard.exec();
1487#else //KAB_EMBEDDED 1487#else //KAB_EMBEDDED
1488 qDebug("KABCore::print() finsih method"); 1488 qDebug("KABCore::print() finsih method");
1489#endif //KAB_EMBEDDED 1489#endif //KAB_EMBEDDED
1490 1490
1491} 1491}
1492 1492
1493 1493
1494void KABCore::addGUIClient( KXMLGUIClient *client ) 1494void KABCore::addGUIClient( KXMLGUIClient *client )
1495{ 1495{
1496 if ( mGUIClient ) 1496 if ( mGUIClient )
1497 mGUIClient->insertChildClient( client ); 1497 mGUIClient->insertChildClient( client );
1498 else 1498 else
1499 KMessageBox::error( this, "no KXMLGUICLient"); 1499 KMessageBox::error( this, "no KXMLGUICLient");
1500} 1500}
1501 1501
1502 1502
1503void KABCore::configurationChanged() 1503void KABCore::configurationChanged()
1504{ 1504{
1505 mExtensionManager->reconfigure(); 1505 mExtensionManager->reconfigure();
1506} 1506}
1507 1507
1508void KABCore::addressBookChanged() 1508void KABCore::addressBookChanged()
1509{ 1509{
1510/*US 1510/*US
1511 QDictIterator<AddresseeEditorDialog> it( mEditorDict ); 1511 QDictIterator<AddresseeEditorDialog> it( mEditorDict );
1512 while ( it.current() ) { 1512 while ( it.current() ) {
1513 if ( it.current()->dirty() ) { 1513 if ( it.current()->dirty() ) {
1514 QString text = i18n( "Data has been changed externally. Unsaved " 1514 QString text = i18n( "Data has been changed externally. Unsaved "
1515 "changes will be lost." ); 1515 "changes will be lost." );
1516 KMessageBox::information( this, text ); 1516 KMessageBox::information( this, text );
1517 } 1517 }
1518 it.current()->setAddressee( mAddressBook->findByUid( it.currentKey() ) ); 1518 it.current()->setAddressee( mAddressBook->findByUid( it.currentKey() ) );
1519 ++it; 1519 ++it;
1520 } 1520 }
1521*/ 1521*/
1522 if (mEditorDialog) 1522 if (mEditorDialog)
1523 { 1523 {
1524 if (mEditorDialog->dirty()) 1524 if (mEditorDialog->dirty())
1525 { 1525 {
1526 QString text = i18n( "Data has been changed externally. Unsaved " 1526 QString text = i18n( "Data has been changed externally. Unsaved "
1527 "changes will be lost." ); 1527 "changes will be lost." );
1528 KMessageBox::information( this, text ); 1528 KMessageBox::information( this, text );
1529 } 1529 }
1530 QString currentuid = mEditorDialog->addressee().uid(); 1530 QString currentuid = mEditorDialog->addressee().uid();
1531 mEditorDialog->setAddressee( mAddressBook->findByUid( currentuid ) ); 1531 mEditorDialog->setAddressee( mAddressBook->findByUid( currentuid ) );
1532 } 1532 }
1533 mViewManager->refreshView(); 1533 mViewManager->refreshView();
1534// mDetails->refreshView(); 1534// mDetails->refreshView();
1535 1535
1536 1536
1537} 1537}
1538 1538
1539AddresseeEditorDialog *KABCore::createAddresseeEditorDialog( QWidget *parent, 1539AddresseeEditorDialog *KABCore::createAddresseeEditorDialog( QWidget *parent,
1540 const char *name ) 1540 const char *name )
1541{ 1541{
1542 1542
1543 if ( mEditorDialog == 0 ) { 1543 if ( mEditorDialog == 0 ) {
1544 mEditorDialog = new AddresseeEditorDialog( this, parent, 1544 mEditorDialog = new AddresseeEditorDialog( this, parent,
1545 name ? name : "editorDialog" ); 1545 name ? name : "editorDialog" );
1546 1546
1547 1547
1548 connect( mEditorDialog, SIGNAL( contactModified( const KABC::Addressee& ) ), 1548 connect( mEditorDialog, SIGNAL( contactModified( const KABC::Addressee& ) ),
1549 SLOT( contactModified( const KABC::Addressee& ) ) ); 1549 SLOT( contactModified( const KABC::Addressee& ) ) );
1550 //connect( mEditorDialog, SIGNAL( editorDestroyed( const QString& ) ), 1550 //connect( mEditorDialog, SIGNAL( editorDestroyed( const QString& ) ),
1551 // SLOT( slotEditorDestroyed( const QString& ) ) ; 1551 // SLOT( slotEditorDestroyed( const QString& ) ) ;
1552 } 1552 }
1553 1553
1554 return mEditorDialog; 1554 return mEditorDialog;
1555} 1555}
1556 1556
1557void KABCore::slotEditorDestroyed( const QString &uid ) 1557void KABCore::slotEditorDestroyed( const QString &uid )
1558{ 1558{
1559 //mEditorDict.remove( uid ); 1559 //mEditorDict.remove( uid );
1560} 1560}
1561 1561
1562void KABCore::initGUI() 1562void KABCore::initGUI()
1563{ 1563{
1564#ifndef KAB_EMBEDDED 1564#ifndef KAB_EMBEDDED
1565 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1565 QHBoxLayout *topLayout = new QHBoxLayout( this );
1566 topLayout->setSpacing( KDialogBase::spacingHint() ); 1566 topLayout->setSpacing( KDialogBase::spacingHint() );
1567 1567
1568 mExtensionBarSplitter = new QSplitter( this ); 1568 mExtensionBarSplitter = new QSplitter( this );
1569 mExtensionBarSplitter->setOrientation( Qt::Vertical ); 1569 mExtensionBarSplitter->setOrientation( Qt::Vertical );
1570 1570
1571 mDetailsSplitter = new QSplitter( mExtensionBarSplitter ); 1571 mDetailsSplitter = new QSplitter( mExtensionBarSplitter );
1572 1572
1573 QVBox *viewSpace = new QVBox( mDetailsSplitter ); 1573 QVBox *viewSpace = new QVBox( mDetailsSplitter );
1574 mIncSearchWidget = new IncSearchWidget( viewSpace ); 1574 mIncSearchWidget = new IncSearchWidget( viewSpace );
1575 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 1575 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
1576 SLOT( incrementalSearch( const QString& ) ) ); 1576 SLOT( incrementalSearch( const QString& ) ) );
1577 1577
1578 mViewManager = new ViewManager( this, viewSpace ); 1578 mViewManager = new ViewManager( this, viewSpace );
1579 viewSpace->setStretchFactor( mViewManager, 1 ); 1579 viewSpace->setStretchFactor( mViewManager, 1 );
1580 1580
1581 mDetails = new ViewContainer( mDetailsSplitter ); 1581 mDetails = new ViewContainer( mDetailsSplitter );
1582 1582
1583 mJumpButtonBar = new JumpButtonBar( this, this ); 1583 mJumpButtonBar = new JumpButtonBar( this, this );
1584 1584
1585 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter ); 1585 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter );
1586 1586
1587 topLayout->addWidget( mExtensionBarSplitter ); 1587 topLayout->addWidget( mExtensionBarSplitter );
1588 topLayout->setStretchFactor( mExtensionBarSplitter, 100 ); 1588 topLayout->setStretchFactor( mExtensionBarSplitter, 100 );
1589 topLayout->addWidget( mJumpButtonBar ); 1589 topLayout->addWidget( mJumpButtonBar );
1590 topLayout->setStretchFactor( mJumpButtonBar, 1 ); 1590 topLayout->setStretchFactor( mJumpButtonBar, 1 );
1591 1591
1592 mXXPortManager = new XXPortManager( this, this ); 1592 mXXPortManager = new XXPortManager( this, this );
1593 1593
1594#else //KAB_EMBEDDED 1594#else //KAB_EMBEDDED
1595 //US initialize viewMenu before settingup viewmanager. 1595 //US initialize viewMenu before settingup viewmanager.
1596 // Viewmanager needs this menu to plugin submenues. 1596 // Viewmanager needs this menu to plugin submenues.
1597 viewMenu = new QPopupMenu( this ); 1597 viewMenu = new QPopupMenu( this );
1598 settingsMenu = new QPopupMenu( this ); 1598 settingsMenu = new QPopupMenu( this );
1599 //filterMenu = new QPopupMenu( this ); 1599 //filterMenu = new QPopupMenu( this );
1600 ImportMenu = new QPopupMenu( this ); 1600 ImportMenu = new QPopupMenu( this );
1601 ExportMenu = new QPopupMenu( this ); 1601 ExportMenu = new QPopupMenu( this );
1602 syncMenu = new QPopupMenu( this ); 1602 syncMenu = new QPopupMenu( this );
1603 changeMenu= new QPopupMenu( this ); 1603 changeMenu= new QPopupMenu( this );
1604 1604
1605//US since we have no splitter for the embedded system, setup 1605//US since we have no splitter for the embedded system, setup
1606// a layout with two frames. One left and one right. 1606// a layout with two frames. One left and one right.
1607 1607
1608 QBoxLayout *topLayout; 1608 QBoxLayout *topLayout;
1609 1609
1610 // = new QHBoxLayout( this ); 1610 // = new QHBoxLayout( this );
1611// QBoxLayout *topLayout = (QBoxLayout*)layout(); 1611// QBoxLayout *topLayout = (QBoxLayout*)layout();
1612 1612
1613// QWidget *mainBox = new QWidget( this ); 1613// QWidget *mainBox = new QWidget( this );
1614// QBoxLayout * mainBoxLayout = new QHBoxLayout(mainBox); 1614// QBoxLayout * mainBoxLayout = new QHBoxLayout(mainBox);
1615 1615
1616#ifdef DESKTOP_VERSION 1616#ifdef DESKTOP_VERSION
1617 topLayout = new QHBoxLayout( this ); 1617 topLayout = new QHBoxLayout( this );
1618 1618
1619 1619
1620 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 1620 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
1621 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 1621 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
1622 1622
1623 topLayout->addWidget(mMiniSplitter ); 1623 topLayout->addWidget(mMiniSplitter );
1624 1624
1625 mExtensionBarSplitter = new KDGanttMinimizeSplitter( Qt::Vertical,mMiniSplitter ); 1625 mExtensionBarSplitter = new KDGanttMinimizeSplitter( Qt::Vertical,mMiniSplitter );
1626 mExtensionBarSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down ); 1626 mExtensionBarSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down );
1627 mViewManager = new ViewManager( this, mExtensionBarSplitter ); 1627 mViewManager = new ViewManager( this, mExtensionBarSplitter );
1628 mDetails = new ViewContainer( mMiniSplitter ); 1628 mDetails = new ViewContainer( mMiniSplitter );
1629 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter ); 1629 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter );
1630#else 1630#else
1631 if ( QApplication::desktop()->width() > 480 ) { 1631 if ( QApplication::desktop()->width() > 480 ) {
1632 topLayout = new QHBoxLayout( this ); 1632 topLayout = new QHBoxLayout( this );
1633 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 1633 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
1634 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 1634 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
1635 } else { 1635 } else {
1636 1636
1637 topLayout = new QHBoxLayout( this ); 1637 topLayout = new QHBoxLayout( this );
1638 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Vertical, this); 1638 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Vertical, this);
1639 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down ); 1639 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down );
1640 } 1640 }
1641 1641
1642 topLayout->addWidget(mMiniSplitter ); 1642 topLayout->addWidget(mMiniSplitter );
1643 mViewManager = new ViewManager( this, mMiniSplitter ); 1643 mViewManager = new ViewManager( this, mMiniSplitter );
1644 mDetails = new ViewContainer( mMiniSplitter ); 1644 mDetails = new ViewContainer( mMiniSplitter );
1645 1645
1646 1646
1647 mExtensionManager = new ExtensionManager( this, mMiniSplitter ); 1647 mExtensionManager = new ExtensionManager( this, mMiniSplitter );
1648#endif 1648#endif
1649 //eh->hide(); 1649 //eh->hide();
1650 // topLayout->addWidget(mExtensionManager ); 1650 // topLayout->addWidget(mExtensionManager );
1651 1651
1652 1652
1653/*US 1653/*US
1654#ifndef KAB_NOSPLITTER 1654#ifndef KAB_NOSPLITTER
1655 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1655 QHBoxLayout *topLayout = new QHBoxLayout( this );
1656//US topLayout->setSpacing( KDialogBase::spacingHint() ); 1656//US topLayout->setSpacing( KDialogBase::spacingHint() );
1657 topLayout->setSpacing( 10 ); 1657 topLayout->setSpacing( 10 );
1658 1658
1659 mDetailsSplitter = new QSplitter( this ); 1659 mDetailsSplitter = new QSplitter( this );
1660 1660
1661 QVBox *viewSpace = new QVBox( mDetailsSplitter ); 1661 QVBox *viewSpace = new QVBox( mDetailsSplitter );
1662 1662
1663 mViewManager = new ViewManager( this, viewSpace ); 1663 mViewManager = new ViewManager( this, viewSpace );
1664 viewSpace->setStretchFactor( mViewManager, 1 ); 1664 viewSpace->setStretchFactor( mViewManager, 1 );
1665 1665
1666 mDetails = new ViewContainer( mDetailsSplitter ); 1666 mDetails = new ViewContainer( mDetailsSplitter );
1667 1667
1668 topLayout->addWidget( mDetailsSplitter ); 1668 topLayout->addWidget( mDetailsSplitter );
1669 topLayout->setStretchFactor( mDetailsSplitter, 100 ); 1669 topLayout->setStretchFactor( mDetailsSplitter, 100 );
1670#else //KAB_NOSPLITTER 1670#else //KAB_NOSPLITTER
1671 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1671 QHBoxLayout *topLayout = new QHBoxLayout( this );
1672//US topLayout->setSpacing( KDialogBase::spacingHint() ); 1672//US topLayout->setSpacing( KDialogBase::spacingHint() );
1673 topLayout->setSpacing( 10 ); 1673 topLayout->setSpacing( 10 );
1674 1674
1675// mDetailsSplitter = new QSplitter( this ); 1675// mDetailsSplitter = new QSplitter( this );
1676 1676
1677 QVBox *viewSpace = new QVBox( this ); 1677 QVBox *viewSpace = new QVBox( this );
1678 1678
1679 mViewManager = new ViewManager( this, viewSpace ); 1679 mViewManager = new ViewManager( this, viewSpace );
1680 viewSpace->setStretchFactor( mViewManager, 1 ); 1680 viewSpace->setStretchFactor( mViewManager, 1 );
1681 1681
1682 mDetails = new ViewContainer( this ); 1682 mDetails = new ViewContainer( this );
1683 1683
1684 topLayout->addWidget( viewSpace ); 1684 topLayout->addWidget( viewSpace );
1685// topLayout->setStretchFactor( mDetailsSplitter, 100 ); 1685// topLayout->setStretchFactor( mDetailsSplitter, 100 );
1686 topLayout->addWidget( mDetails ); 1686 topLayout->addWidget( mDetails );
1687#endif //KAB_NOSPLITTER 1687#endif //KAB_NOSPLITTER
1688*/ 1688*/
1689 1689
1690 syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::KAPI, KABPrefs::instance(), syncMenu); 1690 syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::KAPI, KABPrefs::instance(), syncMenu);
1691 syncManager->setBlockSave(false); 1691 syncManager->setBlockSave(false);
1692 1692
1693 connect(syncManager , SIGNAL( request_file() ), this, SLOT( syncFileRequest() ) ); 1693 connect(syncManager , SIGNAL( request_file() ), this, SLOT( syncFileRequest() ) );
1694 connect(syncManager , SIGNAL( getFile( bool )), this, SLOT(getFile( bool ) ) ); 1694 connect(syncManager , SIGNAL( getFile( bool )), this, SLOT(getFile( bool ) ) );
1695 syncManager->setDefaultFileName( sentSyncFile()); 1695 syncManager->setDefaultFileName( sentSyncFile());
1696 //connect(syncManager , SIGNAL( ), this, SLOT( ) ); 1696 //connect(syncManager , SIGNAL( ), this, SLOT( ) );
1697 1697
1698#endif //KAB_EMBEDDED 1698#endif //KAB_EMBEDDED
1699 initActions(); 1699 initActions();
1700 1700
1701#ifdef KAB_EMBEDDED 1701#ifdef KAB_EMBEDDED
1702 addActionsManually(); 1702 addActionsManually();
1703 //US make sure the export and import menues are initialized before creating the xxPortManager. 1703 //US make sure the export and import menues are initialized before creating the xxPortManager.
1704 mXXPortManager = new XXPortManager( this, this ); 1704 mXXPortManager = new XXPortManager( this, this );
1705 1705
1706 // LR mIncSearchWidget = new IncSearchWidget( mMainWindow->getIconToolBar() ); 1706 // LR mIncSearchWidget = new IncSearchWidget( mMainWindow->getIconToolBar() );
1707 //mMainWindow->toolBar()->insertWidget(-1, 4, mIncSearchWidget); 1707 //mMainWindow->toolBar()->insertWidget(-1, 4, mIncSearchWidget);
1708 // mActionQuit->plug ( mMainWindow->toolBar()); 1708 // mActionQuit->plug ( mMainWindow->toolBar());
1709 //mIncSearchWidget = new IncSearchWidget( mMainWindow->toolBar() ); 1709 //mIncSearchWidget = new IncSearchWidget( mMainWindow->toolBar() );
1710 //mMainWindow->toolBar()->insertWidget(-1, 0, mIncSearchWidget); 1710 //mMainWindow->toolBar()->insertWidget(-1, 0, mIncSearchWidget);
1711 // mIncSearchWidget->hide(); 1711 // mIncSearchWidget->hide();
1712 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 1712 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
1713 SLOT( incrementalSearch( const QString& ) ) ); 1713 SLOT( incrementalSearch( const QString& ) ) );
1714 connect( mIncSearchWidget, SIGNAL( scrollUP() ),mViewManager, SLOT( scrollUP() ) ); 1714 connect( mIncSearchWidget, SIGNAL( scrollUP() ),mViewManager, SLOT( scrollUP() ) );
1715 connect( mIncSearchWidget, SIGNAL( scrollDOWN() ),mViewManager, SLOT( scrollDOWN() ) ); 1715 connect( mIncSearchWidget, SIGNAL( scrollDOWN() ),mViewManager, SLOT( scrollDOWN() ) );
1716 1716
1717 mJumpButtonBar = new JumpButtonBar( this, this ); 1717 mJumpButtonBar = new JumpButtonBar( this, this );
1718 1718
1719 topLayout->addWidget( mJumpButtonBar ); 1719 topLayout->addWidget( mJumpButtonBar );
1720//US topLayout->setStretchFactor( mJumpButtonBar, 10 ); 1720//US topLayout->setStretchFactor( mJumpButtonBar, 10 );
1721 1721
1722// mMainWindow->getIconToolBar()->raise(); 1722// mMainWindow->getIconToolBar()->raise();
1723 1723
1724#endif //KAB_EMBEDDED 1724#endif //KAB_EMBEDDED
1725 1725
1726} 1726}
1727void KABCore::initActions() 1727void KABCore::initActions()
1728{ 1728{
1729//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart); 1729//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart);
1730 1730
1731#ifndef KAB_EMBEDDED 1731#ifndef KAB_EMBEDDED
1732 connect( QApplication::clipboard(), SIGNAL( dataChanged() ), 1732 connect( QApplication::clipboard(), SIGNAL( dataChanged() ),
1733 SLOT( clipboardDataChanged() ) ); 1733 SLOT( clipboardDataChanged() ) );
1734#endif //KAB_EMBEDDED 1734#endif //KAB_EMBEDDED
1735 1735
1736 // file menu 1736 // file menu
1737 if ( mIsPart ) { 1737 if ( mIsPart ) {
1738 mActionMail = new KAction( i18n( "&Mail" ), "mail_generic", 0, this, 1738 mActionMail = new KAction( i18n( "&Mail" ), "mail_generic", 0, this,
1739 SLOT( sendMail() ), actionCollection(), 1739 SLOT( sendMail() ), actionCollection(),
1740 "kaddressbook_mail" ); 1740 "kaddressbook_mail" );
1741 mActionPrint = new KAction( i18n( "&Print" ), "fileprint", CTRL + Key_P, this, 1741 mActionPrint = new KAction( i18n( "&Print" ), "fileprint", CTRL + Key_P, this,
1742 SLOT( print() ), actionCollection(), "kaddressbook_print" ); 1742 SLOT( print() ), actionCollection(), "kaddressbook_print" );
1743 1743
1744 } else { 1744 } else {
1745 mActionMail = KStdAction::mail( this, SLOT( sendMail() ), actionCollection() ); 1745 mActionMail = KStdAction::mail( this, SLOT( sendMail() ), actionCollection() );
1746 mActionPrint = KStdAction::print( this, SLOT( print() ), actionCollection() ); 1746 mActionPrint = KStdAction::print( this, SLOT( print() ), actionCollection() );
1747 } 1747 }
1748 1748
1749 1749
1750 mActionSave = new KAction( i18n( "&Save" ), "filesave", CTRL+Key_S, this, 1750 mActionSave = new KAction( i18n( "&Save" ), "filesave", CTRL+Key_S, this,
1751 SLOT( save() ), actionCollection(), "file_sync" ); 1751 SLOT( save() ), actionCollection(), "file_sync" );
1752 1752
1753 mActionNewContact = new KAction( i18n( "&New Contact..." ), "filenew", CTRL+Key_N, this, 1753 mActionNewContact = new KAction( i18n( "&New Contact..." ), "filenew", CTRL+Key_N, this,
1754 SLOT( newContact() ), actionCollection(), "file_new_contact" ); 1754 SLOT( newContact() ), actionCollection(), "file_new_contact" );
1755 1755
1756 mActionMailVCard = new KAction(i18n("Mail &vCard..."), "mail_post_to", 0, 1756 mActionMailVCard = new KAction(i18n("Mail &vCard..."), "mail_post_to", 0,
1757 this, SLOT( mailVCard() ), 1757 this, SLOT( mailVCard() ),
1758 actionCollection(), "file_mail_vcard"); 1758 actionCollection(), "file_mail_vcard");
1759 1759
1760 mActionExport2phone = new KAction( i18n( "Selected to phone" ), "ex2phone", 0, this, 1760 mActionExport2phone = new KAction( i18n( "Selected to phone" ), "ex2phone", 0, this,
1761 SLOT( export2phone() ), actionCollection(), 1761 SLOT( export2phone() ), actionCollection(),
1762 "kaddressbook_ex2phone" ); 1762 "kaddressbook_ex2phone" );
1763 1763
1764 mActionBeamVCard = 0; 1764 mActionBeamVCard = 0;
1765 mActionBeam = 0; 1765 mActionBeam = 0;
1766 1766
1767#ifndef DESKTOP_VERSION 1767#ifndef DESKTOP_VERSION
1768 if ( Ir::supported() ) { 1768 if ( Ir::supported() ) {
1769 mActionBeamVCard = new KAction( i18n( "Beam selected v&Card(s)" ), "beam", 0, this, 1769 mActionBeamVCard = new KAction( i18n( "Beam selected v&Card(s)" ), "beam", 0, this,
1770 SLOT( beamVCard() ), actionCollection(), 1770 SLOT( beamVCard() ), actionCollection(),
1771 "kaddressbook_beam_vcard" ); 1771 "kaddressbook_beam_vcard" );
1772 1772
1773 mActionBeam = new KAction( i18n( "&Beam personal vCard" ), "beam", 0, this, 1773 mActionBeam = new KAction( i18n( "&Beam personal vCard" ), "beam", 0, this,
1774 SLOT( beamMySelf() ), actionCollection(), 1774 SLOT( beamMySelf() ), actionCollection(),
1775 "kaddressbook_beam_myself" ); 1775 "kaddressbook_beam_myself" );
1776 } 1776 }
1777#endif 1777#endif
1778 1778
1779 mActionEditAddressee = new KAction( i18n( "&Edit Contact..." ), "edit", 0, 1779 mActionEditAddressee = new KAction( i18n( "&Edit Contact..." ), "edit", 0,
1780 this, SLOT( editContact2() ), 1780 this, SLOT( editContact2() ),
1781 actionCollection(), "file_properties" ); 1781 actionCollection(), "file_properties" );
1782 1782
1783#ifdef KAB_EMBEDDED 1783#ifdef KAB_EMBEDDED
1784 // mActionQuit = KStdAction::quit( mMainWindow, SLOT( exit() ), actionCollection() ); 1784 // mActionQuit = KStdAction::quit( mMainWindow, SLOT( exit() ), actionCollection() );
1785 mActionQuit = new KAction( i18n( "&Exit" ), "exit", 0, 1785 mActionQuit = new KAction( i18n( "&Exit" ), "exit", 0,
1786 mMainWindow, SLOT( exit() ), 1786 mMainWindow, SLOT( exit() ),
1787 actionCollection(), "quit" ); 1787 actionCollection(), "quit" );
1788#endif //KAB_EMBEDDED 1788#endif //KAB_EMBEDDED
1789 1789
1790 // edit menu 1790 // edit menu
1791 if ( mIsPart ) { 1791 if ( mIsPart ) {
1792 mActionCopy = new KAction( i18n( "&Copy" ), "editcopy", CTRL + Key_C, this, 1792 mActionCopy = new KAction( i18n( "&Copy" ), "editcopy", CTRL + Key_C, this,
1793 SLOT( copyContacts() ), actionCollection(), 1793 SLOT( copyContacts() ), actionCollection(),
1794 "kaddressbook_copy" ); 1794 "kaddressbook_copy" );
1795 mActionCut = new KAction( i18n( "Cu&t" ), "editcut", CTRL + Key_X, this, 1795 mActionCut = new KAction( i18n( "Cu&t" ), "editcut", CTRL + Key_X, this,
1796 SLOT( cutContacts() ), actionCollection(), 1796 SLOT( cutContacts() ), actionCollection(),
1797 "kaddressbook_cut" ); 1797 "kaddressbook_cut" );
1798 mActionPaste = new KAction( i18n( "&Paste" ), "editpaste", CTRL + Key_V, this, 1798 mActionPaste = new KAction( i18n( "&Paste" ), "editpaste", CTRL + Key_V, this,
1799 SLOT( pasteContacts() ), actionCollection(), 1799 SLOT( pasteContacts() ), actionCollection(),
1800 "kaddressbook_paste" ); 1800 "kaddressbook_paste" );
1801 mActionSelectAll = new KAction( i18n( "Select &All" ), CTRL + Key_A, this, 1801 mActionSelectAll = new KAction( i18n( "Select &All" ), CTRL + Key_A, this,
1802 SLOT( selectAllContacts() ), actionCollection(), 1802 SLOT( selectAllContacts() ), actionCollection(),
1803 "kaddressbook_select_all" ); 1803 "kaddressbook_select_all" );
1804 mActionUndo = new KAction( i18n( "&Undo" ), "undo", CTRL + Key_Z, this, 1804 mActionUndo = new KAction( i18n( "&Undo" ), "undo", CTRL + Key_Z, this,
1805 SLOT( undo() ), actionCollection(), 1805 SLOT( undo() ), actionCollection(),
1806 "kaddressbook_undo" ); 1806 "kaddressbook_undo" );
1807 mActionRedo = new KAction( i18n( "Re&do" ), "redo", CTRL + SHIFT + Key_Z, 1807 mActionRedo = new KAction( i18n( "Re&do" ), "redo", CTRL + SHIFT + Key_Z,
1808 this, SLOT( redo() ), actionCollection(), 1808 this, SLOT( redo() ), actionCollection(),
1809 "kaddressbook_redo" ); 1809 "kaddressbook_redo" );
1810 } else { 1810 } else {
1811 mActionCopy = KStdAction::copy( this, SLOT( copyContacts() ), actionCollection() ); 1811 mActionCopy = KStdAction::copy( this, SLOT( copyContacts() ), actionCollection() );
1812 mActionCut = KStdAction::cut( this, SLOT( cutContacts() ), actionCollection() ); 1812 mActionCut = KStdAction::cut( this, SLOT( cutContacts() ), actionCollection() );
1813 mActionPaste = KStdAction::paste( this, SLOT( pasteContacts() ), actionCollection() ); 1813 mActionPaste = KStdAction::paste( this, SLOT( pasteContacts() ), actionCollection() );
1814 mActionSelectAll = KStdAction::selectAll( this, SLOT( selectAllContacts() ), actionCollection() ); 1814 mActionSelectAll = KStdAction::selectAll( this, SLOT( selectAllContacts() ), actionCollection() );
1815 mActionUndo = KStdAction::undo( this, SLOT( undo() ), actionCollection() ); 1815 mActionUndo = KStdAction::undo( this, SLOT( undo() ), actionCollection() );
1816 mActionRedo = KStdAction::redo( this, SLOT( redo() ), actionCollection() ); 1816 mActionRedo = KStdAction::redo( this, SLOT( redo() ), actionCollection() );
1817 } 1817 }
1818 1818
1819 mActionDelete = new KAction( i18n( "&Delete Contact" ), "editdelete", 1819 mActionDelete = new KAction( i18n( "&Delete Contact" ), "editdelete",
1820 Key_Delete, this, SLOT( deleteContacts() ), 1820 Key_Delete, this, SLOT( deleteContacts() ),
1821 actionCollection(), "edit_delete" ); 1821 actionCollection(), "edit_delete" );
1822 1822
1823 mActionUndo->setEnabled( false ); 1823 mActionUndo->setEnabled( false );
1824 mActionRedo->setEnabled( false ); 1824 mActionRedo->setEnabled( false );
1825 1825
1826 // settings menu 1826 // settings menu
1827#ifdef KAB_EMBEDDED 1827#ifdef KAB_EMBEDDED
1828//US special menuentry to configure the addressbook resources. On KDE 1828//US special menuentry to configure the addressbook resources. On KDE
1829// you do that through the control center !!! 1829// you do that through the control center !!!
1830 mActionConfigResources = new KAction( i18n( "Configure &Resources..." ), "configure_resources", 0, this, 1830 mActionConfigResources = new KAction( i18n( "Configure &Resources..." ), "configure_resources", 0, this,
1831 SLOT( configureResources() ), actionCollection(), 1831 SLOT( configureResources() ), actionCollection(),
1832 "kaddressbook_configure_resources" ); 1832 "kaddressbook_configure_resources" );
1833#endif //KAB_EMBEDDED 1833#endif //KAB_EMBEDDED
1834 1834
1835 if ( mIsPart ) { 1835 if ( mIsPart ) {
1836 mActionConfigKAddressbook = new KAction( i18n( "&Configure KAddressBook..." ), "configure", 0, this, 1836 mActionConfigKAddressbook = new KAction( i18n( "&Configure KAddressBook..." ), "configure", 0, this,
1837 SLOT( openConfigDialog() ), actionCollection(), 1837 SLOT( openConfigDialog() ), actionCollection(),
1838 "kaddressbook_configure" ); 1838 "kaddressbook_configure" );
1839 1839
1840 //US not implemented yet 1840 //US not implemented yet
1841 //mActionConfigShortcuts = new KAction( i18n( "Configure S&hortcuts..." ), "configure_shortcuts", 0, 1841 //mActionConfigShortcuts = new KAction( i18n( "Configure S&hortcuts..." ), "configure_shortcuts", 0,
1842 // this, SLOT( configureKeyBindings() ), actionCollection(), 1842 // this, SLOT( configureKeyBindings() ), actionCollection(),
1843 // "kaddressbook_configure_shortcuts" ); 1843 // "kaddressbook_configure_shortcuts" );
1844#ifdef KAB_EMBEDDED 1844#ifdef KAB_EMBEDDED
1845 mActionConfigureToolbars = KStdAction::configureToolbars( this, SLOT( mMainWindow->configureToolbars() ), actionCollection() ); 1845 mActionConfigureToolbars = KStdAction::configureToolbars( this, SLOT( mMainWindow->configureToolbars() ), actionCollection() );
1846 mActionConfigureToolbars->setEnabled( false ); 1846 mActionConfigureToolbars->setEnabled( false );
1847#endif //KAB_EMBEDDED 1847#endif //KAB_EMBEDDED
1848 1848
1849 } else { 1849 } else {
1850 mActionConfigKAddressbook = KStdAction::preferences( this, SLOT( openConfigDialog() ), actionCollection() ); 1850 mActionConfigKAddressbook = KStdAction::preferences( this, SLOT( openConfigDialog() ), actionCollection() );
1851 1851
1852 //US not implemented yet 1852 //US not implemented yet
1853 //mActionKeyBindings = KStdAction::keyBindings( this, SLOT( configureKeyBindings() ), actionCollection() ); 1853 //mActionKeyBindings = KStdAction::keyBindings( this, SLOT( configureKeyBindings() ), actionCollection() );
1854 } 1854 }
1855 1855
1856 mActionJumpBar = new KToggleAction( i18n( "Show Jump Bar" ), 0, 0, 1856 mActionJumpBar = new KToggleAction( i18n( "Show Jump Bar" ), 0, 0,
1857 actionCollection(), "options_show_jump_bar" ); 1857 actionCollection(), "options_show_jump_bar" );
1858 connect( mActionJumpBar, SIGNAL( toggled( bool ) ), SLOT( setJumpButtonBarVisible( bool ) ) ); 1858 connect( mActionJumpBar, SIGNAL( toggled( bool ) ), SLOT( setJumpButtonBarVisible( bool ) ) );
1859 1859
1860 mActionDetails = new KToggleAction( i18n( "Show Details" ), "listview", 0, 1860 mActionDetails = new KToggleAction( i18n( "Show Details" ), "listview", 0,
1861 actionCollection(), "options_show_details" ); 1861 actionCollection(), "options_show_details" );
1862 connect( mActionDetails, SIGNAL( toggled( bool ) ), SLOT( setDetailsVisible( bool ) ) ); 1862 connect( mActionDetails, SIGNAL( toggled( bool ) ), SLOT( setDetailsVisible( bool ) ) );
1863 1863
1864 1864
1865 mActionBR = new KToggleAction( i18n( "Beam receive enabled" ), "beam", 0, this, 1865 mActionBR = new KToggleAction( i18n( "Beam receive enabled" ), "beam", 0, this,
1866 SLOT( toggleBeamReceive() ), actionCollection(), 1866 SLOT( toggleBeamReceive() ), actionCollection(),
1867 "kaddressbook_beam_rec" ); 1867 "kaddressbook_beam_rec" );
1868 1868
1869 1869
1870 // misc 1870 // misc
1871 // only enable LDAP lookup if we can handle the protocol 1871 // only enable LDAP lookup if we can handle the protocol
1872#ifndef KAB_EMBEDDED 1872#ifndef KAB_EMBEDDED
1873 if ( KProtocolInfo::isKnownProtocol( KURL( "ldap://localhost" ) ) ) { 1873 if ( KProtocolInfo::isKnownProtocol( KURL( "ldap://localhost" ) ) ) {
1874 new KAction( i18n( "&Lookup Addresses in Directory" ), "find", 0, 1874 new KAction( i18n( "&Lookup Addresses in Directory" ), "find", 0,
1875 this, SLOT( openLDAPDialog() ), actionCollection(), 1875 this, SLOT( openLDAPDialog() ), actionCollection(),
1876 "ldap_lookup" ); 1876 "ldap_lookup" );
1877 } 1877 }
1878#else //KAB_EMBEDDED 1878#else //KAB_EMBEDDED
1879 //qDebug("KABCore::initActions() LDAP has to be implemented"); 1879 //qDebug("KABCore::initActions() LDAP has to be implemented");
1880#endif //KAB_EMBEDDED 1880#endif //KAB_EMBEDDED
1881 1881
1882 1882
1883 mActionWhoAmI = new KAction( i18n( "Set Who Am I" ), "personal", 0, this, 1883 mActionWhoAmI = new KAction( i18n( "Set Who Am I" ), "personal", 0, this,
1884 SLOT( setWhoAmI() ), actionCollection(), 1884 SLOT( setWhoAmI() ), actionCollection(),
1885 "set_personal" ); 1885 "set_personal" );
1886 1886
1887 1887
1888 1888
1889 1889
1890 mActionCategories = new KAction( i18n( "Set Categories" ), 0, this, 1890 mActionCategories = new KAction( i18n( "Set Categories" ), 0, this,
1891 SLOT( setCategories() ), actionCollection(), 1891 SLOT( setCategories() ), actionCollection(),
1892 "edit_set_categories" ); 1892 "edit_set_categories" );
1893 1893
1894 mActionRemoveVoice = new KAction( i18n( "Remove \"voice\"..." ), 0, this, 1894 mActionRemoveVoice = new KAction( i18n( "Remove \"voice\"..." ), 0, this,
1895 SLOT( removeVoice() ), actionCollection(), 1895 SLOT( removeVoice() ), actionCollection(),
1896 "remove_voice" ); 1896 "remove_voice" );
1897 mActionImportOL = new KAction( i18n( "Import from Outlook..." ), 0, this, 1897 mActionImportOL = new KAction( i18n( "Import from Outlook..." ), 0, this,
1898 SLOT( importFromOL() ), actionCollection(), 1898 SLOT( importFromOL() ), actionCollection(),
1899 "import_OL" ); 1899 "import_OL" );
1900#ifdef KAB_EMBEDDED 1900#ifdef KAB_EMBEDDED
1901 mActionLicence = new KAction( i18n( "Licence" ), 0, 1901 mActionLicence = new KAction( i18n( "Licence" ), 0,
1902 this, SLOT( showLicence() ), actionCollection(), 1902 this, SLOT( showLicence() ), actionCollection(),
1903 "licence_about_data" ); 1903 "licence_about_data" );
1904 mActionFaq = new KAction( i18n( "Faq" ), 0, 1904 mActionFaq = new KAction( i18n( "Faq" ), 0,
1905 this, SLOT( faq() ), actionCollection(), 1905 this, SLOT( faq() ), actionCollection(),
1906 "faq_about_data" ); 1906 "faq_about_data" );
1907 mActionWN = new KAction( i18n( "What's New?" ), 0, 1907 mActionWN = new KAction( i18n( "What's New?" ), 0,
1908 this, SLOT( whatsnew() ), actionCollection(), 1908 this, SLOT( whatsnew() ), actionCollection(),
1909 "wn" ); 1909 "wn" );
1910 mActionSyncHowto = new KAction( i18n( "Sync HowTo" ), 0, 1910 mActionSyncHowto = new KAction( i18n( "Sync HowTo" ), 0,
1911 this, SLOT( synchowto() ), actionCollection(), 1911 this, SLOT( synchowto() ), actionCollection(),
1912 "sync" ); 1912 "sync" );
1913 1913
1914 mActionAboutKAddressbook = new KAction( i18n( "&About KAddressBook" ), "kaddressbook2", 0, 1914 mActionAboutKAddressbook = new KAction( i18n( "&About KAddressBook" ), "kaddressbook2", 0,
1915 this, SLOT( createAboutData() ), actionCollection(), 1915 this, SLOT( createAboutData() ), actionCollection(),
1916 "kaddressbook_about_data" ); 1916 "kaddressbook_about_data" );
1917#endif //KAB_EMBEDDED 1917#endif //KAB_EMBEDDED
1918 1918
1919 clipboardDataChanged(); 1919 clipboardDataChanged();
1920 connect( UndoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) ); 1920 connect( UndoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) );
1921 connect( RedoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) ); 1921 connect( RedoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) );
1922} 1922}
1923 1923
1924//US we need this function, to plug all actions into the correct menues. 1924//US we need this function, to plug all actions into the correct menues.
1925// KDE uses a XML format to plug the actions, but we work her without this overhead. 1925// KDE uses a XML format to plug the actions, but we work her without this overhead.
1926void KABCore::addActionsManually() 1926void KABCore::addActionsManually()
1927{ 1927{
1928//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart); 1928//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart);
1929 1929
1930#ifdef KAB_EMBEDDED 1930#ifdef KAB_EMBEDDED
1931 QPopupMenu *fileMenu = new QPopupMenu( this ); 1931 QPopupMenu *fileMenu = new QPopupMenu( this );
1932 QPopupMenu *editMenu = new QPopupMenu( this ); 1932 QPopupMenu *editMenu = new QPopupMenu( this );
1933 QPopupMenu *helpMenu = new QPopupMenu( this ); 1933 QPopupMenu *helpMenu = new QPopupMenu( this );
1934 1934
1935 KToolBar* tb = mMainWindow->toolBar(); 1935 KToolBar* tb = mMainWindow->toolBar();
1936 1936
1937 1937#ifndef DESKTOP_VERSION
1938 if ( KABPrefs::instance()->mFullMenuBarVisible ) { 1938 if ( KABPrefs::instance()->mFullMenuBarVisible ) {
1939#endif
1939 QMenuBar* mb = mMainWindow->menuBar(); 1940 QMenuBar* mb = mMainWindow->menuBar();
1940 1941
1941 //US setup menubar. 1942 //US setup menubar.
1942 //Disable the following block if you do not want to have a menubar. 1943 //Disable the following block if you do not want to have a menubar.
1943 mb->insertItem( "&File", fileMenu ); 1944 mb->insertItem( "&File", fileMenu );
1944 mb->insertItem( "&Edit", editMenu ); 1945 mb->insertItem( "&Edit", editMenu );
1945 mb->insertItem( "&View", viewMenu ); 1946 mb->insertItem( "&View", viewMenu );
1946 mb->insertItem( "&Settings", settingsMenu ); 1947 mb->insertItem( "&Settings", settingsMenu );
1947 mb->insertItem( i18n("Synchronize"), syncMenu ); 1948 mb->insertItem( i18n("Synchronize"), syncMenu );
1948 mb->insertItem( "&Change selected", changeMenu ); 1949 mb->insertItem( "&Change selected", changeMenu );
1949 mb->insertItem( "&Help", helpMenu ); 1950 mb->insertItem( "&Help", helpMenu );
1950 mIncSearchWidget = new IncSearchWidget( tb ); 1951 mIncSearchWidget = new IncSearchWidget( tb );
1951 // tb->insertWidget(-1, 0, mIncSearchWidget); 1952 // tb->insertWidget(-1, 0, mIncSearchWidget);
1952 1953#ifndef DESKTOP_VERSION
1953 } else { 1954 } else {
1954 //US setup toolbar 1955 //US setup toolbar
1955 QPEMenuBar *menuBarTB = new QPEMenuBar( tb ); 1956 QPEMenuBar *menuBarTB = new QPEMenuBar( tb );
1956 QPopupMenu *popupBarTB = new QPopupMenu( this ); 1957 QPopupMenu *popupBarTB = new QPopupMenu( this );
1957 menuBarTB->insertItem( "ME", popupBarTB); 1958 menuBarTB->insertItem( "ME", popupBarTB);
1958 tb->insertWidget(-1, 0, menuBarTB); 1959 tb->insertWidget(-1, 0, menuBarTB);
1959 mIncSearchWidget = new IncSearchWidget( tb ); 1960 mIncSearchWidget = new IncSearchWidget( tb );
1960 1961
1961 tb->enableMoving(false); 1962 tb->enableMoving(false);
1962 popupBarTB->insertItem( "&File", fileMenu ); 1963 popupBarTB->insertItem( "&File", fileMenu );
1963 popupBarTB->insertItem( "&Edit", editMenu ); 1964 popupBarTB->insertItem( "&Edit", editMenu );
1964 popupBarTB->insertItem( "&View", viewMenu ); 1965 popupBarTB->insertItem( "&View", viewMenu );
1965 popupBarTB->insertItem( "&Settings", settingsMenu ); 1966 popupBarTB->insertItem( "&Settings", settingsMenu );
1966 popupBarTB->insertItem( i18n("Synchronize"), syncMenu ); 1967 popupBarTB->insertItem( i18n("Synchronize"), syncMenu );
1967 mViewManager->getFilterAction()->plug ( popupBarTB); 1968 mViewManager->getFilterAction()->plug ( popupBarTB);
1968 popupBarTB->insertItem( "&Change selected", changeMenu ); 1969 popupBarTB->insertItem( "&Change selected", changeMenu );
1969 popupBarTB->insertItem( "&Help", helpMenu ); 1970 popupBarTB->insertItem( "&Help", helpMenu );
1970 if (QApplication::desktop()->width() > 320 ) { 1971 if (QApplication::desktop()->width() > 320 ) {
1971 // mViewManager->getFilterAction()->plug ( tb); 1972 // mViewManager->getFilterAction()->plug ( tb);
1972 } 1973 }
1973 } 1974 }
1975#endif
1974 // mActionQuit->plug ( mMainWindow->toolBar()); 1976 // mActionQuit->plug ( mMainWindow->toolBar());
1975 1977
1976 1978
1977 1979
1978 //US Now connect the actions with the menue entries. 1980 //US Now connect the actions with the menue entries.
1979 mActionPrint->plug( fileMenu ); 1981 mActionPrint->plug( fileMenu );
1980 mActionMail->plug( fileMenu ); 1982 mActionMail->plug( fileMenu );
1981 fileMenu->insertSeparator(); 1983 fileMenu->insertSeparator();
1982 1984
1983 mActionNewContact->plug( fileMenu ); 1985 mActionNewContact->plug( fileMenu );
1984 mActionNewContact->plug( tb ); 1986 mActionNewContact->plug( tb );
1985 1987
1986 mActionEditAddressee->plug( fileMenu ); 1988 mActionEditAddressee->plug( fileMenu );
1987 // if ((KGlobal::getDesktopSize() > KGlobal::Small ) || 1989 // if ((KGlobal::getDesktopSize() > KGlobal::Small ) ||
1988 // (!KABPrefs::instance()->mMultipleViewsAtOnce )) 1990 // (!KABPrefs::instance()->mMultipleViewsAtOnce ))
1989 mActionEditAddressee->plug( tb ); 1991 mActionEditAddressee->plug( tb );
1990 1992
1991 fileMenu->insertSeparator(); 1993 fileMenu->insertSeparator();
1992 mActionSave->plug( fileMenu ); 1994 mActionSave->plug( fileMenu );
1993 fileMenu->insertItem( "&Import", ImportMenu ); 1995 fileMenu->insertItem( "&Import", ImportMenu );
1994 fileMenu->insertItem( "&Export", ExportMenu ); 1996 fileMenu->insertItem( "&Export", ExportMenu );
1995 fileMenu->insertSeparator(); 1997 fileMenu->insertSeparator();
1996 mActionMailVCard->plug( fileMenu ); 1998 mActionMailVCard->plug( fileMenu );
1997#ifndef DESKTOP_VERSION 1999#ifndef DESKTOP_VERSION
1998 if ( Ir::supported() ) mActionBeamVCard->plug( fileMenu ); 2000 if ( Ir::supported() ) mActionBeamVCard->plug( fileMenu );
1999 if ( Ir::supported() ) mActionBeam->plug(fileMenu ); 2001 if ( Ir::supported() ) mActionBeam->plug(fileMenu );
2000#endif 2002#endif
2001 fileMenu->insertSeparator(); 2003 fileMenu->insertSeparator();
2002 mActionQuit->plug( fileMenu ); 2004 mActionQuit->plug( fileMenu );
2003#ifdef _WIN32_ 2005#ifdef _WIN32_
2004 mActionImportOL->plug( ImportMenu ); 2006 mActionImportOL->plug( ImportMenu );
2005#endif 2007#endif
2006 // edit menu 2008 // edit menu
2007 mActionUndo->plug( editMenu ); 2009 mActionUndo->plug( editMenu );
2008 mActionRedo->plug( editMenu ); 2010 mActionRedo->plug( editMenu );
2009 editMenu->insertSeparator(); 2011 editMenu->insertSeparator();
2010 mActionCut->plug( editMenu ); 2012 mActionCut->plug( editMenu );
2011 mActionCopy->plug( editMenu ); 2013 mActionCopy->plug( editMenu );
2012 mActionPaste->plug( editMenu ); 2014 mActionPaste->plug( editMenu );
2013 mActionDelete->plug( editMenu ); 2015 mActionDelete->plug( editMenu );
2014 editMenu->insertSeparator(); 2016 editMenu->insertSeparator();
2015 mActionSelectAll->plug( editMenu ); 2017 mActionSelectAll->plug( editMenu );
2016 2018
2017 mActionRemoveVoice->plug( changeMenu ); 2019 mActionRemoveVoice->plug( changeMenu );
2018 // settings menu 2020 // settings menu
2019//US special menuentry to configure the addressbook resources. On KDE 2021//US special menuentry to configure the addressbook resources. On KDE
2020// you do that through the control center !!! 2022// you do that through the control center !!!
2021 mActionConfigResources->plug( settingsMenu ); 2023 mActionConfigResources->plug( settingsMenu );
2022 settingsMenu->insertSeparator(); 2024 settingsMenu->insertSeparator();
2023 2025
2024 mActionConfigKAddressbook->plug( settingsMenu ); 2026 mActionConfigKAddressbook->plug( settingsMenu );
2025 2027
2026 if ( mIsPart ) { 2028 if ( mIsPart ) {
2027 //US not implemented yet 2029 //US not implemented yet
2028 //mActionConfigShortcuts->plug( settingsMenu ); 2030 //mActionConfigShortcuts->plug( settingsMenu );
2029 //mActionConfigureToolbars->plug( settingsMenu ); 2031 //mActionConfigureToolbars->plug( settingsMenu );
2030 2032
2031 } else { 2033 } else {
2032 //US not implemented yet 2034 //US not implemented yet
2033 //mActionKeyBindings->plug( settingsMenu ); 2035 //mActionKeyBindings->plug( settingsMenu );
2034 } 2036 }
2035 2037
2036 settingsMenu->insertSeparator(); 2038 settingsMenu->insertSeparator();
2037 2039
2038 mActionJumpBar->plug( settingsMenu ); 2040 mActionJumpBar->plug( settingsMenu );
2039 mActionDetails->plug( settingsMenu ); 2041 mActionDetails->plug( settingsMenu );
2040 //if (!KABPrefs::instance()->mMultipleViewsAtOnce || KGlobal::getDesktopSize() == KGlobal::Desktop ) 2042 //if (!KABPrefs::instance()->mMultipleViewsAtOnce || KGlobal::getDesktopSize() == KGlobal::Desktop )
2041 mActionDetails->plug( tb ); 2043 mActionDetails->plug( tb );
2042 settingsMenu->insertSeparator(); 2044 settingsMenu->insertSeparator();
2043 mActionBR->plug(settingsMenu ); 2045 mActionBR->plug(settingsMenu );
2044 settingsMenu->insertSeparator(); 2046 settingsMenu->insertSeparator();
2045 2047
2046 mActionWhoAmI->plug( settingsMenu ); 2048 mActionWhoAmI->plug( settingsMenu );
2047 mActionCategories->plug( settingsMenu ); 2049 mActionCategories->plug( settingsMenu );
2048 2050
2049 2051
2050 mActionWN->plug( helpMenu ); 2052 mActionWN->plug( helpMenu );
2051 mActionSyncHowto->plug( helpMenu ); 2053 mActionSyncHowto->plug( helpMenu );
2052 mActionLicence->plug( helpMenu ); 2054 mActionLicence->plug( helpMenu );
2053 mActionFaq->plug( helpMenu ); 2055 mActionFaq->plug( helpMenu );
2054 mActionAboutKAddressbook->plug( helpMenu ); 2056 mActionAboutKAddressbook->plug( helpMenu );
2055 2057
2056 if (KGlobal::getDesktopSize() > KGlobal::Small ) { 2058 if (KGlobal::getDesktopSize() > KGlobal::Small ) {
2057 2059
2058 mActionSave->plug( tb ); 2060 mActionSave->plug( tb );
2059 mViewManager->getFilterAction()->plug ( tb); 2061 mViewManager->getFilterAction()->plug ( tb);
2060 if (KGlobal::getDesktopSize() == KGlobal::Desktop ) { 2062 if (KGlobal::getDesktopSize() == KGlobal::Desktop ) {
2061 mActionUndo->plug( tb ); 2063 mActionUndo->plug( tb );
2062 mActionDelete->plug( tb ); 2064 mActionDelete->plug( tb );
2063 mActionRedo->plug( tb ); 2065 mActionRedo->plug( tb );
2064 } 2066 }
2065 } else { 2067 } else {
2066 mActionSave->plug( tb ); 2068 mActionSave->plug( tb );
2067 tb->enableMoving(false); 2069 tb->enableMoving(false);
2068 } 2070 }
2069 //mActionQuit->plug ( tb ); 2071 //mActionQuit->plug ( tb );
2070 // tb->insertWidget(-1, 0, mIncSearchWidget, 6); 2072 // tb->insertWidget(-1, 0, mIncSearchWidget, 6);
2071 2073
2072 //US link the searchwidget first to this. 2074 //US link the searchwidget first to this.
2073 // The real linkage to the toolbar happens later. 2075 // The real linkage to the toolbar happens later.
2074//US mIncSearchWidget->reparent(tb, 0, QPoint(50,0), TRUE); 2076//US mIncSearchWidget->reparent(tb, 0, QPoint(50,0), TRUE);
2075//US tb->insertItem( mIncSearchWidget ); 2077//US tb->insertItem( mIncSearchWidget );
2076/*US 2078/*US
2077 mIncSearchWidget = new IncSearchWidget( tb ); 2079 mIncSearchWidget = new IncSearchWidget( tb );
2078 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 2080 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
2079 SLOT( incrementalSearch( const QString& ) ) ); 2081 SLOT( incrementalSearch( const QString& ) ) );
2080 2082
2081 mJumpButtonBar = new JumpButtonBar( this, this ); 2083 mJumpButtonBar = new JumpButtonBar( this, this );
2082 2084
2083//US topLayout->addWidget( mJumpButtonBar ); 2085//US topLayout->addWidget( mJumpButtonBar );
2084 this->layout()->add( mJumpButtonBar ); 2086 this->layout()->add( mJumpButtonBar );
2085*/ 2087*/
2086 2088
2087#endif //KAB_EMBEDDED 2089#endif //KAB_EMBEDDED
2088 2090
2089 mActionExport2phone->plug( ExportMenu ); 2091 mActionExport2phone->plug( ExportMenu );
2090 connect ( syncMenu, SIGNAL( activated ( int ) ), syncManager, SLOT (slotSyncMenu( int ) ) ); 2092 connect ( syncMenu, SIGNAL( activated ( int ) ), syncManager, SLOT (slotSyncMenu( int ) ) );
2091 syncManager->fillSyncMenu(); 2093 syncManager->fillSyncMenu();
2092 2094
2093} 2095}
2094void KABCore::showLicence() 2096void KABCore::showLicence()
2095{ 2097{
2096 KApplication::showLicence(); 2098 KApplication::showLicence();
2097} 2099}
2098void KABCore::removeVoice() 2100void KABCore::removeVoice()
2099{ 2101{
2100 if ( KMessageBox::questionYesNo( this, i18n("After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as \"other\".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?") ) == KMessageBox::No ) 2102 if ( KMessageBox::questionYesNo( this, i18n("After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as \"other\".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?") ) == KMessageBox::No )
2101 return; 2103 return;
2102 KABC::Addressee::List list = mViewManager->selectedAddressees(); 2104 KABC::Addressee::List list = mViewManager->selectedAddressees();
2103 KABC::Addressee::List::Iterator it; 2105 KABC::Addressee::List::Iterator it;
2104 for ( it = list.begin(); it != list.end(); ++it ) { 2106 for ( it = list.begin(); it != list.end(); ++it ) {
2105 2107
2106 if ( (*it).removeVoice() ) 2108 if ( (*it).removeVoice() )
2107 contactModified((*it) ); 2109 contactModified((*it) );
2108 } 2110 }
2109} 2111}
2110 2112
2111 2113
2112 2114
2113void KABCore::clipboardDataChanged() 2115void KABCore::clipboardDataChanged()
2114{ 2116{
2115 2117
2116 if ( mReadWrite ) 2118 if ( mReadWrite )
2117 mActionPaste->setEnabled( !QApplication::clipboard()->text().isEmpty() ); 2119 mActionPaste->setEnabled( !QApplication::clipboard()->text().isEmpty() );
2118 2120
2119} 2121}
2120 2122
2121void KABCore::updateActionMenu() 2123void KABCore::updateActionMenu()
2122{ 2124{
2123 UndoStack *undo = UndoStack::instance(); 2125 UndoStack *undo = UndoStack::instance();
2124 RedoStack *redo = RedoStack::instance(); 2126 RedoStack *redo = RedoStack::instance();
2125 2127
2126 if ( undo->isEmpty() ) 2128 if ( undo->isEmpty() )
2127 mActionUndo->setText( i18n( "Undo" ) ); 2129 mActionUndo->setText( i18n( "Undo" ) );
2128 else 2130 else
2129 mActionUndo->setText( i18n( "Undo %1" ).arg( undo->top()->name() ) ); 2131 mActionUndo->setText( i18n( "Undo %1" ).arg( undo->top()->name() ) );
2130 2132
2131 mActionUndo->setEnabled( !undo->isEmpty() ); 2133 mActionUndo->setEnabled( !undo->isEmpty() );
2132 2134
2133 if ( !redo->top() ) 2135 if ( !redo->top() )
2134 mActionRedo->setText( i18n( "Redo" ) ); 2136 mActionRedo->setText( i18n( "Redo" ) );
2135 else 2137 else
2136 mActionRedo->setText( i18n( "Redo %1" ).arg( redo->top()->name() ) ); 2138 mActionRedo->setText( i18n( "Redo %1" ).arg( redo->top()->name() ) );
2137 2139
2138 mActionRedo->setEnabled( !redo->isEmpty() ); 2140 mActionRedo->setEnabled( !redo->isEmpty() );
2139} 2141}
2140 2142
2141void KABCore::configureKeyBindings() 2143void KABCore::configureKeyBindings()
2142{ 2144{
2143#ifndef KAB_EMBEDDED 2145#ifndef KAB_EMBEDDED
2144 KKeyDialog::configure( actionCollection(), true ); 2146 KKeyDialog::configure( actionCollection(), true );
2145#else //KAB_EMBEDDED 2147#else //KAB_EMBEDDED
2146 qDebug("KABCore::configureKeyBindings() not implemented"); 2148 qDebug("KABCore::configureKeyBindings() not implemented");
2147#endif //KAB_EMBEDDED 2149#endif //KAB_EMBEDDED
2148} 2150}
2149 2151
2150#ifdef KAB_EMBEDDED 2152#ifdef KAB_EMBEDDED
2151void KABCore::configureResources() 2153void KABCore::configureResources()
2152{ 2154{
2153 KRES::KCMKResources dlg( this, "" , 0 ); 2155 KRES::KCMKResources dlg( this, "" , 0 );
2154 2156
2155 if ( !dlg.exec() ) 2157 if ( !dlg.exec() )
2156 return; 2158 return;
2157 KMessageBox::information( this, i18n("Please restart to get the \nchanged resources (re)loaded!\n") ); 2159 KMessageBox::information( this, i18n("Please restart to get the \nchanged resources (re)loaded!\n") );
2158} 2160}
2159#endif //KAB_EMBEDDED 2161#endif //KAB_EMBEDDED
2160 2162
2161 2163
2162/* this method will be called through the QCop interface from Ko/Pi to select addresses 2164/* this method will be called through the QCop interface from Ko/Pi to select addresses
2163 * for the attendees list of an event. 2165 * for the attendees list of an event.
2164 */ 2166 */
2165void KABCore::requestForNameEmailUidList(const QString& sourceChannel, const QString& uid) 2167void KABCore::requestForNameEmailUidList(const QString& sourceChannel, const QString& uid)
2166{ 2168{
2167 QStringList nameList; 2169 QStringList nameList;
2168 QStringList emailList; 2170 QStringList emailList;
2169 QStringList uidList; 2171 QStringList uidList;
2170 2172
2171 KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this); 2173 KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this);
2172 uint i=0; 2174 uint i=0;
2173 for (i=0; i < list.count(); i++) 2175 for (i=0; i < list.count(); i++)
2174 { 2176 {
2175 nameList.append(list[i].realName()); 2177 nameList.append(list[i].realName());
2176 emailList.append(list[i].preferredEmail()); 2178 emailList.append(list[i].preferredEmail());
2177 uidList.append(list[i].uid()); 2179 uidList.append(list[i].uid());
2178 } 2180 }
2179 2181
2180 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI(sourceChannel, uid, nameList, emailList, uidList); 2182 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI(sourceChannel, uid, nameList, emailList, uidList);
2181 2183
2182} 2184}
2183 2185
2184/* this method will be called through the QCop interface from Ko/Pi to select birthdays 2186/* this method will be called through the QCop interface from Ko/Pi to select birthdays
2185 * to put them into the calendar. 2187 * to put them into the calendar.
2186 */ 2188 */
2187void KABCore::requestForBirthdayList(const QString& sourceChannel, const QString& uid) 2189void KABCore::requestForBirthdayList(const QString& sourceChannel, const QString& uid)
2188{ 2190{
2189 // qDebug("KABCore::requestForBirthdayList"); 2191 // qDebug("KABCore::requestForBirthdayList");
2190 QStringList birthdayList; 2192 QStringList birthdayList;
2191 QStringList anniversaryList; 2193 QStringList anniversaryList;
2192 QStringList realNameList; 2194 QStringList realNameList;
2193 QStringList preferredEmailList; 2195 QStringList preferredEmailList;
2194 QStringList assembledNameList; 2196 QStringList assembledNameList;
2195 QStringList uidList; 2197 QStringList uidList;
2196 2198
2197 KABC::AddressBook::Iterator it; 2199 KABC::AddressBook::Iterator it;
2198 2200
2199 int count = 0; 2201 int count = 0;
2200 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { 2202 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) {
2201 ++count; 2203 ++count;
2202 } 2204 }
2203 QProgressBar bar(count,0 ); 2205 QProgressBar bar(count,0 );
2204 int w = 300; 2206 int w = 300;
2205 if ( QApplication::desktop()->width() < 320 ) 2207 if ( QApplication::desktop()->width() < 320 )
2206 w = 220; 2208 w = 220;
2207 int h = bar.sizeHint().height() ; 2209 int h = bar.sizeHint().height() ;
2208 int dw = QApplication::desktop()->width(); 2210 int dw = QApplication::desktop()->width();
2209 int dh = QApplication::desktop()->height(); 2211 int dh = QApplication::desktop()->height();
2210 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2212 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2211 bar.show(); 2213 bar.show();
2212 bar.setCaption (i18n("Collecting birthdays - close to abort!") ); 2214 bar.setCaption (i18n("Collecting birthdays - close to abort!") );
2213 qApp->processEvents(); 2215 qApp->processEvents();
2214 2216
2215 QDate bday; 2217 QDate bday;
2216 QString anni; 2218 QString anni;
2217 QString formattedbday; 2219 QString formattedbday;
2218 2220
2219 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) 2221 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it )
2220 { 2222 {
2221 if ( ! bar.isVisible() ) 2223 if ( ! bar.isVisible() )
2222 return; 2224 return;
2223 bar.setProgress( count++ ); 2225 bar.setProgress( count++ );
2224 qApp->processEvents(); 2226 qApp->processEvents();
2225 bday = (*it).birthday().date(); 2227 bday = (*it).birthday().date();
2226 anni = (*it).custom("KADDRESSBOOK", "X-Anniversary" ); 2228 anni = (*it).custom("KADDRESSBOOK", "X-Anniversary" );
2227 2229
2228 if ( bday.isValid() || !anni.isEmpty()) 2230 if ( bday.isValid() || !anni.isEmpty())
2229 { 2231 {
2230 if (bday.isValid()) 2232 if (bday.isValid())
2231 formattedbday = KGlobal::locale()->formatDate(bday, true, KLocale::ISODate); 2233 formattedbday = KGlobal::locale()->formatDate(bday, true, KLocale::ISODate);
2232 else 2234 else
2233 formattedbday = "NOTVALID"; 2235 formattedbday = "NOTVALID";
2234 if (anni.isEmpty()) 2236 if (anni.isEmpty())
2235 anni = "INVALID"; 2237 anni = "INVALID";
2236 2238
2237 birthdayList.append(formattedbday); 2239 birthdayList.append(formattedbday);
2238 anniversaryList.append(anni); //should be ISODate 2240 anniversaryList.append(anni); //should be ISODate
2239 realNameList.append((*it).realName()); 2241 realNameList.append((*it).realName());
2240 preferredEmailList.append((*it).preferredEmail()); 2242 preferredEmailList.append((*it).preferredEmail());
2241 assembledNameList.append((*it).assembledName()); 2243 assembledNameList.append((*it).assembledName());
2242 uidList.append((*it).uid()); 2244 uidList.append((*it).uid());
2243 2245
2244 qDebug("found birthday in KA/Pi: %s,%s,%s,%s: %s, %s", (*it).realName().latin1(), (*it).preferredEmail().latin1(), (*it).assembledName().latin1(), (*it).uid().latin1(), formattedbday.latin1(), anni.latin1() ); 2246 qDebug("found birthday in KA/Pi: %s,%s,%s,%s: %s, %s", (*it).realName().latin1(), (*it).preferredEmail().latin1(), (*it).assembledName().latin1(), (*it).uid().latin1(), formattedbday.latin1(), anni.latin1() );
2245 } 2247 }
2246 } 2248 }
2247 2249
2248 bool res = ExternalAppHandler::instance()->returnBirthdayListFromKAPI(sourceChannel, uid, birthdayList, anniversaryList, realNameList, preferredEmailList, assembledNameList, uidList); 2250 bool res = ExternalAppHandler::instance()->returnBirthdayListFromKAPI(sourceChannel, uid, birthdayList, anniversaryList, realNameList, preferredEmailList, assembledNameList, uidList);
2249 2251
2250} 2252}
2251 2253
2252/* this method will be called through the QCop interface from other apps to show details of a contact. 2254/* this method will be called through the QCop interface from other apps to show details of a contact.
2253 */ 2255 */
2254void KABCore::requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid) 2256void KABCore::requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid)
2255{ 2257{
2256 qDebug("KABCore::requestForDetails %s %s %s %s %s", sourceChannel.latin1(), sessionuid.latin1(), name.latin1(), email.latin1(), uid.latin1()); 2258 qDebug("KABCore::requestForDetails %s %s %s %s %s", sourceChannel.latin1(), sessionuid.latin1(), name.latin1(), email.latin1(), uid.latin1());
2257 2259
2258 QString foundUid = QString::null; 2260 QString foundUid = QString::null;
2259 if ( ! uid.isEmpty() ) { 2261 if ( ! uid.isEmpty() ) {
2260 Addressee adrr = mAddressBook->findByUid( uid ); 2262 Addressee adrr = mAddressBook->findByUid( uid );
2261 if ( !adrr.isEmpty() ) { 2263 if ( !adrr.isEmpty() ) {
2262 foundUid = uid; 2264 foundUid = uid;
2263 } 2265 }
2264 if ( email == "sendbacklist" ) { 2266 if ( email == "sendbacklist" ) {
2265 //qDebug("ssssssssssssssssssssssend "); 2267 //qDebug("ssssssssssssssssssssssend ");
2266 QStringList nameList; 2268 QStringList nameList;
2267 QStringList emailList; 2269 QStringList emailList;
2268 QStringList uidList; 2270 QStringList uidList;
2269 nameList.append(adrr.realName()); 2271 nameList.append(adrr.realName());
2270 emailList = adrr.emails(); 2272 emailList = adrr.emails();
2271 uidList.append( adrr.preferredEmail()); 2273 uidList.append( adrr.preferredEmail());
2272 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList); 2274 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList);
2273 return; 2275 return;
2274 } 2276 }
2275 2277
2276 } 2278 }
2277 2279
2278 if ( email == "sendbacklist" ) 2280 if ( email == "sendbacklist" )
2279 return; 2281 return;
2280 if (foundUid.isEmpty()) 2282 if (foundUid.isEmpty())
2281 { 2283 {
2282 //find the uid of the person first 2284 //find the uid of the person first
2283 Addressee::List namelist; 2285 Addressee::List namelist;
2284 Addressee::List emaillist; 2286 Addressee::List emaillist;
2285 2287
2286 if (!name.isEmpty()) 2288 if (!name.isEmpty())
2287 namelist = mAddressBook->findByName( name ); 2289 namelist = mAddressBook->findByName( name );
2288 2290
2289 if (!email.isEmpty()) 2291 if (!email.isEmpty())
2290 emaillist = mAddressBook->findByEmail( email ); 2292 emaillist = mAddressBook->findByEmail( email );
2291 qDebug("count %d %d ", namelist.count(),emaillist.count() ); 2293 qDebug("count %d %d ", namelist.count(),emaillist.count() );
2292 //check if we have a match in Namelist and Emaillist 2294 //check if we have a match in Namelist and Emaillist
2293 if ((namelist.count() == 0) && (emaillist.count() > 0)) { 2295 if ((namelist.count() == 0) && (emaillist.count() > 0)) {
2294 foundUid = emaillist[0].uid(); 2296 foundUid = emaillist[0].uid();
2295 } 2297 }
2296 else if ((namelist.count() > 0) && (emaillist.count() == 0)) 2298 else if ((namelist.count() > 0) && (emaillist.count() == 0))
2297 foundUid = namelist[0].uid(); 2299 foundUid = namelist[0].uid();
2298 else 2300 else
2299 { 2301 {
2300 for (int i = 0; i < namelist.count(); i++) 2302 for (int i = 0; i < namelist.count(); i++)
2301 { 2303 {
2302 for (int j = 0; j < emaillist.count(); j++) 2304 for (int j = 0; j < emaillist.count(); j++)
2303 { 2305 {
2304 if (namelist[i] == emaillist[j]) 2306 if (namelist[i] == emaillist[j])
2305 { 2307 {
2306 foundUid = namelist[i].uid(); 2308 foundUid = namelist[i].uid();
2307 } 2309 }
2308 } 2310 }
2309 } 2311 }
2310 } 2312 }
2311 } 2313 }
2312 else 2314 else
2313 { 2315 {
2314 foundUid = uid; 2316 foundUid = uid;
2315 } 2317 }
2316 2318
2317 if (!foundUid.isEmpty()) 2319 if (!foundUid.isEmpty())
2318 { 2320 {
2319 2321
2320 // raise Ka/Pi if it is in the background 2322 // raise Ka/Pi if it is in the background
2321#ifndef DESKTOP_VERSION 2323#ifndef DESKTOP_VERSION
2322#ifndef KORG_NODCOP 2324#ifndef KORG_NODCOP
2323 //QCopEnvelope e("QPE/Application/kapi", "raise()"); 2325 //QCopEnvelope e("QPE/Application/kapi", "raise()");
2324#endif 2326#endif
2325#endif 2327#endif
2326 2328
2327 mMainWindow->showMaximized(); 2329 mMainWindow->showMaximized();
2328 mMainWindow-> raise(); 2330 mMainWindow-> raise();
2329 2331
2330 mViewManager->setSelected( "", false); 2332 mViewManager->setSelected( "", false);
2331 mViewManager->refreshView( "" ); 2333 mViewManager->refreshView( "" );
2332 mViewManager->setSelected( foundUid, true ); 2334 mViewManager->setSelected( foundUid, true );
2333 mViewManager->refreshView( foundUid ); 2335 mViewManager->refreshView( foundUid );
2334 2336
2335 if ( !mMultipleViewsAtOnce ) 2337 if ( !mMultipleViewsAtOnce )
2336 { 2338 {
2337 setDetailsVisible( true ); 2339 setDetailsVisible( true );
2338 mActionDetails->setChecked(true); 2340 mActionDetails->setChecked(true);
2339 } 2341 }
2340 } 2342 }
2341} 2343}
2342 2344
2343void KABCore::whatsnew() 2345void KABCore::whatsnew()
2344{ 2346{
2345 KApplication::showFile( "KDE-Pim/Pi Version Info", "kdepim/WhatsNew.txt" ); 2347 KApplication::showFile( "KDE-Pim/Pi Version Info", "kdepim/WhatsNew.txt" );
2346} 2348}
2347void KABCore::synchowto() 2349void KABCore::synchowto()
2348{ 2350{
2349 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/SyncHowto.txt" ); 2351 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/SyncHowto.txt" );
2350} 2352}
2351 2353
2352void KABCore::faq() 2354void KABCore::faq()
2353{ 2355{
2354 KApplication::showFile( "KA/Pi FAQ", "kdepim/kaddressbook/kapiFAQ.txt" ); 2356 KApplication::showFile( "KA/Pi FAQ", "kdepim/kaddressbook/kapiFAQ.txt" );
2355} 2357}
2356 2358
2357#include <libkcal/syncdefines.h> 2359#include <libkcal/syncdefines.h>
2358 2360
2359KABC::Addressee KABCore::getLastSyncAddressee() 2361KABC::Addressee KABCore::getLastSyncAddressee()
2360{ 2362{
2361 Addressee lse; 2363 Addressee lse;
2362 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); 2364 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
2363 2365
2364 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 2366 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
2365 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2367 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
2366 if (lse.isEmpty()) { 2368 if (lse.isEmpty()) {
2367 qDebug("Creating new last-syncAddressee "); 2369 qDebug("Creating new last-syncAddressee ");
2368 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2370 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice );
2369 QString sum = ""; 2371 QString sum = "";
2370 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 2372 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
2371 sum = "E: "; 2373 sum = "E: ";
2372 lse.setFamilyName("!"+sum+mCurrentSyncDevice + i18n(" - sync event")); 2374 lse.setFamilyName("!"+sum+mCurrentSyncDevice + i18n(" - sync event"));
2373 lse.setRevision( mLastAddressbookSync ); 2375 lse.setRevision( mLastAddressbookSync );
2374 lse.setCategories( i18n("SyncEvent") ); 2376 lse.setCategories( i18n("SyncEvent") );
2375 mAddressBook->insertAddressee( lse ); 2377 mAddressBook->insertAddressee( lse );
2376 } 2378 }
2377 return lse; 2379 return lse;
2378} 2380}
2379int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full ) 2381int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full )
2380{ 2382{
2381 2383
2382 //void setZaurusId(int id); 2384 //void setZaurusId(int id);
2383 // int zaurusId() const; 2385 // int zaurusId() const;
2384 // void setZaurusUid(int id); 2386 // void setZaurusUid(int id);
2385 // int zaurusUid() const; 2387 // int zaurusUid() const;
2386 // void setZaurusStat(int id); 2388 // void setZaurusStat(int id);
2387 // int zaurusStat() const; 2389 // int zaurusStat() const;
2388 // 0 equal 2390 // 0 equal
2389 // 1 take local 2391 // 1 take local
2390 // 2 take remote 2392 // 2 take remote
2391 // 3 cancel 2393 // 3 cancel
2392 QDateTime lastSync = mLastAddressbookSync; 2394 QDateTime lastSync = mLastAddressbookSync;
2393 QDateTime localMod = local->revision(); 2395 QDateTime localMod = local->revision();
2394 QDateTime remoteMod = remote->revision(); 2396 QDateTime remoteMod = remote->revision();
2395 2397
2396 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); 2398 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
2397 2399
2398 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2400 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2399 bool remCh, locCh; 2401 bool remCh, locCh;
2400 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 2402 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
2401 2403
2402 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 2404 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
2403 locCh = ( localMod > mLastAddressbookSync ); 2405 locCh = ( localMod > mLastAddressbookSync );
2404 if ( !remCh && ! locCh ) { 2406 if ( !remCh && ! locCh ) {
2405 //qDebug("both not changed "); 2407 //qDebug("both not changed ");
2406 lastSync = localMod.addDays(1); 2408 lastSync = localMod.addDays(1);
2407 if ( mode <= SYNC_PREF_ASK ) 2409 if ( mode <= SYNC_PREF_ASK )
2408 return 0; 2410 return 0;
2409 } else { 2411 } else {
2410 if ( locCh ) { 2412 if ( locCh ) {
2411 //qDebug("loc changed %s %s", localMod.toString().latin1(), mLastAddressbookSync.toString().latin1()); 2413 //qDebug("loc changed %s %s", localMod.toString().latin1(), mLastAddressbookSync.toString().latin1());
2412 lastSync = localMod.addDays( -1 ); 2414 lastSync = localMod.addDays( -1 );
2413 if ( !remCh ) 2415 if ( !remCh )
2414 remoteMod =( lastSync.addDays( -1 ) ); 2416 remoteMod =( lastSync.addDays( -1 ) );
2415 } else { 2417 } else {
2416 //qDebug(" not loc changed "); 2418 //qDebug(" not loc changed ");
2417 lastSync = localMod.addDays( 1 ); 2419 lastSync = localMod.addDays( 1 );
2418 if ( remCh ) 2420 if ( remCh )
2419 remoteMod =( lastSync.addDays( 1 ) ); 2421 remoteMod =( lastSync.addDays( 1 ) );
2420 2422
2421 } 2423 }
2422 } 2424 }
2423 full = true; 2425 full = true;
2424 if ( mode < SYNC_PREF_ASK ) 2426 if ( mode < SYNC_PREF_ASK )
2425 mode = SYNC_PREF_ASK; 2427 mode = SYNC_PREF_ASK;
2426 } else { 2428 } else {
2427 if ( localMod == remoteMod ) 2429 if ( localMod == remoteMod )
2428 return 0; 2430 return 0;
2429 2431
2430 } 2432 }
2431 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 2433 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
2432 2434
2433 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , localMod, remote->lastModified().toString().latin1(), remoteMod); 2435 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , localMod, remote->lastModified().toString().latin1(), remoteMod);
2434 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() ); 2436 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() );
2435 //full = true; //debug only 2437 //full = true; //debug only
2436 if ( full ) { 2438 if ( full ) {
2437 bool equ = ( (*local) == (*remote) ); 2439 bool equ = ( (*local) == (*remote) );
2438 if ( equ ) { 2440 if ( equ ) {
2439 //qDebug("equal "); 2441 //qDebug("equal ");
2440 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2442 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2441 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 2443 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
2442 } 2444 }
2443 if ( mode < SYNC_PREF_FORCE_LOCAL ) 2445 if ( mode < SYNC_PREF_FORCE_LOCAL )
2444 return 0; 2446 return 0;
2445 2447
2446 }//else //debug only 2448 }//else //debug only
2447 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 2449 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
2448 } 2450 }
2449 int result; 2451 int result;
2450 bool localIsNew; 2452 bool localIsNew;
2451 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , local->lastModified().toString().latin1() , remote->lastModified().toString().latin1() ); 2453 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , local->lastModified().toString().latin1() , remote->lastModified().toString().latin1() );
2452 2454
2453 if ( full && mode < SYNC_PREF_NEWEST ) 2455 if ( full && mode < SYNC_PREF_NEWEST )
2454 mode = SYNC_PREF_ASK; 2456 mode = SYNC_PREF_ASK;
2455 2457
2456 switch( mode ) { 2458 switch( mode ) {
2457 case SYNC_PREF_LOCAL: 2459 case SYNC_PREF_LOCAL:
2458 if ( lastSync > remoteMod ) 2460 if ( lastSync > remoteMod )
2459 return 1; 2461 return 1;
2460 if ( lastSync > localMod ) 2462 if ( lastSync > localMod )
2461 return 2; 2463 return 2;
2462 return 1; 2464 return 1;
2463 break; 2465 break;
2464 case SYNC_PREF_REMOTE: 2466 case SYNC_PREF_REMOTE:
2465 if ( lastSync > remoteMod ) 2467 if ( lastSync > remoteMod )
2466 return 1; 2468 return 1;
2467 if ( lastSync > localMod ) 2469 if ( lastSync > localMod )
2468 return 2; 2470 return 2;
2469 return 2; 2471 return 2;
2470 break; 2472 break;
2471 case SYNC_PREF_NEWEST: 2473 case SYNC_PREF_NEWEST:
2472 if ( localMod > remoteMod ) 2474 if ( localMod > remoteMod )
2473 return 1; 2475 return 1;
2474 else 2476 else
2475 return 2; 2477 return 2;
2476 break; 2478 break;
2477 case SYNC_PREF_ASK: 2479 case SYNC_PREF_ASK:
2478 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 2480 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
2479 if ( lastSync > remoteMod ) 2481 if ( lastSync > remoteMod )
2480 return 1; 2482 return 1;
2481 if ( lastSync > localMod ) 2483 if ( lastSync > localMod )
2482 return 2; 2484 return 2;
2483 localIsNew = localMod >= remoteMod; 2485 localIsNew = localMod >= remoteMod;
2484 //qDebug("conflict! ************************************** "); 2486 //qDebug("conflict! ************************************** ");
2485 { 2487 {
2486 KPIM::AddresseeChooser acd ( *local,*remote, localIsNew , this ); 2488 KPIM::AddresseeChooser acd ( *local,*remote, localIsNew , this );
2487 result = acd.executeD(localIsNew); 2489 result = acd.executeD(localIsNew);
2488 return result; 2490 return result;
2489 } 2491 }
2490 break; 2492 break;
2491 case SYNC_PREF_FORCE_LOCAL: 2493 case SYNC_PREF_FORCE_LOCAL:
2492 return 1; 2494 return 1;
2493 break; 2495 break;
2494 case SYNC_PREF_FORCE_REMOTE: 2496 case SYNC_PREF_FORCE_REMOTE:
2495 return 2; 2497 return 2;
2496 break; 2498 break;
2497 2499
2498 default: 2500 default:
2499 // SYNC_PREF_TAKE_BOTH not implemented 2501 // SYNC_PREF_TAKE_BOTH not implemented
2500 break; 2502 break;
2501 } 2503 }
2502 return 0; 2504 return 0;
2503} 2505}
2504 2506
2505 2507
2506bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode) 2508bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode)
2507{ 2509{
2508 bool syncOK = true; 2510 bool syncOK = true;
2509 int addedAddressee = 0; 2511 int addedAddressee = 0;
2510 int addedAddresseeR = 0; 2512 int addedAddresseeR = 0;
2511 int deletedAddresseeR = 0; 2513 int deletedAddresseeR = 0;
2512 int deletedAddresseeL = 0; 2514 int deletedAddresseeL = 0;
2513 int changedLocal = 0; 2515 int changedLocal = 0;
2514 int changedRemote = 0; 2516 int changedRemote = 0;
2515 2517
2516 QString mCurrentSyncName = syncManager->getCurrentSyncName(); 2518 QString mCurrentSyncName = syncManager->getCurrentSyncName();
2517 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); 2519 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
2518 2520
2519 //QPtrList<Addressee> el = local->rawAddressees(); 2521 //QPtrList<Addressee> el = local->rawAddressees();
2520 Addressee addresseeR; 2522 Addressee addresseeR;
2521 QString uid; 2523 QString uid;
2522 int take; 2524 int take;
2523 Addressee addresseeL; 2525 Addressee addresseeL;
2524 Addressee addresseeRSync; 2526 Addressee addresseeRSync;
2525 Addressee addresseeLSync; 2527 Addressee addresseeLSync;
2526 // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees(); 2528 // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees();
2527 //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees(); 2529 //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees();
2528 bool fullDateRange = false; 2530 bool fullDateRange = false;
2529 local->resetTempSyncStat(); 2531 local->resetTempSyncStat();
2530 mLastAddressbookSync = QDateTime::currentDateTime(); 2532 mLastAddressbookSync = QDateTime::currentDateTime();
2531 if ( syncManager->syncWithDesktop() ) { 2533 if ( syncManager->syncWithDesktop() ) {
2532 // remote->removeSyncInfo( QString());//remove all info 2534 // remote->removeSyncInfo( QString());//remove all info
2533 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 2535 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
2534 mLastAddressbookSync = KSyncManager::mRequestedSyncEvent; 2536 mLastAddressbookSync = KSyncManager::mRequestedSyncEvent;
2535 qDebug("using extern time for calendar sync: %s ", mLastAddressbookSync.toString().latin1() ); 2537 qDebug("using extern time for calendar sync: %s ", mLastAddressbookSync.toString().latin1() );
2536 } else { 2538 } else {
2537 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime "); 2539 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime ");
2538 } 2540 }
2539 } 2541 }
2540 QDateTime modifiedCalendar = mLastAddressbookSync; 2542 QDateTime modifiedCalendar = mLastAddressbookSync;
2541 addresseeLSync = getLastSyncAddressee(); 2543 addresseeLSync = getLastSyncAddressee();
2542 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1()); 2544 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1());
2543 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName ); 2545 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName );
2544 if ( !addresseeR.isEmpty() ) { 2546 if ( !addresseeR.isEmpty() ) {
2545 addresseeRSync = addresseeR; 2547 addresseeRSync = addresseeR;
2546 remote->removeAddressee(addresseeR ); 2548 remote->removeAddressee(addresseeR );
2547 2549
2548 } else { 2550 } else {
2549 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2551 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2550 addresseeRSync = addresseeLSync ; 2552 addresseeRSync = addresseeLSync ;
2551 } else { 2553 } else {
2552 qDebug("FULLDATE 1"); 2554 qDebug("FULLDATE 1");
2553 fullDateRange = true; 2555 fullDateRange = true;
2554 Addressee newAdd; 2556 Addressee newAdd;
2555 addresseeRSync = newAdd; 2557 addresseeRSync = newAdd;
2556 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee")); 2558 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee"));
2557 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName ); 2559 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName );
2558 addresseeRSync.setRevision( mLastAddressbookSync ); 2560 addresseeRSync.setRevision( mLastAddressbookSync );
2559 addresseeRSync.setCategories( i18n("SyncAddressee") ); 2561 addresseeRSync.setCategories( i18n("SyncAddressee") );
2560 } 2562 }
2561 } 2563 }
2562 if ( addresseeLSync.revision() == mLastAddressbookSync ) { 2564 if ( addresseeLSync.revision() == mLastAddressbookSync ) {
2563 qDebug("FULLDATE 2"); 2565 qDebug("FULLDATE 2");
2564 fullDateRange = true; 2566 fullDateRange = true;
2565 } 2567 }
2566 if ( ! fullDateRange ) { 2568 if ( ! fullDateRange ) {
2567 if ( addresseeLSync.revision() != addresseeRSync.revision() ) { 2569 if ( addresseeLSync.revision() != addresseeRSync.revision() ) {
2568 2570
2569 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() ); 2571 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() );
2570 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec()); 2572 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec());
2571 fullDateRange = true; 2573 fullDateRange = true;
2572 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() ); 2574 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() );
2573 } 2575 }
2574 } 2576 }
2575 // fullDateRange = true; // debug only! 2577 // fullDateRange = true; // debug only!
2576 if ( fullDateRange ) 2578 if ( fullDateRange )
2577 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365); 2579 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365);
2578 else 2580 else
2579 mLastAddressbookSync = addresseeLSync.revision(); 2581 mLastAddressbookSync = addresseeLSync.revision();
2580 // for resyncing if own file has changed 2582 // for resyncing if own file has changed
2581 // PENDING fixme later when implemented 2583 // PENDING fixme later when implemented
2582#if 0 2584#if 0
2583 if ( mCurrentSyncDevice == "deleteaftersync" ) { 2585 if ( mCurrentSyncDevice == "deleteaftersync" ) {
2584 mLastAddressbookSync = loadedFileVersion; 2586 mLastAddressbookSync = loadedFileVersion;
2585 qDebug("setting mLastAddressbookSync "); 2587 qDebug("setting mLastAddressbookSync ");
2586 } 2588 }
2587#endif 2589#endif
2588 2590
2589 //qDebug("*************************** "); 2591 //qDebug("*************************** ");
2590 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() ); 2592 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() );
2591 QStringList er = remote->uidList(); 2593 QStringList er = remote->uidList();
2592 Addressee inR ;//= er.first(); 2594 Addressee inR ;//= er.first();
2593 Addressee inL; 2595 Addressee inL;
2594 2596
2595 syncManager->showProgressBar(0, i18n("Syncing - close to abort!"), er.count()); 2597 syncManager->showProgressBar(0, i18n("Syncing - close to abort!"), er.count());
2596 2598
2597 int modulo = (er.count()/10)+1; 2599 int modulo = (er.count()/10)+1;
2598 int incCounter = 0; 2600 int incCounter = 0;
2599 while ( incCounter < er.count()) { 2601 while ( incCounter < er.count()) {
2600 if (syncManager->isProgressBarCanceled()) 2602 if (syncManager->isProgressBarCanceled())
2601 return false; 2603 return false;
2602 if ( incCounter % modulo == 0 ) 2604 if ( incCounter % modulo == 0 )
2603 syncManager->showProgressBar(incCounter); 2605 syncManager->showProgressBar(incCounter);
2604 2606
2605 uid = er[ incCounter ]; 2607 uid = er[ incCounter ];
2606 bool skipIncidence = false; 2608 bool skipIncidence = false;
2607 if ( uid.left(19) == QString("last-syncAddressee-") ) 2609 if ( uid.left(19) == QString("last-syncAddressee-") )
2608 skipIncidence = true; 2610 skipIncidence = true;
2609 QString idS,OidS; 2611 QString idS,OidS;
2610 qApp->processEvents(); 2612 qApp->processEvents();
2611 if ( !skipIncidence ) { 2613 if ( !skipIncidence ) {
2612 inL = local->findByUid( uid ); 2614 inL = local->findByUid( uid );
2613 inR = remote->findByUid( uid ); 2615 inR = remote->findByUid( uid );
2614 //inL.setResource( 0 ); 2616 //inL.setResource( 0 );
2615 //inR.setResource( 0 ); 2617 //inR.setResource( 0 );
2616 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars 2618 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars
2617 if ( !inL.resource() || inL.resource()->includeInSync() ) { 2619 if ( !inL.resource() || inL.resource()->includeInSync() ) {
2618 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) { 2620 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) {
2619 //qDebug("take %d %s ", take, inL.summary().latin1()); 2621 //qDebug("take %d %s ", take, inL.summary().latin1());
2620 if ( take == 3 ) 2622 if ( take == 3 )
2621 return false; 2623 return false;
2622 if ( take == 1 ) {// take local 2624 if ( take == 1 ) {// take local
2623 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2625 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2624 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2626 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2625 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2627 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2626 local->insertAddressee( inL, false ); 2628 local->insertAddressee( inL, false );
2627 idS = inR.externalUID(); 2629 idS = inR.externalUID();
2628 OidS = inR.originalExternalUID(); 2630 OidS = inR.originalExternalUID();
2629 } 2631 }
2630 else 2632 else
2631 idS = inR.IDStr(); 2633 idS = inR.IDStr();
2632 remote->removeAddressee( inR ); 2634 remote->removeAddressee( inR );
2633 inR = inL; 2635 inR = inL;
2634 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 2636 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
2635 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2637 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2636 inR.setOriginalExternalUID( OidS ); 2638 inR.setOriginalExternalUID( OidS );
2637 inR.setExternalUID( idS ); 2639 inR.setExternalUID( idS );
2638 if ( syncManager->syncWithDesktop() ) 2640 if ( syncManager->syncWithDesktop() )
2639 inR.setIDStr("changed" ); 2641 inR.setIDStr("changed" );
2640 //inR.insertCustom( "KADDRESSBOOK", "X-KDESYNC","changed" ); 2642 //inR.insertCustom( "KADDRESSBOOK", "X-KDESYNC","changed" );
2641 } else { 2643 } else {
2642 inR.setIDStr( idS ); 2644 inR.setIDStr( idS );
2643 } 2645 }
2644 inR.setResource( 0 ); 2646 inR.setResource( 0 );
2645 remote->insertAddressee( inR , false); 2647 remote->insertAddressee( inR , false);
2646 ++changedRemote; 2648 ++changedRemote;
2647 } else { // take == 2 take remote 2649 } else { // take == 2 take remote
2648 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2650 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2649 if ( inR.revision().date().year() < 2004 ) 2651 if ( inR.revision().date().year() < 2004 )
2650 inR.setRevision( modifiedCalendar ); 2652 inR.setRevision( modifiedCalendar );
2651 } 2653 }
2652 idS = inL.IDStr(); 2654 idS = inL.IDStr();
2653 local->removeAddressee( inL ); 2655 local->removeAddressee( inL );
2654 inL = inR; 2656 inL = inR;
2655 inL.setIDStr( idS ); 2657 inL.setIDStr( idS );
2656 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2658 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2657 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2659 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2658 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2660 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2659 } 2661 }
2660 inL.setResource( 0 ); 2662 inL.setResource( 0 );
2661 local->insertAddressee( inL , false ); 2663 local->insertAddressee( inL , false );
2662 ++changedLocal; 2664 ++changedLocal;
2663 } 2665 }
2664 } 2666 }
2665 } 2667 }
2666 } else { // no conflict 2668 } else { // no conflict
2667 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2669 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2668 QString des = addresseeLSync.note(); 2670 QString des = addresseeLSync.note();
2669 if ( des.find( inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 2671 if ( des.find( inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
2670 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 2672 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE );
2671 remote->insertAddressee( inR, false ); 2673 remote->insertAddressee( inR, false );
2672 ++deletedAddresseeR; 2674 ++deletedAddresseeR;
2673 } else { 2675 } else {
2674 inR.setRevision( modifiedCalendar ); 2676 inR.setRevision( modifiedCalendar );
2675 remote->insertAddressee( inR, false ); 2677 remote->insertAddressee( inR, false );
2676 inL = inR; 2678 inL = inR;
2677 inL.setResource( 0 ); 2679 inL.setResource( 0 );
2678 local->insertAddressee( inL , false); 2680 local->insertAddressee( inL , false);
2679 ++addedAddressee; 2681 ++addedAddressee;
2680 } 2682 }
2681 } else { 2683 } else {
2682 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) { 2684 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) {
2683 inR.setRevision( modifiedCalendar ); 2685 inR.setRevision( modifiedCalendar );
2684 remote->insertAddressee( inR, false ); 2686 remote->insertAddressee( inR, false );
2685 inR.setResource( 0 ); 2687 inR.setResource( 0 );
2686 local->insertAddressee( inR, false ); 2688 local->insertAddressee( inR, false );
2687 ++addedAddressee; 2689 ++addedAddressee;
2688 } else { 2690 } else {
2689 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR); 2691 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR);
2690 remote->removeAddressee( inR ); 2692 remote->removeAddressee( inR );
2691 ++deletedAddresseeR; 2693 ++deletedAddresseeR;
2692 } 2694 }
2693 } 2695 }
2694 } 2696 }
2695 } 2697 }
2696 ++incCounter; 2698 ++incCounter;
2697 } 2699 }
2698 er.clear(); 2700 er.clear();
2699 QStringList el = local->uidList(); 2701 QStringList el = local->uidList();
2700 modulo = (el.count()/10)+1; 2702 modulo = (el.count()/10)+1;
2701 2703
2702 syncManager->showProgressBar(0, i18n("Add / remove addressees"), el.count()); 2704 syncManager->showProgressBar(0, i18n("Add / remove addressees"), el.count());
2703 incCounter = 0; 2705 incCounter = 0;
2704 while ( incCounter < el.count()) { 2706 while ( incCounter < el.count()) {
2705 qApp->processEvents(); 2707 qApp->processEvents();
2706 if (syncManager->isProgressBarCanceled()) 2708 if (syncManager->isProgressBarCanceled())
2707 return false; 2709 return false;
2708 if ( incCounter % modulo == 0 ) 2710 if ( incCounter % modulo == 0 )
2709 syncManager->showProgressBar(incCounter); 2711 syncManager->showProgressBar(incCounter);
2710 uid = el[ incCounter ]; 2712 uid = el[ incCounter ];
2711 bool skipIncidence = false; 2713 bool skipIncidence = false;
2712 if ( uid.left(19) == QString("last-syncAddressee-") ) 2714 if ( uid.left(19) == QString("last-syncAddressee-") )
2713 skipIncidence = true; 2715 skipIncidence = true;
2714 if ( !skipIncidence ) { 2716 if ( !skipIncidence ) {
2715 inL = local->findByUid( uid ); 2717 inL = local->findByUid( uid );
2716 if ( !inL.resource() || inL.resource()->includeInSync() ) { 2718 if ( !inL.resource() || inL.resource()->includeInSync() ) {
2717 inR = remote->findByUid( uid ); 2719 inR = remote->findByUid( uid );
2718 if ( inR.isEmpty() ) { 2720 if ( inR.isEmpty() ) {
2719 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2721 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2720 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 2722 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
2721 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 2723 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2722 local->removeAddressee( inL ); 2724 local->removeAddressee( inL );
2723 ++deletedAddresseeL; 2725 ++deletedAddresseeL;
2724 } else { 2726 } else {
2725 if ( ! syncManager->mWriteBackExistingOnly ) { 2727 if ( ! syncManager->mWriteBackExistingOnly ) {
2726 inL.removeID(mCurrentSyncDevice ); 2728 inL.removeID(mCurrentSyncDevice );
2727 ++addedAddresseeR; 2729 ++addedAddresseeR;
2728 inL.setRevision( modifiedCalendar ); 2730 inL.setRevision( modifiedCalendar );
2729 local->insertAddressee( inL, false ); 2731 local->insertAddressee( inL, false );
2730 inR = inL; 2732 inR = inL;
2731 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL ); 2733 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL );
2732 inR.setResource( 0 ); 2734 inR.setResource( 0 );
2733 remote->insertAddressee( inR, false ); 2735 remote->insertAddressee( inR, false );
2734 } 2736 }
2735 } 2737 }
2736 } else { 2738 } else {
2737 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) { 2739 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) {
2738 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 2740 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2739 local->removeAddressee( inL ); 2741 local->removeAddressee( inL );
2740 ++deletedAddresseeL; 2742 ++deletedAddresseeL;
2741 } else { 2743 } else {
2742 if ( ! syncManager->mWriteBackExistingOnly ) { 2744 if ( ! syncManager->mWriteBackExistingOnly ) {
2743 ++addedAddresseeR; 2745 ++addedAddresseeR;
2744 inL.setRevision( modifiedCalendar ); 2746 inL.setRevision( modifiedCalendar );
2745 local->insertAddressee( inL, false ); 2747 local->insertAddressee( inL, false );
2746 inR = inL; 2748 inR = inL;
2747 inR.setResource( 0 ); 2749 inR.setResource( 0 );
2748 remote->insertAddressee( inR, false ); 2750 remote->insertAddressee( inR, false );
2749 } 2751 }
2750 } 2752 }
2751 } 2753 }
2752 } 2754 }
2753 } 2755 }
2754 } 2756 }
2755 ++incCounter; 2757 ++incCounter;
2756 } 2758 }
2757 el.clear(); 2759 el.clear();
2758 syncManager->hideProgressBar(); 2760 syncManager->hideProgressBar();
2759 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 ); 2761 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 );
2760 // get rid of micro seconds 2762 // get rid of micro seconds
2761 QTime t = mLastAddressbookSync.time(); 2763 QTime t = mLastAddressbookSync.time();
2762 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 2764 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) );
2763 addresseeLSync.setRevision( mLastAddressbookSync ); 2765 addresseeLSync.setRevision( mLastAddressbookSync );
2764 addresseeRSync.setRevision( mLastAddressbookSync ); 2766 addresseeRSync.setRevision( mLastAddressbookSync );
2765 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ; 2767 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ;
2766 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName ); 2768 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName );
2767 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ; 2769 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ;
2768 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") ); 2770 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") );
2769 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ; 2771 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ;
2770 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() ); 2772 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() );
2771 addresseeRSync.setNote( "" ) ; 2773 addresseeRSync.setNote( "" ) ;
2772 addresseeLSync.setNote( "" ); 2774 addresseeLSync.setNote( "" );
2773 2775
2774 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 2776 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
2775 remote->insertAddressee( addresseeRSync, false ); 2777 remote->insertAddressee( addresseeRSync, false );
2776 local->insertAddressee( addresseeLSync, false ); 2778 local->insertAddressee( addresseeLSync, false );
2777 QString mes; 2779 QString mes;
2778 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 ); 2780 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 );
2779 if ( syncManager->mShowSyncSummary ) { 2781 if ( syncManager->mShowSyncSummary ) {
2780 KMessageBox::information(this, mes, i18n("KA/Pi Synchronization") ); 2782 KMessageBox::information(this, mes, i18n("KA/Pi Synchronization") );
2781 } 2783 }
2782 qDebug( mes ); 2784 qDebug( mes );
2783 return syncOK; 2785 return syncOK;
2784} 2786}
2785 2787
2786 2788
2787//this is a overwritten callbackmethods from the syncinterface 2789//this is a overwritten callbackmethods from the syncinterface
2788bool KABCore::sync(KSyncManager* manager, QString filename, int mode) 2790bool KABCore::sync(KSyncManager* manager, QString filename, int mode)
2789{ 2791{
2790 2792
2791 //pending prepare addresseeview for output 2793 //pending prepare addresseeview for output
2792 //pending detect, if remote file has REV field. if not switch to external sync 2794 //pending detect, if remote file has REV field. if not switch to external sync
2793 mGlobalSyncMode = SYNC_MODE_NORMAL; 2795 mGlobalSyncMode = SYNC_MODE_NORMAL;
2794 QString mCurrentSyncDevice = manager->getCurrentSyncDevice(); 2796 QString mCurrentSyncDevice = manager->getCurrentSyncDevice();
2795 2797
2796 AddressBook abLocal(filename,"syncContact"); 2798 AddressBook abLocal(filename,"syncContact");
2797 bool syncOK = false; 2799 bool syncOK = false;
2798 if ( abLocal.load() ) { 2800 if ( abLocal.load() ) {
2799 qDebug("AB loaded %s,sync mode %d",filename.latin1(), mode ); 2801 qDebug("AB loaded %s,sync mode %d",filename.latin1(), mode );
2800 bool external = false; 2802 bool external = false;
2801 bool isXML = false; 2803 bool isXML = false;
2802 if ( filename.right(4) == ".xml") { 2804 if ( filename.right(4) == ".xml") {
2803 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2805 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2804 isXML = true; 2806 isXML = true;
2805 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, true ); 2807 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, true );
2806 } else { 2808 } else {
2807 external = !manager->mIsKapiFile; 2809 external = !manager->mIsKapiFile;
2808 if ( external ) { 2810 if ( external ) {
2809 qDebug("Setting vcf mode to external "); 2811 qDebug("Setting vcf mode to external ");
2810 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2812 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2811 AddressBook::Iterator it; 2813 AddressBook::Iterator it;
2812 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2814 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2813 (*it).setID( mCurrentSyncDevice, (*it).uid() ); 2815 (*it).setID( mCurrentSyncDevice, (*it).uid() );
2814 (*it).computeCsum( mCurrentSyncDevice ); 2816 (*it).computeCsum( mCurrentSyncDevice );
2815 } 2817 }
2816 } 2818 }
2817 } 2819 }
2818 //AddressBook::Iterator it; 2820 //AddressBook::Iterator it;
2819 //QStringList vcards; 2821 //QStringList vcards;
2820 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2822 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2821 // qDebug("Name %s ", (*it).familyName().latin1()); 2823 // qDebug("Name %s ", (*it).familyName().latin1());
2822 //} 2824 //}
2823 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode ); 2825 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode );
2824 if ( syncOK ) { 2826 if ( syncOK ) {
2825 if ( syncManager->mWriteBackFile ) 2827 if ( syncManager->mWriteBackFile )
2826 { 2828 {
2827 if ( external ) 2829 if ( external )
2828 abLocal.removeSyncAddressees( !isXML); 2830 abLocal.removeSyncAddressees( !isXML);
2829 qDebug("Saving remote AB "); 2831 qDebug("Saving remote AB ");
2830 if ( ! abLocal.saveAB()) 2832 if ( ! abLocal.saveAB())
2831 qDebug("Error writing back AB to file "); 2833 qDebug("Error writing back AB to file ");
2832 if ( external ) { 2834 if ( external ) {
2833 // afterwrite processing 2835 // afterwrite processing
2834 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice ,isXML); 2836 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice ,isXML);
2835 } 2837 }
2836 } 2838 }
2837 } 2839 }
2838 setModified(); 2840 setModified();
2839 2841
2840 } 2842 }
2841 if ( syncOK ) 2843 if ( syncOK )
2842 mViewManager->refreshView(); 2844 mViewManager->refreshView();
2843 return syncOK; 2845 return syncOK;
2844 2846
2845} 2847}
2846void KABCore::removeSyncInfo( QString syncProfile) 2848void KABCore::removeSyncInfo( QString syncProfile)
2847{ 2849{
2848 qDebug("AB:removeSyncInfo for profile %s ", syncProfile.latin1()); 2850 qDebug("AB:removeSyncInfo for profile %s ", syncProfile.latin1());
2849 mAddressBook->removeSyncInfo( syncProfile ); 2851 mAddressBook->removeSyncInfo( syncProfile );
2850 setModified(); 2852 setModified();
2851} 2853}
2852 2854
2853 2855
2854//this is a overwritten callbackmethods from the syncinterface 2856//this is a overwritten callbackmethods from the syncinterface
2855bool KABCore::syncExternal(KSyncManager* manager, QString resource) 2857bool KABCore::syncExternal(KSyncManager* manager, QString resource)
2856{ 2858{
2857 if ( resource == "phone" ) 2859 if ( resource == "phone" )
2858 return syncPhone(); 2860 return syncPhone();
2859 disableBR( true ); 2861 disableBR( true );
2860 QString mCurrentSyncDevice = manager->getCurrentSyncDevice(); 2862 QString mCurrentSyncDevice = manager->getCurrentSyncDevice();
2861 2863
2862 AddressBook abLocal( resource,"syncContact"); 2864 AddressBook abLocal( resource,"syncContact");
2863 bool syncOK = false; 2865 bool syncOK = false;
2864 if ( abLocal.load() ) { 2866 if ( abLocal.load() ) {
2865 qDebug("AB sharp loaded ,sync device %s",mCurrentSyncDevice.latin1()); 2867 qDebug("AB sharp loaded ,sync device %s",mCurrentSyncDevice.latin1());
2866 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2868 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2867 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, false ); 2869 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, false );
2868 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, syncManager->mSyncAlgoPrefs ); 2870 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, syncManager->mSyncAlgoPrefs );
2869 if ( syncOK ) { 2871 if ( syncOK ) {
2870 if ( syncManager->mWriteBackFile ) { 2872 if ( syncManager->mWriteBackFile ) {
2871 abLocal.removeSyncAddressees( false ); 2873 abLocal.removeSyncAddressees( false );
2872 abLocal.saveAB(); 2874 abLocal.saveAB();
2873 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice, true ); 2875 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice, true );
2874 } 2876 }
2875 } 2877 }
2876 setModified(); 2878 setModified();
2877 } 2879 }
2878 if ( syncOK ) 2880 if ( syncOK )
2879 mViewManager->refreshView(); 2881 mViewManager->refreshView();
2880 disableBR( false ); 2882 disableBR( false );
2881 return syncOK; 2883 return syncOK;
2882 2884
2883} 2885}
2884void KABCore::message( QString m ) 2886void KABCore::message( QString m )
2885{ 2887{
2886 topLevelWidget()->setCaption( m ); 2888 topLevelWidget()->setCaption( m );
2887 mMessageTimer->start( 15000, true ); 2889 mMessageTimer->start( 15000, true );
2888} 2890}
2889bool KABCore::syncPhone() 2891bool KABCore::syncPhone()
2890{ 2892{
2891 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); 2893 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
2892 QString fileName = getPhoneFile(); 2894 QString fileName = getPhoneFile();
2893 if ( !PhoneAccess::readFromPhone( fileName) ) { 2895 if ( !PhoneAccess::readFromPhone( fileName) ) {
2894 message(i18n("Phone access failed!")); 2896 message(i18n("Phone access failed!"));
2895 return false; 2897 return false;
2896 } 2898 }
2897 AddressBook abLocal( fileName,"syncContact"); 2899 AddressBook abLocal( fileName,"syncContact");
2898 bool syncOK = false; 2900 bool syncOK = false;
2899 { 2901 {
2900 abLocal.importFromFile( fileName ); 2902 abLocal.importFromFile( fileName );
2901 qDebug("AB phone loaded ,sync device %s",mCurrentSyncDevice.latin1()); 2903 qDebug("AB phone loaded ,sync device %s",mCurrentSyncDevice.latin1());
2902 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2904 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2903 abLocal.preparePhoneSync( mCurrentSyncDevice, true ); 2905 abLocal.preparePhoneSync( mCurrentSyncDevice, true );
2904 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, true ); 2906 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, true );
2905 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, syncManager->mSyncAlgoPrefs ); 2907 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, syncManager->mSyncAlgoPrefs );
2906 if ( syncOK ) { 2908 if ( syncOK ) {
2907 if ( syncManager->mWriteBackFile ) { 2909 if ( syncManager->mWriteBackFile ) {
2908 abLocal.removeSyncAddressees( true ); 2910 abLocal.removeSyncAddressees( true );
2909 abLocal.saveABphone( fileName ); 2911 abLocal.saveABphone( fileName );
2910 abLocal.findNewExtIds( fileName, mCurrentSyncDevice ); 2912 abLocal.findNewExtIds( fileName, mCurrentSyncDevice );
2911 //abLocal.preparePhoneSync( mCurrentSyncDevice, false ); 2913 //abLocal.preparePhoneSync( mCurrentSyncDevice, false );
2912 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice, true ); 2914 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice, true );
2913 } 2915 }
2914 } 2916 }
2915 setModified(); 2917 setModified();
2916 } 2918 }
2917 if ( syncOK ) 2919 if ( syncOK )
2918 mViewManager->refreshView(); 2920 mViewManager->refreshView();
2919 return syncOK; 2921 return syncOK;
2920} 2922}
2921void KABCore::getFile( bool success ) 2923void KABCore::getFile( bool success )
2922{ 2924{
2923 if ( ! success ) { 2925 if ( ! success ) {
2924 message( i18n("Error receiving file. Nothing changed!") ); 2926 message( i18n("Error receiving file. Nothing changed!") );
2925 return; 2927 return;
2926 } 2928 }
2927 int count = mAddressBook->importFromFile( sentSyncFile() , false, true ); 2929 int count = mAddressBook->importFromFile( sentSyncFile() , false, true );
2928 if ( count ) 2930 if ( count )
2929 setModified( true ); 2931 setModified( true );
2930 message( i18n("Pi-Sync successful!") ); 2932 message( i18n("Pi-Sync successful!") );
2931 mViewManager->refreshView(); 2933 mViewManager->refreshView();
2932} 2934}
2933void KABCore::syncFileRequest() 2935void KABCore::syncFileRequest()
2934{ 2936{
2935 if ( KABPrefs::instance()->mPassiveSyncWithDesktop ) { 2937 if ( KABPrefs::instance()->mPassiveSyncWithDesktop ) {
2936 syncManager->slotSyncMenu( 999 ); 2938 syncManager->slotSyncMenu( 999 );
2937 } 2939 }
2938 mAddressBook->export2File( sentSyncFile() ); 2940 mAddressBook->export2File( sentSyncFile() );
2939} 2941}
2940QString KABCore::sentSyncFile() 2942QString KABCore::sentSyncFile()
2941{ 2943{
2942#ifdef DESKTOP_VERSION 2944#ifdef DESKTOP_VERSION
2943 return locateLocal( "tmp", "copysyncab.vcf" ); 2945 return locateLocal( "tmp", "copysyncab.vcf" );
2944#else 2946#else
2945 return QString( "/tmp/copysyncab.vcf" ); 2947 return QString( "/tmp/copysyncab.vcf" );
2946#endif 2948#endif
2947} 2949}
2948 2950
2949void KABCore::setCaptionBack() 2951void KABCore::setCaptionBack()
2950{ 2952{
2951 mMessageTimer->stop(); 2953 mMessageTimer->stop();
2952 topLevelWidget()->setCaption( i18n("KAddressbook/Pi") ); 2954 topLevelWidget()->setCaption( i18n("KAddressbook/Pi") );
2953} 2955}
diff --git a/kaddressbook/viewmanager.cpp b/kaddressbook/viewmanager.cpp
index 3d0c275..0d91c12 100644
--- a/kaddressbook/viewmanager.cpp
+++ b/kaddressbook/viewmanager.cpp
@@ -1,718 +1,718 @@
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/* 24/*
25Enhanced Version of the file for platform independent KDE tools. 25Enhanced Version of the file for platform independent KDE tools.
26Copyright (c) 2004 Ulf Schenk 26Copyright (c) 2004 Ulf Schenk
27 27
28$Id$ 28$Id$
29*/ 29*/
30 30
31 31
32#ifndef KAB_EMBEDDED 32#ifndef KAB_EMBEDDED
33#include <libkdepim/kvcarddrag.h> 33#include <libkdepim/kvcarddrag.h>
34#include <kabc/vcardconverter.h> 34#include <kabc/vcardconverter.h>
35#include <kconfig.h> 35#include <kconfig.h>
36#include <kdeversion.h> 36#include <kdeversion.h>
37#include <kiconloader.h> 37#include <kiconloader.h>
38#include <klocale.h> 38#include <klocale.h>
39#include <kmessagebox.h> 39#include <kmessagebox.h>
40#include <kmultipledrag.h> 40#include <kmultipledrag.h>
41#include <ktrader.h> 41#include <ktrader.h>
42#include <kurldrag.h> 42#include <kurldrag.h>
43 43
44#include "addresseeutil.h" 44#include "addresseeutil.h"
45#else //KAB_EMBEDDED 45#else //KAB_EMBEDDED
46#include "views/kaddressbookiconview.h" 46#include "views/kaddressbookiconview.h"
47#include "views/kaddressbooktableview.h" 47#include "views/kaddressbooktableview.h"
48#include "views/kaddressbookcardview.h" 48#include "views/kaddressbookcardview.h"
49#include "kaddressbookview.h" 49#include "kaddressbookview.h"
50 50
51#include <qaction.h> 51#include <qaction.h>
52#include <qmessagebox.h> 52#include <qmessagebox.h>
53#include <qpopupmenu.h> 53#include <qpopupmenu.h>
54#include <kconfigbase.h> 54#include <kconfigbase.h>
55 55
56#endif //KAB_EMBEDDED 56#endif //KAB_EMBEDDED
57 57
58 58
59#include <kdebug.h> 59#include <kdebug.h>
60#include <kactionclasses.h> 60#include <kactionclasses.h>
61 61
62#include <qlayout.h> 62#include <qlayout.h>
63#include <qwidgetstack.h> 63#include <qwidgetstack.h>
64 64
65#include <kabc/addressbook.h> 65#include <kabc/addressbook.h>
66#include "filtereditdialog.h" 66#include "filtereditdialog.h"
67#include "addviewdialog.h" 67#include "addviewdialog.h"
68#include "kabcore.h" 68#include "kabcore.h"
69#include "kabprefs.h" 69#include "kabprefs.h"
70#include "viewmanager.h" 70#include "viewmanager.h"
71 71
72ViewManager::ViewManager( KABCore *core, QWidget *parent, const char *name ) 72ViewManager::ViewManager( KABCore *core, QWidget *parent, const char *name )
73 : QWidget( parent, name ), mCore( core ), mActiveView( 0 ) 73 : QWidget( parent, name ), mCore( core ), mActiveView( 0 )
74{ 74{
75 initGUI(); 75 initGUI();
76 initActions(); 76 initActions();
77 77
78 mViewDict.setAutoDelete( true ); 78 mViewDict.setAutoDelete( true );
79 79
80 createViewFactories(); 80 createViewFactories();
81} 81}
82 82
83ViewManager::~ViewManager() 83ViewManager::~ViewManager()
84{ 84{
85 unloadViews(); 85 unloadViews();
86 mViewFactoryDict.clear(); 86 mViewFactoryDict.clear();
87} 87}
88void ViewManager::scrollUP() 88void ViewManager::scrollUP()
89{ 89{
90 if ( mActiveView ) 90 if ( mActiveView )
91 mActiveView->scrollUP(); 91 mActiveView->scrollUP();
92} 92}
93void ViewManager::scrollDOWN() 93void ViewManager::scrollDOWN()
94{ 94{
95 if ( mActiveView ) 95 if ( mActiveView )
96 mActiveView->scrollDOWN(); 96 mActiveView->scrollDOWN();
97} 97}
98void ViewManager::restoreSettings() 98void ViewManager::restoreSettings()
99{ 99{
100 mViewNameList = KABPrefs::instance()->mViewNames; 100 mViewNameList = KABPrefs::instance()->mViewNames;
101 QString activeViewName = KABPrefs::instance()->mCurrentView; 101 QString activeViewName = KABPrefs::instance()->mCurrentView;
102 102
103 mActionSelectView->setItems( mViewNameList ); 103 mActionSelectView->setItems( mViewNameList );
104 104
105 // Filter 105 // Filter
106 mFilterList = Filter::restore( mCore->config(), "Filter" ); 106 mFilterList = Filter::restore( mCore->config(), "Filter" );
107 mActionSelectFilter->setItems( filterNames() ); 107 mActionSelectFilter->setItems( filterNames() );
108 mActionSelectFilter->setCurrentItem( KABPrefs::instance()->mCurrentFilter ); 108 mActionSelectFilter->setCurrentItem( KABPrefs::instance()->mCurrentFilter );
109 mActionSelectFilter->setComboWidth( 100 ); 109 mActionSelectFilter->setComboWidth( 150 );
110 // Tell the views to reread their config, since they may have 110 // Tell the views to reread their config, since they may have
111 // been modified by global settings 111 // been modified by global settings
112 QString _oldgroup = mCore->config()->group(); 112 QString _oldgroup = mCore->config()->group();
113 113
114 QDictIterator<KAddressBookView> it( mViewDict ); 114 QDictIterator<KAddressBookView> it( mViewDict );
115 for ( it.toFirst(); it.current(); ++it ) { 115 for ( it.toFirst(); it.current(); ++it ) {
116 KConfigGroupSaver saver( mCore->config(), it.currentKey() ); 116 KConfigGroupSaver saver( mCore->config(), it.currentKey() );
117 it.current()->readConfig( mCore->config() ); 117 it.current()->readConfig( mCore->config() );
118 } 118 }
119 setActiveView( activeViewName ); 119 setActiveView( activeViewName );
120 120
121 mActionDeleteView->setEnabled( mViewNameList.count() > 1 ); 121 mActionDeleteView->setEnabled( mViewNameList.count() > 1 );
122} 122}
123 123
124void ViewManager::saveSettings() 124void ViewManager::saveSettings()
125{ 125{
126 QString _oldgroup = mCore->config()->group(); 126 QString _oldgroup = mCore->config()->group();
127 127
128 QDictIterator<KAddressBookView> it( mViewDict ); 128 QDictIterator<KAddressBookView> it( mViewDict );
129 for ( it.toFirst(); it.current(); ++it ) { 129 for ( it.toFirst(); it.current(); ++it ) {
130 KConfigGroupSaver saver( mCore->config(), it.currentKey() ); 130 KConfigGroupSaver saver( mCore->config(), it.currentKey() );
131#ifdef DESKTOP_VERSION 131#ifdef DESKTOP_VERSION
132 (*it)->writeConfig( mCore->config() ); 132 (*it)->writeConfig( mCore->config() );
133#else 133#else
134 (*it).writeConfig( mCore->config() ); 134 (*it).writeConfig( mCore->config() );
135#endif 135#endif
136 } 136 }
137 137
138 Filter::save( mCore->config(), "Filter", mFilterList ); 138 Filter::save( mCore->config(), "Filter", mFilterList );
139 KABPrefs::instance()->mCurrentFilter = mActionSelectFilter->currentItem(); 139 KABPrefs::instance()->mCurrentFilter = mActionSelectFilter->currentItem();
140 140
141 // write the view name list 141 // write the view name list
142 KABPrefs::instance()->mViewNames = mViewNameList; 142 KABPrefs::instance()->mViewNames = mViewNameList;
143 KABPrefs::instance()->mCurrentView = mActiveView->caption(); 143 KABPrefs::instance()->mCurrentView = mActiveView->caption();
144 144
145} 145}
146 146
147QStringList ViewManager::selectedUids() const 147QStringList ViewManager::selectedUids() const
148{ 148{
149 if ( mActiveView ) 149 if ( mActiveView )
150 return mActiveView->selectedUids(); 150 return mActiveView->selectedUids();
151 else 151 else
152 return QStringList(); 152 return QStringList();
153} 153}
154 154
155QStringList ViewManager::selectedEmails() const 155QStringList ViewManager::selectedEmails() const
156{ 156{
157 if ( mActiveView ) 157 if ( mActiveView )
158 return mActiveView->selectedEmails(); 158 return mActiveView->selectedEmails();
159 else 159 else
160 return QStringList(); 160 return QStringList();
161} 161}
162 162
163KABC::Addressee::List ViewManager::selectedAddressees() const 163KABC::Addressee::List ViewManager::selectedAddressees() const
164{ 164{
165 KABC::Addressee::List list; 165 KABC::Addressee::List list;
166 if ( mActiveView ) { 166 if ( mActiveView ) {
167 QStringList uids = mActiveView->selectedUids(); 167 QStringList uids = mActiveView->selectedUids();
168 QStringList::Iterator it; 168 QStringList::Iterator it;
169 for ( it = uids.begin(); it != uids.end(); ++it ) { 169 for ( it = uids.begin(); it != uids.end(); ++it ) {
170 KABC::Addressee addr = mCore->addressBook()->findByUid( *it ); 170 KABC::Addressee addr = mCore->addressBook()->findByUid( *it );
171 if ( !addr.isEmpty() ) 171 if ( !addr.isEmpty() )
172 list.append( addr ); 172 list.append( addr );
173 } 173 }
174 } 174 }
175 175
176 return list; 176 return list;
177} 177}
178//US added another method with no parameter, since my moc compiler does not support default parameters. 178//US added another method with no parameter, since my moc compiler does not support default parameters.
179void ViewManager::setSelected() 179void ViewManager::setSelected()
180{ 180{
181 setSelected( QString::null, true ); 181 setSelected( QString::null, true );
182} 182}
183 183
184void ViewManager::setSelected( const QString &uid, bool selected ) 184void ViewManager::setSelected( const QString &uid, bool selected )
185{ 185{
186 if ( mActiveView ) 186 if ( mActiveView )
187 mActiveView->setSelected( uid, selected ); 187 mActiveView->setSelected( uid, selected );
188} 188}
189 189
190void ViewManager::setListSelected(QStringList list) 190void ViewManager::setListSelected(QStringList list)
191{ 191{
192 int i, count = list.count(); 192 int i, count = list.count();
193 for ( i = 0; i < count;++i ) 193 for ( i = 0; i < count;++i )
194 setSelected( list[i], true ); 194 setSelected( list[i], true );
195 195
196} 196}
197void ViewManager::unloadViews() 197void ViewManager::unloadViews()
198{ 198{
199 mViewDict.clear(); 199 mViewDict.clear();
200 mActiveView = 0; 200 mActiveView = 0;
201} 201}
202 202
203void ViewManager::setActiveView( const QString &name ) 203void ViewManager::setActiveView( const QString &name )
204{ 204{
205 KAddressBookView *view = 0; 205 KAddressBookView *view = 0;
206 206
207 // Check that this isn't the same as the current active view 207 // Check that this isn't the same as the current active view
208 if ( mActiveView && ( mActiveView->caption() == name ) ) 208 if ( mActiveView && ( mActiveView->caption() == name ) )
209 return; 209 return;
210 210
211 // At this point we know the view that should be active is not 211 // At this point we know the view that should be active is not
212 // currently active. We will try to find the new on in the list. If 212 // currently active. We will try to find the new on in the list. If
213 // we can't find it, it means it hasn't been instantiated, so we will 213 // we can't find it, it means it hasn't been instantiated, so we will
214 // create it on demand. 214 // create it on demand.
215 215
216 view = mViewDict.find( name ); 216 view = mViewDict.find( name );
217 217
218 // Check if we found the view. If we didn't, then we need to create it 218 // Check if we found the view. If we didn't, then we need to create it
219 if ( view == 0 ) { 219 if ( view == 0 ) {
220 KConfig *config = mCore->config(); 220 KConfig *config = mCore->config();
221 221
222 KConfigGroupSaver saver( config, name ); 222 KConfigGroupSaver saver( config, name );
223 223
224 QString type = config->readEntry( "Type", "Table" ); 224 QString type = config->readEntry( "Type", "Table" );
225 225
226 kdDebug(5720) << "ViewManager::setActiveView: creating view - " << name << endl; 226 kdDebug(5720) << "ViewManager::setActiveView: creating view - " << name << endl;
227 227
228 ViewFactory *factory = mViewFactoryDict.find( type ); 228 ViewFactory *factory = mViewFactoryDict.find( type );
229 if ( factory ) 229 if ( factory )
230 view = factory->view( mCore->addressBook(), mViewWidgetStack ); 230 view = factory->view( mCore->addressBook(), mViewWidgetStack );
231 231
232 if ( view ) { 232 if ( view ) {
233 view->setCaption( name ); 233 view->setCaption( name );
234 mViewDict.insert( name, view ); 234 mViewDict.insert( name, view );
235//US my version needs an int as second parameter to addWidget 235//US my version needs an int as second parameter to addWidget
236 mViewWidgetStack->addWidget( view, -1 ); 236 mViewWidgetStack->addWidget( view, -1 );
237 view->readConfig( config ); 237 view->readConfig( config );
238 238
239 // The manager just relays the signals 239 // The manager just relays the signals
240 connect( view, SIGNAL( selected( const QString& ) ), 240 connect( view, SIGNAL( selected( const QString& ) ),
241 SIGNAL( selected( const QString & ) ) ); 241 SIGNAL( selected( const QString & ) ) );
242 connect( view, SIGNAL( executed( const QString& ) ), 242 connect( view, SIGNAL( executed( const QString& ) ),
243 SIGNAL( executed( const QString& ) ) ); 243 SIGNAL( executed( const QString& ) ) );
244 244
245 connect( view, SIGNAL( deleteRequest( ) ), 245 connect( view, SIGNAL( deleteRequest( ) ),
246 SIGNAL( deleteRequest( ) ) ); 246 SIGNAL( deleteRequest( ) ) );
247 247
248 connect( view, SIGNAL( modified() ), SIGNAL( modified() ) ); 248 connect( view, SIGNAL( modified() ), SIGNAL( modified() ) );
249 connect( view, SIGNAL( dropped( QDropEvent* ) ), 249 connect( view, SIGNAL( dropped( QDropEvent* ) ),
250 SLOT( dropped( QDropEvent* ) ) ); 250 SLOT( dropped( QDropEvent* ) ) );
251 connect( view, SIGNAL( startDrag() ), SLOT( startDrag() ) ); 251 connect( view, SIGNAL( startDrag() ), SLOT( startDrag() ) );
252 } 252 }
253 } 253 }
254 254
255 // If we found or created the view, raise it and refresh it 255 // If we found or created the view, raise it and refresh it
256 if ( view ) { 256 if ( view ) {
257 mActiveView = view; 257 mActiveView = view;
258 mViewWidgetStack->raiseWidget( view ); 258 mViewWidgetStack->raiseWidget( view );
259 // Set the proper filter in the view. By setting the combo 259 // Set the proper filter in the view. By setting the combo
260 // box, the activated slot will be called, which will push 260 // box, the activated slot will be called, which will push
261 // the filter to the view and refresh it. 261 // the filter to the view and refresh it.
262 262
263 if ( view->defaultFilterType() == KAddressBookView::None ) { 263 if ( view->defaultFilterType() == KAddressBookView::None ) {
264 264
265 mActionSelectFilter->setCurrentItem( 0 ); 265 mActionSelectFilter->setCurrentItem( 0 );
266 setActiveFilter( 0 ); 266 setActiveFilter( 0 );
267 } else if ( view->defaultFilterType() == KAddressBookView::Active ) { 267 } else if ( view->defaultFilterType() == KAddressBookView::Active ) {
268 setActiveFilter( mActionSelectFilter->currentItem() ); 268 setActiveFilter( mActionSelectFilter->currentItem() );
269 } else { 269 } else {
270 uint pos = filterPosition( view->defaultFilterName() ); 270 uint pos = filterPosition( view->defaultFilterName() );
271 mActionSelectFilter->setCurrentItem( pos ); 271 mActionSelectFilter->setCurrentItem( pos );
272 setActiveFilter( pos ); 272 setActiveFilter( pos );
273 } 273 }
274//US qDebug("ViewManager::setActiveView 6" ); 274//US qDebug("ViewManager::setActiveView 6" );
275 275
276 // Update the inc search widget to show the fields in the new active 276 // Update the inc search widget to show the fields in the new active
277 // view. 277 // view.
278 mCore->setSearchFields( mActiveView->fields() ); 278 mCore->setSearchFields( mActiveView->fields() );
279 279
280//US performance optimization. setActiveFilter calls also mActiveView->refresh() 280//US performance optimization. setActiveFilter calls also mActiveView->refresh()
281//US mActiveView->refresh(); 281//US mActiveView->refresh();
282 282
283 } 283 }
284 else 284 else
285 { 285 {
286 qDebug("ViewManager::setActiveView: unable to find view" ); 286 qDebug("ViewManager::setActiveView: unable to find view" );
287 kdDebug(5720) << "ViewManager::setActiveView: unable to find view\n"; 287 kdDebug(5720) << "ViewManager::setActiveView: unable to find view\n";
288 } 288 }
289} 289}
290 290
291//US added another method with no parameter, since my moc compiler does not support default parameters. 291//US added another method with no parameter, since my moc compiler does not support default parameters.
292void ViewManager::refreshView() 292void ViewManager::refreshView()
293{ 293{
294 refreshView( QString::null ); 294 refreshView( QString::null );
295} 295}
296 296
297void ViewManager::refreshView( const QString &uid ) 297void ViewManager::refreshView( const QString &uid )
298{ 298{
299 if ( mActiveView ) 299 if ( mActiveView )
300 mActiveView->refresh( uid ); 300 mActiveView->refresh( uid );
301} 301}
302 302
303void ViewManager::setFocusAV() 303void ViewManager::setFocusAV()
304{ 304{
305 if ( mActiveView ) 305 if ( mActiveView )
306 mActiveView->setFocusAV(); 306 mActiveView->setFocusAV();
307} 307}
308void ViewManager::editView() 308void ViewManager::editView()
309{ 309{
310 if ( !mActiveView ) 310 if ( !mActiveView )
311 return; 311 return;
312 312
313 ViewFactory *factory = mViewFactoryDict.find( mActiveView->type() ); 313 ViewFactory *factory = mViewFactoryDict.find( mActiveView->type() );
314 ViewConfigureWidget *wdg = 0; 314 ViewConfigureWidget *wdg = 0;
315 ViewConfigureDialog* dlg = 0; 315 ViewConfigureDialog* dlg = 0;
316 if ( factory ) { 316 if ( factory ) {
317 // Save the filters so the dialog has the latest set 317 // Save the filters so the dialog has the latest set
318 Filter::save( mCore->config(), "Filter", mFilterList ); 318 Filter::save( mCore->config(), "Filter", mFilterList );
319 dlg = new ViewConfigureDialog( 0, mActiveView->caption(), this, "conf_dlg" ); 319 dlg = new ViewConfigureDialog( 0, mActiveView->caption(), this, "conf_dlg" );
320 wdg = factory->configureWidget( mCore->addressBook(), dlg,"conf_wid" ); 320 wdg = factory->configureWidget( mCore->addressBook(), dlg,"conf_wid" );
321 } else { 321 } else {
322 qDebug("ViewManager::editView()::cannot find viewfactory "); 322 qDebug("ViewManager::editView()::cannot find viewfactory ");
323 return; 323 return;
324 } 324 }
325 if ( wdg ) { 325 if ( wdg ) {
326 dlg->setWidget( wdg ); 326 dlg->setWidget( wdg );
327 327
328#ifndef DESKTOP_VERSION 328#ifndef DESKTOP_VERSION
329 //dlg.setMaximumSize( 640, 480 ); 329 //dlg.setMaximumSize( 640, 480 );
330 //dlg->setGeometry( 40,40, 400, 300); 330 //dlg->setGeometry( 40,40, 400, 300);
331 dlg->showMaximized(); 331 dlg->showMaximized();
332#endif 332#endif
333 333
334 KConfigGroupSaver saver( mCore->config(), mActiveView->caption() ); 334 KConfigGroupSaver saver( mCore->config(), mActiveView->caption() );
335 335
336 dlg->restoreSettings( mCore->config() ); 336 dlg->restoreSettings( mCore->config() );
337 337
338 if ( dlg->exec() ) { 338 if ( dlg->exec() ) {
339 dlg->saveSettings( mCore->config() ); 339 dlg->saveSettings( mCore->config() );
340 mActiveView->readConfig( mCore->config() ); 340 mActiveView->readConfig( mCore->config() );
341 341
342 // Set the proper filter in the view. By setting the combo 342 // Set the proper filter in the view. By setting the combo
343 // box, the activated slot will be called, which will push 343 // box, the activated slot will be called, which will push
344 // the filter to the view and refresh it. 344 // the filter to the view and refresh it.
345 if ( mActiveView->defaultFilterType() == KAddressBookView::None ) { 345 if ( mActiveView->defaultFilterType() == KAddressBookView::None ) {
346 mActionSelectFilter->setCurrentItem( 0 ); 346 mActionSelectFilter->setCurrentItem( 0 );
347 setActiveFilter( 0 ); 347 setActiveFilter( 0 );
348 } else if ( mActiveView->defaultFilterType() == KAddressBookView::Active ) { 348 } else if ( mActiveView->defaultFilterType() == KAddressBookView::Active ) {
349 setActiveFilter( mActionSelectFilter->currentItem() ); 349 setActiveFilter( mActionSelectFilter->currentItem() );
350 } else { 350 } else {
351 uint pos = filterPosition( mActiveView->defaultFilterName() ); 351 uint pos = filterPosition( mActiveView->defaultFilterName() );
352 mActionSelectFilter->setCurrentItem( pos ); 352 mActionSelectFilter->setCurrentItem( pos );
353 setActiveFilter( pos ); 353 setActiveFilter( pos );
354 } 354 }
355 mCore->setSearchFields( mActiveView->fields() ); 355 mCore->setSearchFields( mActiveView->fields() );
356//US performance optimization. setActiveFilter calls also mActiveView->refresh() 356//US performance optimization. setActiveFilter calls also mActiveView->refresh()
357//US mActiveView->refresh(); 357//US mActiveView->refresh();
358 358
359 359
360 //US this is a bugfix, that we get notified if we change a views configuration 360 //US this is a bugfix, that we get notified if we change a views configuration
361 emit modified(); 361 emit modified();
362 362
363 } 363 }
364 364
365 } 365 }
366 delete dlg; 366 delete dlg;
367} 367}
368 368
369void ViewManager::deleteView() 369void ViewManager::deleteView()
370{ 370{
371 QString text = i18n( "<qt>Are you sure that you want to delete the view <b>%1</b>?</qt>" ) 371 QString text = i18n( "<qt>Are you sure that you want to delete the view <b>%1</b>?</qt>" )
372 .arg( mActiveView->caption() ); 372 .arg( mActiveView->caption() );
373 QString caption = i18n( "Confirm Delete" ); 373 QString caption = i18n( "Confirm Delete" );
374 374
375 375
376 if (QMessageBox::information( this, caption, 376 if (QMessageBox::information( this, caption,
377 text, 377 text,
378 i18n("Yes!"), i18n("No"), 0, 0 ) == 0) 378 i18n("Yes!"), i18n("No"), 0, 0 ) == 0)
379 { 379 {
380 mViewNameList.remove( mActiveView->caption() ); 380 mViewNameList.remove( mActiveView->caption() );
381 381
382 // remove the view from the config file 382 // remove the view from the config file
383 KConfig *config = mCore->config(); 383 KConfig *config = mCore->config();
384 config->deleteGroup( mActiveView->caption() ); 384 config->deleteGroup( mActiveView->caption() );
385 385
386 mViewDict.remove( mActiveView->caption() ); 386 mViewDict.remove( mActiveView->caption() );
387 mActiveView = 0; 387 mActiveView = 0;
388 388
389 // we are in an invalid state now, but that should be fixed after 389 // we are in an invalid state now, but that should be fixed after
390 // we emit the signal 390 // we emit the signal
391 mActionSelectView->setItems( mViewNameList ); 391 mActionSelectView->setItems( mViewNameList );
392 if ( mViewNameList.count() > 0 ) { 392 if ( mViewNameList.count() > 0 ) {
393 mActionSelectView->setCurrentItem( 0 ); 393 mActionSelectView->setCurrentItem( 0 );
394 setActiveView( mViewNameList[ 0 ] ); 394 setActiveView( mViewNameList[ 0 ] );
395 } 395 }
396 mActionDeleteView->setEnabled( mViewNameList.count() > 1 ); 396 mActionDeleteView->setEnabled( mViewNameList.count() > 1 );
397 } 397 }
398} 398}
399 399
400void ViewManager::addView() 400void ViewManager::addView()
401{ 401{
402 AddViewDialog dialog( &mViewFactoryDict, this ); 402 AddViewDialog dialog( &mViewFactoryDict, this );
403 403
404 if ( dialog.exec() ) { 404 if ( dialog.exec() ) {
405 QString newName = dialog.viewName(); 405 QString newName = dialog.viewName();
406 QString type = dialog.viewType(); 406 QString type = dialog.viewType();
407 407
408 // Check for name conflicts 408 // Check for name conflicts
409 bool firstConflict = true; 409 bool firstConflict = true;
410 int numTries = 1; 410 int numTries = 1;
411 while ( mViewNameList.contains( newName ) > 0 ) { 411 while ( mViewNameList.contains( newName ) > 0 ) {
412 if ( !firstConflict ) { 412 if ( !firstConflict ) {
413 newName = newName.left( newName.length() - 4 ); 413 newName = newName.left( newName.length() - 4 );
414 firstConflict = false; 414 firstConflict = false;
415 } 415 }
416 416
417 newName = QString( "%1 <%2>" ).arg( newName ).arg( numTries ); 417 newName = QString( "%1 <%2>" ).arg( newName ).arg( numTries );
418 numTries++; 418 numTries++;
419 } 419 }
420 420
421 // Add the new one to the list 421 // Add the new one to the list
422 mViewNameList.append( newName ); 422 mViewNameList.append( newName );
423 423
424 // write the view to the config file, 424 // write the view to the config file,
425 KConfig *config = mCore->config(); 425 KConfig *config = mCore->config();
426 426
427 config->deleteGroup( newName ); 427 config->deleteGroup( newName );
428 428
429 KConfigGroupSaver saver( config, newName ); 429 KConfigGroupSaver saver( config, newName );
430 430
431 config->writeEntry( "Type", type ); 431 config->writeEntry( "Type", type );
432 432
433 // try to set the active view 433 // try to set the active view
434 mActionSelectView->setItems( mViewNameList ); 434 mActionSelectView->setItems( mViewNameList );
435 mActionSelectView->setCurrentItem( mViewNameList.findIndex( newName ) ); 435 mActionSelectView->setCurrentItem( mViewNameList.findIndex( newName ) );
436 setActiveView( newName ); 436 setActiveView( newName );
437 437
438 editView(); 438 editView();
439 439
440 mActionDeleteView->setEnabled( mViewNameList.count() > 1 ); 440 mActionDeleteView->setEnabled( mViewNameList.count() > 1 );
441 } 441 }
442} 442}
443 443
444void ViewManager::createViewFactories() 444void ViewManager::createViewFactories()
445{ 445{
446#ifndef KAB_EMBEDDED 446#ifndef KAB_EMBEDDED
447 KTrader::OfferList plugins = KTrader::self()->query( "KAddressBook/View" ); 447 KTrader::OfferList plugins = KTrader::self()->query( "KAddressBook/View" );
448 KTrader::OfferList::ConstIterator it; 448 KTrader::OfferList::ConstIterator it;
449 for ( it = plugins.begin(); it != plugins.end(); ++it ) { 449 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
450 if ( !(*it)->hasServiceType( "KAddressBook/View" ) ) 450 if ( !(*it)->hasServiceType( "KAddressBook/View" ) )
451 continue; 451 continue;
452 452
453 KLibFactory *factory = KLibLoader::self()->factory( (*it)->library().latin1() ); 453 KLibFactory *factory = KLibLoader::self()->factory( (*it)->library().latin1() );
454 454
455 if ( !factory ) { 455 if ( !factory ) {
456 kdDebug(5720) << "ViewManager::createViewFactories(): Factory creation failed" << endl; 456 kdDebug(5720) << "ViewManager::createViewFactories(): Factory creation failed" << endl;
457 continue; 457 continue;
458 } 458 }
459 459
460 ViewFactory *viewFactory = static_cast<ViewFactory*>( factory ); 460 ViewFactory *viewFactory = static_cast<ViewFactory*>( factory );
461 461
462 if ( !viewFactory ) { 462 if ( !viewFactory ) {
463 kdDebug(5720) << "ViewManager::createViewFactories(): Cast failed" << endl; 463 kdDebug(5720) << "ViewManager::createViewFactories(): Cast failed" << endl;
464 continue; 464 continue;
465 } 465 }
466 466
467 mViewFactoryDict.insert( viewFactory->type(), viewFactory ); 467 mViewFactoryDict.insert( viewFactory->type(), viewFactory );
468 } 468 }
469 469
470#else //KAB_EMBEDDED 470#else //KAB_EMBEDDED
471 ViewFactory* viewFactory = new IconViewFactory(); 471 ViewFactory* viewFactory = new IconViewFactory();
472 mViewFactoryDict.insert( viewFactory->type(), viewFactory ); 472 mViewFactoryDict.insert( viewFactory->type(), viewFactory );
473// qDebug("ViewManager::createViewFactories() Loading factory: %s", viewFactory->type().latin1()); 473// qDebug("ViewManager::createViewFactories() Loading factory: %s", viewFactory->type().latin1());
474 474
475 viewFactory = new TableViewFactory(); 475 viewFactory = new TableViewFactory();
476 mViewFactoryDict.insert( viewFactory->type(), viewFactory ); 476 mViewFactoryDict.insert( viewFactory->type(), viewFactory );
477// qDebug("ViewManager::createViewFactories() Loading factory: %s", viewFactory->type().latin1()); 477// qDebug("ViewManager::createViewFactories() Loading factory: %s", viewFactory->type().latin1());
478 478
479 viewFactory = new CardViewFactory(); 479 viewFactory = new CardViewFactory();
480 mViewFactoryDict.insert( viewFactory->type(), viewFactory ); 480 mViewFactoryDict.insert( viewFactory->type(), viewFactory );
481// qDebug("ViewManager::createViewFactories() Loading factory: %s", viewFactory->type().latin1()); 481// qDebug("ViewManager::createViewFactories() Loading factory: %s", viewFactory->type().latin1());
482 482
483#endif //KAB_EMBEDDED 483#endif //KAB_EMBEDDED
484 484
485} 485}
486 486
487void ViewManager::dropped( QDropEvent *e ) 487void ViewManager::dropped( QDropEvent *e )
488{ 488{
489 kdDebug(5720) << "ViewManager::dropped: got a drop event" << endl; 489 kdDebug(5720) << "ViewManager::dropped: got a drop event" << endl;
490 490
491#ifndef KAB_EMBEDDED 491#ifndef KAB_EMBEDDED
492 492
493 QString clipText, vcards; 493 QString clipText, vcards;
494 KURL::List urls; 494 KURL::List urls;
495 495
496 if ( KURLDrag::decode( e, urls) ) { 496 if ( KURLDrag::decode( e, urls) ) {
497 KURL::List::Iterator it = urls.begin(); 497 KURL::List::Iterator it = urls.begin();
498 int c = urls.count(); 498 int c = urls.count();
499 if ( c > 1 ) { 499 if ( c > 1 ) {
500 QString questionString = i18n( "Import one contact into your addressbook?", "Import %n contacts into your addressbook?", c ); 500 QString questionString = i18n( "Import one contact into your addressbook?", "Import %n contacts into your addressbook?", c );
501 if ( KMessageBox::questionYesNo( this, questionString, i18n( "Import Contacts?" ) ) == KMessageBox::Yes ) { 501 if ( KMessageBox::questionYesNo( this, questionString, i18n( "Import Contacts?" ) ) == KMessageBox::Yes ) {
502 for ( ; it != urls.end(); ++it ) 502 for ( ; it != urls.end(); ++it )
503 emit urlDropped( *it ); 503 emit urlDropped( *it );
504 } 504 }
505 } else if ( c == 1 ) 505 } else if ( c == 1 )
506 emit urlDropped( *it ); 506 emit urlDropped( *it );
507 } else if ( KVCardDrag::decode( e, vcards ) ) { 507 } else if ( KVCardDrag::decode( e, vcards ) ) {
508 KABC::Addressee addr; 508 KABC::Addressee addr;
509 KABC::VCardConverter converter; 509 KABC::VCardConverter converter;
510 QStringList list = QStringList::split( "\r\n\r\n", vcards ); 510 QStringList list = QStringList::split( "\r\n\r\n", vcards );
511 QStringList::Iterator it; 511 QStringList::Iterator it;
512 for ( it = list.begin(); it != list.end(); ++it ) { 512 for ( it = list.begin(); it != list.end(); ++it ) {
513 if ( converter.vCardToAddressee( (*it).stripWhiteSpace(), addr ) ) { 513 if ( converter.vCardToAddressee( (*it).stripWhiteSpace(), addr ) ) {
514 KABC::Addressee a = mCore->addressBook()->findByUid( addr.uid() ); 514 KABC::Addressee a = mCore->addressBook()->findByUid( addr.uid() );
515 if ( a.isEmpty() ) { 515 if ( a.isEmpty() ) {
516 mCore->addressBook()->insertAddressee( addr ); 516 mCore->addressBook()->insertAddressee( addr );
517 emit modified(); 517 emit modified();
518 } 518 }
519 } 519 }
520 } 520 }
521 521
522 mActiveView->refresh(); 522 mActiveView->refresh();
523 } 523 }
524#else //KAB_EMBEDDED 524#else //KAB_EMBEDDED
525qDebug("ViewManager::dropped() has to be changed!!" ); 525qDebug("ViewManager::dropped() has to be changed!!" );
526#endif //KAB_EMBEDDED 526#endif //KAB_EMBEDDED
527 527
528} 528}
529 529
530void ViewManager::startDrag() 530void ViewManager::startDrag()
531{ 531{
532 kdDebug(5720) << "ViewManager::startDrag: starting to drag" << endl; 532 kdDebug(5720) << "ViewManager::startDrag: starting to drag" << endl;
533 533
534#ifndef KAB_EMBEDDED 534#ifndef KAB_EMBEDDED
535 535
536 // Get the list of all the selected addressees 536 // Get the list of all the selected addressees
537 KABC::Addressee::List addrList; 537 KABC::Addressee::List addrList;
538 QStringList uidList = selectedUids(); 538 QStringList uidList = selectedUids();
539 QStringList::Iterator iter; 539 QStringList::Iterator iter;
540 for ( iter = uidList.begin(); iter != uidList.end(); ++iter ) 540 for ( iter = uidList.begin(); iter != uidList.end(); ++iter )
541 addrList.append( mCore->addressBook()->findByUid( *iter ) ); 541 addrList.append( mCore->addressBook()->findByUid( *iter ) );
542 542
543 KMultipleDrag *drag = new KMultipleDrag( this ); 543 KMultipleDrag *drag = new KMultipleDrag( this );
544 drag->addDragObject( new QTextDrag( AddresseeUtil::addresseesToClipboard(addrList), this ) ); 544 drag->addDragObject( new QTextDrag( AddresseeUtil::addresseesToClipboard(addrList), this ) );
545 KABC::Addressee::List::Iterator it; 545 KABC::Addressee::List::Iterator it;
546 QStringList vcards; 546 QStringList vcards;
547 for ( it = addrList.begin(); it != addrList.end(); ++it ) { 547 for ( it = addrList.begin(); it != addrList.end(); ++it ) {
548 QString vcard = QString::null; 548 QString vcard = QString::null;
549 KABC::VCardConverter converter; 549 KABC::VCardConverter converter;
550 if ( converter.addresseeToVCard( *it, vcard ) ) 550 if ( converter.addresseeToVCard( *it, vcard ) )
551 vcards.append( vcard ); 551 vcards.append( vcard );
552 } 552 }
553 drag->addDragObject( new KVCardDrag( vcards.join( "\r\n" ), this ) ); 553 drag->addDragObject( new KVCardDrag( vcards.join( "\r\n" ), this ) );
554 554
555 drag->setPixmap( KGlobal::iconLoader()->loadIcon( "vcard", KIcon::Desktop ) ); 555 drag->setPixmap( KGlobal::iconLoader()->loadIcon( "vcard", KIcon::Desktop ) );
556 drag->dragCopy(); 556 drag->dragCopy();
557 557
558#else //KAB_EMBEDDED 558#else //KAB_EMBEDDED
559qDebug("ViewManager::startDrag() has to be changed!!" ); 559qDebug("ViewManager::startDrag() has to be changed!!" );
560#endif //KAB_EMBEDDED 560#endif //KAB_EMBEDDED
561 561
562} 562}
563void ViewManager::doSearch( const QString& s,KABC::Field *field ) 563void ViewManager::doSearch( const QString& s,KABC::Field *field )
564{ 564{
565 if ( mActiveView ) 565 if ( mActiveView )
566 mActiveView->doSearch( s, field ); 566 mActiveView->doSearch( s, field );
567 567
568} 568}
569void ViewManager::setActiveFilter( int index ) 569void ViewManager::setActiveFilter( int index )
570{ 570{
571 Filter currentFilter; 571 Filter currentFilter;
572 572
573 if ( ( index - 1 ) < 0 ) 573 if ( ( index - 1 ) < 0 )
574 currentFilter = Filter(); 574 currentFilter = Filter();
575 else 575 else
576 currentFilter = mFilterList[ index - 1 ]; 576 currentFilter = mFilterList[ index - 1 ];
577 577
578 // Check if we have a view. Since the filter combo is created before 578 // Check if we have a view. Since the filter combo is created before
579 // the view, this slot could be called before there is a valid view. 579 // the view, this slot could be called before there is a valid view.
580 if ( mActiveView ) { 580 if ( mActiveView ) {
581 mActiveView->setFilter( currentFilter ); 581 mActiveView->setFilter( currentFilter );
582 mActiveView->refresh(); 582 mActiveView->refresh();
583 emit selected( QString::null ); 583 emit selected( QString::null );
584 } 584 }
585} 585}
586 586
587void ViewManager::configureFilters() 587void ViewManager::configureFilters()
588{ 588{
589 FilterDialog dlg( this ); 589 FilterDialog dlg( this );
590 590
591 dlg.setFilters( mFilterList ); 591 dlg.setFilters( mFilterList );
592 592
593 if ( dlg.exec() ) 593 if ( dlg.exec() )
594 mFilterList = dlg.filters(); 594 mFilterList = dlg.filters();
595 595
596 uint pos = mActionSelectFilter->currentItem(); 596 uint pos = mActionSelectFilter->currentItem();
597 mActionSelectFilter->setItems( filterNames() ); 597 mActionSelectFilter->setItems( filterNames() );
598 mActionSelectFilter->setCurrentItem( pos ); 598 mActionSelectFilter->setCurrentItem( pos );
599 setActiveFilter( pos ); 599 setActiveFilter( pos );
600 //mActionSelectFilter->setComboWidth( 150 ); 600 mActionSelectFilter->setComboWidth( 150 );
601} 601}
602 602
603QStringList ViewManager::filterNames() const 603QStringList ViewManager::filterNames() const
604{ 604{
605 QStringList names( i18n( "No Filter" ) ); 605 QStringList names( i18n( "No Filter" ) );
606 606
607 Filter::List::ConstIterator it; 607 Filter::List::ConstIterator it;
608 for ( it = mFilterList.begin(); it != mFilterList.end(); ++it ) 608 for ( it = mFilterList.begin(); it != mFilterList.end(); ++it )
609 names.append( (*it).name() ); 609 names.append( (*it).name() );
610 610
611 return names; 611 return names;
612} 612}
613 613
614int ViewManager::filterPosition( const QString &name ) const 614int ViewManager::filterPosition( const QString &name ) const
615{ 615{
616 int pos = 0; 616 int pos = 0;
617 617
618 Filter::List::ConstIterator it; 618 Filter::List::ConstIterator it;
619 for ( it = mFilterList.begin(); it != mFilterList.end(); ++it, ++pos ) 619 for ( it = mFilterList.begin(); it != mFilterList.end(); ++it, ++pos )
620 if ( name == (*it).name() ) 620 if ( name == (*it).name() )
621 return pos + 1; 621 return pos + 1;
622 622
623 return 0; 623 return 0;
624} 624}
625 625
626void ViewManager::initActions() 626void ViewManager::initActions()
627{ 627{
628//US <ActionList name="view_loadedviews"/> 628//US <ActionList name="view_loadedviews"/>
629//US <Separator/> 629//US <Separator/>
630 630
631#ifdef KAB_EMBEDDED 631#ifdef KAB_EMBEDDED
632 QPopupMenu *viewmenu = (QPopupMenu*)mCore->getViewMenu(); 632 QPopupMenu *viewmenu = (QPopupMenu*)mCore->getViewMenu();
633 QPopupMenu *settingsmenu = (QPopupMenu*)mCore->getSettingsMenu(); 633 QPopupMenu *settingsmenu = (QPopupMenu*)mCore->getSettingsMenu();
634 QPopupMenu *filtermenu = (QPopupMenu*)mCore->getFilterMenu(); 634 QPopupMenu *filtermenu = (QPopupMenu*)mCore->getFilterMenu();
635#endif //KAB_EMBEDDED 635#endif //KAB_EMBEDDED
636 636
637 mActionSelectView = new KSelectAction( i18n( "Select View" ), 0, mCore->actionCollection(), "select_view" ); 637 mActionSelectView = new KSelectAction( i18n( "Select View" ), 0, mCore->actionCollection(), "select_view" );
638#if KDE_VERSION >= 309 638#if KDE_VERSION >= 309
639 mActionSelectView->setMenuAccelsEnabled( false ); 639 mActionSelectView->setMenuAccelsEnabled( false );
640#endif 640#endif
641 connect( mActionSelectView, SIGNAL( activated( const QString& ) ), 641 connect( mActionSelectView, SIGNAL( activated( const QString& ) ),
642 SLOT( setActiveView( const QString& ) ) ); 642 SLOT( setActiveView( const QString& ) ) );
643 643
644 644
645#ifdef KAB_EMBEDDED 645#ifdef KAB_EMBEDDED
646 mActionSelectView->plug(viewmenu); 646 mActionSelectView->plug(viewmenu);
647 viewmenu->insertSeparator(); 647 viewmenu->insertSeparator();
648#endif //KAB_EMBEDDED 648#endif //KAB_EMBEDDED
649 649
650 KAction *action; 650 KAction *action;
651 651
652 action = new KAction( i18n( "Modify View..." ), "configure", 0, this, 652 action = new KAction( i18n( "Modify View..." ), "configure", 0, this,
653 SLOT( editView() ), mCore->actionCollection(), "view_modify" ); 653 SLOT( editView() ), mCore->actionCollection(), "view_modify" );
654#ifndef KAB_EMBEDDED 654#ifndef KAB_EMBEDDED
655 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." ) ); 655 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." ) );
656#else //KAB_EMBEDDED 656#else //KAB_EMBEDDED
657 action->plug(viewmenu); 657 action->plug(viewmenu);
658#endif //KAB_EMBEDDED 658#endif //KAB_EMBEDDED
659 659
660 action = new KAction( i18n( "Add View..." ), "window_new", 0, this, 660 action = new KAction( i18n( "Add View..." ), "window_new", 0, this,
661 SLOT( addView() ), mCore->actionCollection(), "view_add" ); 661 SLOT( addView() ), mCore->actionCollection(), "view_add" );
662#ifndef KAB_EMBEDDED 662#ifndef KAB_EMBEDDED
663 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." ) ); 663 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." ) );
664#else //KAB_EMBEDDED 664#else //KAB_EMBEDDED
665 action->plug(viewmenu); 665 action->plug(viewmenu);
666#endif //KAB_EMBEDDED 666#endif //KAB_EMBEDDED
667 667
668 mActionDeleteView = new KAction( i18n( "Delete View" ), "view_remove", 0, 668 mActionDeleteView = new KAction( i18n( "Delete View" ), "view_remove", 0,
669 this, SLOT( deleteView() ), 669 this, SLOT( deleteView() ),
670 mCore->actionCollection(), "view_delete" ); 670 mCore->actionCollection(), "view_delete" );
671#ifndef KAB_EMBEDDED 671#ifndef KAB_EMBEDDED
672 mActionDeleteView->setWhatsThis( i18n( "By pressing this button you can delete the actual view, which you have added before." ) ); 672 mActionDeleteView->setWhatsThis( i18n( "By pressing this button you can delete the actual view, which you have added before." ) );
673#else //KAB_EMBEDDED 673#else //KAB_EMBEDDED
674 mActionDeleteView->plug(viewmenu); 674 mActionDeleteView->plug(viewmenu);
675 viewmenu->insertSeparator(); 675 viewmenu->insertSeparator();
676#endif //KAB_EMBEDDED 676#endif //KAB_EMBEDDED
677 677
678#ifndef KAB_EMBEDDED 678#ifndef KAB_EMBEDDED
679 action = new KAction( i18n( "Refresh View" ), "reload", 0, this, 679 action = new KAction( i18n( "Refresh View" ), "reload", 0, this,
680 SLOT( refreshView(const QString &) ), mCore->actionCollection(), 680 SLOT( refreshView(const QString &) ), mCore->actionCollection(),
681 "view_refresh" ); 681 "view_refresh" );
682 action->setWhatsThis( i18n( "The view will be refreshed by pressing this button." ) ); 682 action->setWhatsThis( i18n( "The view will be refreshed by pressing this button." ) );
683#else //KAB_EMBEDDED 683#else //KAB_EMBEDDED
684 action = new KAction( i18n( "Refresh View" ), "reload", 0, this, 684 action = new KAction( i18n( "Refresh View" ), "reload", 0, this,
685 SLOT( refreshView()), mCore->actionCollection(), 685 SLOT( refreshView()), mCore->actionCollection(),
686 "view_refresh" ); 686 "view_refresh" );
687 action->plug(viewmenu); 687 action->plug(viewmenu);
688 viewmenu->insertSeparator(); 688 viewmenu->insertSeparator();
689#endif //KAB_EMBEDDED 689#endif //KAB_EMBEDDED
690 690
691 action = new KAction( i18n( "Edit &Filters..." ), "filter", 0, this, 691 action = new KAction( i18n( "Edit &Filters..." ), "filter", 0, this,
692 SLOT( configureFilters() ), mCore->actionCollection(), 692 SLOT( configureFilters() ), mCore->actionCollection(),
693 "options_edit_filters" ); 693 "options_edit_filters" );
694 694
695 mActionSelectFilter = new KSelectAction( i18n( "Select Filter" ), "filter", mCore->actionCollection(), "select_filter" ); 695 mActionSelectFilter = new KSelectAction( i18n( "Select Filter" ), "filter", mCore->actionCollection(), "select_filter" );
696#if KDE_VERSION >= 309 696#if KDE_VERSION >= 309
697 mActionSelectFilter->setMenuAccelsEnabled( false ); 697 mActionSelectFilter->setMenuAccelsEnabled( false );
698#endif 698#endif
699 connect( mActionSelectFilter, SIGNAL( activated( int ) ), 699 connect( mActionSelectFilter, SIGNAL( activated( int ) ),
700 SLOT( setActiveFilter( int ) ) ); 700 SLOT( setActiveFilter( int ) ) );
701 701
702#ifdef KAB_EMBEDDED 702#ifdef KAB_EMBEDDED
703 action->plug(settingsmenu); 703 action->plug(settingsmenu);
704 mActionSelectFilter->plug(viewmenu); 704 mActionSelectFilter->plug(viewmenu);
705#endif //KAB_EMBEDDED 705#endif //KAB_EMBEDDED
706 706
707} 707}
708 708
709void ViewManager::initGUI() 709void ViewManager::initGUI()
710{ 710{
711 QHBoxLayout *layout = new QHBoxLayout( this, 0, 0 ); 711 QHBoxLayout *layout = new QHBoxLayout( this, 0, 0 );
712 mViewWidgetStack = new QWidgetStack( this ); 712 mViewWidgetStack = new QWidgetStack( this );
713 layout->addWidget( mViewWidgetStack ); 713 layout->addWidget( mViewWidgetStack );
714} 714}
715 715
716#ifndef KAB_EMBEDDED 716#ifndef KAB_EMBEDDED
717#include "viewmanager.moc" 717#include "viewmanager.moc"
718#endif //KAB_EMBEDDED 718#endif //KAB_EMBEDDED