summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/pim/ocontact.cpp12
-rw-r--r--libopie/pim/ocontact.h11
-rw-r--r--libopie2/opiepim/ocontact.cpp12
-rw-r--r--libopie2/opiepim/ocontact.h11
4 files changed, 26 insertions, 20 deletions
diff --git a/libopie/pim/ocontact.cpp b/libopie/pim/ocontact.cpp
index 66632f5..828a9de 100644
--- a/libopie/pim/ocontact.cpp
+++ b/libopie/pim/ocontact.cpp
@@ -1028,406 +1028,406 @@ static VObject *createVObject( const OContact &c )
1028 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeMobile() ); 1028 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeMobile() );
1029 safeAddProp( home_phone, VCHomeProp ); 1029 safeAddProp( home_phone, VCHomeProp );
1030 safeAddProp( home_phone, VCCellularProp ); 1030 safeAddProp( home_phone, VCCellularProp );
1031 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeFax() ); 1031 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeFax() );
1032 safeAddProp( home_phone, VCHomeProp ); 1032 safeAddProp( home_phone, VCHomeProp );
1033 safeAddProp( home_phone, VCFaxProp ); 1033 safeAddProp( home_phone, VCFaxProp );
1034 1034
1035 VObject *url = safeAddPropValue( vcard, VCURLProp, c.homeWebpage() ); 1035 VObject *url = safeAddPropValue( vcard, VCURLProp, c.homeWebpage() );
1036 safeAddProp( url, VCHomeProp ); 1036 safeAddProp( url, VCHomeProp );
1037 1037
1038 // work properties 1038 // work properties
1039 VObject *work_adr= safeAddProp( vcard, VCAdrProp ); 1039 VObject *work_adr= safeAddProp( vcard, VCAdrProp );
1040 safeAddProp( work_adr, VCWorkProp ); 1040 safeAddProp( work_adr, VCWorkProp );
1041 safeAddPropValue( work_adr, VCStreetAddressProp, c.businessStreet() ); 1041 safeAddPropValue( work_adr, VCStreetAddressProp, c.businessStreet() );
1042 safeAddPropValue( work_adr, VCCityProp, c.businessCity() ); 1042 safeAddPropValue( work_adr, VCCityProp, c.businessCity() );
1043 safeAddPropValue( work_adr, VCRegionProp, c.businessState() ); 1043 safeAddPropValue( work_adr, VCRegionProp, c.businessState() );
1044 safeAddPropValue( work_adr, VCPostalCodeProp, c.businessZip() ); 1044 safeAddPropValue( work_adr, VCPostalCodeProp, c.businessZip() );
1045 safeAddPropValue( work_adr, VCCountryNameProp, c.businessCountry() ); 1045 safeAddPropValue( work_adr, VCCountryNameProp, c.businessCountry() );
1046 1046
1047 VObject *work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPhone() ); 1047 VObject *work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPhone() );
1048 safeAddProp( work_phone, VCWorkProp ); 1048 safeAddProp( work_phone, VCWorkProp );
1049 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessMobile() ); 1049 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessMobile() );
1050 safeAddProp( work_phone, VCWorkProp ); 1050 safeAddProp( work_phone, VCWorkProp );
1051 safeAddProp( work_phone, VCCellularProp ); 1051 safeAddProp( work_phone, VCCellularProp );
1052 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessFax() ); 1052 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessFax() );
1053 safeAddProp( work_phone, VCWorkProp ); 1053 safeAddProp( work_phone, VCWorkProp );
1054 safeAddProp( work_phone, VCFaxProp ); 1054 safeAddProp( work_phone, VCFaxProp );
1055 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPager() ); 1055 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPager() );
1056 safeAddProp( work_phone, VCWorkProp ); 1056 safeAddProp( work_phone, VCWorkProp );
1057 safeAddProp( work_phone, VCPagerProp ); 1057 safeAddProp( work_phone, VCPagerProp );
1058 1058
1059 url = safeAddPropValue( vcard, VCURLProp, c.businessWebpage() ); 1059 url = safeAddPropValue( vcard, VCURLProp, c.businessWebpage() );
1060 safeAddProp( url, VCWorkProp ); 1060 safeAddProp( url, VCWorkProp );
1061 1061
1062 VObject *title = safeAddPropValue( vcard, VCTitleProp, c.jobTitle() ); 1062 VObject *title = safeAddPropValue( vcard, VCTitleProp, c.jobTitle() );
1063 safeAddProp( title, VCWorkProp ); 1063 safeAddProp( title, VCWorkProp );
1064 1064
1065 1065
1066 QStringList emails = c.emailList(); 1066 QStringList emails = c.emailList();
1067 emails.prepend( c.defaultEmail() ); 1067 emails.prepend( c.defaultEmail() );
1068 for( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) { 1068 for( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) {
1069 VObject *email = safeAddPropValue( vcard, VCEmailAddressProp, *it ); 1069 VObject *email = safeAddPropValue( vcard, VCEmailAddressProp, *it );
1070 safeAddProp( email, VCInternetProp ); 1070 safeAddProp( email, VCInternetProp );
1071 } 1071 }
1072 1072
1073 safeAddPropValue( vcard, VCNoteProp, c.notes() ); 1073 safeAddPropValue( vcard, VCNoteProp, c.notes() );
1074 1074
1075 safeAddPropValue( vcard, VCBirthDateProp, c.birthday() ); 1075 safeAddPropValue( vcard, VCBirthDateProp, c.birthday() );
1076 1076
1077 if ( !c.company().isEmpty() || !c.department().isEmpty() || !c.office().isEmpty() ) { 1077 if ( !c.company().isEmpty() || !c.department().isEmpty() || !c.office().isEmpty() ) {
1078 VObject *org = safeAddProp( vcard, VCOrgProp ); 1078 VObject *org = safeAddProp( vcard, VCOrgProp );
1079 safeAddPropValue( org, VCOrgNameProp, c.company() ); 1079 safeAddPropValue( org, VCOrgNameProp, c.company() );
1080 safeAddPropValue( org, VCOrgUnitProp, c.department() ); 1080 safeAddPropValue( org, VCOrgUnitProp, c.department() );
1081 safeAddPropValue( org, VCOrgUnit2Prop, c.office() ); 1081 safeAddPropValue( org, VCOrgUnit2Prop, c.office() );
1082 } 1082 }
1083 1083
1084 // some values we have to export as custom fields 1084 // some values we have to export as custom fields
1085 safeAddPropValue( vcard, "X-Qtopia-Profession", c.profession() ); 1085 safeAddPropValue( vcard, "X-Qtopia-Profession", c.profession() );
1086 safeAddPropValue( vcard, "X-Qtopia-Manager", c.manager() ); 1086 safeAddPropValue( vcard, "X-Qtopia-Manager", c.manager() );
1087 safeAddPropValue( vcard, "X-Qtopia-Assistant", c.assistant() ); 1087 safeAddPropValue( vcard, "X-Qtopia-Assistant", c.assistant() );
1088 1088
1089 safeAddPropValue( vcard, "X-Qtopia-Spouse", c.spouse() ); 1089 safeAddPropValue( vcard, "X-Qtopia-Spouse", c.spouse() );
1090 safeAddPropValue( vcard, "X-Qtopia-Gender", c.gender() ); 1090 safeAddPropValue( vcard, "X-Qtopia-Gender", c.gender() );
1091 safeAddPropValue( vcard, "X-Qtopia-Anniversary", c.anniversary() ); 1091 safeAddPropValue( vcard, "X-Qtopia-Anniversary", c.anniversary() );
1092 safeAddPropValue( vcard, "X-Qtopia-Nickname", c.nickname() ); 1092 safeAddPropValue( vcard, "X-Qtopia-Nickname", c.nickname() );
1093 safeAddPropValue( vcard, "X-Qtopia-Children", c.children() ); 1093 safeAddPropValue( vcard, "X-Qtopia-Children", c.children() );
1094 1094
1095 return vcard; 1095 return vcard;
1096} 1096}
1097 1097
1098 1098
1099/*! 1099/*!
1100 \internal 1100 \internal
1101*/ 1101*/
1102static OContact parseVObject( VObject *obj ) 1102static OContact parseVObject( VObject *obj )
1103{ 1103{
1104 OContact c; 1104 OContact c;
1105 1105
1106 VObjectIterator it; 1106 VObjectIterator it;
1107 initPropIterator( &it, obj ); 1107 initPropIterator( &it, obj );
1108 while( moreIteration( &it ) ) { 1108 while( moreIteration( &it ) ) {
1109 VObject *o = nextVObject( &it ); 1109 VObject *o = nextVObject( &it );
1110 QCString name = vObjectName( o ); 1110 QCString name = vObjectName( o );
1111 QCString value = vObjectStringZValue( o ); 1111 QCString value = vObjectStringZValue( o );
1112 if ( name == VCNameProp ) { 1112 if ( name == VCNameProp ) {
1113 VObjectIterator nit; 1113 VObjectIterator nit;
1114 initPropIterator( &nit, o ); 1114 initPropIterator( &nit, o );
1115 while( moreIteration( &nit ) ) { 1115 while( moreIteration( &nit ) ) {
1116 VObject *o = nextVObject( &nit ); 1116 VObject *o = nextVObject( &nit );
1117 QCString name = vObjectTypeInfo( o ); 1117 QCString name = vObjectTypeInfo( o );
1118 QString value = vObjectStringZValue( o ); 1118 QString value = vObjectStringZValue( o );
1119 if ( name == VCNamePrefixesProp ) 1119 if ( name == VCNamePrefixesProp )
1120 c.setTitle( value ); 1120 c.setTitle( value );
1121 else if ( name == VCNameSuffixesProp ) 1121 else if ( name == VCNameSuffixesProp )
1122 c.setSuffix( value ); 1122 c.setSuffix( value );
1123 else if ( name == VCFamilyNameProp ) 1123 else if ( name == VCFamilyNameProp )
1124 c.setLastName( value ); 1124 c.setLastName( value );
1125 else if ( name == VCGivenNameProp ) 1125 else if ( name == VCGivenNameProp )
1126 c.setFirstName( value ); 1126 c.setFirstName( value );
1127 else if ( name == VCAdditionalNamesProp ) 1127 else if ( name == VCAdditionalNamesProp )
1128 c.setMiddleName( value ); 1128 c.setMiddleName( value );
1129 } 1129 }
1130 } 1130 }
1131 else if ( name == VCAdrProp ) { 1131 else if ( name == VCAdrProp ) {
1132 bool work = TRUE; // default address is work address 1132 bool work = TRUE; // default address is work address
1133 QString street; 1133 QString street;
1134 QString city; 1134 QString city;
1135 QString region; 1135 QString region;
1136 QString postal; 1136 QString postal;
1137 QString country; 1137 QString country;
1138 1138
1139 VObjectIterator nit; 1139 VObjectIterator nit;
1140 initPropIterator( &nit, o ); 1140 initPropIterator( &nit, o );
1141 while( moreIteration( &nit ) ) { 1141 while( moreIteration( &nit ) ) {
1142 VObject *o = nextVObject( &nit ); 1142 VObject *o = nextVObject( &nit );
1143 QCString name = vObjectName( o ); 1143 QCString name = vObjectName( o );
1144 QString value = vObjectStringZValue( o ); 1144 QString value = vObjectStringZValue( o );
1145 if ( name == VCHomeProp ) 1145 if ( name == VCHomeProp )
1146 work = FALSE; 1146 work = FALSE;
1147 else if ( name == VCWorkProp ) 1147 else if ( name == VCWorkProp )
1148 work = TRUE; 1148 work = TRUE;
1149 else if ( name == VCStreetAddressProp ) 1149 else if ( name == VCStreetAddressProp )
1150 street = value; 1150 street = value;
1151 else if ( name == VCCityProp ) 1151 else if ( name == VCCityProp )
1152 city = value; 1152 city = value;
1153 else if ( name == VCRegionProp ) 1153 else if ( name == VCRegionProp )
1154 region = value; 1154 region = value;
1155 else if ( name == VCPostalCodeProp ) 1155 else if ( name == VCPostalCodeProp )
1156 postal = value; 1156 postal = value;
1157 else if ( name == VCCountryNameProp ) 1157 else if ( name == VCCountryNameProp )
1158 country = value; 1158 country = value;
1159 } 1159 }
1160 if ( work ) { 1160 if ( work ) {
1161 c.setBusinessStreet( street ); 1161 c.setBusinessStreet( street );
1162 c.setBusinessCity( city ); 1162 c.setBusinessCity( city );
1163 c.setBusinessCountry( country ); 1163 c.setBusinessCountry( country );
1164 c.setBusinessZip( postal ); 1164 c.setBusinessZip( postal );
1165 c.setBusinessState( region ); 1165 c.setBusinessState( region );
1166 } else { 1166 } else {
1167 c.setHomeStreet( street ); 1167 c.setHomeStreet( street );
1168 c.setHomeCity( city ); 1168 c.setHomeCity( city );
1169 c.setHomeCountry( country ); 1169 c.setHomeCountry( country );
1170 c.setHomeZip( postal ); 1170 c.setHomeZip( postal );
1171 c.setHomeState( region ); 1171 c.setHomeState( region );
1172 } 1172 }
1173 } 1173 }
1174 else if ( name == VCTelephoneProp ) { 1174 else if ( name == VCTelephoneProp ) {
1175 enum { 1175 enum {
1176 HOME = 0x01, 1176 HOME = 0x01,
1177 WORK = 0x02, 1177 WORK = 0x02,
1178 VOICE = 0x04, 1178 VOICE = 0x04,
1179 CELL = 0x08, 1179 CELL = 0x08,
1180 FAX = 0x10, 1180 FAX = 0x10,
1181 PAGER = 0x20, 1181 PAGER = 0x20,
1182 UNKNOWN = 0x80 1182 UNKNOWN = 0x80
1183 }; 1183 };
1184 int type = 0; 1184 int type = 0;
1185 1185
1186 VObjectIterator nit; 1186 VObjectIterator nit;
1187 initPropIterator( &nit, o ); 1187 initPropIterator( &nit, o );
1188 while( moreIteration( &nit ) ) { 1188 while( moreIteration( &nit ) ) {
1189 VObject *o = nextVObject( &nit ); 1189 VObject *o = nextVObject( &nit );
1190 QCString name = vObjectTypeInfo( o ); 1190 QCString name = vObjectTypeInfo( o );
1191 if ( name == VCHomeProp ) 1191 if ( name == VCHomeProp )
1192 type |= HOME; 1192 type |= HOME;
1193 else if ( name == VCWorkProp ) 1193 else if ( name == VCWorkProp )
1194 type |= WORK; 1194 type |= WORK;
1195 else if ( name == VCVoiceProp ) 1195 else if ( name == VCVoiceProp )
1196 type |= VOICE; 1196 type |= VOICE;
1197 else if ( name == VCCellularProp ) 1197 else if ( name == VCCellularProp )
1198 type |= CELL; 1198 type |= CELL;
1199 else if ( name == VCFaxProp ) 1199 else if ( name == VCFaxProp )
1200 type |= FAX; 1200 type |= FAX;
1201 else if ( name == VCPagerProp ) 1201 else if ( name == VCPagerProp )
1202 type |= PAGER; 1202 type |= PAGER;
1203 else if ( name == VCPreferredProp ) 1203 else if ( name == VCPreferredProp )
1204 ; 1204 ;
1205 else 1205 else
1206 type |= UNKNOWN; 1206 type |= UNKNOWN;
1207 } 1207 }
1208 if ( (type & UNKNOWN) != UNKNOWN ) { 1208 if ( (type & UNKNOWN) != UNKNOWN ) {
1209 if ( ( type & (HOME|WORK) ) == 0 ) // default 1209 if ( ( type & (HOME|WORK) ) == 0 ) // default
1210 type |= HOME; 1210 type |= HOME;
1211 if ( ( type & (VOICE|CELL|FAX|PAGER) ) == 0 ) // default 1211 if ( ( type & (VOICE|CELL|FAX|PAGER) ) == 0 ) // default
1212 type |= VOICE; 1212 type |= VOICE;
1213 1213
1214 if ( (type & (VOICE|HOME) ) == (VOICE|HOME) ) 1214 if ( (type & (VOICE|HOME) ) == (VOICE|HOME) )
1215 c.setHomePhone( value ); 1215 c.setHomePhone( value );
1216 if ( ( type & (FAX|HOME) ) == (FAX|HOME) ) 1216 if ( ( type & (FAX|HOME) ) == (FAX|HOME) )
1217 c.setHomeFax( value ); 1217 c.setHomeFax( value );
1218 if ( ( type & (CELL|HOME) ) == (CELL|HOME) ) 1218 if ( ( type & (CELL|HOME) ) == (CELL|HOME) )
1219 c.setHomeMobile( value ); 1219 c.setHomeMobile( value );
1220 if ( ( type & (VOICE|WORK) ) == (VOICE|WORK) ) 1220 if ( ( type & (VOICE|WORK) ) == (VOICE|WORK) )
1221 c.setBusinessPhone( value ); 1221 c.setBusinessPhone( value );
1222 if ( ( type & (FAX|WORK) ) == (FAX|WORK) ) 1222 if ( ( type & (FAX|WORK) ) == (FAX|WORK) )
1223 c.setBusinessFax( value ); 1223 c.setBusinessFax( value );
1224 if ( ( type & (CELL|WORK) ) == (CELL|WORK) ) 1224 if ( ( type & (CELL|WORK) ) == (CELL|WORK) )
1225 c.setBusinessMobile( value ); 1225 c.setBusinessMobile( value );
1226 if ( ( type & (PAGER|WORK) ) == (PAGER|WORK) ) 1226 if ( ( type & (PAGER|WORK) ) == (PAGER|WORK) )
1227 c.setBusinessPager( value ); 1227 c.setBusinessPager( value );
1228 } 1228 }
1229 } 1229 }
1230 else if ( name == VCEmailAddressProp ) { 1230 else if ( name == VCEmailAddressProp ) {
1231 QString email = vObjectStringZValue( o ); 1231 QString email = vObjectStringZValue( o );
1232 bool valid = TRUE; 1232 bool valid = TRUE;
1233 VObjectIterator nit; 1233 VObjectIterator nit;
1234 initPropIterator( &nit, o ); 1234 initPropIterator( &nit, o );
1235 while( moreIteration( &nit ) ) { 1235 while( moreIteration( &nit ) ) {
1236 VObject *o = nextVObject( &nit ); 1236 VObject *o = nextVObject( &nit );
1237 QCString name = vObjectTypeInfo( o ); 1237 QCString name = vObjectTypeInfo( o );
1238 if ( name != VCInternetProp && name != VCHomeProp && 1238 if ( name != VCInternetProp && name != VCHomeProp &&
1239 name != VCWorkProp && 1239 name != VCWorkProp &&
1240 name != VCPreferredProp ) 1240 name != VCPreferredProp )
1241 // ### preffered should map to default email 1241 // ### preffered should map to default email
1242 valid = FALSE; 1242 valid = FALSE;
1243 } 1243 }
1244 if ( valid ) { 1244 if ( valid ) {
1245 c.insertEmail( email ); 1245 c.insertEmail( email );
1246 } 1246 }
1247 } 1247 }
1248 else if ( name == VCURLProp ) { 1248 else if ( name == VCURLProp ) {
1249 VObjectIterator nit; 1249 VObjectIterator nit;
1250 initPropIterator( &nit, o ); 1250 initPropIterator( &nit, o );
1251 while( moreIteration( &nit ) ) { 1251 while( moreIteration( &nit ) ) {
1252 VObject *o = nextVObject( &nit ); 1252 VObject *o = nextVObject( &nit );
1253 QCString name = vObjectTypeInfo( o ); 1253 QCString name = vObjectTypeInfo( o );
1254 if ( name == VCHomeProp ) 1254 if ( name == VCHomeProp )
1255 c.setHomeWebpage( value ); 1255 c.setHomeWebpage( value );
1256 else if ( name == VCWorkProp ) 1256 else if ( name == VCWorkProp )
1257 c.setBusinessWebpage( value ); 1257 c.setBusinessWebpage( value );
1258 } 1258 }
1259 } 1259 }
1260 else if ( name == VCOrgProp ) { 1260 else if ( name == VCOrgProp ) {
1261 VObjectIterator nit; 1261 VObjectIterator nit;
1262 initPropIterator( &nit, o ); 1262 initPropIterator( &nit, o );
1263 while( moreIteration( &nit ) ) { 1263 while( moreIteration( &nit ) ) {
1264 VObject *o = nextVObject( &nit ); 1264 VObject *o = nextVObject( &nit );
1265 QCString name = vObjectName( o ); 1265 QCString name = vObjectName( o );
1266 QString value = vObjectStringZValue( o ); 1266 QString value = vObjectStringZValue( o );
1267 if ( name == VCOrgNameProp ) 1267 if ( name == VCOrgNameProp )
1268 c.setCompany( value ); 1268 c.setCompany( value );
1269 else if ( name == VCOrgUnitProp ) 1269 else if ( name == VCOrgUnitProp )
1270 c.setDepartment( value ); 1270 c.setDepartment( value );
1271 else if ( name == VCOrgUnit2Prop ) 1271 else if ( name == VCOrgUnit2Prop )
1272 c.setOffice( value ); 1272 c.setOffice( value );
1273 } 1273 }
1274 } 1274 }
1275 else if ( name == VCTitleProp ) { 1275 else if ( name == VCTitleProp ) {
1276 c.setJobTitle( value ); 1276 c.setJobTitle( value );
1277 } 1277 }
1278 else if ( name == "X-Qtopia-Profession" ) { 1278 else if ( name == "X-Qtopia-Profession" ) {
1279 c.setProfession( value ); 1279 c.setProfession( value );
1280 } 1280 }
1281 else if ( name == "X-Qtopia-Manager" ) { 1281 else if ( name == "X-Qtopia-Manager" ) {
1282 c.setManager( value ); 1282 c.setManager( value );
1283 } 1283 }
1284 else if ( name == "X-Qtopia-Assistant" ) { 1284 else if ( name == "X-Qtopia-Assistant" ) {
1285 c.setAssistant( value ); 1285 c.setAssistant( value );
1286 } 1286 }
1287 else if ( name == "X-Qtopia-Spouse" ) { 1287 else if ( name == "X-Qtopia-Spouse" ) {
1288 c.setSpouse( value ); 1288 c.setSpouse( value );
1289 } 1289 }
1290 else if ( name == "X-Qtopia-Gender" ) { 1290 else if ( name == "X-Qtopia-Gender" ) {
1291 c.setGender( value ); 1291 c.setGender( value );
1292 } 1292 }
1293 else if ( name == "X-Qtopia-Anniversary" ) { 1293 else if ( name == "X-Qtopia-Anniversary" ) {
1294 c.setAnniversary( value ); 1294 c.setAnniversary( value );
1295 } 1295 }
1296 else if ( name == "X-Qtopia-Nickname" ) { 1296 else if ( name == "X-Qtopia-Nickname" ) {
1297 c.setNickname( value ); 1297 c.setNickname( value );
1298 } 1298 }
1299 else if ( name == "X-Qtopia-Children" ) { 1299 else if ( name == "X-Qtopia-Children" ) {
1300 c.setChildren( value ); 1300 c.setChildren( value );
1301 } 1301 }
1302 1302
1303 1303
1304#if 0 1304#if 0
1305 else { 1305 else {
1306 printf("Name: %s, value=%s\n", name.data(), vObjectStringZValue( o ) ); 1306 printf("Name: %s, value=%s\n", name.data(), vObjectStringZValue( o ) );
1307 VObjectIterator nit; 1307 VObjectIterator nit;
1308 initPropIterator( &nit, o ); 1308 initPropIterator( &nit, o );
1309 while( moreIteration( &nit ) ) { 1309 while( moreIteration( &nit ) ) {
1310 VObject *o = nextVObject( &nit ); 1310 VObject *o = nextVObject( &nit );
1311 QCString name = vObjectName( o ); 1311 QCString name = vObjectName( o );
1312 QString value = vObjectStringZValue( o ); 1312 QString value = vObjectStringZValue( o );
1313 printf(" subprop: %s = %s\n", name.data(), value.latin1() ); 1313 printf(" subprop: %s = %s\n", name.data(), value.latin1() );
1314 } 1314 }
1315 } 1315 }
1316#endif 1316#endif
1317 } 1317 }
1318 c.setFileAs(); 1318 c.setFileAs();
1319 return c; 1319 return c;
1320} 1320}
1321 1321
1322/*! 1322/*!
1323 Writes the list of \a contacts as a set of VCards to the file \a filename. 1323 Writes the list of \a contacts as a set of VCards to the file \a filename.
1324*/ 1324*/
1325void OContact::writeVCard( const QString &filename, const QValueList<OContact> &contacts) 1325void OContact::writeVCard( const QString &filename, const QValueList<OContact> &contacts)
1326{ 1326{
1327 QFileDirect f( filename.utf8().data() ); 1327 QFileDirect f( filename.utf8().data() );
1328 if ( !f.open( IO_WriteOnly ) ) { 1328 if ( !f.open( IO_WriteOnly ) ) {
1329 qWarning("Unable to open vcard write"); 1329 qWarning("Unable to open vcard write");
1330 return; 1330 return;
1331 } 1331 }
1332 1332
1333 QValueList<OContact>::ConstIterator it; 1333 QValueList<OContact>::ConstIterator it;
1334 for( it = contacts.begin(); it != contacts.end(); ++it ) { 1334 for( it = contacts.begin(); it != contacts.end(); ++it ) {
1335 VObject *obj = createVObject( *it ); 1335 VObject *obj = createVObject( *it );
1336 writeVObject(f.directHandle() , obj ); 1336 writeVObject(f.directHandle() , obj );
1337 cleanVObject( obj ); 1337 cleanVObject( obj );
1338 } 1338 }
1339 cleanStrTbl(); 1339 cleanStrTbl();
1340} 1340}
1341 1341
1342/*! 1342/*!
1343 writes \a contact as a VCard to the file \a filename. 1343 writes \a contact as a VCard to the file \a filename.
1344*/ 1344*/
1345void OContact::writeVCard( const QString &filename, const OContact &contact) 1345void OContact::writeVCard( const QString &filename, const OContact &contact)
1346{ 1346{
1347 QFileDirect f( filename.utf8().data() ); 1347 QFileDirect f( filename.utf8().data() );
1348 if ( !f.open( IO_WriteOnly ) ) { 1348 if ( !f.open( IO_WriteOnly ) ) {
1349 qWarning("Unable to open vcard write"); 1349 qWarning("Unable to open vcard write");
1350 return; 1350 return;
1351 } 1351 }
1352 1352
1353 VObject *obj = createVObject( contact ); 1353 VObject *obj = createVObject( contact );
1354 writeVObject( f.directHandle() , obj ); 1354 writeVObject( f.directHandle() , obj );
1355 cleanVObject( obj ); 1355 cleanVObject( obj );
1356 1356
1357 cleanStrTbl(); 1357 cleanStrTbl();
1358} 1358}
1359 1359
1360/*! 1360/*!
1361 Returns the set of contacts read as VCards from the file \a filename. 1361 Returns the set of contacts read as VCards from the file \a filename.
1362*/ 1362*/
1363QValueList<OContact> OContact::readVCard( const QString &filename ) 1363QValueList<OContact> OContact::readVCard( const QString &filename )
1364{ 1364{
1365 qDebug("trying to open %s, exists=%d", filename.utf8().data(), QFileInfo( filename.utf8().data() ).size() ); 1365 qDebug("trying to open %s, exists=%d", filename.utf8().data(), QFileInfo( filename.utf8().data() ).size() );
1366 VObject *obj = Parse_MIME_FromFileName( (char *)filename.utf8().data() ); 1366 VObject *obj = Parse_MIME_FromFileName( (char *)filename.utf8().data() );
1367 1367
1368 qDebug("vobject = %p", obj ); 1368 qDebug("vobject = %p", obj );
1369 1369
1370 QValueList<OContact> contacts; 1370 QValueList<OContact> contacts;
1371 1371
1372 while ( obj ) { 1372 while ( obj ) {
1373 contacts.append( parseVObject( obj ) ); 1373 contacts.append( parseVObject( obj ) );
1374 1374
1375 VObject *t = obj; 1375 VObject *t = obj;
1376 obj = nextVObjectInList(obj); 1376 obj = nextVObjectInList(obj);
1377 cleanVObject( t ); 1377 cleanVObject( t );
1378 } 1378 }
1379 1379
1380 return contacts; 1380 return contacts;
1381} 1381}
1382 1382
1383/*! 1383/*!
1384 Returns TRUE if the contact matches the regular expression \a regexp. 1384 Returns TRUE if the contact matches the regular expression \a regexp.
1385 Otherwise returns FALSE. 1385 Otherwise returns FALSE.
1386*/ 1386*/
1387bool OContact::match( const QString &regexp ) const 1387bool OContact::match( const QString &regexp ) const
1388{ 1388{
1389 return match(QRegExp(regexp)); 1389 return match(QRegExp(regexp));
1390} 1390}
1391 1391
1392/*! 1392/*!
1393 \overload 1393 \overload
1394 Returns TRUE if the contact matches the regular expression \a regexp. 1394 Returns TRUE if the contact matches the regular expression \a regexp.
1395 Otherwise returns FALSE. 1395 Otherwise returns FALSE.
1396*/ 1396*/
1397bool OContact::match( const QRegExp &r ) const 1397bool OContact::match( const QRegExp &r ) const
1398{ 1398{
1399 bool match; 1399 bool match;
1400 match = false; 1400 match = false;
1401 QMap<int, QString>::ConstIterator it; 1401 QMap<int, QString>::ConstIterator it;
1402 for ( it = mMap.begin(); it != mMap.end(); ++it ) { 1402 for ( it = mMap.begin(); it != mMap.end(); ++it ) {
1403 if ( (*it).find( r ) > -1 ) { 1403 if ( (*it).find( r ) > -1 ) {
1404 match = true; 1404 match = true;
1405 break; 1405 break;
1406 } 1406 }
1407 } 1407 }
1408 return match; 1408 return match;
1409} 1409}
1410 1410
1411 1411
1412// Noch nicht definiert ! :SX
1413QString OContact::toShortText() const 1412QString OContact::toShortText() const
1414{ 1413{
1415 return ( QString::fromLatin1( "Not defined!") ); 1414 return ( fullName() );
1416} 1415}
1417QString OContact::type() const 1416QString OContact::type() const
1418{ 1417{
1419 return QString::fromLatin1( "OContact" ); 1418 return QString::fromLatin1( "OContact" );
1420} 1419}
1421 1420
1422// Noch nicht definiert ! :SX 1421// Definition is missing ! (se)
1423QMap<QString,QString> OContact::toExtraMap() const 1422QMap<QString,QString> OContact::toExtraMap() const
1424{ 1423{
1424 qWarning ("Function not implemented: OContact::toExtraMap()");
1425 QMap <QString,QString> useless; 1425 QMap <QString,QString> useless;
1426 return useless; 1426 return useless;
1427} 1427}
1428 1428
1429// Noch nicht definiert ! :SX 1429class QString OContact::recordField( int pos ) const
1430class QString OContact::recordField(int) const
1431{ 1430{
1432 return QString::fromLatin1( "Noch nicht implementiert !" ); 1431 QStringList SLFIELDS = fields(); // ?? why this ? (se)
1432 return SLFIELDS[pos];
1433} 1433}
diff --git a/libopie/pim/ocontact.h b/libopie/pim/ocontact.h
index e0555c8..756c87d 100644
--- a/libopie/pim/ocontact.h
+++ b/libopie/pim/ocontact.h
@@ -1,311 +1,314 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#ifndef __OCONTACT_H__ 21#ifndef __OCONTACT_H__
22#define __OCONTACT_H__ 22#define __OCONTACT_H__
23 23
24#include <opie/opimrecord.h> 24#include <opie/opimrecord.h>
25#include <qpe/recordfields.h> 25#include <qpe/recordfields.h>
26 26
27#include <qstringlist.h> 27#include <qstringlist.h>
28 28
29#if defined(QPC_TEMPLATEDLL) 29#if defined(QPC_TEMPLATEDLL)
30// MOC_SKIP_BEGIN 30// MOC_SKIP_BEGIN
31QPC_TEMPLATEEXTERN template class QPC_EXPORT QMap<int, QString>; 31QPC_TEMPLATEEXTERN template class QPC_EXPORT QMap<int, QString>;
32// MOC_SKIP_END 32// MOC_SKIP_END
33#endif 33#endif
34 34
35class ContactPrivate; // Wozu ist das gut und wo ist das decrariert ? (se) 35class ContactPrivate; // Wozu ist das gut und wo ist das decrariert ? (se)
36class QPC_EXPORT OContact : public OPimRecord 36class QPC_EXPORT OContact : public OPimRecord
37{ 37{
38 friend class DataSet; 38 friend class DataSet;
39public: 39public:
40 OContact(); 40 OContact();
41 OContact( const QMap<int, QString> &fromMap ); 41 OContact( const QMap<int, QString> &fromMap );
42 virtual ~OContact(); 42 virtual ~OContact();
43 43
44 static void writeVCard( const QString &filename, const QValueList<OContact> &contacts); 44 static void writeVCard( const QString &filename, const QValueList<OContact> &contacts);
45 static void writeVCard( const QString &filename, const OContact &c ); 45 static void writeVCard( const QString &filename, const OContact &c );
46 static QValueList<OContact> readVCard( const QString &filename ); 46 static QValueList<OContact> readVCard( const QString &filename );
47 47
48 enum journal_action { ACTION_ADD, ACTION_REMOVE, ACTION_REPLACE }; 48 enum journal_action { ACTION_ADD, ACTION_REMOVE, ACTION_REPLACE };
49 49
50 void setTitle( const QString &v ) { replace( Qtopia::Title, v ); } 50 void setTitle( const QString &v ) { replace( Qtopia::Title, v ); }
51 void setFirstName( const QString &v ) { replace( Qtopia::FirstName, v ); } 51 void setFirstName( const QString &v ) { replace( Qtopia::FirstName, v ); }
52 void setMiddleName( const QString &v ) { replace( Qtopia::MiddleName, v ); } 52 void setMiddleName( const QString &v ) { replace( Qtopia::MiddleName, v ); }
53 void setLastName( const QString &v ) { replace( Qtopia::LastName, v ); } 53 void setLastName( const QString &v ) { replace( Qtopia::LastName, v ); }
54 void setSuffix( const QString &v ) { replace( Qtopia::Suffix, v ); } 54 void setSuffix( const QString &v ) { replace( Qtopia::Suffix, v ); }
55 void setFileAs( const QString &v ) { replace( Qtopia::FileAs, v ); } 55 void setFileAs( const QString &v ) { replace( Qtopia::FileAs, v ); }
56 void setFileAs(); 56 void setFileAs();
57 57
58 // default email address 58 // default email address
59 void setDefaultEmail( const QString &v ); 59 void setDefaultEmail( const QString &v );
60 // inserts email to list and ensure's doesn't already exist 60 // inserts email to list and ensure's doesn't already exist
61 void insertEmail( const QString &v ); 61 void insertEmail( const QString &v );
62 void removeEmail( const QString &v ); 62 void removeEmail( const QString &v );
63 void clearEmails(); 63 void clearEmails();
64 void insertEmails( const QStringList &v ); 64 void insertEmails( const QStringList &v );
65 65
66 // home 66 // home
67 void setHomeStreet( const QString &v ) { replace( Qtopia::HomeStreet, v ); } 67 void setHomeStreet( const QString &v ) { replace( Qtopia::HomeStreet, v ); }
68 void setHomeCity( const QString &v ) { replace( Qtopia::HomeCity, v ); } 68 void setHomeCity( const QString &v ) { replace( Qtopia::HomeCity, v ); }
69 void setHomeState( const QString &v ) { replace( Qtopia::HomeState, v ); } 69 void setHomeState( const QString &v ) { replace( Qtopia::HomeState, v ); }
70 void setHomeZip( const QString &v ) { replace( Qtopia::HomeZip, v ); } 70 void setHomeZip( const QString &v ) { replace( Qtopia::HomeZip, v ); }
71 void setHomeCountry( const QString &v ) { replace( Qtopia::HomeCountry, v ); } 71 void setHomeCountry( const QString &v ) { replace( Qtopia::HomeCountry, v ); }
72 void setHomePhone( const QString &v ) { replace( Qtopia::HomePhone, v ); } 72 void setHomePhone( const QString &v ) { replace( Qtopia::HomePhone, v ); }
73 void setHomeFax( const QString &v ) { replace( Qtopia::HomeFax, v ); } 73 void setHomeFax( const QString &v ) { replace( Qtopia::HomeFax, v ); }
74 void setHomeMobile( const QString &v ) { replace( Qtopia::HomeMobile, v ); } 74 void setHomeMobile( const QString &v ) { replace( Qtopia::HomeMobile, v ); }
75 void setHomeWebpage( const QString &v ) { replace( Qtopia::HomeWebPage, v ); } 75 void setHomeWebpage( const QString &v ) { replace( Qtopia::HomeWebPage, v ); }
76 76
77 // business 77 // business
78 void setCompany( const QString &v ) { replace( Qtopia::Company, v ); } 78 void setCompany( const QString &v ) { replace( Qtopia::Company, v ); }
79 void setBusinessStreet( const QString &v ) { replace( Qtopia::BusinessStreet, v ); } 79 void setBusinessStreet( const QString &v ) { replace( Qtopia::BusinessStreet, v ); }
80 void setBusinessCity( const QString &v ) { replace( Qtopia::BusinessCity, v ); } 80 void setBusinessCity( const QString &v ) { replace( Qtopia::BusinessCity, v ); }
81 void setBusinessState( const QString &v ) { replace( Qtopia::BusinessState, v ); } 81 void setBusinessState( const QString &v ) { replace( Qtopia::BusinessState, v ); }
82 void setBusinessZip( const QString &v ) { replace( Qtopia::BusinessZip, v ); } 82 void setBusinessZip( const QString &v ) { replace( Qtopia::BusinessZip, v ); }
83 void setBusinessCountry( const QString &v ) { replace( Qtopia::BusinessCountry, v ); } 83 void setBusinessCountry( const QString &v ) { replace( Qtopia::BusinessCountry, v ); }
84 void setBusinessWebpage( const QString &v ) { replace( Qtopia::BusinessWebPage, v ); } 84 void setBusinessWebpage( const QString &v ) { replace( Qtopia::BusinessWebPage, v ); }
85 void setJobTitle( const QString &v ) { replace( Qtopia::JobTitle, v ); } 85 void setJobTitle( const QString &v ) { replace( Qtopia::JobTitle, v ); }
86 void setDepartment( const QString &v ) { replace( Qtopia::Department, v ); } 86 void setDepartment( const QString &v ) { replace( Qtopia::Department, v ); }
87 void setOffice( const QString &v ) { replace( Qtopia::Office, v ); } 87 void setOffice( const QString &v ) { replace( Qtopia::Office, v ); }
88 void setBusinessPhone( const QString &v ) { replace( Qtopia::BusinessPhone, v ); } 88 void setBusinessPhone( const QString &v ) { replace( Qtopia::BusinessPhone, v ); }
89 void setBusinessFax( const QString &v ) { replace( Qtopia::BusinessFax, v ); } 89 void setBusinessFax( const QString &v ) { replace( Qtopia::BusinessFax, v ); }
90 void setBusinessMobile( const QString &v ) { replace( Qtopia::BusinessMobile, v ); } 90 void setBusinessMobile( const QString &v ) { replace( Qtopia::BusinessMobile, v ); }
91 void setBusinessPager( const QString &v ) { replace( Qtopia::BusinessPager, v ); } 91 void setBusinessPager( const QString &v ) { replace( Qtopia::BusinessPager, v ); }
92 void setProfession( const QString &v ) { replace( Qtopia::Profession, v ); } 92 void setProfession( const QString &v ) { replace( Qtopia::Profession, v ); }
93 void setAssistant( const QString &v ) { replace( Qtopia::Assistant, v ); } 93 void setAssistant( const QString &v ) { replace( Qtopia::Assistant, v ); }
94 void setManager( const QString &v ) { replace( Qtopia::Manager, v ); } 94 void setManager( const QString &v ) { replace( Qtopia::Manager, v ); }
95 95
96 // personal 96 // personal
97 void setSpouse( const QString &v ) { replace( Qtopia::Spouse, v ); } 97 void setSpouse( const QString &v ) { replace( Qtopia::Spouse, v ); }
98 void setGender( const QString &v ) { replace( Qtopia::Gender, v ); } 98 void setGender( const QString &v ) { replace( Qtopia::Gender, v ); }
99 void setBirthday( const QString &v ) { replace( Qtopia::Birthday, v ); } 99 void setBirthday( const QString &v ) { replace( Qtopia::Birthday, v ); }
100 void setAnniversary( const QString &v ) { replace( Qtopia::Anniversary, v ); } 100 void setAnniversary( const QString &v ) { replace( Qtopia::Anniversary, v ); }
101 void setNickname( const QString &v ) { replace( Qtopia::Nickname, v ); } 101 void setNickname( const QString &v ) { replace( Qtopia::Nickname, v ); }
102 void setChildren( const QString &v ); 102 void setChildren( const QString &v );
103 103
104 // other 104 // other
105 void setNotes( const QString &v ) { replace( Qtopia::Notes, v); } 105 void setNotes( const QString &v ) { replace( Qtopia::Notes, v); }
106 106
107 bool match( const QString &regexp ) const; 107 bool match( const QString &regexp ) const;
108 108
109// DON'T ATTEMPT TO USE THIS 109// DON'T ATTEMPT TO USE THIS
110#ifdef QTOPIA_INTERNAL_CONTACT_MRE 110#ifdef QTOPIA_INTERNAL_CONTACT_MRE
111 bool match( const QRegExp &regexp ) const; 111 bool match( const QRegExp &regexp ) const;
112#endif 112#endif
113 113
114// // custom 114// // custom
115// void setCustomField( const QString &key, const QString &v ) 115// void setCustomField( const QString &key, const QString &v )
116// { replace(Custom- + key, v ); } 116// { replace(Custom- + key, v ); }
117 117
118 // name 118 // name
119 QString fullName() const; 119 QString fullName() const;
120 QString title() const { return find( Qtopia::Title ); } 120 QString title() const { return find( Qtopia::Title ); }
121 QString firstName() const { return find( Qtopia::FirstName ); } 121 QString firstName() const { return find( Qtopia::FirstName ); }
122 QString middleName() const { return find( Qtopia::MiddleName ); } 122 QString middleName() const { return find( Qtopia::MiddleName ); }
123 QString lastName() const { return find( Qtopia::LastName ); } 123 QString lastName() const { return find( Qtopia::LastName ); }
124 QString suffix() const { return find( Qtopia::Suffix ); } 124 QString suffix() const { return find( Qtopia::Suffix ); }
125 QString fileAs() const { return find( Qtopia::FileAs ); } 125 QString fileAs() const { return find( Qtopia::FileAs ); }
126 126
127 // email 127 // email
128 QString defaultEmail() const { return find( Qtopia::DefaultEmail ); } 128 QString defaultEmail() const { return find( Qtopia::DefaultEmail ); }
129 QStringList emailList() const; 129 QStringList emailList() const;
130 130
131 // home 131 // home
132 QString homeStreet() const { return find( Qtopia::HomeStreet ); } 132 QString homeStreet() const { return find( Qtopia::HomeStreet ); }
133 QString homeCity() const { return find( Qtopia::HomeCity ); } 133 QString homeCity() const { return find( Qtopia::HomeCity ); }
134 QString homeState() const { return find( Qtopia::HomeState ); } 134 QString homeState() const { return find( Qtopia::HomeState ); }
135 QString homeZip() const { return find( Qtopia::HomeZip ); } 135 QString homeZip() const { return find( Qtopia::HomeZip ); }
136 QString homeCountry() const { return find( Qtopia::HomeCountry ); } 136 QString homeCountry() const { return find( Qtopia::HomeCountry ); }
137 QString homePhone() const { return find( Qtopia::HomePhone ); } 137 QString homePhone() const { return find( Qtopia::HomePhone ); }
138 QString homeFax() const { return find( Qtopia::HomeFax ); } 138 QString homeFax() const { return find( Qtopia::HomeFax ); }
139 QString homeMobile() const { return find( Qtopia::HomeMobile ); } 139 QString homeMobile() const { return find( Qtopia::HomeMobile ); }
140 QString homeWebpage() const { return find( Qtopia::HomeWebPage ); } 140 QString homeWebpage() const { return find( Qtopia::HomeWebPage ); }
141 /** Multi line string containing all non-empty address info in the form 141 /** Multi line string containing all non-empty address info in the form
142 * Street 142 * Street
143 * City, State Zip 143 * City, State Zip
144 * Country 144 * Country
145 */ 145 */
146 QString displayHomeAddress() const; 146 QString displayHomeAddress() const;
147 147
148 // business 148 // business
149 QString company() const { return find( Qtopia::Company ); } 149 QString company() const { return find( Qtopia::Company ); }
150 QString businessStreet() const { return find( Qtopia::BusinessStreet ); } 150 QString businessStreet() const { return find( Qtopia::BusinessStreet ); }
151 QString businessCity() const { return find( Qtopia::BusinessCity ); } 151 QString businessCity() const { return find( Qtopia::BusinessCity ); }
152 QString businessState() const { return find( Qtopia::BusinessState ); } 152 QString businessState() const { return find( Qtopia::BusinessState ); }
153 QString businessZip() const { return find( Qtopia::BusinessZip ); } 153 QString businessZip() const { return find( Qtopia::BusinessZip ); }
154 QString businessCountry() const { return find( Qtopia::BusinessCountry ); } 154 QString businessCountry() const { return find( Qtopia::BusinessCountry ); }
155 QString businessWebpage() const { return find( Qtopia::BusinessWebPage ); } 155 QString businessWebpage() const { return find( Qtopia::BusinessWebPage ); }
156 QString jobTitle() const { return find( Qtopia::JobTitle ); } 156 QString jobTitle() const { return find( Qtopia::JobTitle ); }
157 QString department() const { return find( Qtopia::Department ); } 157 QString department() const { return find( Qtopia::Department ); }
158 QString office() const { return find( Qtopia::Office ); } 158 QString office() const { return find( Qtopia::Office ); }
159 QString businessPhone() const { return find( Qtopia::BusinessPhone ); } 159 QString businessPhone() const { return find( Qtopia::BusinessPhone ); }
160 QString businessFax() const { return find( Qtopia::BusinessFax ); } 160 QString businessFax() const { return find( Qtopia::BusinessFax ); }
161 QString businessMobile() const { return find( Qtopia::BusinessMobile ); } 161 QString businessMobile() const { return find( Qtopia::BusinessMobile ); }
162 QString businessPager() const { return find( Qtopia::BusinessPager ); } 162 QString businessPager() const { return find( Qtopia::BusinessPager ); }
163 QString profession() const { return find( Qtopia::Profession ); } 163 QString profession() const { return find( Qtopia::Profession ); }
164 QString assistant() const { return find( Qtopia::Assistant ); } 164 QString assistant() const { return find( Qtopia::Assistant ); }
165 QString manager() const { return find( Qtopia::Manager ); } 165 QString manager() const { return find( Qtopia::Manager ); }
166 /** Multi line string containing all non-empty address info in the form 166 /** Multi line string containing all non-empty address info in the form
167 * Street 167 * Street
168 * City, State Zip 168 * City, State Zip
169 * Country 169 * Country
170 */ 170 */
171 QString displayBusinessAddress() const; 171 QString displayBusinessAddress() const;
172 172
173 //personal 173 //personal
174 QString spouse() const { return find( Qtopia::Spouse ); } 174 QString spouse() const { return find( Qtopia::Spouse ); }
175 QString gender() const { return find( Qtopia::Gender ); } 175 QString gender() const { return find( Qtopia::Gender ); }
176 QString birthday() const { return find( Qtopia::Birthday ); } 176 QString birthday() const { return find( Qtopia::Birthday ); }
177 QString anniversary() const { return find( Qtopia::Anniversary ); } 177 QString anniversary() const { return find( Qtopia::Anniversary ); }
178 QString nickname() const { return find( Qtopia::Nickname ); } 178 QString nickname() const { return find( Qtopia::Nickname ); }
179 QString children() const { return find( Qtopia::Children ); } 179 QString children() const { return find( Qtopia::Children ); }
180 QStringList childrenList() const; 180 QStringList childrenList() const;
181 181
182 // other 182 // other
183 QString notes() const { return find( Qtopia::Notes ); } 183 QString notes() const { return find( Qtopia::Notes ); }
184 QString groups() const { return find( Qtopia::Groups ); } 184 QString groups() const { return find( Qtopia::Groups ); }
185 QStringList groupList() const; 185 QStringList groupList() const;
186 186
187// // custom 187// // custom
188// const QString &customField( const QString &key ) 188// const QString &customField( const QString &key )
189// { return find( Custom- + key ); } 189// { return find( Custom- + key ); }
190 190
191 static QStringList fields(); 191 static QStringList fields();
192 static QStringList trfields(); 192 static QStringList trfields();
193 193
194 QString toRichText() const; 194 QString toRichText() const;
195 QMap<int, QString> toMap() const; 195 QMap<int, QString> toMap() const;
196 QString field( int key ) const { return find( key ); } 196 QString field( int key ) const { return find( key ); }
197 197
198 198
199 // journaling... 199 // journaling...
200 void saveJournal( journal_action action, const QString &key = QString::null ); 200 void saveJournal( journal_action action, const QString &key = QString::null );
201 void save( QString &buf ) const; 201 void save( QString &buf ) const;
202 202
203 void setUid( int i ) 203 void setUid( int i )
204{ Record::setUid(i); replace( Qtopia::AddressUid , QString::number(i)); } 204{ Record::setUid(i); replace( Qtopia::AddressUid , QString::number(i)); }
205 205
206 QString toShortText()const; 206 QString toShortText()const;
207 QString OContact::type()const; 207 QString OContact::type()const;
208 QMap<QString,QString> OContact::toExtraMap() const; 208 QMap<QString,QString> OContact::toExtraMap() const;
209 class QString OContact::recordField(int) const; 209 class QString OContact::recordField(int) const;
210 210
211 // Why private ? (eilers,se)
212 QString emailSeparator() const { return " "; }
213 // the emails should be seperated by a comma
214 void setEmails( const QString &v );
215 QString emails() const { return find( Qtopia::Emails ); }
216
217
211private: 218private:
212 friend class AbEditor; 219 friend class AbEditor;
213 friend class AbTable; 220 friend class AbTable;
214 friend class AddressBookAccessPrivate; 221 friend class AddressBookAccessPrivate;
215 friend class XMLIO; 222 friend class XMLIO;
216 223
217 QString emailSeparator() const { return " "; }
218 // the emails should be seperated by a comma
219 void setEmails( const QString &v );
220 QString emails() const { return find( Qtopia::Emails ); }
221 224
222 void insert( int key, const QString &value ); 225 void insert( int key, const QString &value );
223 void replace( int key, const QString &value ); 226 void replace( int key, const QString &value );
224 QString find( int key ) const; 227 QString find( int key ) const;
225 228
226 QString displayAddress( const QString &street, 229 QString displayAddress( const QString &street,
227 const QString &city, 230 const QString &city,
228 const QString &state, 231 const QString &state,
229 const QString &zip, 232 const QString &zip,
230 const QString &country ) const; 233 const QString &country ) const;
231 234
232 Qtopia::UidGen &uidGen() { return sUidGen; } 235 Qtopia::UidGen &uidGen() { return sUidGen; }
233 static Qtopia::UidGen sUidGen; 236 static Qtopia::UidGen sUidGen;
234 QMap<int, QString> mMap; 237 QMap<int, QString> mMap;
235 ContactPrivate *d; 238 ContactPrivate *d;
236}; 239};
237 240
238// these methods are inlined to keep binary compatability with Qtopia 1.5 241// these methods are inlined to keep binary compatability with Qtopia 1.5
239inline void OContact::insertEmail( const QString &v ) 242inline void OContact::insertEmail( const QString &v )
240{ 243{
241 //qDebug("insertEmail %s", v.latin1()); 244 //qDebug("insertEmail %s", v.latin1());
242 QString e = v.simplifyWhiteSpace(); 245 QString e = v.simplifyWhiteSpace();
243 QString def = defaultEmail(); 246 QString def = defaultEmail();
244 247
245 // if no default, set it as the default email and don't insert 248 // if no default, set it as the default email and don't insert
246 if ( def.isEmpty() ) { 249 if ( def.isEmpty() ) {
247 setDefaultEmail( e ); // will insert into the list for us 250 setDefaultEmail( e ); // will insert into the list for us
248 return; 251 return;
249 } 252 }
250 253
251 // otherwise, insert assuming doesn't already exist 254 // otherwise, insert assuming doesn't already exist
252 QString emailsStr = find( Qtopia::Emails ); 255 QString emailsStr = find( Qtopia::Emails );
253 if ( emailsStr.contains( e )) 256 if ( emailsStr.contains( e ))
254 return; 257 return;
255 if ( !emailsStr.isEmpty() ) 258 if ( !emailsStr.isEmpty() )
256 emailsStr += emailSeparator(); 259 emailsStr += emailSeparator();
257 emailsStr += e; 260 emailsStr += e;
258 replace( Qtopia::Emails, emailsStr ); 261 replace( Qtopia::Emails, emailsStr );
259} 262}
260 263
261inline void OContact::removeEmail( const QString &v ) 264inline void OContact::removeEmail( const QString &v )
262{ 265{
263 QString e = v.simplifyWhiteSpace(); 266 QString e = v.simplifyWhiteSpace();
264 QString def = defaultEmail(); 267 QString def = defaultEmail();
265 QString emailsStr = find( Qtopia::Emails ); 268 QString emailsStr = find( Qtopia::Emails );
266 QStringList emails = emailList(); 269 QStringList emails = emailList();
267 270
268 // otherwise, must first contain it 271 // otherwise, must first contain it
269 if ( !emailsStr.contains( e ) ) 272 if ( !emailsStr.contains( e ) )
270 return; 273 return;
271 274
272 // remove it 275 // remove it
273 //qDebug(" removing email from list %s", e.latin1()); 276 //qDebug(" removing email from list %s", e.latin1());
274 emails.remove( e ); 277 emails.remove( e );
275 // reset the string 278 // reset the string
276 emailsStr = emails.join(emailSeparator()); // Sharp's brain dead separator 279 emailsStr = emails.join(emailSeparator()); // Sharp's brain dead separator
277 replace( Qtopia::Emails, emailsStr ); 280 replace( Qtopia::Emails, emailsStr );
278 281
279 // if default, then replace the default email with the first one 282 // if default, then replace the default email with the first one
280 if ( def == e ) { 283 if ( def == e ) {
281 //qDebug("removeEmail is default; setting new default"); 284 //qDebug("removeEmail is default; setting new default");
282 if ( !emails.count() ) 285 if ( !emails.count() )
283 clearEmails(); 286 clearEmails();
284 else // setDefaultEmail will remove e from the list 287 else // setDefaultEmail will remove e from the list
285 setDefaultEmail( emails.first() ); 288 setDefaultEmail( emails.first() );
286 } 289 }
287} 290}
288inline void OContact::clearEmails() 291inline void OContact::clearEmails()
289{ 292{
290 mMap.remove( Qtopia::DefaultEmail ); 293 mMap.remove( Qtopia::DefaultEmail );
291 mMap.remove( Qtopia::Emails ); 294 mMap.remove( Qtopia::Emails );
292} 295}
293inline void OContact::setDefaultEmail( const QString &v ) 296inline void OContact::setDefaultEmail( const QString &v )
294{ 297{
295 QString e = v.simplifyWhiteSpace(); 298 QString e = v.simplifyWhiteSpace();
296 299
297 //qDebug("OContact::setDefaultEmail %s", e.latin1()); 300 //qDebug("OContact::setDefaultEmail %s", e.latin1());
298 replace( Qtopia::DefaultEmail, e ); 301 replace( Qtopia::DefaultEmail, e );
299 302
300 if ( !e.isEmpty() ) 303 if ( !e.isEmpty() )
301 insertEmail( e ); 304 insertEmail( e );
302 305
303} 306}
304 307
305inline void OContact::insertEmails( const QStringList &v ) 308inline void OContact::insertEmails( const QStringList &v )
306{ 309{
307 for ( QStringList::ConstIterator it = v.begin(); it != v.end(); ++it ) 310 for ( QStringList::ConstIterator it = v.begin(); it != v.end(); ++it )
308 insertEmail( *it ); 311 insertEmail( *it );
309} 312}
310 313
311#endif 314#endif
diff --git a/libopie2/opiepim/ocontact.cpp b/libopie2/opiepim/ocontact.cpp
index 66632f5..828a9de 100644
--- a/libopie2/opiepim/ocontact.cpp
+++ b/libopie2/opiepim/ocontact.cpp
@@ -1028,406 +1028,406 @@ static VObject *createVObject( const OContact &c )
1028 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeMobile() ); 1028 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeMobile() );
1029 safeAddProp( home_phone, VCHomeProp ); 1029 safeAddProp( home_phone, VCHomeProp );
1030 safeAddProp( home_phone, VCCellularProp ); 1030 safeAddProp( home_phone, VCCellularProp );
1031 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeFax() ); 1031 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeFax() );
1032 safeAddProp( home_phone, VCHomeProp ); 1032 safeAddProp( home_phone, VCHomeProp );
1033 safeAddProp( home_phone, VCFaxProp ); 1033 safeAddProp( home_phone, VCFaxProp );
1034 1034
1035 VObject *url = safeAddPropValue( vcard, VCURLProp, c.homeWebpage() ); 1035 VObject *url = safeAddPropValue( vcard, VCURLProp, c.homeWebpage() );
1036 safeAddProp( url, VCHomeProp ); 1036 safeAddProp( url, VCHomeProp );
1037 1037
1038 // work properties 1038 // work properties
1039 VObject *work_adr= safeAddProp( vcard, VCAdrProp ); 1039 VObject *work_adr= safeAddProp( vcard, VCAdrProp );
1040 safeAddProp( work_adr, VCWorkProp ); 1040 safeAddProp( work_adr, VCWorkProp );
1041 safeAddPropValue( work_adr, VCStreetAddressProp, c.businessStreet() ); 1041 safeAddPropValue( work_adr, VCStreetAddressProp, c.businessStreet() );
1042 safeAddPropValue( work_adr, VCCityProp, c.businessCity() ); 1042 safeAddPropValue( work_adr, VCCityProp, c.businessCity() );
1043 safeAddPropValue( work_adr, VCRegionProp, c.businessState() ); 1043 safeAddPropValue( work_adr, VCRegionProp, c.businessState() );
1044 safeAddPropValue( work_adr, VCPostalCodeProp, c.businessZip() ); 1044 safeAddPropValue( work_adr, VCPostalCodeProp, c.businessZip() );
1045 safeAddPropValue( work_adr, VCCountryNameProp, c.businessCountry() ); 1045 safeAddPropValue( work_adr, VCCountryNameProp, c.businessCountry() );
1046 1046
1047 VObject *work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPhone() ); 1047 VObject *work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPhone() );
1048 safeAddProp( work_phone, VCWorkProp ); 1048 safeAddProp( work_phone, VCWorkProp );
1049 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessMobile() ); 1049 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessMobile() );
1050 safeAddProp( work_phone, VCWorkProp ); 1050 safeAddProp( work_phone, VCWorkProp );
1051 safeAddProp( work_phone, VCCellularProp ); 1051 safeAddProp( work_phone, VCCellularProp );
1052 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessFax() ); 1052 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessFax() );
1053 safeAddProp( work_phone, VCWorkProp ); 1053 safeAddProp( work_phone, VCWorkProp );
1054 safeAddProp( work_phone, VCFaxProp ); 1054 safeAddProp( work_phone, VCFaxProp );
1055 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPager() ); 1055 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPager() );
1056 safeAddProp( work_phone, VCWorkProp ); 1056 safeAddProp( work_phone, VCWorkProp );
1057 safeAddProp( work_phone, VCPagerProp ); 1057 safeAddProp( work_phone, VCPagerProp );
1058 1058
1059 url = safeAddPropValue( vcard, VCURLProp, c.businessWebpage() ); 1059 url = safeAddPropValue( vcard, VCURLProp, c.businessWebpage() );
1060 safeAddProp( url, VCWorkProp ); 1060 safeAddProp( url, VCWorkProp );
1061 1061
1062 VObject *title = safeAddPropValue( vcard, VCTitleProp, c.jobTitle() ); 1062 VObject *title = safeAddPropValue( vcard, VCTitleProp, c.jobTitle() );
1063 safeAddProp( title, VCWorkProp ); 1063 safeAddProp( title, VCWorkProp );
1064 1064
1065 1065
1066 QStringList emails = c.emailList(); 1066 QStringList emails = c.emailList();
1067 emails.prepend( c.defaultEmail() ); 1067 emails.prepend( c.defaultEmail() );
1068 for( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) { 1068 for( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) {
1069 VObject *email = safeAddPropValue( vcard, VCEmailAddressProp, *it ); 1069 VObject *email = safeAddPropValue( vcard, VCEmailAddressProp, *it );
1070 safeAddProp( email, VCInternetProp ); 1070 safeAddProp( email, VCInternetProp );
1071 } 1071 }
1072 1072
1073 safeAddPropValue( vcard, VCNoteProp, c.notes() ); 1073 safeAddPropValue( vcard, VCNoteProp, c.notes() );
1074 1074
1075 safeAddPropValue( vcard, VCBirthDateProp, c.birthday() ); 1075 safeAddPropValue( vcard, VCBirthDateProp, c.birthday() );
1076 1076
1077 if ( !c.company().isEmpty() || !c.department().isEmpty() || !c.office().isEmpty() ) { 1077 if ( !c.company().isEmpty() || !c.department().isEmpty() || !c.office().isEmpty() ) {
1078 VObject *org = safeAddProp( vcard, VCOrgProp ); 1078 VObject *org = safeAddProp( vcard, VCOrgProp );
1079 safeAddPropValue( org, VCOrgNameProp, c.company() ); 1079 safeAddPropValue( org, VCOrgNameProp, c.company() );
1080 safeAddPropValue( org, VCOrgUnitProp, c.department() ); 1080 safeAddPropValue( org, VCOrgUnitProp, c.department() );
1081 safeAddPropValue( org, VCOrgUnit2Prop, c.office() ); 1081 safeAddPropValue( org, VCOrgUnit2Prop, c.office() );
1082 } 1082 }
1083 1083
1084 // some values we have to export as custom fields 1084 // some values we have to export as custom fields
1085 safeAddPropValue( vcard, "X-Qtopia-Profession", c.profession() ); 1085 safeAddPropValue( vcard, "X-Qtopia-Profession", c.profession() );
1086 safeAddPropValue( vcard, "X-Qtopia-Manager", c.manager() ); 1086 safeAddPropValue( vcard, "X-Qtopia-Manager", c.manager() );
1087 safeAddPropValue( vcard, "X-Qtopia-Assistant", c.assistant() ); 1087 safeAddPropValue( vcard, "X-Qtopia-Assistant", c.assistant() );
1088 1088
1089 safeAddPropValue( vcard, "X-Qtopia-Spouse", c.spouse() ); 1089 safeAddPropValue( vcard, "X-Qtopia-Spouse", c.spouse() );
1090 safeAddPropValue( vcard, "X-Qtopia-Gender", c.gender() ); 1090 safeAddPropValue( vcard, "X-Qtopia-Gender", c.gender() );
1091 safeAddPropValue( vcard, "X-Qtopia-Anniversary", c.anniversary() ); 1091 safeAddPropValue( vcard, "X-Qtopia-Anniversary", c.anniversary() );
1092 safeAddPropValue( vcard, "X-Qtopia-Nickname", c.nickname() ); 1092 safeAddPropValue( vcard, "X-Qtopia-Nickname", c.nickname() );
1093 safeAddPropValue( vcard, "X-Qtopia-Children", c.children() ); 1093 safeAddPropValue( vcard, "X-Qtopia-Children", c.children() );
1094 1094
1095 return vcard; 1095 return vcard;
1096} 1096}
1097 1097
1098 1098
1099/*! 1099/*!
1100 \internal 1100 \internal
1101*/ 1101*/
1102static OContact parseVObject( VObject *obj ) 1102static OContact parseVObject( VObject *obj )
1103{ 1103{
1104 OContact c; 1104 OContact c;
1105 1105
1106 VObjectIterator it; 1106 VObjectIterator it;
1107 initPropIterator( &it, obj ); 1107 initPropIterator( &it, obj );
1108 while( moreIteration( &it ) ) { 1108 while( moreIteration( &it ) ) {
1109 VObject *o = nextVObject( &it ); 1109 VObject *o = nextVObject( &it );
1110 QCString name = vObjectName( o ); 1110 QCString name = vObjectName( o );
1111 QCString value = vObjectStringZValue( o ); 1111 QCString value = vObjectStringZValue( o );
1112 if ( name == VCNameProp ) { 1112 if ( name == VCNameProp ) {
1113 VObjectIterator nit; 1113 VObjectIterator nit;
1114 initPropIterator( &nit, o ); 1114 initPropIterator( &nit, o );
1115 while( moreIteration( &nit ) ) { 1115 while( moreIteration( &nit ) ) {
1116 VObject *o = nextVObject( &nit ); 1116 VObject *o = nextVObject( &nit );
1117 QCString name = vObjectTypeInfo( o ); 1117 QCString name = vObjectTypeInfo( o );
1118 QString value = vObjectStringZValue( o ); 1118 QString value = vObjectStringZValue( o );
1119 if ( name == VCNamePrefixesProp ) 1119 if ( name == VCNamePrefixesProp )
1120 c.setTitle( value ); 1120 c.setTitle( value );
1121 else if ( name == VCNameSuffixesProp ) 1121 else if ( name == VCNameSuffixesProp )
1122 c.setSuffix( value ); 1122 c.setSuffix( value );
1123 else if ( name == VCFamilyNameProp ) 1123 else if ( name == VCFamilyNameProp )
1124 c.setLastName( value ); 1124 c.setLastName( value );
1125 else if ( name == VCGivenNameProp ) 1125 else if ( name == VCGivenNameProp )
1126 c.setFirstName( value ); 1126 c.setFirstName( value );
1127 else if ( name == VCAdditionalNamesProp ) 1127 else if ( name == VCAdditionalNamesProp )
1128 c.setMiddleName( value ); 1128 c.setMiddleName( value );
1129 } 1129 }
1130 } 1130 }
1131 else if ( name == VCAdrProp ) { 1131 else if ( name == VCAdrProp ) {
1132 bool work = TRUE; // default address is work address 1132 bool work = TRUE; // default address is work address
1133 QString street; 1133 QString street;
1134 QString city; 1134 QString city;
1135 QString region; 1135 QString region;
1136 QString postal; 1136 QString postal;
1137 QString country; 1137 QString country;
1138 1138
1139 VObjectIterator nit; 1139 VObjectIterator nit;
1140 initPropIterator( &nit, o ); 1140 initPropIterator( &nit, o );
1141 while( moreIteration( &nit ) ) { 1141 while( moreIteration( &nit ) ) {
1142 VObject *o = nextVObject( &nit ); 1142 VObject *o = nextVObject( &nit );
1143 QCString name = vObjectName( o ); 1143 QCString name = vObjectName( o );
1144 QString value = vObjectStringZValue( o ); 1144 QString value = vObjectStringZValue( o );
1145 if ( name == VCHomeProp ) 1145 if ( name == VCHomeProp )
1146 work = FALSE; 1146 work = FALSE;
1147 else if ( name == VCWorkProp ) 1147 else if ( name == VCWorkProp )
1148 work = TRUE; 1148 work = TRUE;
1149 else if ( name == VCStreetAddressProp ) 1149 else if ( name == VCStreetAddressProp )
1150 street = value; 1150 street = value;
1151 else if ( name == VCCityProp ) 1151 else if ( name == VCCityProp )
1152 city = value; 1152 city = value;
1153 else if ( name == VCRegionProp ) 1153 else if ( name == VCRegionProp )
1154 region = value; 1154 region = value;
1155 else if ( name == VCPostalCodeProp ) 1155 else if ( name == VCPostalCodeProp )
1156 postal = value; 1156 postal = value;
1157 else if ( name == VCCountryNameProp ) 1157 else if ( name == VCCountryNameProp )
1158 country = value; 1158 country = value;
1159 } 1159 }
1160 if ( work ) { 1160 if ( work ) {
1161 c.setBusinessStreet( street ); 1161 c.setBusinessStreet( street );
1162 c.setBusinessCity( city ); 1162 c.setBusinessCity( city );
1163 c.setBusinessCountry( country ); 1163 c.setBusinessCountry( country );
1164 c.setBusinessZip( postal ); 1164 c.setBusinessZip( postal );
1165 c.setBusinessState( region ); 1165 c.setBusinessState( region );
1166 } else { 1166 } else {
1167 c.setHomeStreet( street ); 1167 c.setHomeStreet( street );
1168 c.setHomeCity( city ); 1168 c.setHomeCity( city );
1169 c.setHomeCountry( country ); 1169 c.setHomeCountry( country );
1170 c.setHomeZip( postal ); 1170 c.setHomeZip( postal );
1171 c.setHomeState( region ); 1171 c.setHomeState( region );
1172 } 1172 }
1173 } 1173 }
1174 else if ( name == VCTelephoneProp ) { 1174 else if ( name == VCTelephoneProp ) {
1175 enum { 1175 enum {
1176 HOME = 0x01, 1176 HOME = 0x01,
1177 WORK = 0x02, 1177 WORK = 0x02,
1178 VOICE = 0x04, 1178 VOICE = 0x04,
1179 CELL = 0x08, 1179 CELL = 0x08,
1180 FAX = 0x10, 1180 FAX = 0x10,
1181 PAGER = 0x20, 1181 PAGER = 0x20,
1182 UNKNOWN = 0x80 1182 UNKNOWN = 0x80
1183 }; 1183 };
1184 int type = 0; 1184 int type = 0;
1185 1185
1186 VObjectIterator nit; 1186 VObjectIterator nit;
1187 initPropIterator( &nit, o ); 1187 initPropIterator( &nit, o );
1188 while( moreIteration( &nit ) ) { 1188 while( moreIteration( &nit ) ) {
1189 VObject *o = nextVObject( &nit ); 1189 VObject *o = nextVObject( &nit );
1190 QCString name = vObjectTypeInfo( o ); 1190 QCString name = vObjectTypeInfo( o );
1191 if ( name == VCHomeProp ) 1191 if ( name == VCHomeProp )
1192 type |= HOME; 1192 type |= HOME;
1193 else if ( name == VCWorkProp ) 1193 else if ( name == VCWorkProp )
1194 type |= WORK; 1194 type |= WORK;
1195 else if ( name == VCVoiceProp ) 1195 else if ( name == VCVoiceProp )
1196 type |= VOICE; 1196 type |= VOICE;
1197 else if ( name == VCCellularProp ) 1197 else if ( name == VCCellularProp )
1198 type |= CELL; 1198 type |= CELL;
1199 else if ( name == VCFaxProp ) 1199 else if ( name == VCFaxProp )
1200 type |= FAX; 1200 type |= FAX;
1201 else if ( name == VCPagerProp ) 1201 else if ( name == VCPagerProp )
1202 type |= PAGER; 1202 type |= PAGER;
1203 else if ( name == VCPreferredProp ) 1203 else if ( name == VCPreferredProp )
1204 ; 1204 ;
1205 else 1205 else
1206 type |= UNKNOWN; 1206 type |= UNKNOWN;
1207 } 1207 }
1208 if ( (type & UNKNOWN) != UNKNOWN ) { 1208 if ( (type & UNKNOWN) != UNKNOWN ) {
1209 if ( ( type & (HOME|WORK) ) == 0 ) // default 1209 if ( ( type & (HOME|WORK) ) == 0 ) // default
1210 type |= HOME; 1210 type |= HOME;
1211 if ( ( type & (VOICE|CELL|FAX|PAGER) ) == 0 ) // default 1211 if ( ( type & (VOICE|CELL|FAX|PAGER) ) == 0 ) // default
1212 type |= VOICE; 1212 type |= VOICE;
1213 1213
1214 if ( (type & (VOICE|HOME) ) == (VOICE|HOME) ) 1214 if ( (type & (VOICE|HOME) ) == (VOICE|HOME) )
1215 c.setHomePhone( value ); 1215 c.setHomePhone( value );
1216 if ( ( type & (FAX|HOME) ) == (FAX|HOME) ) 1216 if ( ( type & (FAX|HOME) ) == (FAX|HOME) )
1217 c.setHomeFax( value ); 1217 c.setHomeFax( value );
1218 if ( ( type & (CELL|HOME) ) == (CELL|HOME) ) 1218 if ( ( type & (CELL|HOME) ) == (CELL|HOME) )
1219 c.setHomeMobile( value ); 1219 c.setHomeMobile( value );
1220 if ( ( type & (VOICE|WORK) ) == (VOICE|WORK) ) 1220 if ( ( type & (VOICE|WORK) ) == (VOICE|WORK) )
1221 c.setBusinessPhone( value ); 1221 c.setBusinessPhone( value );
1222 if ( ( type & (FAX|WORK) ) == (FAX|WORK) ) 1222 if ( ( type & (FAX|WORK) ) == (FAX|WORK) )
1223 c.setBusinessFax( value ); 1223 c.setBusinessFax( value );
1224 if ( ( type & (CELL|WORK) ) == (CELL|WORK) ) 1224 if ( ( type & (CELL|WORK) ) == (CELL|WORK) )
1225 c.setBusinessMobile( value ); 1225 c.setBusinessMobile( value );
1226 if ( ( type & (PAGER|WORK) ) == (PAGER|WORK) ) 1226 if ( ( type & (PAGER|WORK) ) == (PAGER|WORK) )
1227 c.setBusinessPager( value ); 1227 c.setBusinessPager( value );
1228 } 1228 }
1229 } 1229 }
1230 else if ( name == VCEmailAddressProp ) { 1230 else if ( name == VCEmailAddressProp ) {
1231 QString email = vObjectStringZValue( o ); 1231 QString email = vObjectStringZValue( o );
1232 bool valid = TRUE; 1232 bool valid = TRUE;
1233 VObjectIterator nit; 1233 VObjectIterator nit;
1234 initPropIterator( &nit, o ); 1234 initPropIterator( &nit, o );
1235 while( moreIteration( &nit ) ) { 1235 while( moreIteration( &nit ) ) {
1236 VObject *o = nextVObject( &nit ); 1236 VObject *o = nextVObject( &nit );
1237 QCString name = vObjectTypeInfo( o ); 1237 QCString name = vObjectTypeInfo( o );
1238 if ( name != VCInternetProp && name != VCHomeProp && 1238 if ( name != VCInternetProp && name != VCHomeProp &&
1239 name != VCWorkProp && 1239 name != VCWorkProp &&
1240 name != VCPreferredProp ) 1240 name != VCPreferredProp )
1241 // ### preffered should map to default email 1241 // ### preffered should map to default email
1242 valid = FALSE; 1242 valid = FALSE;
1243 } 1243 }
1244 if ( valid ) { 1244 if ( valid ) {
1245 c.insertEmail( email ); 1245 c.insertEmail( email );
1246 } 1246 }
1247 } 1247 }
1248 else if ( name == VCURLProp ) { 1248 else if ( name == VCURLProp ) {
1249 VObjectIterator nit; 1249 VObjectIterator nit;
1250 initPropIterator( &nit, o ); 1250 initPropIterator( &nit, o );
1251 while( moreIteration( &nit ) ) { 1251 while( moreIteration( &nit ) ) {
1252 VObject *o = nextVObject( &nit ); 1252 VObject *o = nextVObject( &nit );
1253 QCString name = vObjectTypeInfo( o ); 1253 QCString name = vObjectTypeInfo( o );
1254 if ( name == VCHomeProp ) 1254 if ( name == VCHomeProp )
1255 c.setHomeWebpage( value ); 1255 c.setHomeWebpage( value );
1256 else if ( name == VCWorkProp ) 1256 else if ( name == VCWorkProp )
1257 c.setBusinessWebpage( value ); 1257 c.setBusinessWebpage( value );
1258 } 1258 }
1259 } 1259 }
1260 else if ( name == VCOrgProp ) { 1260 else if ( name == VCOrgProp ) {
1261 VObjectIterator nit; 1261 VObjectIterator nit;
1262 initPropIterator( &nit, o ); 1262 initPropIterator( &nit, o );
1263 while( moreIteration( &nit ) ) { 1263 while( moreIteration( &nit ) ) {
1264 VObject *o = nextVObject( &nit ); 1264 VObject *o = nextVObject( &nit );
1265 QCString name = vObjectName( o ); 1265 QCString name = vObjectName( o );
1266 QString value = vObjectStringZValue( o ); 1266 QString value = vObjectStringZValue( o );
1267 if ( name == VCOrgNameProp ) 1267 if ( name == VCOrgNameProp )
1268 c.setCompany( value ); 1268 c.setCompany( value );
1269 else if ( name == VCOrgUnitProp ) 1269 else if ( name == VCOrgUnitProp )
1270 c.setDepartment( value ); 1270 c.setDepartment( value );
1271 else if ( name == VCOrgUnit2Prop ) 1271 else if ( name == VCOrgUnit2Prop )
1272 c.setOffice( value ); 1272 c.setOffice( value );
1273 } 1273 }
1274 } 1274 }
1275 else if ( name == VCTitleProp ) { 1275 else if ( name == VCTitleProp ) {
1276 c.setJobTitle( value ); 1276 c.setJobTitle( value );
1277 } 1277 }
1278 else if ( name == "X-Qtopia-Profession" ) { 1278 else if ( name == "X-Qtopia-Profession" ) {
1279 c.setProfession( value ); 1279 c.setProfession( value );
1280 } 1280 }
1281 else if ( name == "X-Qtopia-Manager" ) { 1281 else if ( name == "X-Qtopia-Manager" ) {
1282 c.setManager( value ); 1282 c.setManager( value );
1283 } 1283 }
1284 else if ( name == "X-Qtopia-Assistant" ) { 1284 else if ( name == "X-Qtopia-Assistant" ) {
1285 c.setAssistant( value ); 1285 c.setAssistant( value );
1286 } 1286 }
1287 else if ( name == "X-Qtopia-Spouse" ) { 1287 else if ( name == "X-Qtopia-Spouse" ) {
1288 c.setSpouse( value ); 1288 c.setSpouse( value );
1289 } 1289 }
1290 else if ( name == "X-Qtopia-Gender" ) { 1290 else if ( name == "X-Qtopia-Gender" ) {
1291 c.setGender( value ); 1291 c.setGender( value );
1292 } 1292 }
1293 else if ( name == "X-Qtopia-Anniversary" ) { 1293 else if ( name == "X-Qtopia-Anniversary" ) {
1294 c.setAnniversary( value ); 1294 c.setAnniversary( value );
1295 } 1295 }
1296 else if ( name == "X-Qtopia-Nickname" ) { 1296 else if ( name == "X-Qtopia-Nickname" ) {
1297 c.setNickname( value ); 1297 c.setNickname( value );
1298 } 1298 }
1299 else if ( name == "X-Qtopia-Children" ) { 1299 else if ( name == "X-Qtopia-Children" ) {
1300 c.setChildren( value ); 1300 c.setChildren( value );
1301 } 1301 }
1302 1302
1303 1303
1304#if 0 1304#if 0
1305 else { 1305 else {
1306 printf("Name: %s, value=%s\n", name.data(), vObjectStringZValue( o ) ); 1306 printf("Name: %s, value=%s\n", name.data(), vObjectStringZValue( o ) );
1307 VObjectIterator nit; 1307 VObjectIterator nit;
1308 initPropIterator( &nit, o ); 1308 initPropIterator( &nit, o );
1309 while( moreIteration( &nit ) ) { 1309 while( moreIteration( &nit ) ) {
1310 VObject *o = nextVObject( &nit ); 1310 VObject *o = nextVObject( &nit );
1311 QCString name = vObjectName( o ); 1311 QCString name = vObjectName( o );
1312 QString value = vObjectStringZValue( o ); 1312 QString value = vObjectStringZValue( o );
1313 printf(" subprop: %s = %s\n", name.data(), value.latin1() ); 1313 printf(" subprop: %s = %s\n", name.data(), value.latin1() );
1314 } 1314 }
1315 } 1315 }
1316#endif 1316#endif
1317 } 1317 }
1318 c.setFileAs(); 1318 c.setFileAs();
1319 return c; 1319 return c;
1320} 1320}
1321 1321
1322/*! 1322/*!
1323 Writes the list of \a contacts as a set of VCards to the file \a filename. 1323 Writes the list of \a contacts as a set of VCards to the file \a filename.
1324*/ 1324*/
1325void OContact::writeVCard( const QString &filename, const QValueList<OContact> &contacts) 1325void OContact::writeVCard( const QString &filename, const QValueList<OContact> &contacts)
1326{ 1326{
1327 QFileDirect f( filename.utf8().data() ); 1327 QFileDirect f( filename.utf8().data() );
1328 if ( !f.open( IO_WriteOnly ) ) { 1328 if ( !f.open( IO_WriteOnly ) ) {
1329 qWarning("Unable to open vcard write"); 1329 qWarning("Unable to open vcard write");
1330 return; 1330 return;
1331 } 1331 }
1332 1332
1333 QValueList<OContact>::ConstIterator it; 1333 QValueList<OContact>::ConstIterator it;
1334 for( it = contacts.begin(); it != contacts.end(); ++it ) { 1334 for( it = contacts.begin(); it != contacts.end(); ++it ) {
1335 VObject *obj = createVObject( *it ); 1335 VObject *obj = createVObject( *it );
1336 writeVObject(f.directHandle() , obj ); 1336 writeVObject(f.directHandle() , obj );
1337 cleanVObject( obj ); 1337 cleanVObject( obj );
1338 } 1338 }
1339 cleanStrTbl(); 1339 cleanStrTbl();
1340} 1340}
1341 1341
1342/*! 1342/*!
1343 writes \a contact as a VCard to the file \a filename. 1343 writes \a contact as a VCard to the file \a filename.
1344*/ 1344*/
1345void OContact::writeVCard( const QString &filename, const OContact &contact) 1345void OContact::writeVCard( const QString &filename, const OContact &contact)
1346{ 1346{
1347 QFileDirect f( filename.utf8().data() ); 1347 QFileDirect f( filename.utf8().data() );
1348 if ( !f.open( IO_WriteOnly ) ) { 1348 if ( !f.open( IO_WriteOnly ) ) {
1349 qWarning("Unable to open vcard write"); 1349 qWarning("Unable to open vcard write");
1350 return; 1350 return;
1351 } 1351 }
1352 1352
1353 VObject *obj = createVObject( contact ); 1353 VObject *obj = createVObject( contact );
1354 writeVObject( f.directHandle() , obj ); 1354 writeVObject( f.directHandle() , obj );
1355 cleanVObject( obj ); 1355 cleanVObject( obj );
1356 1356
1357 cleanStrTbl(); 1357 cleanStrTbl();
1358} 1358}
1359 1359
1360/*! 1360/*!
1361 Returns the set of contacts read as VCards from the file \a filename. 1361 Returns the set of contacts read as VCards from the file \a filename.
1362*/ 1362*/
1363QValueList<OContact> OContact::readVCard( const QString &filename ) 1363QValueList<OContact> OContact::readVCard( const QString &filename )
1364{ 1364{
1365 qDebug("trying to open %s, exists=%d", filename.utf8().data(), QFileInfo( filename.utf8().data() ).size() ); 1365 qDebug("trying to open %s, exists=%d", filename.utf8().data(), QFileInfo( filename.utf8().data() ).size() );
1366 VObject *obj = Parse_MIME_FromFileName( (char *)filename.utf8().data() ); 1366 VObject *obj = Parse_MIME_FromFileName( (char *)filename.utf8().data() );
1367 1367
1368 qDebug("vobject = %p", obj ); 1368 qDebug("vobject = %p", obj );
1369 1369
1370 QValueList<OContact> contacts; 1370 QValueList<OContact> contacts;
1371 1371
1372 while ( obj ) { 1372 while ( obj ) {
1373 contacts.append( parseVObject( obj ) ); 1373 contacts.append( parseVObject( obj ) );
1374 1374
1375 VObject *t = obj; 1375 VObject *t = obj;
1376 obj = nextVObjectInList(obj); 1376 obj = nextVObjectInList(obj);
1377 cleanVObject( t ); 1377 cleanVObject( t );
1378 } 1378 }
1379 1379
1380 return contacts; 1380 return contacts;
1381} 1381}
1382 1382
1383/*! 1383/*!
1384 Returns TRUE if the contact matches the regular expression \a regexp. 1384 Returns TRUE if the contact matches the regular expression \a regexp.
1385 Otherwise returns FALSE. 1385 Otherwise returns FALSE.
1386*/ 1386*/
1387bool OContact::match( const QString &regexp ) const 1387bool OContact::match( const QString &regexp ) const
1388{ 1388{
1389 return match(QRegExp(regexp)); 1389 return match(QRegExp(regexp));
1390} 1390}
1391 1391
1392/*! 1392/*!
1393 \overload 1393 \overload
1394 Returns TRUE if the contact matches the regular expression \a regexp. 1394 Returns TRUE if the contact matches the regular expression \a regexp.
1395 Otherwise returns FALSE. 1395 Otherwise returns FALSE.
1396*/ 1396*/
1397bool OContact::match( const QRegExp &r ) const 1397bool OContact::match( const QRegExp &r ) const
1398{ 1398{
1399 bool match; 1399 bool match;
1400 match = false; 1400 match = false;
1401 QMap<int, QString>::ConstIterator it; 1401 QMap<int, QString>::ConstIterator it;
1402 for ( it = mMap.begin(); it != mMap.end(); ++it ) { 1402 for ( it = mMap.begin(); it != mMap.end(); ++it ) {
1403 if ( (*it).find( r ) > -1 ) { 1403 if ( (*it).find( r ) > -1 ) {
1404 match = true; 1404 match = true;
1405 break; 1405 break;
1406 } 1406 }
1407 } 1407 }
1408 return match; 1408 return match;
1409} 1409}
1410 1410
1411 1411
1412// Noch nicht definiert ! :SX
1413QString OContact::toShortText() const 1412QString OContact::toShortText() const
1414{ 1413{
1415 return ( QString::fromLatin1( "Not defined!") ); 1414 return ( fullName() );
1416} 1415}
1417QString OContact::type() const 1416QString OContact::type() const
1418{ 1417{
1419 return QString::fromLatin1( "OContact" ); 1418 return QString::fromLatin1( "OContact" );
1420} 1419}
1421 1420
1422// Noch nicht definiert ! :SX 1421// Definition is missing ! (se)
1423QMap<QString,QString> OContact::toExtraMap() const 1422QMap<QString,QString> OContact::toExtraMap() const
1424{ 1423{
1424 qWarning ("Function not implemented: OContact::toExtraMap()");
1425 QMap <QString,QString> useless; 1425 QMap <QString,QString> useless;
1426 return useless; 1426 return useless;
1427} 1427}
1428 1428
1429// Noch nicht definiert ! :SX 1429class QString OContact::recordField( int pos ) const
1430class QString OContact::recordField(int) const
1431{ 1430{
1432 return QString::fromLatin1( "Noch nicht implementiert !" ); 1431 QStringList SLFIELDS = fields(); // ?? why this ? (se)
1432 return SLFIELDS[pos];
1433} 1433}
diff --git a/libopie2/opiepim/ocontact.h b/libopie2/opiepim/ocontact.h
index e0555c8..756c87d 100644
--- a/libopie2/opiepim/ocontact.h
+++ b/libopie2/opiepim/ocontact.h
@@ -1,311 +1,314 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#ifndef __OCONTACT_H__ 21#ifndef __OCONTACT_H__
22#define __OCONTACT_H__ 22#define __OCONTACT_H__
23 23
24#include <opie/opimrecord.h> 24#include <opie/opimrecord.h>
25#include <qpe/recordfields.h> 25#include <qpe/recordfields.h>
26 26
27#include <qstringlist.h> 27#include <qstringlist.h>
28 28
29#if defined(QPC_TEMPLATEDLL) 29#if defined(QPC_TEMPLATEDLL)
30// MOC_SKIP_BEGIN 30// MOC_SKIP_BEGIN
31QPC_TEMPLATEEXTERN template class QPC_EXPORT QMap<int, QString>; 31QPC_TEMPLATEEXTERN template class QPC_EXPORT QMap<int, QString>;
32// MOC_SKIP_END 32// MOC_SKIP_END
33#endif 33#endif
34 34
35class ContactPrivate; // Wozu ist das gut und wo ist das decrariert ? (se) 35class ContactPrivate; // Wozu ist das gut und wo ist das decrariert ? (se)
36class QPC_EXPORT OContact : public OPimRecord 36class QPC_EXPORT OContact : public OPimRecord
37{ 37{
38 friend class DataSet; 38 friend class DataSet;
39public: 39public:
40 OContact(); 40 OContact();
41 OContact( const QMap<int, QString> &fromMap ); 41 OContact( const QMap<int, QString> &fromMap );
42 virtual ~OContact(); 42 virtual ~OContact();
43 43
44 static void writeVCard( const QString &filename, const QValueList<OContact> &contacts); 44 static void writeVCard( const QString &filename, const QValueList<OContact> &contacts);
45 static void writeVCard( const QString &filename, const OContact &c ); 45 static void writeVCard( const QString &filename, const OContact &c );
46 static QValueList<OContact> readVCard( const QString &filename ); 46 static QValueList<OContact> readVCard( const QString &filename );
47 47
48 enum journal_action { ACTION_ADD, ACTION_REMOVE, ACTION_REPLACE }; 48 enum journal_action { ACTION_ADD, ACTION_REMOVE, ACTION_REPLACE };
49 49
50 void setTitle( const QString &v ) { replace( Qtopia::Title, v ); } 50 void setTitle( const QString &v ) { replace( Qtopia::Title, v ); }
51 void setFirstName( const QString &v ) { replace( Qtopia::FirstName, v ); } 51 void setFirstName( const QString &v ) { replace( Qtopia::FirstName, v ); }
52 void setMiddleName( const QString &v ) { replace( Qtopia::MiddleName, v ); } 52 void setMiddleName( const QString &v ) { replace( Qtopia::MiddleName, v ); }
53 void setLastName( const QString &v ) { replace( Qtopia::LastName, v ); } 53 void setLastName( const QString &v ) { replace( Qtopia::LastName, v ); }
54 void setSuffix( const QString &v ) { replace( Qtopia::Suffix, v ); } 54 void setSuffix( const QString &v ) { replace( Qtopia::Suffix, v ); }
55 void setFileAs( const QString &v ) { replace( Qtopia::FileAs, v ); } 55 void setFileAs( const QString &v ) { replace( Qtopia::FileAs, v ); }
56 void setFileAs(); 56 void setFileAs();
57 57
58 // default email address 58 // default email address
59 void setDefaultEmail( const QString &v ); 59 void setDefaultEmail( const QString &v );
60 // inserts email to list and ensure's doesn't already exist 60 // inserts email to list and ensure's doesn't already exist
61 void insertEmail( const QString &v ); 61 void insertEmail( const QString &v );
62 void removeEmail( const QString &v ); 62 void removeEmail( const QString &v );
63 void clearEmails(); 63 void clearEmails();
64 void insertEmails( const QStringList &v ); 64 void insertEmails( const QStringList &v );
65 65
66 // home 66 // home
67 void setHomeStreet( const QString &v ) { replace( Qtopia::HomeStreet, v ); } 67 void setHomeStreet( const QString &v ) { replace( Qtopia::HomeStreet, v ); }
68 void setHomeCity( const QString &v ) { replace( Qtopia::HomeCity, v ); } 68 void setHomeCity( const QString &v ) { replace( Qtopia::HomeCity, v ); }
69 void setHomeState( const QString &v ) { replace( Qtopia::HomeState, v ); } 69 void setHomeState( const QString &v ) { replace( Qtopia::HomeState, v ); }
70 void setHomeZip( const QString &v ) { replace( Qtopia::HomeZip, v ); } 70 void setHomeZip( const QString &v ) { replace( Qtopia::HomeZip, v ); }
71 void setHomeCountry( const QString &v ) { replace( Qtopia::HomeCountry, v ); } 71 void setHomeCountry( const QString &v ) { replace( Qtopia::HomeCountry, v ); }
72 void setHomePhone( const QString &v ) { replace( Qtopia::HomePhone, v ); } 72 void setHomePhone( const QString &v ) { replace( Qtopia::HomePhone, v ); }
73 void setHomeFax( const QString &v ) { replace( Qtopia::HomeFax, v ); } 73 void setHomeFax( const QString &v ) { replace( Qtopia::HomeFax, v ); }
74 void setHomeMobile( const QString &v ) { replace( Qtopia::HomeMobile, v ); } 74 void setHomeMobile( const QString &v ) { replace( Qtopia::HomeMobile, v ); }
75 void setHomeWebpage( const QString &v ) { replace( Qtopia::HomeWebPage, v ); } 75 void setHomeWebpage( const QString &v ) { replace( Qtopia::HomeWebPage, v ); }
76 76
77 // business 77 // business
78 void setCompany( const QString &v ) { replace( Qtopia::Company, v ); } 78 void setCompany( const QString &v ) { replace( Qtopia::Company, v ); }
79 void setBusinessStreet( const QString &v ) { replace( Qtopia::BusinessStreet, v ); } 79 void setBusinessStreet( const QString &v ) { replace( Qtopia::BusinessStreet, v ); }
80 void setBusinessCity( const QString &v ) { replace( Qtopia::BusinessCity, v ); } 80 void setBusinessCity( const QString &v ) { replace( Qtopia::BusinessCity, v ); }
81 void setBusinessState( const QString &v ) { replace( Qtopia::BusinessState, v ); } 81 void setBusinessState( const QString &v ) { replace( Qtopia::BusinessState, v ); }
82 void setBusinessZip( const QString &v ) { replace( Qtopia::BusinessZip, v ); } 82 void setBusinessZip( const QString &v ) { replace( Qtopia::BusinessZip, v ); }
83 void setBusinessCountry( const QString &v ) { replace( Qtopia::BusinessCountry, v ); } 83 void setBusinessCountry( const QString &v ) { replace( Qtopia::BusinessCountry, v ); }
84 void setBusinessWebpage( const QString &v ) { replace( Qtopia::BusinessWebPage, v ); } 84 void setBusinessWebpage( const QString &v ) { replace( Qtopia::BusinessWebPage, v ); }
85 void setJobTitle( const QString &v ) { replace( Qtopia::JobTitle, v ); } 85 void setJobTitle( const QString &v ) { replace( Qtopia::JobTitle, v ); }
86 void setDepartment( const QString &v ) { replace( Qtopia::Department, v ); } 86 void setDepartment( const QString &v ) { replace( Qtopia::Department, v ); }
87 void setOffice( const QString &v ) { replace( Qtopia::Office, v ); } 87 void setOffice( const QString &v ) { replace( Qtopia::Office, v ); }
88 void setBusinessPhone( const QString &v ) { replace( Qtopia::BusinessPhone, v ); } 88 void setBusinessPhone( const QString &v ) { replace( Qtopia::BusinessPhone, v ); }
89 void setBusinessFax( const QString &v ) { replace( Qtopia::BusinessFax, v ); } 89 void setBusinessFax( const QString &v ) { replace( Qtopia::BusinessFax, v ); }
90 void setBusinessMobile( const QString &v ) { replace( Qtopia::BusinessMobile, v ); } 90 void setBusinessMobile( const QString &v ) { replace( Qtopia::BusinessMobile, v ); }
91 void setBusinessPager( const QString &v ) { replace( Qtopia::BusinessPager, v ); } 91 void setBusinessPager( const QString &v ) { replace( Qtopia::BusinessPager, v ); }
92 void setProfession( const QString &v ) { replace( Qtopia::Profession, v ); } 92 void setProfession( const QString &v ) { replace( Qtopia::Profession, v ); }
93 void setAssistant( const QString &v ) { replace( Qtopia::Assistant, v ); } 93 void setAssistant( const QString &v ) { replace( Qtopia::Assistant, v ); }
94 void setManager( const QString &v ) { replace( Qtopia::Manager, v ); } 94 void setManager( const QString &v ) { replace( Qtopia::Manager, v ); }
95 95
96 // personal 96 // personal
97 void setSpouse( const QString &v ) { replace( Qtopia::Spouse, v ); } 97 void setSpouse( const QString &v ) { replace( Qtopia::Spouse, v ); }
98 void setGender( const QString &v ) { replace( Qtopia::Gender, v ); } 98 void setGender( const QString &v ) { replace( Qtopia::Gender, v ); }
99 void setBirthday( const QString &v ) { replace( Qtopia::Birthday, v ); } 99 void setBirthday( const QString &v ) { replace( Qtopia::Birthday, v ); }
100 void setAnniversary( const QString &v ) { replace( Qtopia::Anniversary, v ); } 100 void setAnniversary( const QString &v ) { replace( Qtopia::Anniversary, v ); }
101 void setNickname( const QString &v ) { replace( Qtopia::Nickname, v ); } 101 void setNickname( const QString &v ) { replace( Qtopia::Nickname, v ); }
102 void setChildren( const QString &v ); 102 void setChildren( const QString &v );
103 103
104 // other 104 // other
105 void setNotes( const QString &v ) { replace( Qtopia::Notes, v); } 105 void setNotes( const QString &v ) { replace( Qtopia::Notes, v); }
106 106
107 bool match( const QString &regexp ) const; 107 bool match( const QString &regexp ) const;
108 108
109// DON'T ATTEMPT TO USE THIS 109// DON'T ATTEMPT TO USE THIS
110#ifdef QTOPIA_INTERNAL_CONTACT_MRE 110#ifdef QTOPIA_INTERNAL_CONTACT_MRE
111 bool match( const QRegExp &regexp ) const; 111 bool match( const QRegExp &regexp ) const;
112#endif 112#endif
113 113
114// // custom 114// // custom
115// void setCustomField( const QString &key, const QString &v ) 115// void setCustomField( const QString &key, const QString &v )
116// { replace(Custom- + key, v ); } 116// { replace(Custom- + key, v ); }
117 117
118 // name 118 // name
119 QString fullName() const; 119 QString fullName() const;
120 QString title() const { return find( Qtopia::Title ); } 120 QString title() const { return find( Qtopia::Title ); }
121 QString firstName() const { return find( Qtopia::FirstName ); } 121 QString firstName() const { return find( Qtopia::FirstName ); }
122 QString middleName() const { return find( Qtopia::MiddleName ); } 122 QString middleName() const { return find( Qtopia::MiddleName ); }
123 QString lastName() const { return find( Qtopia::LastName ); } 123 QString lastName() const { return find( Qtopia::LastName ); }
124 QString suffix() const { return find( Qtopia::Suffix ); } 124 QString suffix() const { return find( Qtopia::Suffix ); }
125 QString fileAs() const { return find( Qtopia::FileAs ); } 125 QString fileAs() const { return find( Qtopia::FileAs ); }
126 126
127 // email 127 // email
128 QString defaultEmail() const { return find( Qtopia::DefaultEmail ); } 128 QString defaultEmail() const { return find( Qtopia::DefaultEmail ); }
129 QStringList emailList() const; 129 QStringList emailList() const;
130 130
131 // home 131 // home
132 QString homeStreet() const { return find( Qtopia::HomeStreet ); } 132 QString homeStreet() const { return find( Qtopia::HomeStreet ); }
133 QString homeCity() const { return find( Qtopia::HomeCity ); } 133 QString homeCity() const { return find( Qtopia::HomeCity ); }
134 QString homeState() const { return find( Qtopia::HomeState ); } 134 QString homeState() const { return find( Qtopia::HomeState ); }
135 QString homeZip() const { return find( Qtopia::HomeZip ); } 135 QString homeZip() const { return find( Qtopia::HomeZip ); }
136 QString homeCountry() const { return find( Qtopia::HomeCountry ); } 136 QString homeCountry() const { return find( Qtopia::HomeCountry ); }
137 QString homePhone() const { return find( Qtopia::HomePhone ); } 137 QString homePhone() const { return find( Qtopia::HomePhone ); }
138 QString homeFax() const { return find( Qtopia::HomeFax ); } 138 QString homeFax() const { return find( Qtopia::HomeFax ); }
139 QString homeMobile() const { return find( Qtopia::HomeMobile ); } 139 QString homeMobile() const { return find( Qtopia::HomeMobile ); }
140 QString homeWebpage() const { return find( Qtopia::HomeWebPage ); } 140 QString homeWebpage() const { return find( Qtopia::HomeWebPage ); }
141 /** Multi line string containing all non-empty address info in the form 141 /** Multi line string containing all non-empty address info in the form
142 * Street 142 * Street
143 * City, State Zip 143 * City, State Zip
144 * Country 144 * Country
145 */ 145 */
146 QString displayHomeAddress() const; 146 QString displayHomeAddress() const;
147 147
148 // business 148 // business
149 QString company() const { return find( Qtopia::Company ); } 149 QString company() const { return find( Qtopia::Company ); }
150 QString businessStreet() const { return find( Qtopia::BusinessStreet ); } 150 QString businessStreet() const { return find( Qtopia::BusinessStreet ); }
151 QString businessCity() const { return find( Qtopia::BusinessCity ); } 151 QString businessCity() const { return find( Qtopia::BusinessCity ); }
152 QString businessState() const { return find( Qtopia::BusinessState ); } 152 QString businessState() const { return find( Qtopia::BusinessState ); }
153 QString businessZip() const { return find( Qtopia::BusinessZip ); } 153 QString businessZip() const { return find( Qtopia::BusinessZip ); }
154 QString businessCountry() const { return find( Qtopia::BusinessCountry ); } 154 QString businessCountry() const { return find( Qtopia::BusinessCountry ); }
155 QString businessWebpage() const { return find( Qtopia::BusinessWebPage ); } 155 QString businessWebpage() const { return find( Qtopia::BusinessWebPage ); }
156 QString jobTitle() const { return find( Qtopia::JobTitle ); } 156 QString jobTitle() const { return find( Qtopia::JobTitle ); }
157 QString department() const { return find( Qtopia::Department ); } 157 QString department() const { return find( Qtopia::Department ); }
158 QString office() const { return find( Qtopia::Office ); } 158 QString office() const { return find( Qtopia::Office ); }
159 QString businessPhone() const { return find( Qtopia::BusinessPhone ); } 159 QString businessPhone() const { return find( Qtopia::BusinessPhone ); }
160 QString businessFax() const { return find( Qtopia::BusinessFax ); } 160 QString businessFax() const { return find( Qtopia::BusinessFax ); }
161 QString businessMobile() const { return find( Qtopia::BusinessMobile ); } 161 QString businessMobile() const { return find( Qtopia::BusinessMobile ); }
162 QString businessPager() const { return find( Qtopia::BusinessPager ); } 162 QString businessPager() const { return find( Qtopia::BusinessPager ); }
163 QString profession() const { return find( Qtopia::Profession ); } 163 QString profession() const { return find( Qtopia::Profession ); }
164 QString assistant() const { return find( Qtopia::Assistant ); } 164 QString assistant() const { return find( Qtopia::Assistant ); }
165 QString manager() const { return find( Qtopia::Manager ); } 165 QString manager() const { return find( Qtopia::Manager ); }
166 /** Multi line string containing all non-empty address info in the form 166 /** Multi line string containing all non-empty address info in the form
167 * Street 167 * Street
168 * City, State Zip 168 * City, State Zip
169 * Country 169 * Country
170 */ 170 */
171 QString displayBusinessAddress() const; 171 QString displayBusinessAddress() const;
172 172
173 //personal 173 //personal
174 QString spouse() const { return find( Qtopia::Spouse ); } 174 QString spouse() const { return find( Qtopia::Spouse ); }
175 QString gender() const { return find( Qtopia::Gender ); } 175 QString gender() const { return find( Qtopia::Gender ); }
176 QString birthday() const { return find( Qtopia::Birthday ); } 176 QString birthday() const { return find( Qtopia::Birthday ); }
177 QString anniversary() const { return find( Qtopia::Anniversary ); } 177 QString anniversary() const { return find( Qtopia::Anniversary ); }
178 QString nickname() const { return find( Qtopia::Nickname ); } 178 QString nickname() const { return find( Qtopia::Nickname ); }
179 QString children() const { return find( Qtopia::Children ); } 179 QString children() const { return find( Qtopia::Children ); }
180 QStringList childrenList() const; 180 QStringList childrenList() const;
181 181
182 // other 182 // other
183 QString notes() const { return find( Qtopia::Notes ); } 183 QString notes() const { return find( Qtopia::Notes ); }
184 QString groups() const { return find( Qtopia::Groups ); } 184 QString groups() const { return find( Qtopia::Groups ); }
185 QStringList groupList() const; 185 QStringList groupList() const;
186 186
187// // custom 187// // custom
188// const QString &customField( const QString &key ) 188// const QString &customField( const QString &key )
189// { return find( Custom- + key ); } 189// { return find( Custom- + key ); }
190 190
191 static QStringList fields(); 191 static QStringList fields();
192 static QStringList trfields(); 192 static QStringList trfields();
193 193
194 QString toRichText() const; 194 QString toRichText() const;
195 QMap<int, QString> toMap() const; 195 QMap<int, QString> toMap() const;
196 QString field( int key ) const { return find( key ); } 196 QString field( int key ) const { return find( key ); }
197 197
198 198
199 // journaling... 199 // journaling...
200 void saveJournal( journal_action action, const QString &key = QString::null ); 200 void saveJournal( journal_action action, const QString &key = QString::null );
201 void save( QString &buf ) const; 201 void save( QString &buf ) const;
202 202
203 void setUid( int i ) 203 void setUid( int i )
204{ Record::setUid(i); replace( Qtopia::AddressUid , QString::number(i)); } 204{ Record::setUid(i); replace( Qtopia::AddressUid , QString::number(i)); }
205 205
206 QString toShortText()const; 206 QString toShortText()const;
207 QString OContact::type()const; 207 QString OContact::type()const;
208 QMap<QString,QString> OContact::toExtraMap() const; 208 QMap<QString,QString> OContact::toExtraMap() const;
209 class QString OContact::recordField(int) const; 209 class QString OContact::recordField(int) const;
210 210
211 // Why private ? (eilers,se)
212 QString emailSeparator() const { return " "; }
213 // the emails should be seperated by a comma
214 void setEmails( const QString &v );
215 QString emails() const { return find( Qtopia::Emails ); }
216
217
211private: 218private:
212 friend class AbEditor; 219 friend class AbEditor;
213 friend class AbTable; 220 friend class AbTable;
214 friend class AddressBookAccessPrivate; 221 friend class AddressBookAccessPrivate;
215 friend class XMLIO; 222 friend class XMLIO;
216 223
217 QString emailSeparator() const { return " "; }
218 // the emails should be seperated by a comma
219 void setEmails( const QString &v );
220 QString emails() const { return find( Qtopia::Emails ); }
221 224
222 void insert( int key, const QString &value ); 225 void insert( int key, const QString &value );
223 void replace( int key, const QString &value ); 226 void replace( int key, const QString &value );
224 QString find( int key ) const; 227 QString find( int key ) const;
225 228
226 QString displayAddress( const QString &street, 229 QString displayAddress( const QString &street,
227 const QString &city, 230 const QString &city,
228 const QString &state, 231 const QString &state,
229 const QString &zip, 232 const QString &zip,
230 const QString &country ) const; 233 const QString &country ) const;
231 234
232 Qtopia::UidGen &uidGen() { return sUidGen; } 235 Qtopia::UidGen &uidGen() { return sUidGen; }
233 static Qtopia::UidGen sUidGen; 236 static Qtopia::UidGen sUidGen;
234 QMap<int, QString> mMap; 237 QMap<int, QString> mMap;
235 ContactPrivate *d; 238 ContactPrivate *d;
236}; 239};
237 240
238// these methods are inlined to keep binary compatability with Qtopia 1.5 241// these methods are inlined to keep binary compatability with Qtopia 1.5
239inline void OContact::insertEmail( const QString &v ) 242inline void OContact::insertEmail( const QString &v )
240{ 243{
241 //qDebug("insertEmail %s", v.latin1()); 244 //qDebug("insertEmail %s", v.latin1());
242 QString e = v.simplifyWhiteSpace(); 245 QString e = v.simplifyWhiteSpace();
243 QString def = defaultEmail(); 246 QString def = defaultEmail();
244 247
245 // if no default, set it as the default email and don't insert 248 // if no default, set it as the default email and don't insert
246 if ( def.isEmpty() ) { 249 if ( def.isEmpty() ) {
247 setDefaultEmail( e ); // will insert into the list for us 250 setDefaultEmail( e ); // will insert into the list for us
248 return; 251 return;
249 } 252 }
250 253
251 // otherwise, insert assuming doesn't already exist 254 // otherwise, insert assuming doesn't already exist
252 QString emailsStr = find( Qtopia::Emails ); 255 QString emailsStr = find( Qtopia::Emails );
253 if ( emailsStr.contains( e )) 256 if ( emailsStr.contains( e ))
254 return; 257 return;
255 if ( !emailsStr.isEmpty() ) 258 if ( !emailsStr.isEmpty() )
256 emailsStr += emailSeparator(); 259 emailsStr += emailSeparator();
257 emailsStr += e; 260 emailsStr += e;
258 replace( Qtopia::Emails, emailsStr ); 261 replace( Qtopia::Emails, emailsStr );
259} 262}
260 263
261inline void OContact::removeEmail( const QString &v ) 264inline void OContact::removeEmail( const QString &v )
262{ 265{
263 QString e = v.simplifyWhiteSpace(); 266 QString e = v.simplifyWhiteSpace();
264 QString def = defaultEmail(); 267 QString def = defaultEmail();
265 QString emailsStr = find( Qtopia::Emails ); 268 QString emailsStr = find( Qtopia::Emails );
266 QStringList emails = emailList(); 269 QStringList emails = emailList();
267 270
268 // otherwise, must first contain it 271 // otherwise, must first contain it
269 if ( !emailsStr.contains( e ) ) 272 if ( !emailsStr.contains( e ) )
270 return; 273 return;
271 274
272 // remove it 275 // remove it
273 //qDebug(" removing email from list %s", e.latin1()); 276 //qDebug(" removing email from list %s", e.latin1());
274 emails.remove( e ); 277 emails.remove( e );
275 // reset the string 278 // reset the string
276 emailsStr = emails.join(emailSeparator()); // Sharp's brain dead separator 279 emailsStr = emails.join(emailSeparator()); // Sharp's brain dead separator
277 replace( Qtopia::Emails, emailsStr ); 280 replace( Qtopia::Emails, emailsStr );
278 281
279 // if default, then replace the default email with the first one 282 // if default, then replace the default email with the first one
280 if ( def == e ) { 283 if ( def == e ) {
281 //qDebug("removeEmail is default; setting new default"); 284 //qDebug("removeEmail is default; setting new default");
282 if ( !emails.count() ) 285 if ( !emails.count() )
283 clearEmails(); 286 clearEmails();
284 else // setDefaultEmail will remove e from the list 287 else // setDefaultEmail will remove e from the list
285 setDefaultEmail( emails.first() ); 288 setDefaultEmail( emails.first() );
286 } 289 }
287} 290}
288inline void OContact::clearEmails() 291inline void OContact::clearEmails()
289{ 292{
290 mMap.remove( Qtopia::DefaultEmail ); 293 mMap.remove( Qtopia::DefaultEmail );
291 mMap.remove( Qtopia::Emails ); 294 mMap.remove( Qtopia::Emails );
292} 295}
293inline void OContact::setDefaultEmail( const QString &v ) 296inline void OContact::setDefaultEmail( const QString &v )
294{ 297{
295 QString e = v.simplifyWhiteSpace(); 298 QString e = v.simplifyWhiteSpace();
296 299
297 //qDebug("OContact::setDefaultEmail %s", e.latin1()); 300 //qDebug("OContact::setDefaultEmail %s", e.latin1());
298 replace( Qtopia::DefaultEmail, e ); 301 replace( Qtopia::DefaultEmail, e );
299 302
300 if ( !e.isEmpty() ) 303 if ( !e.isEmpty() )
301 insertEmail( e ); 304 insertEmail( e );
302 305
303} 306}
304 307
305inline void OContact::insertEmails( const QStringList &v ) 308inline void OContact::insertEmails( const QStringList &v )
306{ 309{
307 for ( QStringList::ConstIterator it = v.begin(); it != v.end(); ++it ) 310 for ( QStringList::ConstIterator it = v.begin(); it != v.end(); ++it )
308 insertEmail( *it ); 311 insertEmail( *it );
309} 312}
310 313
311#endif 314#endif