1 #include "frmContactEditor.h"
3 void frmContactEditor::LoadADR(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *ADRCount){
5 size_t intPropertyLen = wxSPropertySeg1.Len();
6 std::map<int, int> SplitPoints;
7 std::map<int, int> SplitLength;
8 std::map<int, int>::iterator SLiter;
10 wxString PropertyName;
11 wxString PropertyValue;
12 wxString PropertyTokens;
13 wxString AddressLabel;
15 wxString AddressAltID;
17 wxString AddressTokens;
19 wxString AddressTimezone;
21 wxString AddressMediatype;
22 wxString AddressPOBox;
23 wxString AddressExtended;
24 wxString AddressStreet;
25 wxString AddressLocality;
27 wxString AddressRegion;
28 wxString AddressPostalCode;
29 wxString AddressCountry;
30 bool FirstToken = TRUE;
31 int intSplitsFound = 0;
38 SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
42 // Look for type before continuing.
44 for (std::map<int, int>::iterator intiter = SplitPoints.begin();
45 intiter != SplitPoints.end(); ++intiter){
47 SLiter = SplitLength.find(intiter->first);
49 PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
51 wxStringTokenizer PropertyElement (PropertyData, wxT("="));
52 PropertyName = PropertyElement.GetNextToken();
53 PropertyValue = PropertyElement.GetNextToken();
55 intPrevValue = intiter->second;
57 if (PropertyName == wxT("TYPE")){
59 if (PropertyValue == wxT("work")){
63 } else if (PropertyValue == wxT("home")){
77 // Setup blank lines for later on.
81 GeneralAddressList.insert(std::make_pair(intValueSeek, wxT("")));
82 GeneralAddressListTown.insert(std::make_pair(intValueSeek, wxT("")));
83 GeneralAddressListCounty.insert(std::make_pair(intValueSeek, wxT("")));
84 GeneralAddressListPostCode.insert(std::make_pair(intValueSeek, wxT("")));
85 GeneralAddressListCountry.insert(std::make_pair(intValueSeek, wxT("")));
86 GeneralAddressListLabel.insert(std::make_pair(intValueSeek, wxT("")));
87 GeneralAddressListLang.insert(std::make_pair(intValueSeek, wxT("")));
88 GeneralAddressListAltID.insert(std::make_pair(intValueSeek, wxT("")));
89 GeneralAddressListPID.insert(std::make_pair(intValueSeek, wxT("")));
90 GeneralAddressListGeo.insert(std::make_pair(intValueSeek, wxT("")));
91 GeneralAddressListTimezone.insert(std::make_pair(intValueSeek, wxT("")));
92 GeneralAddressListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
93 GeneralAddressListPref.insert(std::make_pair(intValueSeek, 0));
94 GeneralAddressListTokens.insert(std::make_pair(intValueSeek, wxT("")));
96 } else if (intType == 1){
98 HomeAddressList.insert(std::make_pair(intValueSeek, wxT("")));
99 HomeAddressListTown.insert(std::make_pair(intValueSeek, wxT("")));
100 HomeAddressListCounty.insert(std::make_pair(intValueSeek, wxT("")));
101 HomeAddressListPostCode.insert(std::make_pair(intValueSeek, wxT("")));
102 HomeAddressListCountry.insert(std::make_pair(intValueSeek, wxT("")));
103 HomeAddressListLabel.insert(std::make_pair(intValueSeek, wxT("")));
104 HomeAddressListLang.insert(std::make_pair(intValueSeek, wxT("")));
105 HomeAddressListAltID.insert(std::make_pair(intValueSeek, wxT("")));
106 HomeAddressListPID.insert(std::make_pair(intValueSeek, wxT("")));
107 HomeAddressListGeo.insert(std::make_pair(intValueSeek, wxT("")));
108 HomeAddressListTimezone.insert(std::make_pair(intValueSeek, wxT("")));
109 HomeAddressListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
110 HomeAddressListPref.insert(std::make_pair(intValueSeek, 0));
111 HomeAddressListTokens.insert(std::make_pair(intValueSeek, wxT("")));
113 } else if (intType == 2){
115 BusinessAddressList.insert(std::make_pair(intValueSeek, wxT("")));
116 BusinessAddressListTown.insert(std::make_pair(intValueSeek, wxT("")));
117 BusinessAddressListCounty.insert(std::make_pair(intValueSeek, wxT("")));
118 BusinessAddressListPostCode.insert(std::make_pair(intValueSeek, wxT("")));
119 BusinessAddressListCountry.insert(std::make_pair(intValueSeek, wxT("")));
120 BusinessAddressListLabel.insert(std::make_pair(intValueSeek, wxT("")));
121 BusinessAddressListLang.insert(std::make_pair(intValueSeek, wxT("")));
122 BusinessAddressListAltID.insert(std::make_pair(intValueSeek, wxT("")));
123 BusinessAddressListPID.insert(std::make_pair(intValueSeek, wxT("")));
124 BusinessAddressListGeo.insert(std::make_pair(intValueSeek, wxT("")));
125 BusinessAddressListTimezone.insert(std::make_pair(intValueSeek, wxT("")));
126 BusinessAddressListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
127 BusinessAddressListPref.insert(std::make_pair(intValueSeek, 0));
128 BusinessAddressListTokens.insert(std::make_pair(intValueSeek, wxT("")));
134 for (std::map<int, int>::iterator intiter = SplitPoints.begin();
135 intiter != SplitPoints.end(); ++intiter){
137 SLiter = SplitLength.find(intiter->first);
139 PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
141 wxStringTokenizer PropertyElement (PropertyData, wxT("="));
142 PropertyName = PropertyElement.GetNextToken();
143 PropertyValue = PropertyElement.GetNextToken();
145 intPrevValue = intiter->second;
147 ProcessCaptureStrings(&PropertyValue);
149 // Process properties.
151 if (PropertyName == wxT("LABEL")){
153 if (intType == 0){ GeneralAddressListLabel.erase(intValueSeek); GeneralAddressListLabel.insert(std::make_pair(intValueSeek, PropertyValue)); }
154 else if (intType == 1){ HomeAddressListLabel.erase(intValueSeek); HomeAddressListLabel.insert(std::make_pair(intValueSeek, PropertyValue)); }
155 else if (intType == 2){ BusinessAddressListLabel.erase(intValueSeek); BusinessAddressListLabel.insert(std::make_pair(intValueSeek, PropertyValue));}
157 } else if (PropertyName == wxT("LANGUAGE")){
159 if (intType == 0){ GeneralAddressListLang.erase(intValueSeek); GeneralAddressListLang.insert(std::make_pair(intValueSeek, PropertyValue)); }
160 else if (intType == 1){ HomeAddressListLang.erase(intValueSeek); HomeAddressListLang.insert(std::make_pair(intValueSeek, PropertyValue)); }
161 else if (intType == 2){ BusinessAddressListLang.erase(intValueSeek); BusinessAddressListLang.insert(std::make_pair(intValueSeek, PropertyValue)); }
163 } else if (PropertyName == wxT("ALTID")){
165 if (intType == 0){ GeneralAddressListAltID.erase(intValueSeek); GeneralAddressListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
166 else if (intType == 1){ HomeAddressListAltID.erase(intValueSeek); HomeAddressListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
167 else if (intType == 2){ BusinessAddressListAltID.erase(intValueSeek); BusinessAddressListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
169 } else if (PropertyName == wxT("PID")){
171 if (intType == 0){ GeneralAddressListPID.erase(intValueSeek); GeneralAddressListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
172 else if (intType == 1){ HomeAddressListPID.erase(intValueSeek); HomeAddressListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
173 else if (intType == 2){ BusinessAddressListPID.erase(intValueSeek); BusinessAddressListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
175 } else if (PropertyName == wxT("GEO")){
177 if (intType == 0){ GeneralAddressListGeo.erase(intValueSeek); GeneralAddressListGeo.insert(std::make_pair(intValueSeek, PropertyValue)); }
178 else if (intType == 1){ HomeAddressListGeo.erase(intValueSeek); HomeAddressListGeo.insert(std::make_pair(intValueSeek, PropertyValue)); }
179 else if (intType == 2){ BusinessAddressListGeo.erase(intValueSeek); BusinessAddressListGeo.insert(std::make_pair(intValueSeek, PropertyValue)); }
181 } else if (PropertyName == wxT("TZ")){
183 if (intType == 0){ GeneralAddressListTimezone.erase(intValueSeek); GeneralAddressListTimezone.insert(std::make_pair(intValueSeek, PropertyValue)); }
184 else if (intType == 1){ HomeAddressListTimezone.erase(intValueSeek); HomeAddressListTimezone.insert(std::make_pair(intValueSeek, PropertyValue)); }
185 else if (intType == 2){ BusinessAddressListTimezone.erase(intValueSeek); BusinessAddressListTimezone.insert(std::make_pair(intValueSeek, PropertyValue)); }
187 } else if (PropertyName == wxT("MEDIATYPE")){
189 if (intType == 0){ GeneralAddressListMediatype.erase(intValueSeek); GeneralAddressListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
190 else if (intType == 1){ HomeAddressListMediatype.erase(intValueSeek); HomeAddressListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
191 else if (intType == 2){ BusinessAddressListMediatype.erase(intValueSeek); BusinessAddressListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
193 } else if (PropertyName == wxT("PREF")){
195 intPref = wxAtoi(PropertyValue);
197 if (intPref > 0 && intPref < 101){
199 if (intType == 0){ GeneralAddressListPref.erase(intValueSeek); GeneralAddressListPref.insert(std::make_pair(intValueSeek, intPref)); }
200 else if (intType == 1){ HomeAddressListPref.erase(intValueSeek); HomeAddressListPref.insert(std::make_pair(intValueSeek, intPref)); }
201 else if (intType == 2){ BusinessAddressListPref.erase(intValueSeek); BusinessAddressListPref.insert(std::make_pair(intValueSeek, intPref)); }
207 if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
209 if (FirstToken == TRUE){
211 PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
216 PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
226 // Split the address.
228 //std::map<int, int>::iterator SLiter;
229 intPropertyLen = wxSPropertySeg2.Len();
236 for (int i = 0; i <= intPropertyLen; i++){
240 if (wxSPropertySeg2.Mid(i, 1) == wxT(";") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
243 SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
245 if (intSplitsFound == 6){
247 SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
252 SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
262 // Split the data into several parts.
264 for (std::map<int, int>::iterator intiter = SplitPoints.begin();
265 intiter != SplitPoints.end(); ++intiter){
267 if (intiter->first == 1){
271 SLiter = SplitLength.find(1);
273 //txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
274 AddressPOBox = wxSPropertySeg2.Mid(0, SLiter->second);
275 intPrevValue = intiter->second;
277 } else if (intiter->first == 2){
279 // Deal with extended address.
281 SLiter = SplitLength.find(2);
283 AddressExtended = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
284 //txtForename->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
285 intPrevValue = intiter->second;
287 } else if (intiter->first == 3){
289 // Deal with street address.
291 SLiter = SplitLength.find(3);
293 AddressStreet = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
294 //txtOtherNames->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
295 intPrevValue = intiter->second;
297 } else if (intiter->first == 4){
299 // Deal with locality
301 SLiter = SplitLength.find(4);
303 AddressLocality = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
304 //txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
305 intPrevValue = intiter->second;
307 //txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE));
309 } else if (intiter->first == 5){
313 SLiter = SplitLength.find(5);
315 AddressRegion = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
316 //txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
317 intPrevValue = intiter->second;
319 //txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE));
321 } else if (intiter->first == 6){
323 // Deal with post code.
325 SLiter = SplitLength.find(6);
327 AddressPostalCode = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
328 //txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
329 intPrevValue = intiter->second;
331 // Deal with country.
333 AddressCountry = wxSPropertySeg2.Mid(intPrevValue);
334 //txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE));
340 // Add the data to the General/Home/Work address variables.
342 ProcessCaptureStrings(&AddressStreet, &AddressLocality, &AddressRegion, &AddressPostalCode, &AddressCountry);
346 coldata.SetId(intValueSeek);
347 coldata.SetData(intValueSeek);
348 coldata.SetText(AddressStreet);
352 ListCtrlIndex = lboAddresses->InsertItem(coldata);
353 lboAddresses->SetItem(ListCtrlIndex, 1, AddressLocality);
354 lboAddresses->SetItem(ListCtrlIndex, 2, AddressRegion);
355 lboAddresses->SetItem(ListCtrlIndex, 3, AddressPostalCode);
357 if (intPref > 0 && intPref < 101){
359 lboAddresses->SetItem(ListCtrlIndex, 4, wxString::Format(wxT("%i"), intPref));
363 GeneralAddressList.erase(intValueSeek);
364 GeneralAddressListTown.erase(intValueSeek);
365 GeneralAddressListCounty.erase(intValueSeek);
366 GeneralAddressListPostCode.erase(intValueSeek);
367 GeneralAddressListCountry.erase(intValueSeek);
368 GeneralAddressListType.erase(intValueSeek);
369 GeneralAddressListTokens.erase(intValueSeek);
370 GeneralAddressList.insert(std::make_pair(intValueSeek, AddressStreet));
371 GeneralAddressListTown.insert(std::make_pair(intValueSeek, AddressLocality));
372 GeneralAddressListCounty.insert(std::make_pair(intValueSeek, AddressRegion));
373 GeneralAddressListPostCode.insert(std::make_pair(intValueSeek, AddressPostalCode));
374 GeneralAddressListCountry.insert(std::make_pair(intValueSeek, AddressCountry));
375 GeneralAddressListType.insert(std::make_pair(intValueSeek, wxT("")));
376 GeneralAddressListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
378 } else if (intType == 1){
380 ListCtrlIndex = lboHomeAddresses->InsertItem(coldata);
381 lboHomeAddresses->SetItem(ListCtrlIndex, 1, AddressLocality);
382 lboHomeAddresses->SetItem(ListCtrlIndex, 2, AddressRegion);
383 lboHomeAddresses->SetItem(ListCtrlIndex, 3, AddressPostalCode);
385 if (intPref > 0 && intPref < 101){
387 lboHomeAddresses->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
391 HomeAddressList.erase(intValueSeek);
392 HomeAddressListTown.erase(intValueSeek);
393 HomeAddressListCounty.erase(intValueSeek);
394 HomeAddressListPostCode.erase(intValueSeek);
395 HomeAddressListCountry.erase(intValueSeek);
396 HomeAddressListType.erase(intValueSeek);
397 HomeAddressListTokens.erase(intValueSeek);
398 HomeAddressList.insert(std::make_pair(intValueSeek, AddressStreet));
399 HomeAddressListTown.insert(std::make_pair(intValueSeek, AddressLocality));
400 HomeAddressListCounty.insert(std::make_pair(intValueSeek, AddressRegion));
401 HomeAddressListPostCode.insert(std::make_pair(intValueSeek, AddressPostalCode));
402 HomeAddressListCountry.insert(std::make_pair(intValueSeek, AddressCountry));
403 HomeAddressListType.insert(std::make_pair(intValueSeek, wxT("home")));
404 HomeAddressListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
406 } else if (intType == 2){
408 ListCtrlIndex = lboBusinessAddresses->InsertItem(coldata);
409 lboBusinessAddresses->SetItem(ListCtrlIndex, 1, AddressLocality);
410 lboBusinessAddresses->SetItem(ListCtrlIndex, 2, AddressRegion);
411 lboBusinessAddresses->SetItem(ListCtrlIndex, 3, AddressPostalCode);
413 if (intPref > 0 && intPref < 101){
415 lboBusinessAddresses->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
419 BusinessAddressList.erase(intValueSeek);
420 BusinessAddressListTown.erase(intValueSeek);
421 BusinessAddressListCounty.erase(intValueSeek);
422 BusinessAddressListPostCode.erase(intValueSeek);
423 BusinessAddressListCountry.erase(intValueSeek);
424 BusinessAddressListType.erase(intValueSeek);
425 BusinessAddressListTokens.erase(intValueSeek);
426 BusinessAddressList.insert(std::make_pair(intValueSeek, AddressStreet));
427 BusinessAddressListTown.insert(std::make_pair(intValueSeek, AddressLocality));
428 BusinessAddressListCounty.insert(std::make_pair(intValueSeek, AddressRegion));
429 BusinessAddressListPostCode.insert(std::make_pair(intValueSeek, AddressPostalCode));
430 BusinessAddressListCountry.insert(std::make_pair(intValueSeek, AddressCountry));
431 BusinessAddressListType.insert(std::make_pair(intValueSeek, wxT("work")));
432 BusinessAddressListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));