Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Enhanced code for IMPP in frmContactEditor and frmContactEditorIM.
[xestiaab/.git] / source / contacteditor / frmContactEditor-Load.cpp
index 1ef92c4..92990a9 100644 (file)
@@ -1,3 +1,21 @@
+// frmContactEditor-Load.cpp - frmContactEditor load contact subroutines.
+//
+// (c) 2012-2015 Xestia Software Development.
+//
+// This file is part of Xestia Address Book.
+//
+// Xestia Address Book is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by the
+// Free Software Foundation, version 3 of the license.
+//
+// Xestia Address Book is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with Xestia Address Book. If not, see <http://www.gnu.org/licenses/>
+
 #include <map>
 
 #include <wx/ffile.h>
@@ -12,6 +30,7 @@
 #include "../vcard/vcard.h"
 #include "../common/textprocessing.h"
 #include "../common/dirs.h"
+#include "cdo/ContactDataObject.h"
 
 bool frmContactEditor::LoadContact(wxString Filename){
 
@@ -21,13 +40,16 @@ bool frmContactEditor::LoadContact(wxString Filename){
        wxString wxSContactString;
        wxString ContactLine;
        vCard ContactData;
-       XABViewMode XVMData = MainPtr->GetViewMode();
+       XABViewMode XVMData;
+       if (StartupEditMode == FALSE){
+               XVMData = MainPtr->GetViewMode();
+       }
        
        wxSContactFilename = Filename;
        
        // Check if we are using wxWidgets version 2.8 or less and
        // execute the required command accordingly.
-       
+/*     
 #if wxABI_VERSION < 20900
        ContactFile.Open(Filename.c_str(), wxT("r"));
 #else
@@ -40,8 +62,10 @@ bool frmContactEditor::LoadContact(wxString Filename){
        
        }
        
-       ContactFile.ReadAll(&wxSContactString, wxConvAuto());
+       ContactEditorData.LoadFile(Filename);
        
+       ContactFile.ReadAll(&wxSContactString, wxConvAuto());
+
        // Split the lines.
        
        std::map<int, wxString> ContactFileLines;
@@ -58,7 +82,41 @@ bool frmContactEditor::LoadContact(wxString Filename){
                ContactLineSeek++;              
        
        }
+*/     
 
+       ContactLoadStatus LoadResult = ContactEditorData.LoadFile(Filename);
+
+       switch(LoadResult){
+       
+               case CONTACTLOAD_OK:
+                       break;
+               case CONTACTLOAD_FILEMISSING:
+                       wxMessageBox(_("The file with the filename given does not exist."),
+                               _("Contact not found"), wxICON_ERROR);
+                       this->Close();
+                       return FALSE;
+                       break;
+               case CONTACTLOAD_FILEERROR:
+                       wxMessageBox(_("The file with the filename given cannot be opened due to an error while trying open it."),
+                               _("Error loading contact"), wxICON_ERROR);
+                       this->Close();
+                       return FALSE;
+                       break;
+               case CONTACTLOAD_FILEINVALIDFORMAT:
+                               wxMessageBox(_("This file is not a vCard 4.0 contact and is not supported under Xestia Address Book."),
+                                       _("Contact not supported"), wxICON_ERROR);
+                       this->Close();
+                       return FALSE;
+                       break;
+               case CONTACTLOAD_FILEBASESPECFAIL:
+                       wxMessageBox(_("This file is not a vCard 4.0 contact and is not supported under Xestia Address Book."),
+                               _("Contact not supported"), wxICON_ERROR);
+                       this->Close();
+                       return FALSE;
+                       break;
+       
+       };
+       
        // Get the line.
 
        bool QuoteMode = FALSE;
@@ -66,15 +124,16 @@ bool frmContactEditor::LoadContact(wxString Filename){
        bool HasExtraNicknames = FALSE;
        bool IgnoreGender = FALSE;
        bool ExtraLineSeek = TRUE;
-       bool BirthdayProcessed = FALSE;
-       bool AnniversaryProcessed = FALSE;
+       //bool BirthdayProcessed = FALSE;
+       //bool AnniversaryProcessed = FALSE;
        bool FNProcessed = FALSE;
        bool GenderProcessed = FALSE;
        bool NameProcessed = FALSE;
-       bool UIDProcessed = FALSE;
-       bool KindProcessed = FALSE;
+       //bool UIDProcessed = FALSE;
+       //bool KindProcessed = FALSE;
        bool ETagFound = FALSE;
        bool ETagOrigFound = FALSE;
+       bool VersionProcessed = FALSE;
        int intExtraNickname = 0;
        wxString wxSProperty;
        wxString wxSPropertySeg1;
@@ -111,7 +170,318 @@ bool frmContactEditor::LoadContact(wxString Filename){
        int XTokenCount = 0;
        //int intValueSeek = 1;
 
-       for (std::map<int,wxString>::iterator iter = ContactFileLines.begin(); 
+       // Process the unique ID (UID)
+       
+       // Do nothing at the moment.
+       
+       // Process the contact type (KIND) (frmContactEditor-LoadGroup.cpp)
+
+       LoadKind(&ContactEditorData.ContactKind);
+
+       // Process the Birthday (BDAY) (frmContactEditor-LoadBADays.cpp)
+       
+       LoadBirthday(&ContactEditorData.Birthday, &ContactEditorData.BirthdayText);
+
+       // Process the Anniversary (ANNIVERSARY) (frmContactEditor-LoadBADays.cpp)
+       
+       LoadAnniversary(&ContactEditorData.Anniversary, &ContactEditorData.AnniversaryText);
+
+       // Process the Gender (GENDER) (frmContactEditor-LoadGender.cpp)
+       
+       LoadGender(&ContactEditorData.Gender, &ContactEditorData.GenderDetails);
+       
+       // Process the Name (N) (frmContactEditor-LoadName.cpp)
+       
+       LoadName(&ContactEditorData.NameTitle, &ContactEditorData.NameForename,
+               &ContactEditorData.NameSurname, &ContactEditorData.NameOtherNames,
+               &ContactEditorData.NameSuffix);
+               
+       // Process the group members (MEMBER) (frmContactEditor-LoadGroup.cpp)
+               
+       LoadMember(&ContactEditorData.GroupsList);
+
+       // Process the addresses (ADR) (frmContactEditor-LoadAddress.cpp)
+       
+       LoadAddress(&ContactEditorData.GeneralAddressList,
+               &ContactEditorData.GeneralAddressListTown,
+               &ContactEditorData.GeneralAddressListCounty,
+               &ContactEditorData.GeneralAddressListPostCode,
+               &ContactEditorData.GeneralAddressListPref,
+               &ContactEditorData.HomeAddressList,
+               &ContactEditorData.HomeAddressListTown,
+               &ContactEditorData.HomeAddressListCounty,
+               &ContactEditorData.HomeAddressListPostCode,
+               &ContactEditorData.HomeAddressListPref,
+               &ContactEditorData.BusinessAddressList,
+               &ContactEditorData.BusinessAddressListTown,
+               &ContactEditorData.BusinessAddressListCounty,
+               &ContactEditorData.BusinessAddressListPostCode,
+               &ContactEditorData.BusinessAddressListPref,
+               &ADRCount);
+
+       // Process the timezones (TZ).
+       
+       LoadData(&ContactEditorData.GeneralTZList,
+               &ContactEditorData.GeneralTZListPref,
+               lboTimezones,
+               &ContactEditorData.HomeTZList,
+               &ContactEditorData.HomeTZListPref,
+               lboHomeTimezones,
+               &ContactEditorData.BusinessTZList,
+               &ContactEditorData.BusinessTZListPref,
+               lboBusinessTimezones,
+               &TZCount);
+               
+       // Process the emails (EMAIL).
+       
+       LoadData(&ContactEditorData.GeneralEmailList,
+               &ContactEditorData.GeneralEmailListPref,
+               lboEmails,
+               &ContactEditorData.HomeEmailList,
+               &ContactEditorData.HomeEmailListPref,
+               lboHomeEmails,
+               &ContactEditorData.BusinessEmailList,
+               &ContactEditorData.BusinessEmailListPref,
+               lboBusinessEmail,
+               &EmailCount);
+
+       // Process the nicknames (NICKNAME).
+       
+       LoadData(&ContactEditorData.GeneralNicknamesList,
+               &ContactEditorData.GeneralNicknamesListPref,
+               lboNicknames,
+               &ContactEditorData.HomeNicknamesList,
+               &ContactEditorData.HomeNicknamesListPref,
+               lboHomeNicknames,
+               &ContactEditorData.BusinessNicknamesList,
+               &ContactEditorData.BusinessNicknamesListPref,
+               lboBusinessNicknames,
+               &NicknameCount);
+               
+       // Process the languages (LANG).
+       
+       LoadData(&ContactEditorData.GeneralLanguageList,
+               &ContactEditorData.GeneralLanguageListPref,
+               lboLanguages,
+               &ContactEditorData.HomeLanguageList,
+               &ContactEditorData.HomeLanguageListPref,
+               lboHomeLanguages,
+               &ContactEditorData.BusinessLanguageList,
+               &ContactEditorData.BusinessLanguageListPref,
+               lboBusinessLanguages,
+               &LangCount);
+               
+       // Process the geopositiosn (GEO).
+       
+       LoadData(&ContactEditorData.GeneralGeographyList,
+               &ContactEditorData.GeneralGeographyListPref,
+               lboGeoposition,
+               &ContactEditorData.HomeGeographyList,
+               &ContactEditorData.HomeGeographyListPref,
+               lboHomeGeoposition,
+               &ContactEditorData.BusinessGeographyList,
+               &ContactEditorData.BusinessGeographyListPref,
+               lboBusinessGeoposition,
+               &GeoCount);
+               
+       // Process the websites (URL).
+       
+       LoadData(&ContactEditorData.GeneralWebsiteList,
+               &ContactEditorData.GeneralWebsiteListPref,
+               lboWebsites,
+               &ContactEditorData.HomeWebsiteList,
+               &ContactEditorData.HomeWebsiteListPref,
+               lboHomeWebsites,
+               &ContactEditorData.BusinessWebsiteList,
+               &ContactEditorData.BusinessWebsiteListPref,
+               lboBusinessWebsites,
+               &URLCount);
+
+       // Process the titles (TITLE).
+       
+       LoadData(&ContactEditorData.GeneralTitleList,
+               &ContactEditorData.GeneralTitleListPref,
+               lboTitles,
+               &ContactEditorData.HomeTitleList,
+               &ContactEditorData.HomeTitleListPref,
+               lboHomeTitles,
+               &ContactEditorData.BusinessTitleList,
+               &ContactEditorData.BusinessTitleListPref,
+               lboBusinessTitles,
+               &TitleCount);
+               
+       // Process the roles (ROLE).
+       
+       LoadData(&ContactEditorData.GeneralRoleList,
+               &ContactEditorData.GeneralRoleListPref,
+               lboRoles,
+               &ContactEditorData.HomeRoleList,
+               &ContactEditorData.HomeRoleListPref,
+               lboHomeRoles,
+               &ContactEditorData.BusinessRoleList,
+               &ContactEditorData.BusinessRoleListPref,
+               lboBusinessRoles,
+               &RoleCount);
+
+       // Process the roles (ORG).
+       
+       LoadData(&ContactEditorData.GeneralOrganisationsList,
+               &ContactEditorData.GeneralOrganisationsListPref,
+               lboOrganisations,
+               &ContactEditorData.HomeOrganisationsList,
+               &ContactEditorData.HomeOrganisationsListPref,
+               lboHomeOrganisations,
+               &ContactEditorData.BusinessOrganisationsList,
+               &ContactEditorData.BusinessOrganisationsListPref,
+               lboBusinessOrganisations,
+               &OrgCount);
+               
+       // Process the notes (NOTE).
+               
+       LoadData(&ContactEditorData.GeneralNoteList,
+               &ContactEditorData.GeneralNoteListPref,
+               lboNotes,
+               &ContactEditorData.HomeNoteList,
+               &ContactEditorData.HomeNoteListPref,
+               lboHomeNotes,
+               &ContactEditorData.BusinessNoteList,
+               &ContactEditorData.BusinessNoteListPref,
+               lboBusinessNotes,
+               &NoteCount);
+               
+       // Process the categories (CATEGORIES).
+
+       LoadData(&ContactEditorData.CategoriesList,
+               &ContactEditorData.CategoriesListPref,
+               lboCategories,
+               &CategoryCount);
+               
+       // Process the telephone numbers (TEL).
+       
+       LoadData(&ContactEditorData.GeneralTelephoneList,
+               &ContactEditorData.GeneralTelephoneListPref,
+               &ContactEditorData.GeneralTelephoneListTypeInfo,
+               lboTelephone,
+               &ContactEditorData.HomeTelephoneList,
+               &ContactEditorData.HomeTelephoneListPref,
+               &ContactEditorData.HomeTelephoneListTypeInfo,
+               lboHomeTelephone,
+               &ContactEditorData.BusinessTelephoneList,
+               &ContactEditorData.BusinessTelephoneListPref,
+               &ContactEditorData.BusinessTelephoneListTypeInfo,
+               lboBusinessTelephone,
+               &TelCount);
+
+       // Process the instant messaging (IMPP).
+       
+       LoadData(&ContactEditorData.GeneralIMListTypeInfo,
+               &ContactEditorData.GeneralIMListPref,
+               &ContactEditorData.GeneralIMList,
+               lboIM,
+               &ContactEditorData.HomeIMListTypeInfo,
+               &ContactEditorData.HomeIMListPref,
+               &ContactEditorData.HomeIMList,
+               lboHomeIM,
+               &ContactEditorData.BusinessIMListTypeInfo,
+               &ContactEditorData.BusinessIMListPref,
+               &ContactEditorData.BusinessIMList,
+               lboBusinessIM,
+               &IMPPCount);
+
+       // Process the photos (PHOTO).
+       
+       LoadPictureData("PHOTO", 
+               &ContactEditorData.PicturesList,
+               &ContactEditorData.PicturesListPref,
+               &ContactEditorData.PicturesListType,
+               lboPictures,
+               &PhotoCount);
+               
+       // Process the logos (LOGO).
+       
+       LoadPictureData("LOGO", 
+               &ContactEditorData.LogosList,
+               &ContactEditorData.LogosListPref,
+               &ContactEditorData.LogosListType,
+               lboLogos,
+               &LogoCount);
+               
+       // Process the sounds (SOUND).
+       
+       LoadPictureData("SOUND", 
+               &ContactEditorData.SoundsList,
+               &ContactEditorData.SoundsListPref,
+               &ContactEditorData.SoundsListType,
+               lboSounds,
+               &SoundCount);
+
+       // Process the calendar addresses (CALURI).
+       
+       LoadData("CALURI", 
+               &ContactEditorData.CalendarList,
+               &ContactEditorData.CalendarListPref,
+               &ContactEditorData.CalendarListType,
+               NULL,
+               lboCalendarAddresses,
+               &CalAdrCount);
+               
+       // Process the calendar request addresses (CALADRURI).
+       
+       LoadData("CALADRURI", 
+               &ContactEditorData.CalendarRequestList,
+               &ContactEditorData.CalendarRequestListPref,
+               &ContactEditorData.CalendarRequestListType,
+               NULL,
+               lboCalendarRequestAddress,
+               &CalReqAdrCount);
+
+       // Process the free busy addresses (FBURL).
+       
+       LoadData("FBURL", 
+               &ContactEditorData.FreeBusyList,
+               &ContactEditorData.FreeBusyListPref,
+               &ContactEditorData.FreeBusyListType,
+               NULL,
+               lboFreeBusyAddresses,
+               &FreeBusyCount);
+               
+       // Process the keys. (KEY)
+       
+       LoadData("KEY",
+               &ContactEditorData.KeyList,
+               &ContactEditorData.KeyListPref,
+               &ContactEditorData.KeyListType,
+               &ContactEditorData.KeyListDataType,
+               lboKeys,
+               &KeyCount);
+               
+       // Process the vendor specific information (VND-*).
+       
+       LoadVendorData(&ContactEditorData.VendorListPEN,
+               &ContactEditorData.VendorListElement,
+               lboVendorNamespace,
+               &VendorCount);
+       
+       // Process the X-Tokens (X-*).
+
+       LoadXTokenData(&ContactEditorData.XTokenListTokens,
+               lboXToken,
+               &XTokenCount);
+       
+       // Process the related people (RELATED).
+       
+       LoadRelatedData(&ContactEditorData.GeneralRelatedList,
+               &ContactEditorData.GeneralRelatedListPref,
+               &ContactEditorData.GeneralRelatedListType,
+               lboRelated,
+               &RelatedCount);
+               
+       // Process the full name (FN).
+       
+       LoadData(&ContactEditorData.FullNamesList,
+               cmbDisplayAs);
+
+       /*for (std::map<int,wxString>::iterator iter = ContactFileLines.begin(); 
         iter != ContactFileLines.end(); ++iter){
        
                // Find the colon which splits the start bit from the data part.
@@ -198,13 +568,27 @@ bool frmContactEditor::LoadContact(wxString Filename){
                
                // Add the data into the contact editor depending on what it is.                                
                
-               if (wxSProperty == wxT("KIND") && KindProcessed == FALSE){
+               if (wxSProperty == wxT("VERSION") && VersionProcessed == FALSE){
+               
+                       // Check if version is 4.0, otherwise don't
+                       // load.
+                       
+                       if (wxSPropertySeg2 != wxT("4.0")){
+                               wxMessageBox(_("This file is not a vCard 4.0 contact and is not supported under Xestia Address Book."),
+                                       _("Contact not supported"), wxICON_ERROR);
+                               this->Close();
+                               return FALSE;
+                       }
+                       
+                       VersionProcessed = TRUE;
+               
+               }/* if (wxSProperty == wxT("KIND") && KindProcessed == FALSE){
                
                        // See frmContactEditor-LoadGroup.cpp
                
                        LoadKind(wxSPropertySeg2);
                
-               } else if (wxSProperty == wxT("MEMBER")){
+               }/* else if (wxSProperty == wxT("MEMBER")){
 
                        // See frmContactEditor-LoadGroup.cpp
 
@@ -252,7 +636,7 @@ bool frmContactEditor::LoadContact(wxString Filename){
                
                        LoadTimeZone(wxSPropertySeg1, wxSPropertySeg2, &TZCount);       
                
-               } else if (wxSProperty == wxT("ADR")){
+               }  else if (wxSProperty == wxT("ADR")){
                        
                        // See frmContactEditor-LoadAddress.cpp
                
@@ -270,7 +654,7 @@ bool frmContactEditor::LoadContact(wxString Filename){
                
                        LoadIM(wxSPropertySeg1, wxSPropertySeg2, &IMPPCount);
                
-               } else if (wxSProperty == wxT("TEL")){
+               }/* else if (wxSProperty == wxT("TEL")){
                
                        // See frmContactEditor-LoadTelephone.cpp
                
@@ -460,7 +844,7 @@ bool frmContactEditor::LoadContact(wxString Filename){
                ContactLine.Clear();
                wxSProperty.Clear();    
        
-       }
+       }*/
        
        FMTimer.SetFilename(Filename);
        FMTimer.Start(10000, FALSE);
@@ -519,4 +903,1107 @@ void frmContactEditor::SplitValues(wxString *PropertyLine,
 
        }
 
+}
+
+void frmContactEditor::LoadData(std::map<int, wxString> *GeneralList,
+               std::map<int, int> *GeneralListPref,
+               wxListCtrl *GeneralListCtrl,
+               std::map<int, wxString> *HomeList,
+               std::map<int, int> *HomeListPref,
+               wxListCtrl *HomeListCtrl,
+               std::map<int, wxString> *BusinessList,
+               std::map<int, int> *BusinessListPref,
+               wxListCtrl *BusinessListCtrl,
+               int *DataCount){
+
+       long ListCtrlIndex = -1;
+
+       // Deal with the general items.
+       
+       for (std::map<int,wxString>::iterator Iter = GeneralList->begin();
+               Iter != GeneralList->end();
+               Iter++){
+       
+               wxListItem coldata;
+
+               coldata.SetId(*DataCount);
+               coldata.SetData(*DataCount);
+               coldata.SetText(Iter->second);
+               
+               ListCtrlIndex = GeneralListCtrl->InsertItem(coldata);
+
+               if (MapDataExists(DataCount, GeneralListPref)){
+               
+                       GeneralListCtrl->SetItem(ListCtrlIndex, 1, wxString::Format("%i", GeneralListPref->find(*DataCount)->second));
+               
+               }
+       
+               (*DataCount)++;
+       
+       }
+       
+       // Deal with the home items.
+       
+       for (std::map<int,wxString>::iterator Iter = HomeList->begin();
+               Iter != HomeList->end();
+               Iter++){
+       
+               wxListItem coldata;
+
+               coldata.SetId(*DataCount);
+               coldata.SetData(*DataCount);
+               coldata.SetText(Iter->second);
+               
+               ListCtrlIndex = HomeListCtrl->InsertItem(coldata);
+
+               if (MapDataExists(DataCount, HomeListPref)){
+               
+                       HomeListCtrl->SetItem(ListCtrlIndex, 1, wxString::Format("%i", HomeListPref->find(*DataCount)->second));
+               
+               }
+       
+               (*DataCount)++;
+       
+       }
+       
+       // Deal with the work items.
+       
+       for (std::map<int,wxString>::iterator Iter = BusinessList->begin();
+               Iter != BusinessList->end();
+               Iter++){
+       
+               wxListItem coldata;
+
+               coldata.SetId(*DataCount);
+               coldata.SetData(*DataCount);
+               coldata.SetText(Iter->second);
+               
+               ListCtrlIndex = BusinessListCtrl->InsertItem(coldata);
+                               
+               if (MapDataExists(DataCount, BusinessListPref)){
+               
+                       BusinessListCtrl->SetItem(ListCtrlIndex, 1, wxString::Format("%i", BusinessListPref->find(*DataCount)->second));
+               
+               }
+       
+               (*DataCount)++;
+       
+       }
+
+}
+
+void frmContactEditor::LoadData(std::map<int, wxString> *GeneralList,
+               std::map<int, int> *GeneralListPref,
+               std::map<int, wxString> *GeneralListType,
+               wxListCtrl *GeneralListCtrl,
+               std::map<int, wxString> *HomeList,
+               std::map<int, int> *HomeListPref,
+               std::map<int, wxString> *HomeListType,
+               wxListCtrl *HomeListCtrl,
+               std::map<int, wxString> *BusinessList,
+               std::map<int, int> *BusinessListPref,
+               std::map<int, wxString> *BusinessListType,
+               wxListCtrl *BusinessListCtrl,
+               int *DataCount){
+
+       long ListCtrlIndex = -1;
+
+       // Deal with the general items.
+       
+       for (std::map<int,wxString>::iterator Iter = GeneralList->begin();
+               Iter != GeneralList->end();
+               Iter++){
+       
+               wxListItem coldata;
+
+               coldata.SetId(*DataCount);
+               coldata.SetData(*DataCount);
+               coldata.SetText(Iter->second);
+               
+               ListCtrlIndex = GeneralListCtrl->InsertItem(coldata);
+
+               if (MapDataExists(DataCount, GeneralListPref)){
+               
+                       GeneralListCtrl->SetItem(ListCtrlIndex, 2, wxString::Format("%i", GeneralListPref->find(*DataCount)->second));
+               
+               }
+       
+               if (MapDataExists(DataCount, GeneralListType)){
+               
+                       GeneralListCtrl->SetItem(ListCtrlIndex, 1, GeneralListType->find(*DataCount)->second);
+               
+               }
+       
+               (*DataCount)++;
+       
+       }
+       
+       // Deal with the home items.
+       
+       for (std::map<int,wxString>::iterator Iter = HomeList->begin();
+               Iter != HomeList->end();
+               Iter++){
+       
+               wxListItem coldata;
+
+               coldata.SetId(*DataCount);
+               coldata.SetData(*DataCount);
+               coldata.SetText(Iter->second);
+               
+               ListCtrlIndex = HomeListCtrl->InsertItem(coldata);
+
+               if (MapDataExists(DataCount, HomeListPref)){
+               
+                       HomeListCtrl->SetItem(ListCtrlIndex, 2, wxString::Format("%i", HomeListPref->find(*DataCount)->second));
+               
+               }
+               
+               if (MapDataExists(DataCount, HomeListType)){
+               
+                       HomeListCtrl->SetItem(ListCtrlIndex, 1, HomeListType->find(*DataCount)->second);
+               
+               }
+       
+               (*DataCount)++;
+       
+       }
+       
+       // Deal with the work items.
+       
+       for (std::map<int,wxString>::iterator Iter = BusinessList->begin();
+               Iter != BusinessList->end();
+               Iter++){
+       
+               wxListItem coldata;
+
+               coldata.SetId(*DataCount);
+               coldata.SetData(*DataCount);
+               coldata.SetText(Iter->second);
+               
+               ListCtrlIndex = BusinessListCtrl->InsertItem(coldata);
+                               
+               if (MapDataExists(DataCount, BusinessListPref)){
+               
+                       BusinessListCtrl->SetItem(ListCtrlIndex, 2, wxString::Format("%i", BusinessListPref->find(*DataCount)->second));
+               
+               }
+               
+               if (MapDataExists(DataCount, BusinessListType)){
+               
+                       BusinessListCtrl->SetItem(ListCtrlIndex, 1, BusinessListType->find(*DataCount)->second);
+               
+               }
+       
+               (*DataCount)++;
+       
+       }
+
+}
+
+
+void frmContactEditor::LoadData(std::map<int,wxString> *ItemList,
+               std::map<int,int> *ItemListPref,
+               wxListCtrl *ItemCtrl,
+               int *DataCount){
+
+       long ListCtrlIndex = -1;
+
+       for (std::map<int,wxString>::iterator Iter = ItemList->begin();
+               Iter != ItemList->end();
+               Iter++){
+       
+               wxListItem coldata;
+
+               coldata.SetId(*DataCount);
+               coldata.SetData(*DataCount);
+               coldata.SetText(Iter->second);
+               
+               ListCtrlIndex = ItemCtrl->InsertItem(coldata);
+                               
+               if (MapDataExists(DataCount, ItemListPref)){
+               
+                       ItemCtrl->SetItem(ListCtrlIndex, 1, wxString::Format("%i", ItemListPref->find(*DataCount)->second));
+               
+               }
+       
+               (*DataCount)++;
+       
+       }
+
+}
+
+void frmContactEditor::LoadData(std::map<int,wxString> *ItemList,
+               std::map<int,int> *ItemListPref,
+               std::map<int,wxString> *ItemListType,
+               wxListCtrl *ItemCtrl,
+               int *DataCount){
+
+       long ListCtrlIndex = -1;
+
+       for (std::map<int,wxString>::iterator Iter = ItemList->begin();
+               Iter != ItemList->end();
+               Iter++){
+       
+               wxListItem coldata;
+
+               coldata.SetId(*DataCount);
+               coldata.SetData(*DataCount);
+               coldata.SetText(Iter->second);
+               
+               ListCtrlIndex = ItemCtrl->InsertItem(coldata);
+                               
+               if (MapDataExists(DataCount, ItemListType)){
+               
+                       ItemCtrl->SetItem(ListCtrlIndex, 1, ItemListType->find(*DataCount)->second);
+               
+               }
+                               
+               if (MapDataExists(DataCount, ItemListPref)){
+               
+                       ItemCtrl->SetItem(ListCtrlIndex, 2, wxString::Format("%i", ItemListPref->find(*DataCount)->second));
+               
+               }
+       
+               (*DataCount)++;
+       
+       }
+
+}
+
+void frmContactEditor::LoadData(wxString ItemName,
+               std::map<int,wxString> *ItemList,
+               std::map<int,int> *ItemListPref,
+               std::map<int,wxString> *ItemListType,
+               std::map<int,wxString> *ItemListDataType,
+               wxListCtrl *ItemCtrl,
+               int *DataCount){
+
+       long ListCtrlIndex = -1;
+
+       for (std::map<int,wxString>::iterator Iter = ItemList->begin();
+               Iter != ItemList->end();
+               Iter++){
+       
+               wxListItem coldata;
+
+               coldata.SetId(*DataCount);
+               coldata.SetData(*DataCount);
+               coldata.SetText(Iter->second);
+
+               if (ItemName == "KEY"){
+
+                       // Get the key type, if any.
+
+                       if (MapDataExists(DataCount, ItemListDataType)){
+               
+                               if (ItemListDataType->find(*DataCount)->second == "application/pgp-keys"){
+                               
+                                       coldata.SetText(_("PGP Key"));
+                               
+                               }
+               
+                       } else {
+                       
+                               coldata.SetText(_("Key"));
+                       
+                       }
+               
+               
+               }
+               
+               ListCtrlIndex = ItemCtrl->InsertItem(coldata);
+               
+               if (MapDataExists(DataCount, ItemListType)){
+               
+                       if (ItemListType->find(*DataCount)->second == "home"){
+                       
+                               ItemCtrl->SetItem(ListCtrlIndex, 1, _("Home"));
+                       
+                       } else if (ItemListType->find(*DataCount)->second == "work"){
+                       
+                               ItemCtrl->SetItem(ListCtrlIndex, 1, _("Work"));
+                       
+                       }
+                               
+               }
+                       
+               if (MapDataExists(DataCount, ItemListPref)){
+               
+                       ItemCtrl->SetItem(ListCtrlIndex, 2, wxString::Format("%i", ItemListPref->find(*DataCount)->second));
+               
+               }
+       
+               (*DataCount)++;
+       
+       }
+
+}
+
+void frmContactEditor::LoadPictureData(wxString ItemName, 
+               std::map<int,std::string> *ItemList,
+               std::map<int,int> *ItemListPref,
+               std::map<int,wxString> *ItemListType,
+               wxListCtrl *ItemCtrl,
+               int *DataCount){
+
+       long ListCtrlIndex = -1;
+
+       for (std::map<int,std::string>::iterator Iter = ItemList->begin();
+               Iter != ItemList->end();
+               Iter++){
+       
+               wxListItem coldata;
+
+               coldata.SetId(*DataCount);
+               coldata.SetData(*DataCount);
+               
+               if (ItemName == "PHOTO"){
+               
+                       coldata.SetText("Picture");
+               
+               } else if (ItemName == "LOGO"){
+
+                       coldata.SetText("Logo");
+               
+               } else if (ItemName == "SOUND"){
+               
+                       coldata.SetText("Sound");               
+               
+               } else {
+               
+                       coldata.SetText("Object");
+               
+               }
+                               
+               ListCtrlIndex = ItemCtrl->InsertItem(coldata);
+                                                               
+               if (MapDataExists(DataCount, ItemListType)){
+               
+                       if (ItemListType->find(*DataCount)->second == "home"){
+                       
+                               ItemCtrl->SetItem(ListCtrlIndex, 1, _("Home"));
+                       
+                       } else if (ItemListType->find(*DataCount)->second == "work"){
+                       
+                               ItemCtrl->SetItem(ListCtrlIndex, 1, _("Work"));
+                       
+                       }
+                               
+               }
+                               
+               if (MapDataExists(DataCount, ItemListPref)){
+               
+                       ItemCtrl->SetItem(ListCtrlIndex, 2, wxString::Format("%i", ItemListPref->find(*DataCount)->second));
+               
+               }
+       
+               (*DataCount)++;
+       
+       }
+
+}
+
+void frmContactEditor::LoadVendorData(std::map<int,wxString> *ItemListPEN,
+               std::map<int,wxString> *ItemListElement,
+               wxListCtrl *ItemCtrl,
+               int *DataCount){
+               
+       long ListCtrlIndex = -1;
+       wxString ItemValue;
+
+       for (std::map<int,wxString>::iterator Iter = ItemListPEN->begin();
+               Iter != ItemListPEN->end();
+               Iter++){
+                       
+               ItemValue.clear();
+                       
+               wxListItem coldata;
+
+               coldata.SetId(*DataCount);
+               coldata.SetData(*DataCount);
+                                                       
+               ItemValue.Append(ItemListPEN->find(*DataCount)->second);
+               ItemValue.Append("-");
+               ItemValue.Append(ItemListElement->find(*DataCount)->second);
+                               
+               coldata.SetText(ItemValue);
+                               
+               ListCtrlIndex = ItemCtrl->InsertItem(coldata);
+               
+               (*DataCount)++;
+               
+       }
+               
+}
+
+void frmContactEditor::LoadXTokenData(std::map<int,wxString> *ItemListTokens,
+               wxListCtrl *ItemCtrl,
+               int *DataCount){
+       
+       long ListCtrlIndex = -1;
+       wxString ItemValue;
+
+       for (std::map<int,wxString>::iterator Iter = ItemListTokens->begin();
+               Iter != ItemListTokens->end();
+               Iter++){
+                       
+               ItemValue.clear();
+                       
+               wxListItem coldata;
+
+               coldata.SetId(*DataCount);
+               coldata.SetData(*DataCount);
+                                                       
+               ItemValue.Append(ItemListTokens->find(*DataCount)->second);
+               
+               coldata.SetText(ItemValue);
+                               
+               ListCtrlIndex = ItemCtrl->InsertItem(coldata);
+               
+               (*DataCount)++;
+               
+       }
+               
+}
+
+void frmContactEditor::LoadData(std::map<int,wxString> *ItemList,
+               wxComboBox *ItemCtrl){
+
+       int ItemIndex = 0;
+
+       if (MapDataExists(&ItemIndex, ItemList)){
+       
+               cmbDisplayAs->SetValue(ItemList->find(0)->second);
+       
+       }
+               
+}
+
+void frmContactEditor::LoadRelatedData(std::map<int,wxString> *ItemList,
+               std::map<int,int> *ItemListPref,
+               std::map<int,wxString> *ItemListType,
+               wxListCtrl *ItemCtrl,
+               int *DataCount){
+
+       long ListCtrlIndex = -1;
+       wxString RelatedType;
+
+       for (std::map<int,wxString>::iterator Iter = ItemList->begin();
+               Iter != ItemList->end();
+               Iter++){
+       
+               RelatedType.clear();
+       
+               wxListItem coldata;
+
+               coldata.SetId(*DataCount);
+               coldata.SetData(*DataCount);
+       
+               if (MapDataExists(DataCount, ItemListType)){
+               
+                       std::map<int,wxString>::iterator TypeIter = ItemListType->find(*DataCount);
+               
+                       if (TypeIter->second == wxT("contact")){
+
+                               RelatedType = _("Contact");
+
+                       } else if (TypeIter->second == wxT("acquaintance")){
+
+                               RelatedType = _("Acquaintance");
+
+                       } else if (TypeIter->second == wxT("friend")){
+
+                               RelatedType = _("Friend");
+
+                       } else if (TypeIter->second == wxT("met")){
+
+                               RelatedType = _("Met");
+
+                       } else if (TypeIter->second == wxT("co-worker")){
+
+                               RelatedType = _("Co-worker");
+
+                       } else if (TypeIter->second == wxT("colleague")){
+
+                               RelatedType = _("Colleague");
+
+                       } else if (TypeIter->second == wxT("co-resident")){
+
+                               RelatedType = _("Co-resident");
+
+                       } else if (TypeIter->second == wxT("neighbor")){
+
+                               RelatedType = _("Neighbour");
+
+                       } else if (TypeIter->second == wxT("child")){
+
+                               RelatedType = _("Child");
+
+                       } else if (TypeIter->second == wxT("parent")){
+
+                               RelatedType = _("Parent");
+
+                       } else if (TypeIter->second == wxT("sibling")){
+
+                               RelatedType = _("Sibling");
+
+                       } else if (TypeIter->second == wxT("spouse")){
+
+                               RelatedType = _("Spouse");
+
+                       } else if (TypeIter->second == wxT("kin")){
+
+                               RelatedType = _("Kin");
+
+                       } else if (TypeIter->second == wxT("muse")){
+
+                               RelatedType = _("Muse");
+
+                       } else if (TypeIter->second == wxT("crush")){
+
+                               RelatedType = _("Crush");
+
+                       } else if (TypeIter->second == wxT("date")){
+
+                               RelatedType = _("Date");
+
+                       } else if (TypeIter->second == wxT("sweetheart")){
+
+                               RelatedType = _("Sweetheart");
+
+                       } else if (TypeIter->second == wxT("me")){
+
+                               RelatedType = _("Me");
+
+                       } else if (TypeIter->second == wxT("agent")){
+
+                               RelatedType = _("Agent");
+
+                       } else if (TypeIter->second == wxT("emergency")){
+
+                               RelatedType = _("Emergency");
+
+                       } else {
+
+                               RelatedType = TypeIter->second;
+
+                       }
+               
+               }
+               
+               coldata.SetText(RelatedType);
+                               
+               ListCtrlIndex = ItemCtrl->InsertItem(coldata);
+
+               if (MapDataExists(DataCount, ItemList)){
+               
+                       ItemCtrl->SetItem(ListCtrlIndex, 1, ItemList->find(*DataCount)->second);
+               
+               }
+
+               if (MapDataExists(DataCount, ItemListPref)){
+               
+                       ItemCtrl->SetItem(ListCtrlIndex, 2, wxString::Format("%i", ItemListPref->find(*DataCount)->second));
+               
+               }
+       
+               (*DataCount)++;
+               
+       }
+               
+}
+
+void frmContactEditor::LoadKind(ContactKindType *KindType){
+
+       switch (*KindType){
+               case CONTACTKIND_INDIVIDUAL:
+                       cmbType->SetSelection(1);
+                       break;
+               case CONTACTKIND_GROUP:
+                       cmbType->SetSelection(2);
+                       break;
+               case CONTACTKIND_ORGANISATION:
+                       cmbType->SetSelection(3);
+                       break;
+               case CONTACTKIND_LOCATION:
+                       cmbType->SetSelection(4);
+                       break;
+               case CONTACTKIND_NONE:
+                       cmbType->SetSelection(0);
+                       break;
+       }
+                       
+       wxCommandEvent nullevent;
+                       
+       UpdateMembersTab(nullevent);
+
+}
+
+void frmContactEditor::LoadBirthday(wxString *BirthdayData, bool *BirthdayText){
+
+       if (BirthdayData->IsEmpty()){
+           return;
+       }
+  
+       if (*BirthdayText == FALSE){
+       
+               int DateYear = 0;
+               wxDateTime::Month DateMonth;
+               unsigned int DateDay;
+               
+               wxString wxSData;
+               
+               if (BirthdayData->Mid(0, 2) == wxT("--")){
+               
+                       // Skip year.
+               
+               } else {
+               
+                       DateYear = wxAtoi(BirthdayData->Mid(0,4));
+               
+               }
+               
+               DateMonth = (wxDateTime::Month)(wxAtoi(BirthdayData->Mid(4,2)) - 1);
+               DateDay = wxAtoi(BirthdayData->Mid(6,2));
+       
+               wxDateTime BDayDate(DateDay,DateMonth,DateYear);
+       
+               dapBirthday->SetValue(BDayDate);                                
+       
+       } else {
+       
+               txtBirthday->SetValue(*BirthdayData);
+       
+       }
+
+}
+
+void frmContactEditor::LoadAnniversary(wxString *AnniversaryData, bool *AnniversaryText){
+
+       if (AnniversaryData->IsEmpty()){
+           return;
+       }
+  
+       if (*AnniversaryText == FALSE){
+       
+               int DateYear = 0;
+               wxDateTime::Month DateMonth;
+               int DateDay;
+               
+               wxString wxSData;
+               
+               if (AnniversaryData->Mid(0, 2) == wxT("--")){
+               
+                       // Skip year.
+               
+               } else {
+               
+                       DateYear = wxAtoi(AnniversaryData->Mid(0,4));
+               
+               }
+               
+               DateMonth = (wxDateTime::Month)(wxAtoi(AnniversaryData->Mid(4,2)) - 1);
+               DateDay = wxAtoi(AnniversaryData->Mid(6,2));                                    
+       
+               wxDateTime ADayDate(DateDay,DateMonth,DateYear);
+       
+               dapAnniversary->SetValue(ADayDate);
+       
+       } else {
+       
+               txtAnniversary->SetValue(*AnniversaryData);
+       
+       }
+
+}
+
+void frmContactEditor::LoadGender(wxString *GenderComponent, wxString *GenderIdentity){
+
+       // Deal with the Gender Component.
+       
+       if (*GenderComponent == wxT("M")){
+               
+               // Gender is Male.
+                       
+               cmbGender->SetSelection(1);
+               
+       } else if (*GenderComponent == wxT("F")){
+               
+               // Gender is Female.
+                       
+               cmbGender->SetSelection(2);                                     
+               
+       } else if (*GenderComponent == wxT("O")){
+               
+               // Gender is Other.
+                       
+               cmbGender->SetSelection(3);
+               
+       } else if (*GenderComponent == wxT("N")){
+               
+               // Gender is None/Not Applicable.
+               
+               cmbGender->SetSelection(4);                                     
+               
+       } else if (*GenderComponent == wxT("U")){
+               
+               // Gender is Unknown.
+                       
+               cmbGender->SetSelection(5);                                     
+               
+       }
+       
+       // Deal with the Gender Identity.
+
+       txtGenderDescription->SetValue(*GenderIdentity);
+
+}
+
+void frmContactEditor::LoadName(wxString *NameTitle, wxString *NameForename,
+       wxString *NameSurname, wxString *NameOtherNames, 
+       wxString *NameSuffix){
+
+       txtTitle->SetValue(*NameTitle); 
+       txtForename->SetValue(*NameForename);
+       txtSurname->SetValue(*NameSurname);
+       txtOtherNames->SetValue(*NameOtherNames);
+       txtSuffix->SetValue(*NameSuffix);
+       
+}
+
+void frmContactEditor::LoadMember(std::map<int,wxString> *GroupList){
+
+       // Go through the list of contacts for the account and find the matching UID.
+       // If contact with UID doesn't match then say (unknown contact).
+
+       XABViewMode XVMData;
+       if (StartupEditMode == FALSE){
+               XVMData = MainPtr->GetViewMode();
+       }
+       
+       wxString AccountDirFinal = GetAccountDir(wxSContactAccount, FALSE);
+
+       //wxString vcardfilenamewxs;
+       wxString vCardFilename;
+       wxString vCardFilenameFull;
+       wxString vCardDataString;
+       //wxStringTokenizer vcardfileline;
+       wxString lwxs;
+       wxString setname, setvalue;
+       wxString MemberData;
+       bool FoundContact = FALSE;
+       //vCardNames = new std::map<wxString, wxString, std::greater<wxString>>;
+       std::multimap<wxString, wxString, std::greater<wxString>> vCardNamesAsc;
+       std::multimap<wxString, wxString, std::less<wxString>> vCardNamesDsc;
+
+       wxDir vcardaccdir(AccountDirFinal);
+
+       for (std::map<int,wxString>::iterator MemberIter = GroupList->begin();
+               MemberIter != GroupList->end();
+               MemberIter++){
+               
+               MemberData = MemberIter->second;
+               
+               bool ProcFiles = vcardaccdir.GetFirst(&vCardFilename, wxEmptyString, wxDIR_FILES);
+               while(ProcFiles){
+
+                       if (vCardFilename.Right(4) == wxT(".vcf") || 
+                           vCardFilename.Right(4) == wxT(".VCF") || 
+                           vCardFilename.Right(5) == wxT(".vcard") || 
+                           vCardFilename.Right(5) == wxT(".VCARD")){
+
+                           vCard Person;
+
+                           vCardFilenameFull.Append(AccountDirFinal);
+                           vCardFilenameFull.Append(wxT("/"));
+                           vCardFilenameFull.Append(vCardFilename);
+
+                           Person.LoadFile(vCardFilenameFull);
+
+                           if (MemberData.Left(9) == wxT("urn:uuid:")){
+
+                               wxString NewPropValue;
+                               NewPropValue = MemberData.Mid(9, wxString::npos);
+                               MemberData = NewPropValue;
+
+                           }
+
+                           if (Person.MeetBaseSpecification()){
+
+                               wxString KindStatus = Person.Get(wxT("KIND"));
+
+                               if (KindStatus == wxT("group")){
+
+                                       vCardFilename.Clear();
+                                       vCardFilenameFull.Clear();
+                                       vCardDataString.Clear();
+                                       ProcFiles = vcardaccdir.GetNext(&vCardFilename);
+                                       continue;
+
+                               }
+
+                               wxString PersonName = Person.Get(wxT("N"));
+                               wxString PersonUID = Person.Get(wxT("UID"));
+                               wxString PersonFilename = vCardFilenameFull;
+                       
+                               if (PersonUID != MemberData){
+                       
+                                       vCardFilename.Clear();
+                                       vCardFilenameFull.Clear();
+                                       vCardDataString.Clear();
+                                       ProcFiles = vcardaccdir.GetNext(&vCardFilename);
+                                       continue;
+                       
+                               } else {
+                                       FoundContact = TRUE;
+                               }
+
+                               //ContactsNames.insert(std::make_pair(PersonName, ContactIndex));
+                               //ContactsUIDs.insert(std::make_pair(ContactIndex, PersonUID));
+
+                               if (XVMData.SortMode == 1){
+
+                                   // Split the name into sections.
+       
+                                   vCardDataString = Person.Get(wxT("N"));
+
+                                   vCardName NameData = Person.GetName();
+    
+                                   vCardDataString = NameData.Forename + wxT(" ") + NameData.Surname;
+    
+                               } else if (XVMData.SortMode == 2){
+    
+                                   // Split the name into sections.
+    
+                                   vCardName NameData = Person.GetName();    
+    
+                                   vCardDataString = NameData.Surname + wxT(", ") + NameData.Forename;
+    
+                               } else if (XVMData.SortMode == 3){
+    
+                                   // Check and make sure that the top most nickname is used.
+    
+                                   vCardDataString = Person.Get(wxT("NICKNAME"));
+    
+                                   if (vCardDataString.IsEmpty()){
+       
+                                       vCardDataString = wxT("(no nickname)");
+       
+                                   }
+    
+                               } else if (XVMData.SortMode == 4){
+    
+                                   vCardDataString = Person.Get(wxT("FN"));
+    
+                               }
+
+                               if (XVMData.AscendingMode == TRUE){
+                                   vCardNamesAsc.insert(std::make_pair(vCardDataString, PersonUID));
+                               } else {
+                                   vCardNamesDsc.insert(std::make_pair(vCardDataString, PersonUID));
+                               }
+
+                           } else {
+
+                           }
+
+
+
+                       }
+
+                       vCardFilename.Clear();
+                       vCardFilenameFull.Clear();
+                       vCardDataString.Clear();
+                       ProcFiles = vcardaccdir.GetNext(&vCardFilename);
+
+                   }
+                   
+                   if (FoundContact == FALSE){
+                       if (XVMData.AscendingMode == TRUE){
+                           vCardNamesAsc.insert(std::make_pair(MemberIter->second, MemberIter->second));
+                       } else {
+                           vCardNamesDsc.insert(std::make_pair(MemberIter->second, MemberIter->second));
+                       }
+                   }
+
+                   if (XVMData.AscendingMode == TRUE){
+
+                       for (std::map<wxString,wxString>::iterator iter = vCardNamesAsc.begin(); 
+                       iter != vCardNamesAsc.end(); ++iter){
+
+                               wxListItem ItemData;
+                       
+                               ItemData.SetId(0);
+                               ItemData.SetText(iter->first);
+       
+                               lboGroups->InsertItem(ItemData);
+
+                       }
+
+
+                   } else {
+
+                       for (std::map<wxString,wxString>::iterator iter = vCardNamesDsc.begin(); 
+                       iter != vCardNamesDsc.end(); ++iter){
+
+                               wxListItem ItemData;
+                       
+                               ItemData.SetId(0);
+                               ItemData.SetText(iter->first);
+       
+                               lboGroups->InsertItem(ItemData);
+
+                   }
+
+               }
+       
+       }
+       
+}
+
+void frmContactEditor::LoadAddress(std::map<int, wxString> *GeneralAddressList,
+       std::map<int, wxString> *GeneralAddressListTown,
+       std::map<int, wxString> *GeneralAddressListCounty,
+       std::map<int, wxString> *GeneralAddressListPostCode,
+       std::map<int, int> *GeneralAddressListPref,
+       std::map<int, wxString> *HomeAddressList,
+       std::map<int, wxString> *HomeAddressListTown,
+       std::map<int, wxString> *HomeAddressListCounty,
+       std::map<int, wxString> *HomeAddressListPostCode,
+       std::map<int, int> *HomeAddressListPref,
+       std::map<int, wxString> *BusinessAddressList,
+       std::map<int, wxString> *BusinessAddressListTown,
+       std::map<int, wxString> *BusinessAddressListCounty,
+       std::map<int, wxString> *BusinessAddressListPostCode,
+       std::map<int, int> *BusinessAddressListPref, 
+       int *AddressCount){
+
+       long ListCtrlIndex = -1;
+
+       // Deal with the general addresses.
+       
+       for (std::map<int,wxString>::iterator Iter = GeneralAddressList->begin();
+               Iter != GeneralAddressList->end();
+               Iter++){
+       
+               wxListItem coldata;
+
+               coldata.SetId(*AddressCount);
+               coldata.SetData(*AddressCount);
+               coldata.SetText(Iter->second);
+               
+               ListCtrlIndex = lboAddresses->InsertItem(coldata);
+               
+               if (MapDataExists(AddressCount, GeneralAddressListTown)){
+               
+                       lboAddresses->SetItem(ListCtrlIndex, 1, GeneralAddressListTown->find(*AddressCount)->second);
+               
+               }
+
+               if (MapDataExists(AddressCount, GeneralAddressListCounty)){
+               
+                       lboAddresses->SetItem(ListCtrlIndex, 2, GeneralAddressListCounty->find(*AddressCount)->second);
+               
+               }
+               
+               if (MapDataExists(AddressCount, GeneralAddressListPostCode)){
+               
+                       lboAddresses->SetItem(ListCtrlIndex, 3, GeneralAddressListPostCode->find(*AddressCount)->second);
+               
+               }
+               
+               if (MapDataExists(AddressCount, GeneralAddressListPref)){
+               
+                       lboAddresses->SetItem(ListCtrlIndex, 4, wxString::Format("%i", GeneralAddressListPref->find(*AddressCount)->second));
+               
+               }
+       
+               (*AddressCount)++;
+       
+       }
+       
+       // Deal with the home addresses.
+       
+       for (std::map<int,wxString>::iterator Iter = HomeAddressList->begin();
+               Iter != HomeAddressList->end();
+               Iter++){
+       
+               wxListItem coldata;
+
+               coldata.SetId(*AddressCount);
+               coldata.SetData(*AddressCount);
+               coldata.SetText(Iter->second);
+               
+               ListCtrlIndex = lboHomeAddresses->InsertItem(coldata);
+               
+               if (MapDataExists(AddressCount, HomeAddressListTown)){
+               
+                       lboHomeAddresses->SetItem(ListCtrlIndex, 1, HomeAddressListTown->find(*AddressCount)->second);
+               
+               }
+
+               if (MapDataExists(AddressCount, HomeAddressListCounty)){
+               
+                       lboHomeAddresses->SetItem(ListCtrlIndex, 2, HomeAddressListCounty->find(*AddressCount)->second);
+               
+               }
+               
+               if (MapDataExists(AddressCount, HomeAddressListPostCode)){
+               
+                       lboHomeAddresses->SetItem(ListCtrlIndex, 3, HomeAddressListPostCode->find(*AddressCount)->second);
+               
+               }
+               
+               if (MapDataExists(AddressCount, HomeAddressListPref)){
+               
+                       lboHomeAddresses->SetItem(ListCtrlIndex, 4, wxString::Format("%i", HomeAddressListPref->find(*AddressCount)->second));
+               
+               }
+       
+               (*AddressCount)++;
+       
+       }
+       
+       // Deal with the work addresses.
+       
+       for (std::map<int,wxString>::iterator Iter = BusinessAddressList->begin();
+               Iter != BusinessAddressList->end();
+               Iter++){
+       
+               wxListItem coldata;
+
+               coldata.SetId(*AddressCount);
+               coldata.SetData(*AddressCount);
+               coldata.SetText(Iter->second);
+               
+               ListCtrlIndex = lboBusinessAddresses->InsertItem(coldata);
+               
+               if (MapDataExists(AddressCount, BusinessAddressListTown)){
+               
+                       lboBusinessAddresses->SetItem(ListCtrlIndex, 1, BusinessAddressListTown->find(*AddressCount)->second);
+               
+               }
+
+               if (MapDataExists(AddressCount, BusinessAddressListCounty)){
+               
+                       lboBusinessAddresses->SetItem(ListCtrlIndex, 2, BusinessAddressListCounty->find(*AddressCount)->second);
+               
+               }
+               
+               if (MapDataExists(AddressCount, BusinessAddressListPostCode)){
+               
+                       lboBusinessAddresses->SetItem(ListCtrlIndex, 3, BusinessAddressListPostCode->find(*AddressCount)->second);
+               
+               }
+               
+               if (MapDataExists(AddressCount, BusinessAddressListPref)){
+               
+                       lboBusinessAddresses->SetItem(ListCtrlIndex, 4, wxString::Format("%i", BusinessAddressListPref->find(*AddressCount)->second));
+               
+               }
+       
+               (*AddressCount)++;
+       
+       }
+
 }
\ No newline at end of file
Xestia Software Development
Yn Maystri
© 2006 - 2019 Xestia Software Development
Software

Xestia Address Book
Xestia Calendar
Development

Xestia Gelforn
Everything else

About
News
Privacy Policy