+// 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>
#include "../vcard/vcard.h"
#include "../common/textprocessing.h"
#include "../common/dirs.h"
+#include "cdo/ContactDataObject.h"
bool frmContactEditor::LoadContact(wxString 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
}
- ContactFile.ReadAll(&wxSContactString, wxConvAuto());
+ ContactEditorData.LoadFile(Filename);
+ ContactFile.ReadAll(&wxSContactString, wxConvAuto());
+
// Split the lines.
std::map<int, wxString> ContactFileLines;
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;
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 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.
// Check if version is 4.0, otherwise don't
// load.
- wxPuts(wxSPropertySeg2);
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);
VersionProcessed = TRUE;
- } if (wxSProperty == wxT("KIND") && KindProcessed == FALSE){
+ }/* 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
LoadTimeZone(wxSPropertySeg1, wxSPropertySeg2, &TZCount);
- } else if (wxSProperty == wxT("ADR")){
+ } else if (wxSProperty == wxT("ADR")){
// See frmContactEditor-LoadAddress.cpp
LoadIM(wxSPropertySeg1, wxSPropertySeg2, &IMPPCount);
- } else if (wxSProperty == wxT("TEL")){
+ }/* else if (wxSProperty == wxT("TEL")){
// See frmContactEditor-LoadTelephone.cpp
ContactLine.Clear();
wxSProperty.Clear();
- }
+ }*/
FMTimer.SetFilename(Filename);
FMTimer.Start(10000, FALSE);
}
+}
+
+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