9 #include <wx/tokenzr.h>
10 #include <wx/mstream.h>
11 #include <wx/fs_mem.h>
12 #include <wx/datetime.h>
14 #include <SFML/Audio.hpp>
16 #include "frmContactEditor.h"
17 #include "frmContactEditorNickname.h"
18 #include "frmContactEditorAddress.h"
19 #include "frmContactEditorEmail.h"
20 #include "frmContactEditorIM.h"
21 #include "frmContactEditorTelephone.h"
22 #include "frmContactEditorLanguages.h"
23 #include "frmContactEditorTimezones.h"
24 #include "frmContactEditorRelated.h"
25 #include "frmContactEditorWebsites.h"
26 #include "frmContactEditorTitles.h"
27 #include "frmContactEditorRoles.h"
28 #include "frmContactEditorGeoposition.h"
29 #include "frmContactEditorGroups.h"
31 #include "frmContactEditorOrganisations.h"
32 #include "frmContactEditorNotes.h"
33 #include "frmContactEditorCategory.h"
34 #include "frmContactEditorSound.h"
35 #include "frmContactEditorPicture.h"
36 #include "frmContactEditorCalAdr.h"
37 #include "frmContactEditorKey.h"
38 #include "frmContactEditorVendor.h"
39 #include "frmContactEditorXToken.h"
40 #include "../frmMain.h"
43 #include "../version.h"
44 #include "../vcard/vcard.h"
45 #include "../vcard/vcard34conv.h"
46 #include "../bitmaps.h"
47 #include "../common/base64.h"
48 #include "../common/textprocessing.h"
49 #include "../common/preferences.h"
50 #include "../common/uuid.h"
51 #include "../common/dirs.h"
53 #define CE_NICKNAME wxT("Nickname")
54 #define CE_ADDRESS wxT("Address")
55 #define CE_EMAIL wxT("Email")
56 #define CE_IM wxT("IM")
57 #define CE_TELEPHONE wxT("Telephone")
58 #define CE_LANG wxT("Languages")
59 #define CE_TZ wxT("Timezone")
60 #define CE_RELATED wxT("Related")
61 #define CE_WEBSITE wxT("Websites")
62 #define CE_TITLE wxT("Titles")
63 #define CE_GEOPOSITION wxT("Geoposition")
64 #define CE_ROLE wxT("Roles")
65 #define CE_ORG wxT("Organisations")
66 #define CE_NOTE wxT("Notes")
67 #define CE_CATEGORIES wxT("Categories")
68 #define CE_GROUPS wxT("Groups")
69 #define CE_PICTURES wxT("Pictures")
70 #define CE_SOUNDS wxT("Sounds")
71 #define CE_CALENDAR wxT("Calendar")
72 #define CE_KEY wxT("Key")
73 #define CE_TOKEN wxT("Token")
75 // TODO: Investigate problems with SFML & PulseAudio - CPU usage problems when
78 // Replace intResult with intValueSeek.
80 BEGIN_EVENT_TABLE(frmContactEditor, wxFrame)
81 EVT_COMMAND(wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, frmContactEditor::ContactFileChanged)
84 frmContactEditor::frmContactEditor( wxWindow* parent )
86 frmContactEditorADT( parent )
88 boolContactModified = FALSE;
90 dapAnniversary->SetValue(NoDate);
91 dapBirthday->SetValue(NoDate);
96 wxMemoryInputStream istream(buttons_play_png, sizeof(buttons_play_png));
97 wxImage button_play_pngi(istream, wxBITMAP_TYPE_PNG);
98 wxBitmap playiconbmp(button_play_pngi, -1);
99 btnPlay->SetBitmapLabel(playiconbmp);
101 wxMemoryInputStream istream2(buttons_stop_png, sizeof(buttons_stop_png));
102 wxImage button_stop_pngi(istream2, wxBITMAP_TYPE_PNG);
103 wxBitmap stopiconbmp(button_stop_pngi, -1);
104 btnStop->SetBitmapLabel(stopiconbmp);
106 FMTimer.SetupPointers(this);
107 //wxIcon contacticon;
108 //contacticon.CopyFromBitmap(contacticonbmp);
112 void frmContactEditor::AddGeneralNickname( wxCommandEvent& event )
116 frmContactEditorNickname *frameCENickname = new frmContactEditorNickname ( this );
117 frameCENickname->SetEditorMode(FALSE, CE_GENERAL);
118 intResult = GetLastInt(&GeneralNicknamesList);
119 frameCENickname->SetupPointers(&GeneralNicknamesList,
120 &GeneralNicknamesListAltID,
121 &GeneralNicknamesListPID,
122 &GeneralNicknamesListType,
123 &GeneralNicknamesListLanguage,
124 &GeneralNicknamesListTokens,
125 &GeneralNicknamesListPref,
128 frameCENickname->ShowModal();
129 delete frameCENickname;
130 frameCENickname = NULL;
133 void frmContactEditor::ModifyGeneralNickname( wxCommandEvent& event )
136 long longSelected = -1;
137 int intSelectedData = 0;
139 if (!GetSelectedItem(lboNicknames,
145 frmContactEditorNickname *frameCENickname = new frmContactEditorNickname ( this );
146 frameCENickname->SetupPointers(&GeneralNicknamesList,
147 &GeneralNicknamesListAltID,
148 &GeneralNicknamesListPID,
149 &GeneralNicknamesListType,
150 &GeneralNicknamesListLanguage,
151 &GeneralNicknamesListTokens,
152 &GeneralNicknamesListPref,
155 frameCENickname->SetEditorMode(TRUE, CE_GENERAL);
156 frameCENickname->ShowModal();
157 delete frameCENickname;
158 frameCENickname = NULL;
162 void frmContactEditor::DeleteGeneralNickname( wxCommandEvent& event )
165 long longSelected = -1;
166 int intSelectedData = 0;
168 if (!GetSelectedItem(lboNicknames,
174 lboNicknames->DeleteItem(longSelected);
176 DeleteMapData(intSelectedData,
177 &GeneralNicknamesList,
178 &GeneralNicknamesListLanguage,
179 &GeneralNicknamesListAltID,
180 &GeneralNicknamesListPID,
181 &GeneralNicknamesListTokens,
182 &GeneralNicknamesListType,
183 &GeneralNicknamesListPref);
187 void frmContactEditor::AddGeneralAddress( wxCommandEvent& event )
192 frmContactEditorAddress *frameCEAddress = new frmContactEditorAddress ( this );
193 frameCEAddress->SetEditorMode(FALSE, CE_GENERAL);
194 intResult = GetLastInt(&GeneralAddressList);
195 frameCEAddress->SetupPointers(&GeneralAddressList,
196 &GeneralAddressListTown,
197 &GeneralAddressListCounty,
198 &GeneralAddressListPostCode,
199 &GeneralAddressListCountry,
200 &GeneralAddressListLabel,
201 &GeneralAddressListLang,
202 &GeneralAddressListAltID,
203 &GeneralAddressListPID,
204 &GeneralAddressListTokens,
205 &GeneralAddressListGeo,
206 &GeneralAddressListTimezone,
207 &GeneralAddressListType,
208 &GeneralAddressListMediatype,
209 &GeneralAddressListPref,
212 frameCEAddress->ShowModal();
213 delete frameCEAddress;
214 frameCEAddress = NULL;
217 void frmContactEditor::ModifyGeneralAddress( wxCommandEvent& event )
220 long longSelected = -1;
221 int intSelectedData = 0;
223 if (!GetSelectedItem(lboAddresses,
229 if (longSelected == -1){
233 frmContactEditorAddress *frameCEAddress = new frmContactEditorAddress ( this );
234 frameCEAddress->SetupPointers(&GeneralAddressList,
235 &GeneralAddressListTown,
236 &GeneralAddressListCounty,
237 &GeneralAddressListPostCode,
238 &GeneralAddressListCountry,
239 &GeneralAddressListLabel,
240 &GeneralAddressListLang,
241 &GeneralAddressListAltID,
242 &GeneralAddressListPID,
243 &GeneralAddressListTokens,
244 &GeneralAddressListGeo,
245 &GeneralAddressListTimezone,
246 &GeneralAddressListType,
247 &GeneralAddressListMediatype,
248 &GeneralAddressListPref,
251 frameCEAddress->SetEditorMode(TRUE, CE_GENERAL);
252 frameCEAddress->ShowModal();
253 delete frameCEAddress;
254 frameCEAddress = NULL;
258 void frmContactEditor::DeleteGeneralAddress( wxCommandEvent& event )
261 long longSelected = -1;
262 int intSelectedData = 0;
264 if (!GetSelectedItem(lboAddresses,
270 lboAddresses->DeleteItem(longSelected);
272 DeleteMapData(intSelectedData, &GeneralAddressList,
273 &GeneralAddressListTown, &GeneralAddressListCounty,
274 &GeneralAddressListPostCode, &GeneralAddressListCountry,
275 &GeneralAddressList, &GeneralAddressListLabel,
276 &GeneralAddressListLang, &GeneralAddressListAltID,
277 &GeneralAddressListPID, &GeneralAddressListTokens,
278 &GeneralAddressListGeo, &GeneralAddressListTimezone,
279 &GeneralAddressListType, &GeneralAddressListMediatype,
280 &GeneralAddressListPref);
284 void frmContactEditor::AddGeneralEmail( wxCommandEvent& event )
288 frmContactEditorEmail *frameCEEmail = new frmContactEditorEmail ( this );
289 frameCEEmail->SetEditorMode(FALSE, CE_GENERAL);
290 intResult = GetLastInt(&GeneralAddressList);
291 frameCEEmail->SetupPointers(&GeneralEmailList,
292 &GeneralEmailListAltID,
293 &GeneralEmailListPID,
294 &GeneralEmailListType,
295 &GeneralEmailListTokens,
296 &GeneralEmailListPref,
299 frameCEEmail->ShowModal();
304 void frmContactEditor::ModifyGeneralEmail( wxCommandEvent& event )
306 long longSelected = -1;
307 int intSelectedData = 0;
309 if (!GetSelectedItem(lboEmails,
315 frmContactEditorEmail *frameCEEmail = new frmContactEditorEmail ( this );
316 frameCEEmail->SetupPointers(&GeneralEmailList,
317 &GeneralEmailListAltID,
318 &GeneralEmailListPID,
319 &GeneralEmailListType,
320 &GeneralEmailListTokens,
321 &GeneralEmailListPref,
324 frameCEEmail->SetEditorMode(TRUE, CE_GENERAL);
325 frameCEEmail->ShowModal();
330 void frmContactEditor::DeleteGeneralEmail( wxCommandEvent& event )
332 long longSelected = -1;
333 int intSelectedData = 0;
335 if (!GetSelectedItem(lboEmails,
341 lboEmails->DeleteItem(longSelected);
343 DeleteMapData(intSelectedData, &GeneralEmailList,
344 &GeneralEmailListAltID, &GeneralEmailListPID,
345 &GeneralEmailListType, &GeneralEmailListTokens,
346 &GeneralEmailListPref);
350 void frmContactEditor::AddGeneralIM( wxCommandEvent& event )
354 frmContactEditorIM *frameCEIM = new frmContactEditorIM ( this );
355 frameCEIM->SetEditorMode(FALSE, CE_GENERAL);
356 intResult = GetLastInt(&GeneralIMList);
357 frameCEIM->SetupPointers(&GeneralIMList,
361 &GeneralIMListTokens,
362 &GeneralIMListMediatype,
366 frameCEIM->ShowModal();
371 void frmContactEditor::ModifyGeneralIM( wxCommandEvent& event )
373 long longSelected = -1;
374 int intSelectedData = 0;
376 if (!GetSelectedItem(lboIM,
382 frmContactEditorIM *frameCEIM = new frmContactEditorIM ( this );
383 frameCEIM->SetupPointers(&GeneralIMList,
387 &GeneralIMListTokens,
388 &GeneralIMListMediatype,
392 frameCEIM->SetEditorMode(TRUE, CE_GENERAL);
393 frameCEIM->ShowModal();
398 void frmContactEditor::DeleteGeneralIM( wxCommandEvent& event )
400 long longSelected = -1;
401 int intSelectedData = 0;
403 if (!GetSelectedItem(lboIM,
409 lboIM->DeleteItem(longSelected);
411 DeleteMapData(intSelectedData, &GeneralIMList,
412 &GeneralIMListAltID, &GeneralIMListPID,
413 &GeneralIMListType, &GeneralIMListTokens,
414 &GeneralIMListMediatype, &GeneralIMListPref);
418 void frmContactEditor::AddGeneralTelephone( wxCommandEvent& event )
422 frmContactEditorTelephone *frameCETel = new frmContactEditorTelephone ( this );
423 frameCETel->SetEditorMode(FALSE, CE_GENERAL);
424 intResult = GetLastInt(&GeneralTelephoneList);
425 frameCETel->SetupPointers(&GeneralTelephoneList,
426 &GeneralTelephoneListAltID,
427 &GeneralTelephoneListPID,
428 &GeneralTelephoneListType,
429 &GeneralTelephoneListTokens,
430 &GeneralTelephoneListPref,
433 frameCETel->ShowModal();
438 void frmContactEditor::ModifyGeneralTelephone( wxCommandEvent& event )
440 long longSelected = -1;
441 int intSelectedData = 0;
443 if (!GetSelectedItem(lboTelephone,
449 frmContactEditorTelephone *frameCETel = new frmContactEditorTelephone ( this );
450 frameCETel->SetupPointers(&GeneralTelephoneList,
451 &GeneralTelephoneListAltID,
452 &GeneralTelephoneListPID,
453 &GeneralTelephoneListType,
454 &GeneralTelephoneListTokens,
455 &GeneralTelephoneListPref,
458 frameCETel->SetEditorMode(TRUE, CE_GENERAL);
459 frameCETel->ShowModal();
464 void frmContactEditor::DeleteGeneralTelephone( wxCommandEvent& event )
466 long longSelected = -1;
467 int intSelectedData = 0;
469 if (!GetSelectedItem(lboTelephone,
475 lboTelephone->DeleteItem(longSelected);
477 DeleteMapData(intSelectedData, &GeneralTelephoneList,
478 &GeneralTelephoneListAltID, &GeneralTelephoneListPID,
479 &GeneralTelephoneListType, &GeneralTelephoneListTokens,
480 &GeneralTelephoneListPref);
484 void frmContactEditor::AddGeneralLanguages( wxCommandEvent& event )
488 frmContactEditorLanguages *frameCELang = new frmContactEditorLanguages ( this );
489 frameCELang->SetEditorMode(FALSE, CE_GENERAL);
490 intResult = GetLastInt(&GeneralLanguageList);
491 frameCELang->SetupPointers(&GeneralLanguageList,
492 &GeneralLanguageListAltID,
493 &GeneralLanguageListPID,
494 &GeneralLanguageListType,
495 &GeneralLanguageListTokens,
496 &GeneralLanguageListPref,
499 frameCELang->ShowModal();
504 void frmContactEditor::ModifyGeneralLanguages( wxCommandEvent& event )
506 long longSelected = -1;
507 int intSelectedData = 0;
509 if (!GetSelectedItem(lboLanguages,
515 frmContactEditorLanguages *frameCELang = new frmContactEditorLanguages ( this );
516 frameCELang->SetupPointers(&GeneralLanguageList,
517 &GeneralLanguageListAltID,
518 &GeneralLanguageListPID,
519 &GeneralLanguageListType,
520 &GeneralLanguageListTokens,
521 &GeneralLanguageListPref,
524 frameCELang->SetEditorMode(TRUE, CE_GENERAL);
525 frameCELang->ShowModal();
530 void frmContactEditor::DeleteGeneralLanguage( wxCommandEvent& event )
532 long longSelected = -1;
533 int intSelectedData = 0;
535 if (!GetSelectedItem(lboLanguages,
541 lboLanguages->DeleteItem(longSelected);
543 DeleteMapData(intSelectedData, &GeneralLanguageList,
544 &GeneralLanguageListAltID, &GeneralLanguageListPID,
545 &GeneralLanguageListType, &GeneralLanguageListTokens,
546 &GeneralLanguageListPref);
550 void frmContactEditor::AddGeneralTimezone( wxCommandEvent& event )
554 frmContactEditorTimezones *frameCETZ = new frmContactEditorTimezones ( this );
555 frameCETZ->SetEditorMode(FALSE, CE_GENERAL);
556 intResult = GetLastInt(&GeneralTZList);
557 frameCETZ->SetupPointers(&GeneralTZList,
561 &GeneralTZListTokens,
562 &GeneralTZListMediatype,
566 frameCETZ->ShowModal();
571 void frmContactEditor::ModifyGeneralTimezone( wxCommandEvent& event )
573 long longSelected = -1;
574 int intSelectedData = 0;
576 if (!GetSelectedItem(lboTimezones,
582 frmContactEditorTimezones *frameCETZ = new frmContactEditorTimezones ( this );
583 frameCETZ->SetupPointers(&GeneralTZList,
587 &GeneralTZListTokens,
588 &GeneralTZListMediatype,
592 frameCETZ->SetEditorMode(TRUE, CE_GENERAL);
593 frameCETZ->ShowModal();
598 void frmContactEditor::DeleteGeneralTimezone( wxCommandEvent& event )
600 long longSelected = -1;
601 int intSelectedData = 0;
603 if (!GetSelectedItem(lboTimezones,
609 lboTimezones->DeleteItem(longSelected);
611 DeleteMapData(intSelectedData, &GeneralTZList,
612 &GeneralTZListAltID, &GeneralTZListPID,
613 &GeneralTZListType, &GeneralTZListTokens,
614 &GeneralTZListMediatype, &GeneralTZListPref);
618 void frmContactEditor::AddGeneralGeoposition( wxCommandEvent& event )
622 frmContactEditorGeoposition *frameCEGeo = new frmContactEditorGeoposition ( this );
623 frameCEGeo->SetEditorMode(FALSE, CE_GENERAL);
624 intResult = GetLastInt(&GeneralGeographyList);
625 frameCEGeo->SetupPointers(&GeneralGeographyList,
626 &GeneralGeographyListAltID,
627 &GeneralGeographyListPID,
628 &GeneralGeographyListType,
629 &GeneralGeographyListTokens,
630 &GeneralGeographyListMediatype,
631 &GeneralGeographyListPref,
634 frameCEGeo->ShowModal();
639 void frmContactEditor::ModifyGeneralGeoposition( wxCommandEvent& event )
641 long longSelected = -1;
642 int intSelectedData = 0;
644 if (!GetSelectedItem(lboGeoposition,
650 frmContactEditorGeoposition *frameCEGeo = new frmContactEditorGeoposition ( this );
651 frameCEGeo->SetupPointers(&GeneralGeographyList,
652 &GeneralGeographyListAltID,
653 &GeneralGeographyListPID,
654 &GeneralGeographyListType,
655 &GeneralGeographyListTokens,
656 &GeneralGeographyListMediatype,
657 &GeneralGeographyListPref,
660 frameCEGeo->SetEditorMode(TRUE, CE_GENERAL);
661 frameCEGeo->ShowModal();
666 void frmContactEditor::DeleteGeneralGeoposition( wxCommandEvent& event )
668 long longSelected = -1;
669 int intSelectedData = 0;
671 if (!GetSelectedItem(lboGeoposition,
677 lboGeoposition->DeleteItem(longSelected);
679 DeleteMapData(intSelectedData, &GeneralGeographyList,
680 &GeneralGeographyListAltID, &GeneralGeographyListPID,
681 &GeneralGeographyListType, &GeneralGeographyListTokens,
682 &GeneralGeographyListMediatype, &GeneralGeographyListPref);
686 void frmContactEditor::AddGeneralRelated( wxCommandEvent& event )
690 frmContactEditorRelated *frameCERel = new frmContactEditorRelated ( this );
691 frameCERel->SetEditorMode(FALSE, CE_GENERAL);
692 intResult = GetLastInt(&GeneralRelatedList);
693 frameCERel->SetupPointers(&GeneralRelatedList,
694 &GeneralRelatedListRelType,
695 &GeneralRelatedListAltID,
696 &GeneralRelatedListPID,
697 &GeneralRelatedListType,
698 &GeneralRelatedListTokens,
699 &GeneralRelatedListPref,
702 frameCERel->ShowModal();
707 void frmContactEditor::ModifyGeneralRelated( wxCommandEvent& event )
709 long longSelected = -1;
710 int intSelectedData = 0;
712 if (!GetSelectedItem(lboRelated,
718 frmContactEditorRelated *frameCERel = new frmContactEditorRelated ( this );
719 frameCERel->SetupPointers(&GeneralRelatedList,
720 &GeneralRelatedListRelType,
721 &GeneralRelatedListAltID,
722 &GeneralRelatedListPID,
723 &GeneralRelatedListType,
724 &GeneralRelatedListTokens,
725 &GeneralRelatedListPref,
728 frameCERel->SetEditorMode(TRUE, CE_GENERAL);
729 frameCERel->ShowModal();
734 void frmContactEditor::DeleteGeneralRelated( wxCommandEvent& event )
736 long longSelected = -1;
737 int intSelectedData = 0;
739 if (!GetSelectedItem(lboRelated,
745 lboRelated->DeleteItem(longSelected);
747 GeneralRelatedList.erase(intSelectedData);
748 GeneralRelatedListRelType.erase(intSelectedData);
749 GeneralRelatedListAltID.erase(intSelectedData);
750 GeneralRelatedListPID.erase(intSelectedData);
751 GeneralRelatedListType.erase(intSelectedData);
752 GeneralRelatedListTokens.erase(intSelectedData);
753 GeneralRelatedListPref.erase(intSelectedData);
756 void frmContactEditor::AddGeneralWebsite( wxCommandEvent& event )
760 frmContactEditorWebsites *frameCEWeb = new frmContactEditorWebsites ( this );
761 frameCEWeb->SetEditorMode(FALSE, CE_GENERAL);
762 intResult = GetLastInt(&GeneralWebsiteList);
763 frameCEWeb->SetupPointers(&GeneralWebsiteList,
764 &GeneralWebsiteListAltID,
765 &GeneralWebsiteListPID,
766 &GeneralWebsiteListType,
767 &GeneralWebsiteListTokens,
768 &GeneralWebsiteListMediatype,
769 &GeneralWebsiteListPref,
772 frameCEWeb->ShowModal();
777 void frmContactEditor::ModifyGeneralWebsite( wxCommandEvent& event )
779 long longSelected = -1;
780 int intSelectedData = 0;
782 if (!GetSelectedItem(lboWebsites,
788 frmContactEditorWebsites *frameCEWeb = new frmContactEditorWebsites ( this );
789 frameCEWeb->SetupPointers(&GeneralWebsiteList,
790 &GeneralWebsiteListAltID,
791 &GeneralWebsiteListPID,
792 &GeneralWebsiteListType,
793 &GeneralWebsiteListTokens,
794 &GeneralWebsiteListMediatype,
795 &GeneralWebsiteListPref,
798 frameCEWeb->SetEditorMode(TRUE, CE_GENERAL);
799 frameCEWeb->ShowModal();
804 void frmContactEditor::DeleteGeneralWebsite( wxCommandEvent& event )
806 long longSelected = -1;
807 int intSelectedData = 0;
809 if (!GetSelectedItem(lboWebsites,
815 lboWebsites->DeleteItem(longSelected);
817 DeleteMapData(intSelectedData, &GeneralWebsiteList,
818 &GeneralWebsiteListAltID, &GeneralWebsiteListPID,
819 &GeneralWebsiteListType, &GeneralWebsiteListTokens,
820 &GeneralWebsiteListMediatype, &GeneralWebsiteListPref);
824 void frmContactEditor::AddGeneralTitle( wxCommandEvent& event )
828 frmContactEditorTitles *frameCETitle = new frmContactEditorTitles ( this );
829 frameCETitle->SetEditorMode(FALSE, CE_GENERAL);
830 intResult = GetLastInt(&GeneralTitleList);
831 frameCETitle->SetupPointers(&GeneralTitleList,
832 &GeneralTitleListLanguage,
833 &GeneralTitleListAltID,
834 &GeneralTitleListPID,
835 &GeneralTitleListType,
836 &GeneralTitleListTokens,
837 &GeneralTitleListPref,
840 frameCETitle->ShowModal();
845 void frmContactEditor::ModifyGeneralTitle( wxCommandEvent& event )
847 long longSelected = -1;
848 int intSelectedData = 0;
850 if (!GetSelectedItem(lboTitles,
856 frmContactEditorTitles *frameCETitle = new frmContactEditorTitles ( this );
857 frameCETitle->SetupPointers(&GeneralTitleList,
858 &GeneralTitleListLanguage,
859 &GeneralTitleListAltID,
860 &GeneralTitleListPID,
861 &GeneralTitleListType,
862 &GeneralTitleListTokens,
863 &GeneralTitleListPref,
866 frameCETitle->SetEditorMode(TRUE, CE_GENERAL);
867 frameCETitle->ShowModal();
872 void frmContactEditor::DeleteGeneralTitle( wxCommandEvent& event )
874 long longSelected = -1;
875 int intSelectedData = 0;
877 if (!GetSelectedItem(lboTitles,
883 lboTitles->DeleteItem(longSelected);
885 DeleteMapData(intSelectedData, &GeneralTitleList,
886 &GeneralTitleListLanguage, &GeneralTitleListAltID,
887 &GeneralTitleListPID, &GeneralTitleListType,
888 &GeneralTitleListTokens, &GeneralTitleListPref);
892 void frmContactEditor::AddGeneralRole( wxCommandEvent& event )
896 frmContactEditorRoles *frameCERole = new frmContactEditorRoles ( this );
897 frameCERole->SetEditorMode(FALSE, CE_GENERAL);
898 intResult = GetLastInt(&GeneralRoleList);
899 frameCERole->SetupPointers(&GeneralRoleList,
900 &GeneralRoleListLanguage,
901 &GeneralRoleListAltID,
903 &GeneralRoleListType,
904 &GeneralRoleListTokens,
905 &GeneralRoleListPref,
908 frameCERole->ShowModal();
913 void frmContactEditor::ModifyGeneralRole( wxCommandEvent& event )
915 long longSelected = -1;
916 int intSelectedData = 0;
918 if (!GetSelectedItem(lboRoles,
924 frmContactEditorRoles *frameCERole = new frmContactEditorRoles ( this );
925 frameCERole->SetupPointers(&GeneralRoleList,
926 &GeneralRoleListLanguage,
927 &GeneralRoleListAltID,
929 &GeneralRoleListType,
930 &GeneralRoleListTokens,
931 &GeneralRoleListPref,
934 frameCERole->SetEditorMode(TRUE, CE_GENERAL);
935 frameCERole->ShowModal();
940 void frmContactEditor::DeleteGeneralRole( wxCommandEvent& event )
942 long longSelected = -1;
943 int intSelectedData = 0;
945 if (!GetSelectedItem(lboRoles,
951 lboRoles->DeleteItem(longSelected);
953 DeleteMapData(intSelectedData, &GeneralRoleList,
954 &GeneralRoleListLanguage, &GeneralRoleListAltID,
955 &GeneralRoleListPID, &GeneralRoleListType,
956 &GeneralRoleListTokens, &GeneralRoleListPref);
960 void frmContactEditor::AddGeneralOrganisation( wxCommandEvent& event )
964 frmContactEditorOrganisations *frameCEOrg = new frmContactEditorOrganisations ( this );
965 frameCEOrg->SetEditorMode(FALSE, CE_GENERAL);
966 intResult = GetLastInt(&GeneralOrganisationsList);
967 frameCEOrg->SetupPointers(&GeneralOrganisationsList,
968 &GeneralOrganisationsListLanguage,
969 &GeneralOrganisationsListSortAs,
970 &GeneralOrganisationsListAltID,
971 &GeneralOrganisationsListPID,
972 &GeneralOrganisationsListType,
973 &GeneralOrganisationsListTokens,
974 &GeneralOrganisationsListPref,
977 frameCEOrg->ShowModal();
982 void frmContactEditor::ModifyGeneralOrganisation( wxCommandEvent& event )
984 long longSelected = -1;
985 int intSelectedData = 0;
987 if (!GetSelectedItem(lboOrganisations,
993 frmContactEditorOrganisations *frameCEOrg = new frmContactEditorOrganisations ( this );
994 frameCEOrg->SetupPointers(&GeneralOrganisationsList,
995 &GeneralOrganisationsListLanguage,
996 &GeneralOrganisationsListSortAs,
997 &GeneralOrganisationsListAltID,
998 &GeneralOrganisationsListPID,
999 &GeneralOrganisationsListType,
1000 &GeneralOrganisationsListTokens,
1001 &GeneralOrganisationsListPref,
1004 frameCEOrg->SetEditorMode(TRUE, CE_GENERAL);
1005 frameCEOrg->ShowModal();
1010 void frmContactEditor::DeleteGeneralOrganisation( wxCommandEvent& event )
1012 long longSelected = -1;
1013 int intSelectedData = 0;
1015 if (!GetSelectedItem(lboOrganisations,
1021 lboOrganisations->DeleteItem(longSelected);
1023 DeleteMapData(intSelectedData, &GeneralOrganisationsList,
1024 &GeneralOrganisationsListLanguage, &GeneralOrganisationsListSortAs,
1025 &GeneralOrganisationsListAltID, &GeneralOrganisationsListPID,
1026 &GeneralOrganisationsListType, &GeneralOrganisationsListTokens,
1027 &GeneralOrganisationsListPref);
1031 void frmContactEditor::AddGeneralNote( wxCommandEvent& event )
1035 frmContactEditorNotes *frameCENote = new frmContactEditorNotes ( this );
1036 frameCENote->SetEditorMode(FALSE, CE_GENERAL);
1037 intResult = GetLastInt(&GeneralNoteList);
1038 frameCENote->SetupPointers(&GeneralNoteList,
1039 &GeneralNoteListLanguage,
1040 &GeneralNoteListAltID,
1041 &GeneralNoteListPID,
1042 &GeneralNoteListType,
1043 &GeneralNoteListTokens,
1044 &GeneralNoteListPref,
1047 frameCENote->ShowModal();
1052 void frmContactEditor::ModifyGeneralNote( wxCommandEvent& event )
1054 long longSelected = -1;
1055 int intSelectedData = 0;
1057 if (!GetSelectedItem(lboNotes,
1063 frmContactEditorNotes *frameCENote = new frmContactEditorNotes ( this );
1064 frameCENote->SetupPointers(&GeneralNoteList,
1065 &GeneralNoteListLanguage,
1066 &GeneralNoteListAltID,
1067 &GeneralNoteListPID,
1068 &GeneralNoteListType,
1069 &GeneralNoteListTokens,
1070 &GeneralNoteListPref,
1073 frameCENote->SetEditorMode(TRUE, CE_GENERAL);
1074 frameCENote->ShowModal();
1079 void frmContactEditor::DeleteGeneralNote( wxCommandEvent& event )
1081 long longSelected = -1;
1082 int intSelectedData = 0;
1084 if (!GetSelectedItem(lboNotes,
1090 lboNotes->DeleteItem(longSelected);
1092 DeleteMapData(intSelectedData, &GeneralNoteList,
1093 &GeneralNoteListLanguage, &GeneralNoteListAltID,
1094 &GeneralNoteListPID, &GeneralNoteListType,
1095 &GeneralNoteListTokens, &GeneralNoteListPref);
1099 void frmContactEditor::AddHomeNickname( wxCommandEvent& event )
1103 frmContactEditorNickname *frameCENickname = new frmContactEditorNickname ( this );
1104 frameCENickname->SetEditorMode(FALSE, CE_HOME);
1105 intResult = GetLastInt(&HomeNicknamesList);
1106 frameCENickname->SetupPointers(&HomeNicknamesList,
1107 &HomeNicknamesListAltID,
1108 &HomeNicknamesListPID,
1109 &HomeNicknamesListType,
1110 &HomeNicknamesListLanguage,
1111 &HomeNicknamesListTokens,
1112 &HomeNicknamesListPref,
1115 frameCENickname->ShowModal();
1116 delete frameCENickname;
1117 frameCENickname = NULL;
1120 void frmContactEditor::ModifyHomeNickname( wxCommandEvent& event )
1122 long longSelected = -1;
1123 int intSelectedData = 0;
1125 if (!GetSelectedItem(lboHomeNicknames,
1131 frmContactEditorNickname *frameCENickname = new frmContactEditorNickname ( this );
1132 frameCENickname->SetupPointers(&HomeNicknamesList,
1133 &HomeNicknamesListAltID,
1134 &HomeNicknamesListPID,
1135 &HomeNicknamesListType,
1136 &HomeNicknamesListLanguage,
1137 &HomeNicknamesListTokens,
1138 &HomeNicknamesListPref,
1141 frameCENickname->SetEditorMode(TRUE, CE_HOME);
1142 frameCENickname->ShowModal();
1143 delete frameCENickname;
1144 frameCENickname = NULL;
1147 void frmContactEditor::DeleteHomeNickname( wxCommandEvent& event )
1150 long longSelected = -1;
1151 int intSelectedData = 0;
1153 if (!GetSelectedItem(lboHomeNicknames,
1159 lboHomeNicknames->DeleteItem(longSelected);
1161 DeleteMapData(intSelectedData,
1163 &HomeNicknamesListLanguage,
1164 &HomeNicknamesListAltID,
1165 &HomeNicknamesListPID,
1166 &HomeNicknamesListTokens,
1167 &HomeNicknamesListType,
1168 &HomeNicknamesListPref);
1172 void frmContactEditor::AddHomeAddress( wxCommandEvent& event )
1176 frmContactEditorAddress *frameCEAddress = new frmContactEditorAddress ( this );
1177 frameCEAddress->SetEditorMode(FALSE, CE_HOME);
1178 intResult = GetLastInt(&HomeAddressList);
1179 frameCEAddress->SetupPointers(&HomeAddressList,
1180 &HomeAddressListTown,
1181 &HomeAddressListCounty,
1182 &HomeAddressListPostCode,
1183 &HomeAddressListCountry,
1184 &HomeAddressListLabel,
1185 &HomeAddressListLang,
1186 &HomeAddressListAltID,
1187 &HomeAddressListPID,
1188 &HomeAddressListTokens,
1189 &HomeAddressListGeo,
1190 &HomeAddressListTimezone,
1191 &HomeAddressListType,
1192 &HomeAddressListMediatype,
1193 &HomeAddressListPref,
1196 frameCEAddress->ShowModal();
1197 delete frameCEAddress;
1198 frameCEAddress = NULL;
1201 void frmContactEditor::ModifyHomeAddress( wxCommandEvent& event )
1203 long longSelected = -1;
1204 int intSelectedData = 0;
1206 if (!GetSelectedItem(lboHomeAddresses,
1212 frmContactEditorAddress *frameCEAddress = new frmContactEditorAddress ( this );
1213 frameCEAddress->SetupPointers(&HomeAddressList,
1214 &HomeAddressListTown,
1215 &HomeAddressListCounty,
1216 &HomeAddressListPostCode,
1217 &HomeAddressListCountry,
1218 &HomeAddressListLabel,
1219 &HomeAddressListLang,
1220 &HomeAddressListAltID,
1221 &HomeAddressListPID,
1222 &HomeAddressListTokens,
1223 &HomeAddressListGeo,
1224 &HomeAddressListTimezone,
1225 &HomeAddressListType,
1226 &HomeAddressListMediatype,
1227 &HomeAddressListPref,
1230 frameCEAddress->SetEditorMode(TRUE, CE_HOME);
1231 frameCEAddress->ShowModal();
1232 delete frameCEAddress;
1233 frameCEAddress = NULL;
1236 void frmContactEditor::DeleteHomeAddress( wxCommandEvent& event )
1239 long longSelected = -1;
1240 int intSelectedData = 0;
1242 if (!GetSelectedItem(lboHomeAddresses,
1248 lboHomeAddresses->DeleteItem(longSelected);
1250 DeleteMapData(intSelectedData, &HomeAddressList,
1251 &HomeAddressListTown, &HomeAddressListCounty,
1252 &HomeAddressListPostCode, &HomeAddressListCountry,
1253 &HomeAddressList, &HomeAddressListLabel,
1254 &HomeAddressListLang, &HomeAddressListAltID,
1255 &HomeAddressListPID, &HomeAddressListTokens,
1256 &HomeAddressListGeo, &HomeAddressListTimezone,
1257 &HomeAddressListType, &HomeAddressListMediatype,
1258 &HomeAddressListPref);
1262 void frmContactEditor::AddHomeEmail( wxCommandEvent& event )
1266 frmContactEditorEmail *frameCEEmail = new frmContactEditorEmail ( this );
1267 frameCEEmail->SetEditorMode(FALSE, CE_HOME);
1268 intResult = GetLastInt(&HomeAddressList);
1269 frameCEEmail->SetupPointers(&HomeEmailList,
1270 &HomeEmailListAltID,
1273 &HomeEmailListTokens,
1277 frameCEEmail->ShowModal();
1278 delete frameCEEmail;
1279 frameCEEmail = NULL;
1282 void frmContactEditor::ModifyHomeEmail( wxCommandEvent& event )
1284 long longSelected = -1;
1285 int intSelectedData = 0;
1287 if (!GetSelectedItem(lboHomeEmails,
1293 frmContactEditorEmail *frameCEEmail = new frmContactEditorEmail ( this );
1294 frameCEEmail->SetupPointers(&HomeEmailList,
1295 &HomeEmailListAltID,
1298 &HomeEmailListTokens,
1302 frameCEEmail->SetEditorMode(TRUE, CE_HOME);
1303 frameCEEmail->ShowModal();
1304 delete frameCEEmail;
1305 frameCEEmail = NULL;
1309 void frmContactEditor::DeleteHomeEmail( wxCommandEvent& event )
1311 long longSelected = -1;
1312 int intSelectedData = 0;
1314 if (!GetSelectedItem(lboHomeEmails,
1320 lboHomeEmails->DeleteItem(longSelected);
1322 DeleteMapData(intSelectedData, &HomeEmailList,
1323 &HomeEmailListAltID, &HomeEmailListPID,
1324 &HomeEmailListType, &HomeEmailListTokens,
1325 &HomeEmailListPref);
1329 void frmContactEditor::AddHomeIM( wxCommandEvent& event )
1333 frmContactEditorIM *frameCEIM = new frmContactEditorIM ( this );
1334 frameCEIM->SetEditorMode(FALSE, CE_HOME);
1335 intResult = GetLastInt(&HomeIMList);
1336 frameCEIM->SetupPointers(&HomeIMList,
1341 &HomeIMListMediatype,
1345 frameCEIM->ShowModal();
1350 void frmContactEditor::ModifyHomeIM( wxCommandEvent& event )
1352 long longSelected = -1;
1353 int intSelectedData = 0;
1355 if (!GetSelectedItem(lboHomeIM,
1361 frmContactEditorIM *frameCEIM = new frmContactEditorIM ( this );
1362 frameCEIM->SetupPointers(&HomeIMList,
1367 &HomeIMListMediatype,
1371 frameCEIM->SetEditorMode(TRUE, CE_HOME);
1372 frameCEIM->ShowModal();
1377 void frmContactEditor::DeleteHomeIM( wxCommandEvent& event )
1379 long longSelected = -1;
1380 int intSelectedData = 0;
1382 if (!GetSelectedItem(lboHomeIM,
1388 lboHomeIM->DeleteItem(longSelected);
1390 DeleteMapData(intSelectedData, &HomeIMList,
1391 &HomeIMListAltID, &HomeIMListPID,
1392 &HomeIMListType, &HomeIMListTokens,
1393 &HomeIMListMediatype, &HomeIMListPref);
1397 void frmContactEditor::AddHomeTelephone( wxCommandEvent& event )
1401 frmContactEditorTelephone *frameCETel = new frmContactEditorTelephone ( this );
1402 frameCETel->SetEditorMode(FALSE, CE_HOME);
1403 intResult = GetLastInt(&HomeTelephoneList);
1404 frameCETel->SetupPointers(&HomeTelephoneList,
1405 &HomeTelephoneListAltID,
1406 &HomeTelephoneListPID,
1407 &HomeTelephoneListType,
1408 &HomeTelephoneListTokens,
1409 &HomeTelephoneListPref,
1412 frameCETel->ShowModal();
1417 void frmContactEditor::ModifyHomeTelephone( wxCommandEvent& event )
1419 long longSelected = -1;
1420 int intSelectedData = 0;
1422 if (!GetSelectedItem(lboHomeTelephone,
1428 frmContactEditorTelephone *frameCETel = new frmContactEditorTelephone ( this );
1429 frameCETel->SetupPointers(&HomeTelephoneList,
1430 &HomeTelephoneListAltID,
1431 &HomeTelephoneListPID,
1432 &HomeTelephoneListType,
1433 &HomeTelephoneListTokens,
1434 &HomeTelephoneListPref,
1437 frameCETel->SetEditorMode(TRUE, CE_HOME);
1438 frameCETel->ShowModal();
1443 void frmContactEditor::DeleteHomeTelephone( wxCommandEvent& event )
1445 long longSelected = -1;
1446 int intSelectedData = 0;
1448 if (!GetSelectedItem(lboHomeTelephone,
1454 lboHomeTelephone->DeleteItem(longSelected);
1456 DeleteMapData(intSelectedData, &HomeTelephoneList,
1457 &HomeTelephoneListAltID, &HomeTelephoneListPID,
1458 &HomeTelephoneListType, &HomeTelephoneListTokens,
1459 &HomeTelephoneListPref);
1463 void frmContactEditor::AddHomeLanguage( wxCommandEvent& event )
1467 frmContactEditorLanguages *frameCELang = new frmContactEditorLanguages ( this );
1468 frameCELang->SetEditorMode(FALSE, CE_HOME);
1469 intResult = GetLastInt(&HomeLanguageList);
1470 frameCELang->SetupPointers(&HomeLanguageList,
1471 &HomeLanguageListAltID,
1472 &HomeLanguageListPID,
1473 &HomeLanguageListType,
1474 &HomeLanguageListTokens,
1475 &HomeLanguageListPref,
1478 frameCELang->ShowModal();
1483 void frmContactEditor::ModifyHomeLanguage( wxCommandEvent& event )
1485 long longSelected = -1;
1486 int intSelectedData = 0;
1488 if (!GetSelectedItem(lboHomeLanguages,
1494 frmContactEditorLanguages *frameCELang = new frmContactEditorLanguages ( this );
1495 frameCELang->SetupPointers(&HomeLanguageList,
1496 &HomeLanguageListAltID,
1497 &HomeLanguageListPID,
1498 &HomeLanguageListType,
1499 &HomeLanguageListTokens,
1500 &HomeLanguageListPref,
1503 frameCELang->SetEditorMode(TRUE, CE_HOME);
1504 frameCELang->ShowModal();
1509 void frmContactEditor::DeleteHomeLanguage( wxCommandEvent& event )
1511 long longSelected = -1;
1512 int intSelectedData = 0;
1514 if (!GetSelectedItem(lboHomeLanguages,
1520 lboHomeLanguages->DeleteItem(longSelected);
1522 DeleteMapData(intSelectedData, &HomeLanguageList,
1523 &HomeLanguageListAltID, &HomeLanguageListPID,
1524 &HomeLanguageListType, &HomeLanguageListTokens,
1525 &HomeLanguageListPref);
1529 void frmContactEditor::AddHomeTimezone( wxCommandEvent& event )
1533 frmContactEditorTimezones *frameCETZ = new frmContactEditorTimezones ( this );
1534 frameCETZ->SetEditorMode(FALSE, CE_HOME);
1535 intResult = GetLastInt(&HomeTZList);
1536 frameCETZ->SetupPointers(&HomeTZList,
1541 &HomeTZListMediatype,
1545 frameCETZ->ShowModal();
1550 void frmContactEditor::ModifyHomeTimezone( wxCommandEvent& event )
1552 long longSelected = -1;
1553 int intSelectedData = 0;
1555 if (!GetSelectedItem(lboHomeTimezones,
1561 frmContactEditorTimezones *frameCETZ = new frmContactEditorTimezones ( this );
1562 frameCETZ->SetupPointers(&HomeTZList,
1567 &HomeTZListMediatype,
1571 frameCETZ->SetEditorMode(TRUE, CE_HOME);
1572 frameCETZ->ShowModal();
1577 void frmContactEditor::DeleteHomeTimezone( wxCommandEvent& event )
1579 long longSelected = -1;
1580 int intSelectedData = 0;
1582 if (!GetSelectedItem(lboHomeTimezones,
1588 lboHomeTimezones->DeleteItem(longSelected);
1590 DeleteMapData(intSelectedData, &HomeTZList,
1591 &HomeTZListAltID, &HomeTZListPID,
1592 &HomeTZListType, &HomeTZListTokens,
1593 &HomeTZListMediatype, &HomeTZListPref);
1597 void frmContactEditor::AddHomeGeoposition( wxCommandEvent& event )
1601 frmContactEditorGeoposition *frameCEGeo = new frmContactEditorGeoposition ( this );
1602 frameCEGeo->SetEditorMode(FALSE, CE_HOME);
1603 intResult = GetLastInt(&HomeGeographyList);
1604 frameCEGeo->SetupPointers(&HomeGeographyList,
1605 &HomeGeographyListAltID,
1606 &HomeGeographyListPID,
1607 &HomeGeographyListType,
1608 &HomeGeographyListTokens,
1609 &HomeGeographyListMediatype,
1610 &HomeGeographyListPref,
1613 frameCEGeo->ShowModal();
1618 void frmContactEditor::ModifyHomeGeoposition( wxCommandEvent& event )
1620 long longSelected = -1;
1621 int intSelectedData = 0;
1623 if (!GetSelectedItem(lboHomeGeoposition,
1629 frmContactEditorGeoposition *frameCEGeo = new frmContactEditorGeoposition ( this );
1630 frameCEGeo->SetupPointers(&HomeGeographyList,
1631 &HomeGeographyListAltID,
1632 &HomeGeographyListPID,
1633 &HomeGeographyListType,
1634 &HomeGeographyListTokens,
1635 &HomeGeographyListMediatype,
1636 &HomeGeographyListPref,
1639 frameCEGeo->SetEditorMode(TRUE, CE_HOME);
1640 frameCEGeo->ShowModal();
1645 void frmContactEditor::DeleteHomeGeoposition( wxCommandEvent& event )
1647 long longSelected = -1;
1648 int intSelectedData = 0;
1650 if (!GetSelectedItem(lboHomeGeoposition,
1656 lboHomeGeoposition->DeleteItem(longSelected);
1658 DeleteMapData(intSelectedData, &HomeGeographyList,
1659 &HomeGeographyListAltID, &HomeGeographyListPID,
1660 &HomeGeographyListType, &HomeGeographyListTokens,
1661 &HomeGeographyListMediatype, &HomeGeographyListPref);
1665 void frmContactEditor::AddHomeWebsite( wxCommandEvent& event )
1669 frmContactEditorWebsites *frameCEWeb = new frmContactEditorWebsites ( this );
1670 frameCEWeb->SetEditorMode(FALSE, CE_HOME);
1671 intResult = GetLastInt(&HomeWebsiteList);
1672 frameCEWeb->SetupPointers(&HomeWebsiteList,
1673 &HomeWebsiteListAltID,
1674 &HomeWebsiteListPID,
1675 &HomeWebsiteListType,
1676 &HomeWebsiteListTokens,
1677 &HomeWebsiteListMediatype,
1678 &HomeWebsiteListPref,
1681 frameCEWeb->ShowModal();
1686 void frmContactEditor::ModifyHomeWebsite( wxCommandEvent& event )
1688 long longSelected = -1;
1689 int intSelectedData = 0;
1691 if (!GetSelectedItem(lboHomeWebsites,
1697 frmContactEditorWebsites *frameCEWeb = new frmContactEditorWebsites ( this );
1698 frameCEWeb->SetupPointers(&HomeWebsiteList,
1699 &HomeWebsiteListAltID,
1700 &HomeWebsiteListPID,
1701 &HomeWebsiteListType,
1702 &HomeWebsiteListTokens,
1703 &HomeWebsiteListMediatype,
1704 &HomeWebsiteListPref,
1707 frameCEWeb->SetEditorMode(TRUE, CE_HOME);
1708 frameCEWeb->ShowModal();
1713 void frmContactEditor::DeleteHomeWebsite( wxCommandEvent& event )
1715 long longSelected = -1;
1716 int intSelectedData = 0;
1718 if (!GetSelectedItem(lboHomeWebsites,
1724 lboHomeWebsites->DeleteItem(longSelected);
1726 DeleteMapData(intSelectedData, &HomeWebsiteList,
1727 &HomeWebsiteListAltID, &HomeWebsiteListPID,
1728 &HomeWebsiteListType, &HomeWebsiteListTokens,
1729 &HomeWebsiteListMediatype, &HomeWebsiteListPref);
1733 void frmContactEditor::AddHomeTitle( wxCommandEvent& event )
1737 frmContactEditorTitles *frameCETitle = new frmContactEditorTitles ( this );
1738 frameCETitle->SetEditorMode(FALSE, CE_HOME);
1739 intResult = GetLastInt(&HomeTitleList);
1740 frameCETitle->SetupPointers(&HomeTitleList,
1741 &HomeTitleListLanguage,
1742 &HomeTitleListAltID,
1745 &HomeTitleListTokens,
1749 frameCETitle->ShowModal();
1750 delete frameCETitle;
1751 frameCETitle = NULL;
1754 void frmContactEditor::ModifyHomeTitle( wxCommandEvent& event )
1756 long longSelected = -1;
1757 int intSelectedData = 0;
1759 if (!GetSelectedItem(lboHomeTitles,
1765 frmContactEditorTitles *frameCETitle = new frmContactEditorTitles ( this );
1766 frameCETitle->SetupPointers(&HomeTitleList,
1767 &HomeTitleListLanguage,
1768 &HomeTitleListAltID,
1771 &HomeTitleListTokens,
1775 frameCETitle->SetEditorMode(TRUE, CE_HOME);
1776 frameCETitle->ShowModal();
1777 delete frameCETitle;
1778 frameCETitle = NULL;
1781 void frmContactEditor::DeleteHomeTitle( wxCommandEvent& event )
1783 long longSelected = -1;
1784 int intSelectedData = 0;
1786 if (!GetSelectedItem(lboHomeTitles,
1792 lboHomeTitles->DeleteItem(longSelected);
1794 DeleteMapData(intSelectedData, &HomeTitleList,
1795 &HomeTitleListLanguage, &HomeTitleListAltID,
1796 &HomeTitleListPID, &HomeTitleListType,
1797 &HomeTitleListTokens, &HomeTitleListPref);
1801 void frmContactEditor::AddHomeRole( wxCommandEvent& event )
1805 frmContactEditorRoles *frameCERole = new frmContactEditorRoles ( this );
1806 frameCERole->SetEditorMode(FALSE, CE_HOME);
1807 intResult = GetLastInt(&HomeRoleList);
1808 frameCERole->SetupPointers(&HomeRoleList,
1809 &HomeRoleListLanguage,
1813 &HomeRoleListTokens,
1817 frameCERole->ShowModal();
1822 void frmContactEditor::ModifyHomeRole( wxCommandEvent& event )
1824 long longSelected = -1;
1825 int intSelectedData = 0;
1827 if (!GetSelectedItem(lboHomeRoles,
1833 frmContactEditorRoles *frameCERole = new frmContactEditorRoles ( this );
1834 frameCERole->SetupPointers(&HomeRoleList,
1835 &HomeRoleListLanguage,
1839 &HomeRoleListTokens,
1843 frameCERole->SetEditorMode(TRUE, CE_HOME);
1844 frameCERole->ShowModal();
1849 void frmContactEditor::DeleteHomeRole( wxCommandEvent& event )
1851 long longSelected = -1;
1852 int intSelectedData = 0;
1854 if (!GetSelectedItem(lboHomeRoles,
1860 lboHomeRoles->DeleteItem(longSelected);
1862 DeleteMapData(intSelectedData, &HomeRoleList,
1863 &HomeRoleListLanguage, &HomeRoleListAltID,
1864 &HomeRoleListPID, &HomeRoleListType,
1865 &HomeRoleListTokens, &HomeRoleListPref);
1869 void frmContactEditor::AddHomeOrganisation( wxCommandEvent& event )
1873 frmContactEditorOrganisations *frameCEOrg = new frmContactEditorOrganisations ( this );
1874 frameCEOrg->SetEditorMode(FALSE, CE_HOME);
1875 intResult = GetLastInt(&HomeOrganisationsList);
1876 frameCEOrg->SetupPointers(&HomeOrganisationsList,
1877 &HomeOrganisationsListLanguage,
1878 &HomeOrganisationsListSortAs,
1879 &HomeOrganisationsListAltID,
1880 &HomeOrganisationsListPID,
1881 &HomeOrganisationsListType,
1882 &HomeOrganisationsListTokens,
1883 &HomeOrganisationsListPref,
1884 lboHomeOrganisations,
1886 frameCEOrg->ShowModal();
1891 void frmContactEditor::ModifyHomeOrganisation( wxCommandEvent& event )
1893 long longSelected = -1;
1894 int intSelectedData = 0;
1896 if (!GetSelectedItem(lboHomeOrganisations,
1902 frmContactEditorOrganisations *frameCEOrg = new frmContactEditorOrganisations ( this );
1903 frameCEOrg->SetupPointers(&HomeOrganisationsList,
1904 &HomeOrganisationsListLanguage,
1905 &HomeOrganisationsListSortAs,
1906 &HomeOrganisationsListAltID,
1907 &HomeOrganisationsListPID,
1908 &HomeOrganisationsListType,
1909 &HomeOrganisationsListTokens,
1910 &HomeOrganisationsListPref,
1911 lboHomeOrganisations,
1913 frameCEOrg->SetEditorMode(TRUE, CE_HOME);
1914 frameCEOrg->ShowModal();
1919 void frmContactEditor::DeleteHomeOrganisation( wxCommandEvent& event )
1921 long longSelected = -1;
1922 int intSelectedData = 0;
1924 if (!GetSelectedItem(lboHomeOrganisations,
1930 lboHomeOrganisations->DeleteItem(longSelected);
1932 DeleteMapData(intSelectedData, &HomeOrganisationsList,
1933 &HomeOrganisationsListLanguage, &HomeOrganisationsListSortAs,
1934 &HomeOrganisationsListAltID, &HomeOrganisationsListPID,
1935 &HomeOrganisationsListType, &HomeOrganisationsListTokens,
1936 &HomeOrganisationsListPref);
1940 void frmContactEditor::AddHomeNote( wxCommandEvent& event )
1944 frmContactEditorNotes *frameCENote = new frmContactEditorNotes ( this );
1945 frameCENote->SetEditorMode(FALSE, CE_HOME);
1946 intResult = GetLastInt(&HomeNoteList);
1947 frameCENote->SetupPointers(&HomeNoteList,
1948 &HomeNoteListLanguage,
1952 &HomeNoteListTokens,
1956 frameCENote->ShowModal();
1961 void frmContactEditor::ModifyHomeNote( wxCommandEvent& event )
1963 long longSelected = -1;
1964 int intSelectedData = 0;
1966 if (!GetSelectedItem(lboHomeNotes,
1972 frmContactEditorNotes *frameCENote = new frmContactEditorNotes ( this );
1973 frameCENote->SetupPointers(&HomeNoteList,
1974 &HomeNoteListLanguage,
1978 &HomeNoteListTokens,
1982 frameCENote->SetEditorMode(TRUE, CE_HOME);
1983 frameCENote->ShowModal();
1988 void frmContactEditor::DeleteHomeNote( wxCommandEvent& event )
1990 long longSelected = -1;
1991 int intSelectedData = 0;
1993 if (!GetSelectedItem(lboHomeNotes,
1999 lboNotes->DeleteItem(longSelected);
2001 DeleteMapData(intSelectedData, &HomeNoteList,
2002 &HomeNoteListLanguage, &HomeNoteListAltID,
2003 &HomeNoteListPID, &HomeNoteListType,
2004 &HomeNoteListTokens, &HomeNoteListPref);
2008 void frmContactEditor::AddBusinessNickname( wxCommandEvent& event )
2012 frmContactEditorNickname *frameCENickname = new frmContactEditorNickname ( this );
2013 frameCENickname->SetEditorMode(FALSE, CE_WORK);
2014 intResult = GetLastInt(&BusinessNicknamesList);
2015 frameCENickname->SetupPointers(&BusinessNicknamesList,
2016 &BusinessNicknamesListAltID,
2017 &BusinessNicknamesListPID,
2018 &BusinessNicknamesListType,
2019 &BusinessNicknamesListLanguage,
2020 &BusinessNicknamesListTokens,
2021 &BusinessNicknamesListPref,
2022 lboBusinessNicknames,
2024 frameCENickname->ShowModal();
2025 delete frameCENickname;
2026 frameCENickname = NULL;
2029 void frmContactEditor::ModifyBusinessNickname( wxCommandEvent& event )
2031 long longSelected = -1;
2032 int intSelectedData = 0;
2034 if (!GetSelectedItem(lboBusinessNicknames,
2040 frmContactEditorNickname *frameCENickname = new frmContactEditorNickname ( this );
2041 frameCENickname->SetupPointers(&BusinessNicknamesList,
2042 &BusinessNicknamesListAltID,
2043 &BusinessNicknamesListPID,
2044 &BusinessNicknamesListType,
2045 &BusinessNicknamesListLanguage,
2046 &BusinessNicknamesListTokens,
2047 &BusinessNicknamesListPref,
2048 lboBusinessNicknames,
2050 frameCENickname->SetEditorMode(TRUE, CE_WORK);
2051 frameCENickname->ShowModal();
2052 delete frameCENickname;
2053 frameCENickname = NULL;
2056 void frmContactEditor::DeleteBusinessNickname( wxCommandEvent& event )
2058 long longSelected = -1;
2059 int intSelectedData = 0;
2061 if (!GetSelectedItem(lboBusinessNicknames,
2067 lboBusinessNicknames->DeleteItem(longSelected);
2069 DeleteMapData(intSelectedData,
2070 &BusinessNicknamesList,
2071 &BusinessNicknamesListLanguage,
2072 &BusinessNicknamesListAltID,
2073 &BusinessNicknamesListPID,
2074 &BusinessNicknamesListTokens,
2075 &BusinessNicknamesListType,
2076 &BusinessNicknamesListPref);
2079 void frmContactEditor::AddBusinessAddress( wxCommandEvent& event )
2083 frmContactEditorAddress *frameCEAddress = new frmContactEditorAddress ( this );
2084 frameCEAddress->SetEditorMode(FALSE, CE_WORK);
2085 intResult = GetLastInt(&BusinessAddressList);
2086 frameCEAddress->SetupPointers(&BusinessAddressList,
2087 &BusinessAddressListTown,
2088 &BusinessAddressListCounty,
2089 &BusinessAddressListPostCode,
2090 &BusinessAddressListCountry,
2091 &BusinessAddressListLabel,
2092 &BusinessAddressListLang,
2093 &BusinessAddressListAltID,
2094 &BusinessAddressListPID,
2095 &BusinessAddressListTokens,
2096 &BusinessAddressListGeo,
2097 &BusinessAddressListTimezone,
2098 &BusinessAddressListType,
2099 &BusinessAddressListMediatype,
2100 &BusinessAddressListPref,
2101 lboBusinessAddresses,
2103 frameCEAddress->ShowModal();
2104 delete frameCEAddress;
2105 frameCEAddress = NULL;
2108 void frmContactEditor::ModifyBusinessAddress( wxCommandEvent& event )
2110 long longSelected = -1;
2111 int intSelectedData = 0;
2113 if (!GetSelectedItem(lboBusinessAddresses,
2119 frmContactEditorAddress *frameCEAddress = new frmContactEditorAddress ( this );
2120 frameCEAddress->SetupPointers(&BusinessAddressList,
2121 &BusinessAddressListTown,
2122 &BusinessAddressListCounty,
2123 &BusinessAddressListPostCode,
2124 &BusinessAddressListCountry,
2125 &BusinessAddressListLabel,
2126 &BusinessAddressListLang,
2127 &BusinessAddressListAltID,
2128 &BusinessAddressListPID,
2129 &BusinessAddressListTokens,
2130 &BusinessAddressListGeo,
2131 &BusinessAddressListTimezone,
2132 &BusinessAddressListType,
2133 &BusinessAddressListMediatype,
2134 &BusinessAddressListPref,
2135 lboBusinessAddresses,
2137 frameCEAddress->SetEditorMode(TRUE, CE_WORK);
2138 frameCEAddress->ShowModal();
2139 delete frameCEAddress;
2140 frameCEAddress = NULL;
2143 void frmContactEditor::DeleteBusinessAddress( wxCommandEvent& event )
2145 long longSelected = -1;
2146 int intSelectedData = 0;
2148 if (!GetSelectedItem(lboBusinessAddresses,
2154 lboBusinessAddresses->DeleteItem(longSelected);
2155 DeleteMapData(intSelectedData, &BusinessAddressList,
2156 &BusinessAddressListTown, &BusinessAddressListCounty,
2157 &BusinessAddressListPostCode, &BusinessAddressListCountry,
2158 &BusinessAddressList, &BusinessAddressListLabel,
2159 &BusinessAddressListLang, &BusinessAddressListAltID,
2160 &BusinessAddressListPID, &BusinessAddressListTokens,
2161 &BusinessAddressListGeo, &BusinessAddressListTimezone,
2162 &BusinessAddressListType, &BusinessAddressListMediatype,
2163 &BusinessAddressListPref);
2167 void frmContactEditor::AddBusinessEmail( wxCommandEvent& event )
2171 frmContactEditorEmail *frameCEEmail = new frmContactEditorEmail ( this );
2172 frameCEEmail->SetEditorMode(FALSE, CE_WORK);
2173 intResult = GetLastInt(&BusinessAddressList);
2174 frameCEEmail->SetupPointers(&BusinessEmailList,
2175 &BusinessEmailListAltID,
2176 &BusinessEmailListPID,
2177 &BusinessEmailListType,
2178 &BusinessEmailListTokens,
2179 &BusinessEmailListPref,
2182 frameCEEmail->ShowModal();
2183 delete frameCEEmail;
2184 frameCEEmail = NULL;
2187 void frmContactEditor::ModifyBusinessEmail( wxCommandEvent& event )
2189 long longSelected = -1;
2190 int intSelectedData = 0;
2192 if (!GetSelectedItem(lboBusinessEmail,
2198 frmContactEditorEmail *frameCEEmail = new frmContactEditorEmail ( this );
2199 frameCEEmail->SetupPointers(&BusinessEmailList,
2200 &BusinessEmailListAltID,
2201 &BusinessEmailListPID,
2202 &BusinessEmailListType,
2203 &BusinessEmailListTokens,
2204 &BusinessEmailListPref,
2207 frameCEEmail->SetEditorMode(TRUE, CE_WORK);
2208 frameCEEmail->ShowModal();
2209 delete frameCEEmail;
2210 frameCEEmail = NULL;
2213 void frmContactEditor::DeleteBusinessEmail( wxCommandEvent& event )
2215 long longSelected = -1;
2216 int intSelectedData = 0;
2218 if (!GetSelectedItem(lboBusinessEmail,
2224 lboBusinessEmail->DeleteItem(longSelected);
2226 DeleteMapData(intSelectedData, &BusinessEmailList,
2227 &BusinessEmailListAltID, &BusinessEmailListPID,
2228 &BusinessEmailListType, &BusinessEmailListTokens,
2229 &BusinessEmailListPref);
2233 void frmContactEditor::AddBusinessIM( wxCommandEvent& event )
2237 frmContactEditorIM *frameCEIM = new frmContactEditorIM ( this );
2238 frameCEIM->SetEditorMode(FALSE, CE_WORK);
2239 intResult = GetLastInt(&BusinessIMList);
2240 frameCEIM->SetupPointers(&BusinessIMList,
2241 &BusinessIMListAltID,
2243 &BusinessIMListType,
2244 &BusinessIMListTokens,
2245 &BusinessIMListMediatype,
2246 &BusinessIMListPref,
2249 frameCEIM->ShowModal();
2254 void frmContactEditor::ModifyBusinessIM( wxCommandEvent& event )
2256 long longSelected = -1;
2257 int intSelectedData = 0;
2259 if (!GetSelectedItem(lboBusinessIM,
2265 frmContactEditorIM *frameCEIM = new frmContactEditorIM ( this );
2266 frameCEIM->SetupPointers(&BusinessIMList,
2267 &BusinessIMListAltID,
2269 &BusinessIMListType,
2270 &BusinessIMListTokens,
2271 &BusinessIMListMediatype,
2272 &BusinessIMListPref,
2275 frameCEIM->SetEditorMode(TRUE, CE_WORK);
2276 frameCEIM->ShowModal();
2281 void frmContactEditor::DeleteBusinessIM( wxCommandEvent& event )
2283 long longSelected = -1;
2284 int intSelectedData = 0;
2286 if (!GetSelectedItem(lboBusinessIM,
2292 lboBusinessIM->DeleteItem(longSelected);
2294 DeleteMapData(intSelectedData, &BusinessIMList,
2295 &BusinessIMListAltID, &BusinessIMListPID,
2296 &BusinessIMListType, &BusinessIMListTokens,
2297 &BusinessIMListMediatype, &BusinessIMListPref);
2301 void frmContactEditor::AddBusinessTelephone( wxCommandEvent& event )
2305 frmContactEditorTelephone *frameCETel = new frmContactEditorTelephone ( this );
2306 frameCETel->SetEditorMode(FALSE, CE_WORK);
2307 intResult = GetLastInt(&BusinessTelephoneList);
2308 frameCETel->SetupPointers(&BusinessTelephoneList,
2309 &BusinessTelephoneListAltID,
2310 &BusinessTelephoneListPID,
2311 &BusinessTelephoneListType,
2312 &BusinessTelephoneListTokens,
2313 &BusinessTelephoneListPref,
2314 lboBusinessTelephone,
2316 frameCETel->ShowModal();
2321 void frmContactEditor::ModifyBusinessTelephone( wxCommandEvent& event )
2323 long longSelected = -1;
2324 int intSelectedData = 0;
2326 if (!GetSelectedItem(lboBusinessTelephone,
2332 frmContactEditorTelephone *frameCETel = new frmContactEditorTelephone ( this );
2333 frameCETel->SetupPointers(&BusinessTelephoneList,
2334 &BusinessTelephoneListAltID,
2335 &BusinessTelephoneListPID,
2336 &BusinessTelephoneListType,
2337 &BusinessTelephoneListTokens,
2338 &BusinessTelephoneListPref,
2339 lboBusinessTelephone,
2341 frameCETel->SetEditorMode(TRUE, CE_WORK);
2342 frameCETel->ShowModal();
2347 void frmContactEditor::DeleteBusinessTelephone( wxCommandEvent& event )
2349 long longSelected = -1;
2350 int intSelectedData = 0;
2352 if (!GetSelectedItem(lboBusinessTelephone,
2358 lboBusinessTelephone->DeleteItem(longSelected);
2360 DeleteMapData(intSelectedData, &BusinessTelephoneList,
2361 &BusinessTelephoneListAltID, &BusinessTelephoneListPID,
2362 &BusinessTelephoneListType, &BusinessTelephoneListTokens,
2363 &BusinessTelephoneListPref);
2367 void frmContactEditor::AddBusinessLanguage( wxCommandEvent& event )
2371 frmContactEditorLanguages *frameCELang = new frmContactEditorLanguages ( this );
2372 frameCELang->SetEditorMode(FALSE, CE_WORK);
2373 intResult = GetLastInt(&BusinessLanguageList);
2374 frameCELang->SetupPointers(&BusinessLanguageList,
2375 &BusinessLanguageListAltID,
2376 &BusinessLanguageListPID,
2377 &BusinessLanguageListType,
2378 &BusinessLanguageListTokens,
2379 &BusinessLanguageListPref,
2380 lboBusinessLanguages,
2382 frameCELang->ShowModal();
2387 void frmContactEditor::ModifyBusinessLanguage( wxCommandEvent& event )
2389 long longSelected = -1;
2390 int intSelectedData = 0;
2392 if (!GetSelectedItem(lboBusinessLanguages,
2398 frmContactEditorLanguages *frameCELang = new frmContactEditorLanguages ( this );
2399 frameCELang->SetupPointers(&BusinessLanguageList,
2400 &BusinessLanguageListAltID,
2401 &BusinessLanguageListPID,
2402 &BusinessLanguageListType,
2403 &BusinessLanguageListTokens,
2404 &BusinessLanguageListPref,
2405 lboBusinessLanguages,
2407 frameCELang->SetEditorMode(TRUE, CE_WORK);
2408 frameCELang->ShowModal();
2413 void frmContactEditor::DeleteBusinessLanguage( wxCommandEvent& event )
2415 long longSelected = -1;
2416 int intSelectedData = 0;
2418 if (!GetSelectedItem(lboBusinessLanguages,
2424 lboBusinessLanguages->DeleteItem(longSelected);
2426 DeleteMapData(intSelectedData, &BusinessLanguageList,
2427 &BusinessLanguageListAltID, &BusinessLanguageListPID,
2428 &BusinessLanguageListType, &BusinessLanguageListTokens,
2429 &BusinessLanguageListPref);
2433 void frmContactEditor::AddBusinessTimezone( wxCommandEvent& event )
2437 frmContactEditorTimezones *frameCETZ = new frmContactEditorTimezones ( this );
2438 frameCETZ->SetEditorMode(FALSE, CE_WORK);
2439 intResult = GetLastInt(&BusinessTZList);
2440 frameCETZ->SetupPointers(&BusinessTZList,
2441 &BusinessTZListAltID,
2443 &BusinessTZListType,
2444 &BusinessTZListTokens,
2445 &BusinessTZListMediatype,
2446 &BusinessTZListPref,
2447 lboBusinessTimezones,
2449 frameCETZ->ShowModal();
2454 void frmContactEditor::ModifyBusinessTimezone( wxCommandEvent& event )
2456 long longSelected = -1;
2457 int intSelectedData = 0;
2459 if (!GetSelectedItem(lboBusinessTimezones,
2465 frmContactEditorTimezones *frameCETZ = new frmContactEditorTimezones ( this );
2466 frameCETZ->SetupPointers(&BusinessTZList,
2467 &BusinessTZListAltID,
2469 &BusinessTZListType,
2470 &BusinessTZListTokens,
2471 &BusinessTZListMediatype,
2472 &BusinessTZListPref,
2473 lboBusinessTimezones,
2475 frameCETZ->SetEditorMode(TRUE, CE_WORK);
2476 frameCETZ->ShowModal();
2481 void frmContactEditor::DeleteBusinessTimezone( wxCommandEvent& event )
2483 long longSelected = -1;
2484 int intSelectedData = 0;
2486 if (!GetSelectedItem(lboBusinessTimezones,
2492 lboBusinessTimezones->DeleteItem(longSelected);
2494 DeleteMapData(intSelectedData, &BusinessTZList,
2495 &BusinessTZListAltID, &BusinessTZListPID,
2496 &BusinessTZListType, &BusinessTZListTokens,
2497 &BusinessTZListMediatype, &BusinessTZListPref);
2501 void frmContactEditor::AddBusinessGeoposition( wxCommandEvent& event )
2505 frmContactEditorGeoposition *frameCEGeo = new frmContactEditorGeoposition ( this );
2506 frameCEGeo->SetEditorMode(FALSE, CE_WORK);
2507 intResult = GetLastInt(&BusinessGeographyList);
2508 frameCEGeo->SetupPointers(&BusinessGeographyList,
2509 &BusinessGeographyListAltID,
2510 &BusinessGeographyListPID,
2511 &BusinessGeographyListType,
2512 &BusinessGeographyListTokens,
2513 &BusinessGeographyListMediatype,
2514 &BusinessGeographyListPref,
2515 lboBusinessGeoposition,
2517 frameCEGeo->ShowModal();
2522 void frmContactEditor::ModifyBusinessGeoposition( wxCommandEvent& event )
2524 long longSelected = -1;
2525 int intSelectedData = 0;
2527 if (!GetSelectedItem(lboBusinessGeoposition,
2533 frmContactEditorGeoposition *frameCEGeo = new frmContactEditorGeoposition ( this );
2534 frameCEGeo->SetupPointers(&BusinessGeographyList,
2535 &BusinessGeographyListAltID,
2536 &BusinessGeographyListPID,
2537 &BusinessGeographyListType,
2538 &BusinessGeographyListTokens,
2539 &BusinessGeographyListMediatype,
2540 &BusinessGeographyListPref,
2541 lboBusinessGeoposition,
2543 frameCEGeo->SetEditorMode(TRUE, CE_WORK);
2544 frameCEGeo->ShowModal();
2549 void frmContactEditor::DeleteBusinessGeoposition( wxCommandEvent& event )
2551 long longSelected = -1;
2552 int intSelectedData = 0;
2554 if (!GetSelectedItem(lboBusinessGeoposition,
2560 lboBusinessGeoposition->DeleteItem(longSelected);
2562 DeleteMapData(intSelectedData, &BusinessGeographyList,
2563 &BusinessGeographyListAltID, &BusinessGeographyListPID,
2564 &BusinessGeographyListType, &BusinessGeographyListTokens,
2565 &BusinessGeographyListMediatype, &BusinessGeographyListPref);
2569 void frmContactEditor::AddBusinessWebsite( wxCommandEvent& event )
2573 frmContactEditorWebsites *frameCEWeb = new frmContactEditorWebsites ( this );
2574 frameCEWeb->SetEditorMode(FALSE, CE_WORK);
2575 intResult = GetLastInt(&BusinessWebsiteList);
2576 frameCEWeb->SetupPointers(&BusinessWebsiteList,
2577 &BusinessWebsiteListAltID,
2578 &BusinessWebsiteListPID,
2579 &BusinessWebsiteListType,
2580 &BusinessWebsiteListTokens,
2581 &BusinessWebsiteListMediatype,
2582 &BusinessWebsiteListPref,
2583 lboBusinessWebsites,
2585 frameCEWeb->ShowModal();
2590 void frmContactEditor::ModifyBusinessWebsite( wxCommandEvent& event )
2592 long longSelected = -1;
2593 int intSelectedData = 0;
2595 if (!GetSelectedItem(lboBusinessWebsites,
2601 frmContactEditorWebsites *frameCEWeb = new frmContactEditorWebsites ( this );
2602 frameCEWeb->SetupPointers(&BusinessWebsiteList,
2603 &BusinessWebsiteListAltID,
2604 &BusinessWebsiteListPID,
2605 &BusinessWebsiteListType,
2606 &BusinessWebsiteListTokens,
2607 &BusinessWebsiteListMediatype,
2608 &BusinessWebsiteListPref,
2609 lboBusinessWebsites,
2611 frameCEWeb->SetEditorMode(TRUE, CE_WORK);
2612 frameCEWeb->ShowModal();
2617 void frmContactEditor::DeleteBusinessWebsite( wxCommandEvent& event )
2619 long longSelected = -1;
2620 int intSelectedData = 0;
2622 if (!GetSelectedItem(lboBusinessWebsites,
2628 lboBusinessWebsites->DeleteItem(longSelected);
2630 DeleteMapData(intSelectedData, &BusinessWebsiteList,
2631 &BusinessWebsiteListAltID, &BusinessWebsiteListPID,
2632 &BusinessWebsiteListType, &BusinessWebsiteListTokens,
2633 &BusinessWebsiteListMediatype, &BusinessWebsiteListPref);
2637 void frmContactEditor::AddBusinessTitle( wxCommandEvent& event )
2641 frmContactEditorTitles *frameCETitle = new frmContactEditorTitles ( this );
2642 frameCETitle->SetEditorMode(FALSE, CE_WORK);
2643 intResult = GetLastInt(&BusinessTitleList);
2644 frameCETitle->SetupPointers(&BusinessTitleList,
2645 &BusinessTitleListLanguage,
2646 &BusinessTitleListAltID,
2647 &BusinessTitleListPID,
2648 &BusinessTitleListType,
2649 &BusinessTitleListTokens,
2650 &BusinessTitleListPref,
2653 frameCETitle->ShowModal();
2654 delete frameCETitle;
2655 frameCETitle = NULL;
2658 void frmContactEditor::ModifyBusinessTitle( wxCommandEvent& event )
2660 long longSelected = -1;
2661 int intSelectedData = 0;
2663 if (!GetSelectedItem(lboBusinessTitles,
2669 frmContactEditorTitles *frameCETitle = new frmContactEditorTitles ( this );
2670 frameCETitle->SetupPointers(&BusinessTitleList,
2671 &BusinessTitleListLanguage,
2672 &BusinessTitleListAltID,
2673 &BusinessTitleListPID,
2674 &BusinessTitleListType,
2675 &BusinessTitleListTokens,
2676 &BusinessTitleListPref,
2679 frameCETitle->SetEditorMode(TRUE, CE_WORK);
2680 frameCETitle->ShowModal();
2681 delete frameCETitle;
2682 frameCETitle = NULL;
2685 void frmContactEditor::DeleteBusinessTitle( wxCommandEvent& event )
2687 long longSelected = -1;
2688 int intSelectedData = 0;
2690 if (!GetSelectedItem(lboBusinessTitles,
2696 lboTitles->DeleteItem(longSelected);
2698 DeleteMapData(intSelectedData, &BusinessTitleList,
2699 &BusinessTitleListLanguage, &BusinessTitleListAltID,
2700 &BusinessTitleListPID, &BusinessTitleListType,
2701 &BusinessTitleListTokens, &BusinessTitleListPref);
2705 void frmContactEditor::AddBusinessRole( wxCommandEvent& event )
2709 frmContactEditorRoles *frameCERole = new frmContactEditorRoles ( this );
2710 frameCERole->SetEditorMode(FALSE, CE_WORK);
2711 intResult = GetLastInt(&BusinessRoleList);
2712 frameCERole->SetupPointers(&BusinessRoleList,
2713 &BusinessRoleListLanguage,
2714 &BusinessRoleListAltID,
2715 &BusinessRoleListPID,
2716 &BusinessRoleListType,
2717 &BusinessRoleListTokens,
2718 &BusinessRoleListPref,
2721 frameCERole->ShowModal();
2726 void frmContactEditor::ModifyBusinessRole( wxCommandEvent& event )
2728 long longSelected = -1;
2729 int intSelectedData = 0;
2731 if (!GetSelectedItem(lboBusinessRoles,
2737 frmContactEditorRoles *frameCERole = new frmContactEditorRoles ( this );
2738 frameCERole->SetupPointers(&BusinessRoleList,
2739 &BusinessRoleListLanguage,
2740 &BusinessRoleListAltID,
2741 &BusinessRoleListPID,
2742 &BusinessRoleListType,
2743 &BusinessRoleListTokens,
2744 &BusinessRoleListPref,
2747 frameCERole->SetEditorMode(TRUE, CE_WORK);
2748 frameCERole->ShowModal();
2753 void frmContactEditor::DeleteBusinessRole( wxCommandEvent& event )
2755 long longSelected = -1;
2756 int intSelectedData = 0;
2758 if (!GetSelectedItem(lboBusinessRoles,
2764 lboBusinessRoles->DeleteItem(longSelected);
2766 DeleteMapData(intSelectedData, &BusinessRoleList,
2767 &BusinessRoleListLanguage, &BusinessRoleListAltID,
2768 &BusinessRoleListPID, &BusinessRoleListType,
2769 &BusinessRoleListTokens, &BusinessRoleListPref);
2773 void frmContactEditor::AddBusinessOrganisation( wxCommandEvent& event )
2777 frmContactEditorOrganisations *frameCEOrg = new frmContactEditorOrganisations ( this );
2778 frameCEOrg->SetEditorMode(FALSE, CE_WORK);
2779 intResult = GetLastInt(&GeneralOrganisationsList);
2780 frameCEOrg->SetupPointers(&GeneralOrganisationsList,
2781 &BusinessOrganisationsListLanguage,
2782 &BusinessOrganisationsListSortAs,
2783 &BusinessOrganisationsListAltID,
2784 &BusinessOrganisationsListPID,
2785 &BusinessOrganisationsListType,
2786 &BusinessOrganisationsListTokens,
2787 &BusinessOrganisationsListPref,
2788 lboBusinessOrganisations,
2790 frameCEOrg->ShowModal();
2795 void frmContactEditor::ModifyBusinessOrganisation( wxCommandEvent& event )
2797 long longSelected = -1;
2798 int intSelectedData = 0;
2800 if (!GetSelectedItem(lboBusinessOrganisations,
2806 frmContactEditorOrganisations *frameCEOrg = new frmContactEditorOrganisations ( this );
2807 frameCEOrg->SetupPointers(&BusinessOrganisationsList,
2808 &BusinessOrganisationsListLanguage,
2809 &BusinessOrganisationsListSortAs,
2810 &BusinessOrganisationsListAltID,
2811 &BusinessOrganisationsListPID,
2812 &BusinessOrganisationsListType,
2813 &BusinessOrganisationsListTokens,
2814 &BusinessOrganisationsListPref,
2815 lboBusinessOrganisations,
2817 frameCEOrg->SetEditorMode(TRUE, CE_WORK);
2818 frameCEOrg->ShowModal();
2823 void frmContactEditor::DeleteBusinessOrganisation( wxCommandEvent& event )
2825 long longSelected = -1;
2826 int intSelectedData = 0;
2828 if (!GetSelectedItem(lboBusinessOrganisations,
2834 lboBusinessOrganisations->DeleteItem(longSelected);
2836 DeleteMapData(intSelectedData, &BusinessOrganisationsList,
2837 &BusinessOrganisationsListLanguage, &BusinessOrganisationsListSortAs,
2838 &BusinessOrganisationsListAltID, &BusinessOrganisationsListPID,
2839 &BusinessOrganisationsListType, &BusinessOrganisationsListTokens,
2840 &BusinessOrganisationsListPref);
2844 void frmContactEditor::AddBusinessNote( wxCommandEvent& event )
2848 frmContactEditorNotes *frameCENote = new frmContactEditorNotes ( this );
2849 frameCENote->SetEditorMode(FALSE, CE_WORK);
2850 intResult = GetLastInt(&BusinessNoteList);
2851 frameCENote->SetupPointers(&BusinessNoteList,
2852 &BusinessNoteListLanguage,
2853 &BusinessNoteListAltID,
2854 &BusinessNoteListPID,
2855 &BusinessNoteListType,
2856 &BusinessNoteListTokens,
2857 &BusinessNoteListPref,
2860 frameCENote->ShowModal();
2865 void frmContactEditor::ModifyBusinessNote( wxCommandEvent& event )
2867 long longSelected = -1;
2868 int intSelectedData = 0;
2870 if (!GetSelectedItem(lboBusinessNotes,
2876 frmContactEditorNotes *frameCENote = new frmContactEditorNotes ( this );
2877 frameCENote->SetupPointers(&BusinessNoteList,
2878 &BusinessNoteListLanguage,
2879 &BusinessNoteListAltID,
2880 &BusinessNoteListPID,
2881 &BusinessNoteListType,
2882 &BusinessNoteListTokens,
2883 &BusinessNoteListPref,
2886 frameCENote->SetEditorMode(TRUE, CE_WORK);
2887 frameCENote->ShowModal();
2892 void frmContactEditor::DeleteBusinessNote( wxCommandEvent& event )
2894 long longSelected = -1;
2895 int intSelectedData = 0;
2897 if (!GetSelectedItem(lboBusinessNotes,
2903 lboBusinessNotes->DeleteItem(longSelected);
2905 DeleteMapData(intSelectedData, &BusinessNoteList,
2906 &BusinessNoteListLanguage, &BusinessNoteListAltID,
2907 &BusinessNoteListPID, &BusinessNoteListType,
2908 &BusinessNoteListTokens, &BusinessNoteListPref);
2912 void frmContactEditor::AddCategory( wxCommandEvent& event )
2916 frmContactEditorCategory *frameCECategory = new frmContactEditorCategory ( this );
2917 frameCECategory->SetEditorMode(FALSE);
2918 intResult = GetLastInt(&CategoriesList);
2919 frameCECategory->SetupPointers(&CategoriesList,
2920 &CategoriesListAltID,
2922 &CategoriesListType,
2923 &CategoriesListTokens,
2924 &CategoriesListPref,
2927 frameCECategory->ShowModal();
2928 delete frameCECategory;
2929 frameCECategory = NULL;
2932 void frmContactEditor::ModifyCategory( wxCommandEvent& event )
2934 long longSelected = -1;
2935 int intSelectedData = 0;
2937 if (!GetSelectedItem(lboCategories,
2943 frmContactEditorCategory *frameCECategory = new frmContactEditorCategory ( this );
2944 frameCECategory->SetupPointers(&CategoriesList,
2945 &CategoriesListAltID,
2947 &CategoriesListType,
2948 &CategoriesListTokens,
2949 &CategoriesListPref,
2952 frameCECategory->SetEditorMode(TRUE);
2953 frameCECategory->ShowModal();
2954 delete frameCECategory;
2955 frameCECategory = NULL;
2958 void frmContactEditor::DeleteCategory( wxCommandEvent& event )
2960 long longSelected = -1;
2961 int intSelectedData = 0;
2963 if (!GetSelectedItem(lboCategories,
2969 lboCategories->DeleteItem(longSelected);
2971 DeleteMapData(intSelectedData, &CategoriesList,
2972 &CategoriesListAltID, &CategoriesListPID,
2973 &CategoriesListType, &CategoriesListTokens,
2974 &CategoriesListPref);
2978 void frmContactEditor::AddGroup( wxCommandEvent& event )
2983 XABViewMode XVMData = MainPtr->GetViewMode();
2985 frmContactEditorGroup *frameCEGroup = new frmContactEditorGroup ( this );
2986 frameCEGroup->SetEditorMode(FALSE, XVMData);
2987 intResult = GetLastInt(&GroupsList);
2988 frameCEGroup->SetupPointers(&GroupsList,
2992 frameCEGroup->ShowModal();
2993 delete frameCEGroup;
2994 frameCEGroup = NULL;
2998 void frmContactEditor::ModifyGroup( wxCommandEvent& event )
3005 void frmContactEditor::DeleteGroup( wxCommandEvent& event )
3008 long longSelected = -1;
3009 int intSelectedData = 0;
3011 if (!GetSelectedItem(lboGroups,
3017 lboGroups->DeleteItem(longSelected);
3019 DeleteMapData(intSelectedData, &GroupsList);
3023 void frmContactEditor::AddPicture( wxCommandEvent& event )
3027 frmContactEditorPicture *frameCEPicture = new frmContactEditorPicture ( this );
3028 frameCEPicture->SetEditorMode(FALSE);
3029 intResult = GetLastInt(&PicturesList);
3030 frameCEPicture->SetupPointers(&PicturesList,
3034 &PicturesListPicEncType,
3035 &PicturesListPictureType,
3036 &PicturesListTokens,
3037 &PicturesListMediatype,
3041 frameCEPicture->ShowModal();
3042 delete frameCEPicture;
3043 frameCEPicture = NULL;
3046 void frmContactEditor::ModifyPicture( wxCommandEvent& event )
3048 long longSelected = -1;
3049 int intSelectedData = 0;
3051 if (!GetSelectedItem(lboPictures,
3057 frmContactEditorPicture *frameCEPicture = new frmContactEditorPicture ( this );
3058 frameCEPicture->SetupPointers(&PicturesList,
3062 &PicturesListPicEncType,
3063 &PicturesListPictureType,
3064 &PicturesListTokens,
3065 &PicturesListMediatype,
3069 frameCEPicture->SetEditorMode(TRUE);
3070 frameCEPicture->ShowModal();
3071 delete frameCEPicture;
3072 frameCEPicture = NULL;
3076 void frmContactEditor::DeletePicture( wxCommandEvent& event )
3078 long longSelected = -1;
3079 int intSelectedData = 0;
3081 if (!GetSelectedItem(lboPictures,
3087 lboPictures->DeleteItem(longSelected);
3089 DeleteMapData(intSelectedData,
3090 &PicturesList, &PicturesListAltID, &PicturesListPID, &PicturesListType,
3091 &PicturesListPicEncType, &PicturesListPictureType, &PicturesListTokens,
3092 &PicturesListMediatype, &PicturesListPref);
3094 wxMemoryInputStream istream(misc_emptyimage_png, sizeof(misc_emptyimage_png));
3095 wxImage misc_emptyimage_png(istream, wxBITMAP_TYPE_PNG);
3096 PictureImage = (wxBitmap)misc_emptyimage_png;
3098 imgPicture->SetBitmap(PictureImage);
3101 void frmContactEditor::LoadPicture( wxListEvent& event )
3104 long longSelected = -1;
3105 int intSelectedData = 0;
3107 if (!GetSelectedItem(lboPictures,
3113 std::string base64dec;
3115 std::map<int,std::string>::iterator initier;
3116 std::map<int,wxString>::iterator pictypeiter;
3118 initier = PicturesList.find(intSelectedData);
3119 pictypeiter = PicturesListPictureType.find(intSelectedData);
3121 base64dec = base64_decode(initier->second);
3123 wxMemoryInputStream istream(base64dec.c_str(), (size_t)base64dec.size());
3125 //wxMemoryInputStream istream(base64dec, (size_t)base64dec.size());
3127 wxPuts(wxT("PicType:") + pictypeiter->second);
3129 if (pictypeiter->second == wxT("image/jpeg")){
3131 if (!photo.LoadFile(istream, wxBITMAP_TYPE_JPEG)){
3137 } else if (pictypeiter->second == wxT("image/png")){
3139 if (!photo.LoadFile(istream, wxBITMAP_TYPE_PNG)){
3145 } else if (pictypeiter->second == wxT("image/gif")){
3147 if (!photo.LoadFile(istream, wxBITMAP_TYPE_GIF)){
3159 PictureImage = (wxBitmap)photo;
3160 imgPicture->SetBitmap(PictureImage);
3164 void frmContactEditor::LoadLogo( wxListEvent& event )
3167 long longSelected = -1;
3168 int intSelectedData = 0;
3170 if (!GetSelectedItem(lboLogos,
3176 std::string base64dec;
3178 std::map<int,std::string>::iterator initier;
3180 initier = LogosList.find(intSelectedData);
3182 base64dec = base64_decode(initier->second);
3185 wxMemoryInputStream istream(base64dec.c_str(), (size_t)base64dec.size());
3187 //wxMemoryInputStream istream(base64dec, (size_t)base64dec.size());
3189 if (!photo.LoadFile(istream, wxBITMAP_TYPE_ANY)){
3196 LogoImage = (wxBitmap)photo;
3197 imgLogo->SetBitmap(LogoImage);
3201 void frmContactEditor::AddLogo( wxCommandEvent& event )
3205 frmContactEditorPicture *frameCELogo = new frmContactEditorPicture ( this );
3206 frameCELogo->SetEditorMode(FALSE);
3207 intResult = GetLastInt(&LogosList);
3208 frameCELogo->SetupPointers(&LogosList,
3212 &LogosListPicEncType,
3213 &LogosListPictureType,
3215 &LogosListMediatype,
3219 frameCELogo->ShowModal();
3224 void frmContactEditor::ModifyLogo( wxCommandEvent& event )
3226 long longSelected = -1;
3227 int intSelectedData = 0;
3229 if (!GetSelectedItem(lboLogos,
3235 frmContactEditorPicture *frameCELogo = new frmContactEditorPicture ( this );
3236 frameCELogo->SetupPointers(&LogosList,
3240 &LogosListPicEncType,
3241 &LogosListPictureType,
3243 &LogosListMediatype,
3247 frameCELogo->SetEditorMode(TRUE);
3248 frameCELogo->ShowModal();
3253 void frmContactEditor::DeleteLogo( wxCommandEvent& event )
3255 long longSelected = -1;
3256 int intSelectedData = 0;
3258 if (!GetSelectedItem(lboLogos,
3264 lboLogos->DeleteItem(longSelected);
3266 DeleteMapData(intSelectedData,
3267 &LogosList, &LogosListAltID, &LogosListPID, &LogosListType,
3268 &LogosListPicEncType, &LogosListPictureType, &LogosListTokens,
3269 &LogosListMediatype, &LogosListPref);
3271 wxMemoryInputStream istream(misc_emptyimage_png, sizeof(misc_emptyimage_png));
3272 wxImage misc_emptyimage_png(istream, wxBITMAP_TYPE_PNG);
3273 LogoImage = (wxBitmap)misc_emptyimage_png;
3275 imgLogo->SetBitmap(LogoImage);
3278 void frmContactEditor::AddSound( wxCommandEvent& event )
3282 frmContactEditorSound *frameCESound = new frmContactEditorSound ( this );
3283 frameCESound->SetEditorMode(FALSE);
3284 intResult = GetLastInt(&SoundsList);
3285 frameCESound->SetupPointers(&SoundsList,
3289 &SoundsListAudioType,
3290 &SoundsListAudioEncType,
3292 &SoundsListMediatype,
3296 frameCESound->ShowModal();
3297 delete frameCESound;
3298 frameCESound = NULL;
3301 void frmContactEditor::ModifySound( wxCommandEvent& event )
3303 long longSelected = -1;
3304 int intSelectedData = 0;
3306 if (!GetSelectedItem(lboSounds,
3312 frmContactEditorSound *frameCESound = new frmContactEditorSound ( this );
3313 frameCESound->SetupPointers(&SoundsList,
3317 &SoundsListAudioType,
3318 &SoundsListAudioEncType,
3320 &SoundsListMediatype,
3324 frameCESound->SetEditorMode(TRUE);
3325 frameCESound->ShowModal();
3326 delete frameCESound;
3327 frameCESound = NULL;
3330 void frmContactEditor::DeleteSound( wxCommandEvent& event )
3332 long longSelected = -1;
3333 int intSelectedData = 0;
3335 if (!GetSelectedItem(lboSounds,
3341 lboSounds->DeleteItem(longSelected);
3343 DeleteMapData(intSelectedData, &SoundsList, &SoundsListAltID,
3344 &SoundsListPID, &SoundsListType, &SoundsListAudioType,
3345 &SoundsListAudioEncType, &SoundsListTokens, &SoundsListMediatype,
3350 void frmContactEditor::PlaySoundDetach()
3353 if (!AudioStreamPlayback.openFromMemory(base64dec.c_str(), base64declen)){
3355 // Can't load file. We must flee...
3356 // Also show an error message too.
3358 wxMessageBox(_("This file is in an audio format that is unsupported or is not an audio file."), _("Error opening audio file"), wxICON_ERROR);
3366 //AudioStreamPlayback.setbuffer(AudioBuffer);
3367 AudioStreamPlayback.play();
3372 n1.tv_nsec = 100000000L;*/
3374 //while (TimeA != TimeB){
3375 while (AudioStreamPlayback.getStatus() == sf::SoundSource::Playing){
3377 // We poll this every 100ms in order to conserve CPU usage.
3379 SleepFor(100000000);
3387 void frmContactEditor::PlaySound( wxCommandEvent& event )
3390 //sf::Music *AudioPlayback = new sf::Music;
3391 //AudioStream *AudioStreamPlayback = new AudioStream;
3392 //sf::SoundBuffer *AudioBuffer = new sf::SoundBuffer;
3394 //sf::Sound *AudioPlayback = new sf::Sound;
3396 //delete(AudioPlayback);
3398 //delete(AudioPlayback);
3399 //delete(AudioStreamPlayback);
3400 //delete(AudioBuffer);
3402 //AudioPlayback = NULL;
3403 //AudioStreamPlayback = NULL;
3404 //AudioBuffer = NULL;
3408 long longSelected = -1;
3409 int intSelectedData = 0;
3411 // Check if sound is still being played and if it is, stop it.
3413 if (AudioStreamPlayback.getStatus() == sf::SoundSource::Playing){
3415 AudioStreamPlayback.stop();
3419 if (!GetSelectedItem(lboSounds,
3425 std::map<int, std::string>::iterator initier;
3427 initier = SoundsList.find(intSelectedData);
3429 base64dec = base64_decode(initier->second);
3430 base64declen = base64dec.size();
3432 std::thread AudioPlaybackThread(&frmContactEditor::PlaySoundDetach, this);
3433 AudioPlaybackThread.detach();
3439 void frmContactEditor::StopSound( wxCommandEvent& event )
3442 if (AudioStreamPlayback.getStatus() == sf::SoundSource::Playing){
3444 AudioStreamPlayback.stop();
3454 void frmContactEditor::AddCalendarAddress( wxCommandEvent& event )
3458 frmContactEditorCalAdr *frameCECalAdr = new frmContactEditorCalAdr ( this );
3459 frameCECalAdr->SetEditorMode(FALSE);
3460 intResult = GetLastInt(&CalendarList);
3461 frameCECalAdr->SetupPointers(&CalendarList,
3465 &CalendarListTokens,
3467 lboCalendarAddresses,
3469 frameCECalAdr->ShowModal();
3470 delete frameCECalAdr;
3471 frameCECalAdr = NULL;
3474 void frmContactEditor::ModifyCalendarAddress( wxCommandEvent& event )
3476 long longSelected = -1;
3477 int intSelectedData = 0;
3479 if (!GetSelectedItem(lboCalendarAddresses,
3485 frmContactEditorCalAdr *frameCECalAdr = new frmContactEditorCalAdr ( this );
3486 frameCECalAdr->SetupPointers(&CalendarList,
3490 &CalendarListTokens,
3492 lboCalendarAddresses,
3494 frameCECalAdr->SetEditorMode(TRUE);
3495 frameCECalAdr->ShowModal();
3496 delete frameCECalAdr;
3497 frameCECalAdr = NULL;
3500 void frmContactEditor::DeleteCalendarAddress( wxCommandEvent& event )
3502 long longSelected = -1;
3503 int intSelectedData = 0;
3505 if (!GetSelectedItem(lboCalendarAddresses,
3511 lboCalendarAddresses->DeleteItem(longSelected);
3513 DeleteMapData(intSelectedData, &CalendarList, &CalendarListAltID,
3514 &CalendarListPID, &CalendarListType, &CalendarListTokens,
3519 void frmContactEditor::AddCalendarRequest( wxCommandEvent& event )
3523 frmContactEditorCalAdr *frameCECalAdr = new frmContactEditorCalAdr ( this );
3524 frameCECalAdr->SetEditorMode(FALSE);
3525 intResult = GetLastInt(&CalendarRequestList);
3526 frameCECalAdr->SetupPointers(&CalendarRequestList,
3527 &CalendarRequestListAltID,
3528 &CalendarRequestListPID,
3529 &CalendarRequestListType,
3530 &CalendarRequestListTokens,
3531 &CalendarRequestListPref,
3532 lboCalendarRequestAddress,
3534 frameCECalAdr->ShowModal();
3535 delete frameCECalAdr;
3536 frameCECalAdr = NULL;
3539 void frmContactEditor::ModifyCalendarRequest( wxCommandEvent& event )
3541 long longSelected = -1;
3542 int intSelectedData = 0;
3544 if (!GetSelectedItem(lboCalendarRequestAddress,
3550 frmContactEditorCalAdr *frameCECalAdr = new frmContactEditorCalAdr ( this );
3551 frameCECalAdr->SetupPointers(&CalendarList,
3552 &CalendarRequestListAltID,
3553 &CalendarRequestListPID,
3554 &CalendarRequestListType,
3555 &CalendarRequestListTokens,
3556 &CalendarRequestListPref,
3557 lboCalendarRequestAddress,
3559 frameCECalAdr->SetEditorMode(TRUE);
3560 frameCECalAdr->ShowModal();
3561 delete frameCECalAdr;
3562 frameCECalAdr = NULL;
3565 void frmContactEditor::DeleteCalendarRequest( wxCommandEvent& event )
3567 long longSelected = -1;
3568 int intSelectedData = 0;
3570 if (!GetSelectedItem(lboCalendarRequestAddress,
3576 lboCalendarRequestAddress->DeleteItem(longSelected);
3578 DeleteMapData(intSelectedData, &CalendarRequestList,
3579 &CalendarRequestListAltID, &CalendarRequestListPID,
3580 &CalendarRequestListType, &CalendarRequestListTokens,
3581 &CalendarRequestListPref);
3584 void frmContactEditor::AddFreeBusy( wxCommandEvent& event )
3588 frmContactEditorCalAdr *frameCECalAdr = new frmContactEditorCalAdr ( this );
3589 frameCECalAdr->SetEditorMode(FALSE);
3590 intResult = GetLastInt(&FreeBusyList);
3591 frameCECalAdr->SetupPointers(&FreeBusyList,
3595 &FreeBusyListTokens,
3597 lboFreeBusyAddresses,
3599 frameCECalAdr->ShowModal();
3600 delete frameCECalAdr;
3601 frameCECalAdr = NULL;
3604 void frmContactEditor::ModifyFreeBusy( wxCommandEvent& event )
3606 long longSelected = -1;
3607 int intSelectedData = 0;
3609 if (!GetSelectedItem(lboFreeBusyAddresses,
3615 frmContactEditorCalAdr *frameCECalAdr = new frmContactEditorCalAdr ( this );
3616 frameCECalAdr->SetupPointers(&FreeBusyList,
3620 &FreeBusyListTokens,
3622 lboFreeBusyAddresses,
3624 frameCECalAdr->SetEditorMode(TRUE);
3625 frameCECalAdr->ShowModal();
3626 delete frameCECalAdr;
3627 frameCECalAdr = NULL;
3630 void frmContactEditor::DeleteFreeBusy( wxCommandEvent& event )
3632 long longSelected = -1;
3633 int intSelectedData = 0;
3635 if (!GetSelectedItem(lboFreeBusyAddresses,
3641 lboFreeBusyAddresses->DeleteItem(longSelected);
3643 DeleteMapData(intSelectedData, &FreeBusyList, &FreeBusyListAltID,
3644 &FreeBusyListPID, &FreeBusyListType, &FreeBusyListTokens,
3649 void frmContactEditor::AddKey( wxCommandEvent& event )
3653 frmContactEditorKey *frameCEKey = new frmContactEditorKey ( this );
3654 frameCEKey->SetEditorMode(FALSE);
3655 intResult = GetLastInt(&KeyList);
3656 frameCEKey->SetupPointers(&KeyList,
3666 frameCEKey->ShowModal();
3671 void frmContactEditor::ModifyKey( wxCommandEvent& event )
3673 long longSelected = -1;
3674 int intSelectedData = 0;
3676 if (!GetSelectedItem(lboKeys,
3682 frmContactEditorKey *frameCEKey = new frmContactEditorKey ( this );
3683 frameCEKey->SetupPointers(&KeyList,
3693 frameCEKey->SetEditorMode(TRUE);
3694 frameCEKey->ShowModal();
3699 void frmContactEditor::DeleteKey( wxCommandEvent& event )
3701 long longSelected = -1;
3702 int intSelectedData = 0;
3704 if (!GetSelectedItem(lboKeys,
3710 lboKeys->DeleteItem(longSelected);
3712 DeleteMapData(intSelectedData, &KeyList, &KeyListAltID,
3713 &KeyListPID, &KeyListKeyType, &KeyListDataType, &KeyListType,
3714 &KeyListTokens, &KeyListPref);
3718 void frmContactEditor::AddVendorNamespace( wxCommandEvent& event )
3722 frmContactEditorVendor *frameCEVen = new frmContactEditorVendor ( this );
3723 frameCEVen->SetEditorMode(FALSE);
3724 intResult = GetLastInt(&VendorList);
3725 frameCEVen->SetupPointers(&VendorList,
3730 frameCEVen->ShowModal();
3735 void frmContactEditor::ModifyVendorNamespace( wxCommandEvent& event )
3737 long longSelected = -1;
3738 int intSelectedData = 0;
3740 if (!GetSelectedItem(lboVendorNamespace,
3746 frmContactEditorVendor *frameCEVen = new frmContactEditorVendor ( this );
3747 frameCEVen->SetupPointers(&VendorList,
3752 frameCEVen->SetEditorMode(TRUE);
3753 frameCEVen->ShowModal();
3758 void frmContactEditor::DeleteVendorNamespace( wxCommandEvent& event )
3760 long longSelected = -1;
3761 int intSelectedData = 0;
3763 if (!GetSelectedItem(lboVendorNamespace,
3769 lboVendorNamespace->DeleteItem(longSelected);
3771 DeleteMapData(intSelectedData, &VendorList, &VendorListPEN,
3772 &VendorListElement);
3776 void frmContactEditor::AddXToken( wxCommandEvent& event )
3780 frmContactEditorXToken *frameCEXT = new frmContactEditorXToken ( this );
3781 frameCEXT->SetEditorMode(FALSE);
3782 intResult = GetLastInt(&XTokenList);
3783 frameCEXT->SetupPointers(&XTokenList,
3787 frameCEXT->ShowModal();
3792 void frmContactEditor::ModifyXToken( wxCommandEvent& event )
3794 long longSelected = -1;
3795 int intSelectedData = 0;
3797 if (!GetSelectedItem(lboXToken,
3803 frmContactEditorXToken *frameCEXT = new frmContactEditorXToken ( this );
3804 frameCEXT->SetupPointers(&XTokenList,
3808 frameCEXT->SetEditorMode(TRUE);
3809 frameCEXT->ShowModal();
3814 void frmContactEditor::DeleteXToken( wxCommandEvent& event )
3816 long longSelected = -1;
3817 int intSelectedData = 0;
3819 if (!GetSelectedItem(lboXToken,
3825 lboXToken->DeleteItem(longSelected);
3827 DeleteMapData(intSelectedData, &XTokenList, &XTokenListTokens);
3831 void frmContactEditor::SaveContact( wxCommandEvent& event )
3834 // Check if Display As combo box has a value in it.
3835 // Do not go any further if there is no value.
3837 wxString cmbDisplayAsValue = cmbDisplayAs->GetValue();
3839 if (cmbDisplayAsValue.IsEmpty()){
3841 wxMessageBox(_("Display As value cannot be left blank."), _("Display As value empty"), wxICON_ERROR);
3846 // Save the updated contact data.
3849 wxString FilenameFinal;
3850 bool ReplaceContact = FALSE;
3852 if (cmbType->GetCurrentSelection() == 1 ||
3853 cmbType->GetCurrentSelection() == 3 ||
3854 cmbType->GetCurrentSelection() == 4){
3856 if (IsGroup == TRUE){
3858 // Mark contact for replacing.
3860 ReplaceContact = TRUE;
3864 } else if (cmbType->GetCurrentSelection() == 2){
3866 if (IsGroup == TRUE){
3868 // Mark contact for replacing.
3870 ReplaceContact = TRUE;
3876 if (ReplaceContact == TRUE){
3878 wxString wxDelSplitFilename;
3879 wxString wxDelFinalFilename;
3880 wxString wxSDelDataURL;
3881 wxStringTokenizer wSTDelFilename(wxSContactFilename, wxT("/"));
3882 while(wSTDelFilename.HasMoreTokens()){
3884 wxDelSplitFilename = wSTDelFilename.GetNextToken();
3888 wxSDelDataURL = wxDelSplitFilename;
3890 // Delete the contact from the server as it will be useless in certain
3891 // address book clients.
3893 ActMgrPtr->AddTask(2, cmbDisplayAs->GetValue(), wxSContactAccount, wxSDelDataURL, wxDelSplitFilename, wxSContactFilename, wxT(""));
3895 // Clear the filename so the trigger to recreate the UID is done.
3897 wxSContactFilename.Clear();
3902 if (wxSContactFilename.IsEmpty()){
3904 // Generate a random UUID.
3906 UIDToken = GenerateUUID();
3907 UIDToken = UIDToken.MakeUpper();
3909 // Setup the filename.
3911 FilenameFinal = GetAccountDir(wxSContactAccount, FALSE);
3913 #if defined(__HAIKU__)
3915 //preffilename = wxT("noo");
3917 #elif defined(__WIN32__)
3919 FilenameFinal = GetAccountDir(wxSContactAccount, FALSE);
3920 FilenameFinal.Append(UIDToken);
3921 FilenameFinal.Append(wxT(".vcf"));
3922 wxSContactFilename = FilenameFinal;
3926 FilenameFinal = GetAccountDir(wxSContactAccount, FALSE);
3927 FilenameFinal.Append(UIDToken);
3928 FilenameFinal.Append(wxT(".vcf"));
3929 wxSContactFilename = FilenameFinal;
3935 if (UIDToken.IsEmpty()){
3937 // UID Token is empty. (Shouldn't be).
3938 // Generate a new UID Token.
3940 /*boost::uuids::uuid ContactUUID = boost::uuids::random_generator()();
3941 std::string sstContactUUID = boost::uuids::to_string(ContactUUID);
3942 wxString strContactUUID(sstContactUUID.c_str(), wxConvUTF8);
3943 UIDToken = strContactUUID;*/
3944 UIDToken = GenerateUUID();
3945 UIDToken = UIDToken.MakeUpper();
3948 FilenameFinal = wxSContactFilename;
3952 // Setup the data and write it into the account folder.
3954 // Begin preperations to write the contact to a file.
3956 bool boolValue = FALSE;
3957 bool boolValue2 = FALSE;
3958 bool FNFirst = TRUE;
3959 bool NNGeneralFirst = TRUE;
3960 bool NNHomeFirst = TRUE;
3961 bool NNWorkFirst = TRUE;
3963 std::map<int,int>::iterator intiter;
3964 std::map<int,wxString>::iterator striter;
3966 ContactData.Add(wxT("BEGIN"), wxT("VCARD"), FALSE);
3967 ContactData.Add(wxT("VERSION"), wxT("4.0"), FALSE);
3969 // Setup the version string.
3971 strValue.Append(wxT("-//Xestia//Address Book Version "));
3972 strValue.Append(wxT(XSDAB_VERSION));
3973 strValue.Append(wxT("//KW"));
3975 ContactData.Add(wxT("PRODID"), strValue, FALSE);
3981 // Setup the name field.
3983 strValue = txtSurname->GetValue() + wxT(";") +
3984 txtForename->GetValue() + wxT(";") +
3985 txtOtherNames->GetValue() + wxT(";") +
3986 txtTitle->GetValue() + wxT(";") +
3987 txtSuffix->GetValue();
3989 strValue2 = ContactData.Convert(cmbDisplayAs->GetValue(), FALSE);
3992 if (NameTokens.IsEmpty()){
3993 ContactData.Add(wxT("N;SORT-AS=\"") + strValue2 + wxT("\""), strValue, FALSE);
3995 ContactData.Add(wxT("N;SORT-AS=\"") + strValue2 + wxT("\";") + NameTokens, strValue, FALSE);
3998 if (cmbType->GetCurrentSelection() == 1){
4000 ContactData.AddRaw(wxT("KIND"), wxT("individual"));
4002 } else if (cmbType->GetCurrentSelection() == 2){
4004 ContactData.AddRaw(wxT("KIND"), wxT("group"));
4006 // Go through each of the members and write them out.
4008 for (std::map<int, wxString>::iterator itemiter = GroupsList.begin();
4009 itemiter != GroupsList.end(); ++itemiter){
4011 ContactData.Add(wxT("MEMBER:urn:uuid"), itemiter->second, FALSE);
4015 } else if (cmbType->GetCurrentSelection() == 3){
4017 ContactData.AddRaw(wxT("KIND"), wxT("org"));
4019 } else if (cmbType->GetCurrentSelection() == 4){
4021 ContactData.AddRaw(wxT("KIND"), wxT("location"));
4026 // Setup the nicknames (General, Home & Business).
4037 // Setup the gender.
4039 if (cmbGender->GetCurrentSelection() != 0){
4041 switch(cmbGender->GetCurrentSelection()){
4045 strValue = wxT("M");
4050 strValue = wxT("F");
4055 strValue = wxT("O");
4060 strValue = wxT("N");
4065 strValue = wxT("U");
4072 if (!txtGenderDescription->IsEmpty()){
4074 strValue2 = txtGenderDescription->GetValue();
4078 if (!strValue.IsEmpty() || !strValue2.IsEmpty()){
4080 EscapeString(&strValue2, FALSE);
4082 if (!GenderTokens.IsEmpty()){
4084 if (!strValue2.IsEmpty()){
4086 ContactData.AddRaw(wxT("GENDER;") + GenderTokens, strValue + wxT(";") + strValue2);
4090 ContactData.AddRaw(wxT("GENDER;") + GenderTokens, strValue);
4096 if (!strValue2.IsEmpty()){
4098 ContactData.AddRaw(wxT("GENDER"), strValue + wxT(";") + strValue2);
4102 ContactData.AddRaw(wxT("GENDER"), strValue);
4121 strValue3 = BirthdayAltID;
4123 if (!strValue3.IsEmpty()){
4128 strValue2.Append(wxT("ALTID=\"") + strValue3 + wxT("\""));
4134 //strValue3 = ContactData.Convert(GeneralAddressList, FALSE);
4137 // Process Language.
4139 strValue3 = BirthdayCalScale;
4141 if (!strValue3.IsEmpty()){
4146 if (boolValue2 == TRUE){
4148 strValue2.Append(wxT(";"));
4156 strValue2.Append(wxT("CALSCALE=") + strValue3);
4164 strValue2 = BirthdayTokens;
4166 // Get the birthday and write it.
4168 ResetSaveProcessData();
4170 if (!txtBirthday->IsEmpty()){
4172 strValue = txtBirthday->GetValue();
4174 if (!strValue.IsEmpty() || !strValue2.IsEmpty()){
4176 if (!strValue2.IsEmpty()){
4178 EscapeString(&strValue2, FALSE);
4179 EscapeString(&strValue, FALSE);
4181 ContactData.AddRaw(wxT("BDAY;VALUE=text;") + strValue2 + wxT(";"), strValue);
4185 EscapeString(&strValue, FALSE);
4187 ContactData.AddRaw(wxT("BDAY;VALUE=text"), strValue);
4197 // Get Day, Month & Year.
4199 wxDateTime BirthdayDate;
4200 wxDateTime::Month BirthdayMonth;
4203 wxString DataBeforeT;
4204 wxString DataAfterT;
4205 wxString FinalBirthdayString;
4206 bool ProcessDataAfterT = FALSE;
4208 BirthdayDate = dapBirthday->GetValue();
4210 if (BirthdayDate.IsValid()){
4212 BirthdayDay = BirthdayDate.GetDay();
4213 BirthdayMonth = BirthdayDate.GetMonth();
4214 BirthdayYear = BirthdayDate.GetYear();
4216 // Look for T and replace data before this.
4218 wxStringTokenizer wSTDate(Birthday, wxT("T"));
4220 while (wSTDate.HasMoreTokens()){
4222 if (ProcessDataAfterT == FALSE){
4224 DataBeforeT = wSTDate.GetNextToken();
4225 ProcessDataAfterT = TRUE;
4229 DataAfterT = wSTDate.GetNextToken();
4236 // If there is not T then replace altogether.
4238 wxString FinalBirthdayDay;
4239 wxString FinalBirthdayMonth;
4240 wxString FinalBirthdayYear;
4242 if (BirthdayDay < 10){
4244 FinalBirthdayDay = wxT("0") + wxString::Format(wxT("%i"), BirthdayDay);
4248 FinalBirthdayDay = wxString::Format(wxT("%i"), BirthdayDay);
4252 if (((int)BirthdayMonth + 1) < 10){
4254 FinalBirthdayMonth = wxT("0") + wxString::Format(wxT("%i"), ((int)BirthdayMonth + 1));
4258 FinalBirthdayMonth = wxString::Format(wxT("%i"), ((int)BirthdayMonth + 1));
4262 if (BirthdayYear == 0){
4264 FinalBirthdayYear = wxT("--");
4268 FinalBirthdayYear = wxString::Format(wxT("%i"), BirthdayYear);
4272 if (!DataAfterT.IsEmpty()){
4274 FinalBirthdayString = FinalBirthdayYear + FinalBirthdayMonth + FinalBirthdayDay + wxT("T") + DataAfterT;
4278 FinalBirthdayString = FinalBirthdayYear + FinalBirthdayMonth + FinalBirthdayDay;
4282 if (!FinalBirthdayString.IsEmpty() || !strValue2.IsEmpty()){
4284 if (!strValue2.IsEmpty()){
4286 EscapeString(&strValue2, FALSE);
4287 EscapeString(&strValue, FALSE);
4289 ContactData.AddRaw(wxT("BDAY") + strValue2 + wxT(";"), FinalBirthdayString);
4293 EscapeString(&strValue, FALSE);
4295 ContactData.AddRaw(wxT("BDAY"), FinalBirthdayString);
4305 ResetSaveProcessData();
4309 strValue3 = AnniversaryAltID;
4311 if (!strValue3.IsEmpty()){
4316 strValue2.Append(wxT("ALTID=\"") + strValue3 + wxT("\""));
4322 //strValue3 = ContactData.Convert(GeneralAddressList, FALSE);
4325 // Process Language.
4327 strValue3 = AnniversaryCalScale;
4329 if (!strValue3.IsEmpty()){
4334 if (boolValue2 == TRUE){
4336 strValue2.Append(wxT(";"));
4344 strValue2.Append(wxT("CALSCALE=") + strValue3);
4352 strValue2 = AnniversaryTokens;
4354 // Deal with ANNIVERSARY.
4356 if (!txtAnniversary->IsEmpty()){
4358 strValue = txtAnniversary->GetValue();
4360 if (!strValue.IsEmpty() || !strValue2.IsEmpty()){
4362 if (!strValue2.IsEmpty()){
4364 EscapeString(&strValue2, FALSE);
4365 EscapeString(&strValue, FALSE);
4367 ContactData.AddRaw(wxT("ANNIVERSARY;VALUE=text;") + strValue2 + wxT(";"), strValue);
4371 EscapeString(&strValue, FALSE);
4373 ContactData.AddRaw(wxT("ANNIVERSARY;VALUE=text"), strValue);
4381 // Look for T and replace data before this.
4383 // Get Day, Month & Year.
4385 wxDateTime AnniversaryDate;
4386 wxDateTime::Month AnniversaryMonth;
4388 int AnniversaryYear;
4389 wxString DataBeforeT;
4390 wxString DataAfterT;
4391 wxString FinalAnniversaryString;
4392 bool ProcessDataAfterT = FALSE;
4394 AnniversaryDate = dapAnniversary->GetValue();
4396 if (AnniversaryDate.IsValid()){
4398 AnniversaryDay = AnniversaryDate.GetDay();
4399 AnniversaryMonth = AnniversaryDate.GetMonth();
4400 AnniversaryYear = AnniversaryDate.GetYear();
4402 // Look for T and replace data before this.
4404 wxStringTokenizer wSTDate(Anniversary, wxT("T"));
4406 while (wSTDate.HasMoreTokens()){
4408 if (ProcessDataAfterT == FALSE){
4410 DataBeforeT = wSTDate.GetNextToken();
4411 ProcessDataAfterT = TRUE;
4415 DataAfterT = wSTDate.GetNextToken();
4422 // If there is not T then replace altogether.
4424 wxString FinalAnniversaryDay;
4425 wxString FinalAnniversaryMonth;
4426 wxString FinalAnniversaryYear;
4428 if (AnniversaryDay < 10){
4430 FinalAnniversaryDay = wxT("0") + wxString::Format(wxT("%i"), AnniversaryDay);
4434 FinalAnniversaryDay = wxString::Format(wxT("%i"), AnniversaryDay);
4438 if (((int)AnniversaryMonth + 1) < 10){
4440 FinalAnniversaryMonth = wxT("0") + wxString::Format(wxT("%i"), ((int)AnniversaryMonth + 1));
4444 FinalAnniversaryMonth = wxString::Format(wxT("%i"), ((int)AnniversaryMonth + 1));
4448 if (AnniversaryYear == 0){
4450 FinalAnniversaryYear = wxT("--");
4454 FinalAnniversaryYear = wxString::Format(wxT("%i"), AnniversaryYear);
4458 if (!DataAfterT.IsEmpty()){
4460 FinalAnniversaryString = FinalAnniversaryYear + FinalAnniversaryMonth + FinalAnniversaryDay + wxT("T") + DataAfterT;
4464 FinalAnniversaryString = FinalAnniversaryYear + FinalAnniversaryMonth + FinalAnniversaryDay;
4468 if (!FinalAnniversaryString.IsEmpty() || !strValue2.IsEmpty()){
4470 if (!strValue2.IsEmpty()){
4472 EscapeString(&strValue2, FALSE);
4473 EscapeString(&strValue, FALSE);
4475 ContactData.AddRaw(wxT("ANNIVERSARY") + strValue2 + wxT(";"), FinalAnniversaryString);
4479 EscapeString(&strValue, FALSE);
4481 ContactData.AddRaw(wxT("ANNIVERSARY"), FinalAnniversaryString);
4491 // Setup the addresses (General, Home, Business).
4493 //intValue = GeneralAddressList.size();
4494 ResetSaveProcessData();
4496 for (std::map<int,wxString>::iterator iter = GeneralAddressList.begin();
4497 iter != GeneralAddressList.end(); ++iter){
4499 int intSeekValue = iter->first;
4501 wxString strAddressString;
4502 wxString strAddressFinalValue;
4503 std::map<int, wxString>::iterator iterValue;
4505 strAddressString.Append(wxT(";;"));
4509 iterValue = GeneralAddressList.find(intSeekValue);
4510 strAddressFinalValue = iterValue->second;
4511 ProcessCaptureStrings(&strAddressFinalValue);
4512 strAddressString.Append(strAddressFinalValue + wxT(";"));
4513 strAddressFinalValue.Clear();
4517 iterValue = GeneralAddressListTown.find(intSeekValue);
4518 strAddressFinalValue = iterValue->second;
4519 ProcessCaptureStrings(&strAddressFinalValue);
4520 strAddressString.Append(strAddressFinalValue + wxT(";"));
4521 strAddressFinalValue.Clear();
4525 iterValue = GeneralAddressListCounty.find(intSeekValue);
4526 strAddressFinalValue = iterValue->second;
4527 ProcessCaptureStrings(&strAddressFinalValue);
4528 strAddressString.Append(strAddressFinalValue + wxT(";"));
4529 strAddressFinalValue.Clear();
4533 iterValue = GeneralAddressListPostCode.find(intSeekValue);
4534 strAddressFinalValue = iterValue->second;
4535 ProcessCaptureStrings(&strAddressFinalValue);
4536 strAddressString.Append(strAddressFinalValue + wxT(";"));
4537 strAddressFinalValue.Clear();
4541 iterValue = GeneralAddressListCountry.find(intSeekValue);
4542 strAddressFinalValue = iterValue->second;
4543 ProcessCaptureStrings(&strAddressFinalValue);
4544 strAddressString.Append(strAddressFinalValue);
4545 strAddressFinalValue.Clear();
4547 ProcessSaveData(wxT("ADR"), &strValue2, &boolValue2, &boolValue,
4548 &iter, &strAddressString, &ContactData,
4549 wxT("LABEL"), &GeneralAddressListLabel,
4550 wxT("LANGUAGE"), &GeneralAddressListLang,
4551 wxT("ALTID"), &GeneralAddressListAltID,
4552 wxT("PID"), &GeneralAddressListPID,
4553 wxT("GEO"), &GeneralAddressListGeo,
4554 wxT("TZ"), &GeneralAddressListTimezone,
4555 wxT("MEDIATYPE"), &GeneralAddressListMediatype,
4556 wxT("PREF"), &GeneralAddressListPref,
4557 wxT(""), &GeneralAddressListTokens );
4559 ResetSaveProcessData();
4563 ResetSaveProcessData();
4565 for (std::map<int,wxString>::iterator iter = HomeAddressList.begin();
4566 iter != HomeAddressList.end(); ++iter){
4568 int intSeekValue = iter->first;
4570 wxString strAddressString;
4571 wxString strAddressFinalValue;
4572 std::map<int, wxString>::iterator iterValue;
4574 strAddressString.Append(wxT(";;"));
4578 iterValue = HomeAddressList.find(intSeekValue);
4579 strAddressFinalValue = iterValue->second;
4580 ProcessCaptureStrings(&strAddressFinalValue);
4582 strAddressString.Append(strAddressFinalValue + wxT(";"));
4586 iterValue = HomeAddressListTown.find(intSeekValue);
4587 strAddressFinalValue = iterValue->second;
4588 ProcessCaptureStrings(&strAddressFinalValue);
4590 strAddressString.Append(strAddressFinalValue + wxT(";"));
4594 iterValue = HomeAddressListCounty.find(intSeekValue);
4595 strAddressFinalValue = iterValue->second;
4596 ProcessCaptureStrings(&strAddressFinalValue);
4598 strAddressString.Append(strAddressFinalValue + wxT(";"));
4602 iterValue = HomeAddressListPostCode.find(intSeekValue);
4603 strAddressFinalValue = iterValue->second;
4604 ProcessCaptureStrings(&strAddressFinalValue);
4606 strAddressString.Append(strAddressFinalValue + wxT(";"));
4610 iterValue = HomeAddressListCountry.find(intSeekValue);
4611 strAddressFinalValue = iterValue->second;
4612 ProcessCaptureStrings(&strAddressFinalValue);
4614 strAddressString.Append(strAddressFinalValue);
4616 ProcessSaveData(wxT("ADR;TYPE=home"), &strValue2, &boolValue2, &boolValue,
4617 &iter, &strAddressString, &ContactData,
4618 wxT("LABEL"), &HomeAddressListLabel,
4619 wxT("LANGUAGE"), &HomeAddressListLang,
4620 wxT("ALTID"), &HomeAddressListAltID,
4621 wxT("PID"), &HomeAddressListPID,
4622 wxT("GEO"), &HomeAddressListGeo,
4623 wxT("TZ"), &HomeAddressListTimezone,
4624 wxT("MEDIATYPE"), &HomeAddressListMediatype,
4625 wxT("PREF"), &HomeAddressListPref,
4626 wxT(""), &HomeAddressListTokens );
4628 ResetSaveProcessData();
4632 ResetSaveProcessData();
4634 for (std::map<int,wxString>::iterator iter = BusinessAddressList.begin();
4635 iter != BusinessAddressList.end(); ++iter){
4637 int intSeekValue = iter->first;
4639 wxString strAddressString;
4640 wxString strAddressFinalValue;
4641 std::map<int, wxString>::iterator iterValue;
4643 strAddressString.Append(wxT(";;"));
4647 iterValue = BusinessAddressList.find(intSeekValue);
4648 strAddressFinalValue = iterValue->second;
4649 ProcessCaptureStrings(&strAddressFinalValue);
4651 strAddressString.Append(strAddressFinalValue + wxT(";"));
4655 iterValue = BusinessAddressListTown.find(intSeekValue);
4656 strAddressFinalValue = iterValue->second;
4657 ProcessCaptureStrings(&strAddressFinalValue);
4659 strAddressString.Append(strAddressFinalValue + wxT(";"));
4663 iterValue = BusinessAddressListCounty.find(intSeekValue);
4664 strAddressFinalValue = iterValue->second;
4665 ProcessCaptureStrings(&strAddressFinalValue);
4667 strAddressString.Append(strAddressFinalValue + wxT(";"));
4671 iterValue = BusinessAddressListPostCode.find(intSeekValue);
4672 strAddressFinalValue = iterValue->second;
4673 ProcessCaptureStrings(&strAddressFinalValue);
4675 strAddressString.Append(strAddressFinalValue + wxT(";"));
4679 iterValue = BusinessAddressListCountry.find(intSeekValue);
4680 strAddressFinalValue = iterValue->second;
4681 ProcessCaptureStrings(&strAddressFinalValue);
4683 strAddressString.Append(strAddressFinalValue);
4685 ProcessSaveData(wxT("ADR;TYPE=work"), &strValue2, &boolValue2, &boolValue,
4686 &iter, &strAddressString, &ContactData,
4687 wxT("LABEL"), &BusinessAddressListLabel,
4688 wxT("LANGUAGE"), &BusinessAddressListLang,
4689 wxT("ALTID"), &BusinessAddressListAltID,
4690 wxT("PID"), &BusinessAddressListPID,
4691 wxT("GEO"), &BusinessAddressListGeo,
4692 wxT("TZ"), &BusinessAddressListTimezone,
4693 wxT("MEDIATYPE"), &BusinessAddressListMediatype,
4694 wxT("PREF"), &BusinessAddressListPref,
4695 wxT(""), &BusinessAddressListTokens );
4697 ResetSaveProcessData();
4701 // Sort out nicknames (if any).
4703 for (std::map<int,wxString>::iterator iter = GeneralNicknamesList.begin();
4704 iter != GeneralNicknamesList.end(); ++iter){
4706 intValue2 = iter->first;
4708 // Process Alternative ID.
4710 ProcessSaveData(wxT("NICKNAME"), &strValue2, &boolValue2, &boolValue,
4711 &iter, &GeneralNicknamesList, &ContactData,
4712 wxT("LANGUAGE"), &GeneralNicknamesListLanguage,
4713 wxT("ALTID"), &GeneralNicknamesListAltID,
4714 wxT("PID"), &GeneralNicknamesListPID,
4715 wxT("PREF"), &GeneralNicknamesListPref,
4716 wxT(""), &GeneralNicknamesListTokens );
4718 ResetSaveProcessData();
4722 ResetSaveProcessData();
4724 for (std::map<int,wxString>::iterator iter = HomeNicknamesList.begin();
4725 iter != HomeNicknamesList.end(); ++iter){
4727 ProcessSaveData(wxT("NICKNAME;TYPE=home"), &strValue2, &boolValue2, &boolValue,
4728 &iter, &HomeNicknamesList, &ContactData,
4729 wxT("LANGUAGE"), &HomeNicknamesListLanguage,
4730 wxT("ALTID"), &HomeNicknamesListAltID,
4731 wxT("PID"), &HomeNicknamesListPID,
4732 wxT("PREF"), &HomeNicknamesListPref,
4733 wxT(""), &HomeNicknamesListTokens );
4735 ResetSaveProcessData();
4739 ResetSaveProcessData();
4741 for (std::map<int,wxString>::iterator iter = BusinessNicknamesList.begin();
4742 iter != BusinessNicknamesList.end(); ++iter){
4744 ProcessSaveData(wxT("NICKNAME;TYPE=work"), &strValue2, &boolValue2, &boolValue,
4745 &iter, &BusinessNicknamesList, &ContactData,
4746 wxT("LANGUAGE"), &BusinessNicknamesListLanguage,
4747 wxT("ALTID"), &BusinessNicknamesListAltID,
4748 wxT("PID"), &BusinessNicknamesListPID,
4749 wxT("PREF"), &BusinessNicknamesListPref,
4750 wxT(""), &BusinessNicknamesListTokens );
4752 ResetSaveProcessData();
4756 ResetSaveProcessData();
4758 // Sort out email (general, home and business).
4760 for (std::map<int,wxString>::iterator iter = GeneralEmailList.begin();
4761 iter != GeneralEmailList.end(); ++iter){
4763 //strValue3 = ContactData.Convert(GeneralAddressList, FALSE);
4766 wxString strAddressFinalValue;
4767 std::map<int, wxString>::iterator iterValue;
4769 ProcessSaveData(wxT("EMAIL"), &strValue2, &boolValue2, &boolValue,
4770 &iter, &GeneralEmailList, &ContactData,
4771 wxT("ALTID"), &GeneralEmailListAltID,
4772 wxT("PID"), &GeneralEmailListPID,
4773 wxT("PREF"), &GeneralEmailListPref,
4774 wxT(""), &GeneralEmailListTokens );
4776 ResetSaveProcessData();
4780 ResetSaveProcessData();
4782 for (std::map<int,wxString>::iterator iter = HomeEmailList.begin();
4783 iter != HomeEmailList.end(); ++iter){
4785 //strValue3 = ContactData.Convert(GeneralAddressList, FALSE);
4788 ProcessSaveData(wxT("EMAIL;TYPE=home"), &strValue2, &boolValue2, &boolValue,
4789 &iter, &HomeEmailList, &ContactData,
4790 wxT("ALTID"), &HomeEmailListAltID,
4791 wxT("PID"), &HomeEmailListPID,
4792 wxT("PREF"), &HomeEmailListPref,
4793 wxT(""), &HomeEmailListTokens );
4795 ResetSaveProcessData();
4799 ResetSaveProcessData();
4801 for (std::map<int,wxString>::iterator iter = BusinessEmailList.begin();
4802 iter != BusinessEmailList.end(); ++iter){
4804 //strValue3 = ContactData.Convert(GeneralAddressList, FALSE);
4807 ProcessSaveData(wxT("EMAIL;TYPE=work"), &strValue2, &boolValue2, &boolValue,
4808 &iter, &BusinessEmailList, &ContactData,
4809 wxT("ALTID"), &BusinessEmailListAltID,
4810 wxT("PID"), &BusinessEmailListPID,
4811 wxT("PREF"), &BusinessEmailListPref,
4812 wxT(""), &BusinessEmailListTokens );
4814 ResetSaveProcessData();
4818 ResetSaveProcessData();
4820 for (std::map<int,wxString>::iterator iter = GeneralIMList.begin();
4821 iter != GeneralIMList.end(); ++iter){
4823 intValue2 = iter->first;
4825 // Process Alternative ID.
4827 ProcessSaveData(wxT("IMPP"), &strValue2, &boolValue2, &boolValue,
4828 &iter, &GeneralIMList, &ContactData,
4829 wxT("ALTID"), &GeneralIMListAltID,
4830 wxT("PID"), &GeneralIMListPID,
4831 wxT("MEDIATYPE"), &GeneralIMListMediatype,
4832 wxT("PREF"), &GeneralIMListPref,
4833 wxT(""), &GeneralIMListTokens );
4835 ResetSaveProcessData();
4839 ResetSaveProcessData();
4841 for (std::map<int,wxString>::iterator iter = HomeIMList.begin();
4842 iter != HomeIMList.end(); ++iter){
4844 ProcessSaveData(wxT("IMPP;TYPE=home"), &strValue2, &boolValue2, &boolValue,
4845 &iter, &HomeIMList, &ContactData,
4846 wxT("ALTID"), &HomeIMListAltID,
4847 wxT("PID"), &HomeIMListPID,
4848 wxT("MEDIATYPE"), &HomeIMListMediatype,
4849 wxT("PREF"), &HomeIMListPref,
4850 wxT(""), &HomeIMListTokens );
4852 ResetSaveProcessData();
4856 ResetSaveProcessData();
4858 for (std::map<int,wxString>::iterator iter = BusinessIMList.begin();
4859 iter != BusinessIMList.end(); ++iter){
4861 ProcessSaveData(wxT("IMPP;TYPE=work"), &strValue2, &boolValue2, &boolValue,
4862 &iter, &BusinessIMList, &ContactData,
4863 wxT("ALTID"), &BusinessIMListAltID,
4864 wxT("PID"), &BusinessIMListPID,
4865 wxT("MEDIATYPE"), &BusinessIMListMediatype,
4866 wxT("PREF"), &BusinessIMListPref,
4867 wxT(""), &BusinessIMListTokens );
4869 ResetSaveProcessData();
4873 ResetSaveProcessData();
4875 for (std::map<int,wxString>::iterator iter = GeneralTelephoneList.begin();
4876 iter != GeneralTelephoneList.end(); ++iter){
4878 wxString strAddressFinalValue = iter->second;
4880 ProcessCaptureStrings(&strAddressFinalValue);
4882 strAddressFinalValue.insert(0, wxT("tel:"));
4884 ProcessSaveData(wxT("TEL"), &strValue2, &boolValue2, &boolValue,
4885 &iter, &strAddressFinalValue, &ContactData,
4886 wxT("ALTID"), &GeneralTelephoneListAltID,
4887 wxT("PID"), &GeneralTelephoneListPID,
4888 wxT("TYPE"), &GeneralTelephoneListType,
4889 wxT("PREF"), &GeneralTelephoneListPref,
4890 wxT(""), &GeneralTelephoneListTokens );
4892 ResetSaveProcessData();
4896 ResetSaveProcessData();
4898 for (std::map<int,wxString>::iterator iter = HomeTelephoneList.begin();
4899 iter != HomeTelephoneList.end(); ++iter){
4901 wxString strAddressFinalValue = iter->second;
4903 ProcessCaptureStrings(&strAddressFinalValue);
4905 strAddressFinalValue.insert(0, wxT("tel:"));
4907 ProcessSaveData(wxT("TEL"), &strValue2, &boolValue2, &boolValue,
4908 &iter, &strAddressFinalValue, &ContactData,
4909 wxT("ALTID"), &HomeTelephoneListAltID,
4910 wxT("PID"), &HomeTelephoneListPID,
4911 wxT("TYPE"), &HomeTelephoneListType,
4912 wxT("PREF"), &HomeTelephoneListPref,
4913 wxT(""), &HomeTelephoneListTokens );
4915 ResetSaveProcessData();
4919 ResetSaveProcessData();
4921 for (std::map<int,wxString>::iterator iter = BusinessTelephoneList.begin();
4922 iter != BusinessTelephoneList.end(); ++iter){
4924 wxString strAddressFinalValue = iter->second;
4926 ProcessCaptureStrings(&strAddressFinalValue);
4928 strAddressFinalValue.insert(0, wxT("tel:"));
4930 ProcessSaveData(wxT("TEL"), &strValue2, &boolValue2, &boolValue,
4931 &iter, &strAddressFinalValue, &ContactData,
4932 wxT("ALTID"), &BusinessTelephoneListAltID,
4933 wxT("PID"), &BusinessTelephoneListPID,
4934 wxT("TYPE"), &BusinessTelephoneListType,
4935 wxT("PREF"), &BusinessTelephoneListPref,
4936 wxT(""), &BusinessTelephoneListTokens );
4938 ResetSaveProcessData();
4942 ResetSaveProcessData();
4944 for (std::map<int,wxString>::iterator iter = GeneralLanguageList.begin();
4945 iter != GeneralLanguageList.end(); ++iter){
4947 intValue2 = iter->first;
4949 ProcessSaveData(wxT("LANG"), &strValue2, &boolValue2, &boolValue,
4950 &iter, &GeneralLanguageList, &ContactData,
4951 wxT("ALTID"), &GeneralLanguageListAltID,
4952 wxT("PID"), &GeneralLanguageListPID,
4953 wxT("PREF"), &GeneralLanguageListPref,
4954 wxT(""), &GeneralLanguageListTokens );
4956 ResetSaveProcessData();
4960 ResetSaveProcessData();
4962 for (std::map<int,wxString>::iterator iter = HomeLanguageList.begin();
4963 iter != HomeLanguageList.end(); ++iter){
4965 ProcessSaveData(wxT("LANG;TYPE=home"), &strValue2, &boolValue2, &boolValue,
4966 &iter, &HomeLanguageList, &ContactData,
4967 wxT("ALTID"), &HomeLanguageListAltID,
4968 wxT("PID"), &HomeLanguageListPID,
4969 wxT("PREF"), &HomeLanguageListPref,
4970 wxT(""), &HomeLanguageListTokens );
4972 ResetSaveProcessData();
4976 ResetSaveProcessData();
4978 for (std::map<int,wxString>::iterator iter = BusinessLanguageList.begin();
4979 iter != BusinessLanguageList.end(); ++iter){
4981 ProcessSaveData(wxT("LANG;TYPE=work"), &strValue2, &boolValue2, &boolValue,
4982 &iter, &BusinessLanguageList, &ContactData,
4983 wxT("ALTID"), &BusinessLanguageListAltID,
4984 wxT("PID"), &BusinessLanguageListPID,
4985 wxT("PREF"), &BusinessLanguageListPref,
4986 wxT(""), &BusinessLanguageListTokens );
4988 ResetSaveProcessData();
4992 ResetSaveProcessData();
4994 for (std::map<int,wxString>::iterator iter = GeneralTZList.begin();
4995 iter != GeneralTZList.end(); ++iter){
4997 ProcessSaveData(wxT("TZ"), &strValue2, &boolValue2, &boolValue,
4998 &iter, &GeneralTZList, &ContactData,
4999 wxT("ALTID"), &GeneralTZListAltID,
5000 wxT("PID"), &GeneralTZListPID,
5001 wxT("MEDIATYPE"), &GeneralTZListMediatype,
5002 wxT("PREF"), &GeneralTZListPref,
5003 wxT(""), &GeneralTZListTokens );
5005 ResetSaveProcessData();
5009 ResetSaveProcessData();
5011 for (std::map<int,wxString>::iterator iter = HomeTZList.begin();
5012 iter != HomeTZList.end(); ++iter){
5014 ProcessSaveData(wxT("TZ;TYPE=home"), &strValue2, &boolValue2, &boolValue,
5015 &iter, &HomeTZList, &ContactData,
5016 wxT("ALTID"), &HomeTZListAltID,
5017 wxT("PID"), &HomeTZListPID,
5018 wxT("MEDIATYPE"), &HomeTZListMediatype,
5019 wxT("PREF"), &HomeTZListPref,
5020 wxT(""), &HomeTZListTokens );
5022 ResetSaveProcessData();
5026 ResetSaveProcessData();
5028 for (std::map<int,wxString>::iterator iter = BusinessTZList.begin();
5029 iter != BusinessTZList.end(); ++iter){
5031 ProcessSaveData(wxT("TZ;TYPE=work"), &strValue2, &boolValue2, &boolValue,
5032 &iter, &BusinessTZList, &ContactData,
5033 wxT("ALTID"), &BusinessTZListAltID,
5034 wxT("PID"), &BusinessTZListPID,
5035 wxT("MEDIATYPE"), &BusinessTZListMediatype,
5036 wxT("PREF"), &BusinessTZListPref,
5037 wxT(""), &BusinessTZListTokens );
5039 ResetSaveProcessData();
5043 ResetSaveProcessData();
5045 for (std::map<int,wxString>::iterator iter = GeneralGeographyList.begin();
5046 iter != GeneralGeographyList.end(); ++iter){
5048 wxString strAddressFinalValue = iter->second;
5050 ProcessCaptureStrings(&strAddressFinalValue);
5052 strAddressFinalValue.insert(0, wxT("geo:"));
5054 ProcessSaveData(wxT("GEO"), &strValue2, &boolValue2, &boolValue,
5055 &iter, &strAddressFinalValue, &ContactData,
5056 wxT("ALTID"), &GeneralGeographyListAltID,
5057 wxT("PID"), &GeneralGeographyListPID,
5058 wxT("MEDIATYPE"), &GeneralGeographyListMediatype,
5059 wxT("PREF"), &GeneralGeographyListPref,
5060 wxT(""), &GeneralGeographyListTokens );
5062 ResetSaveProcessData();
5066 ResetSaveProcessData();
5068 for (std::map<int,wxString>::iterator iter = HomeGeographyList.begin();
5069 iter != HomeGeographyList.end(); ++iter){
5071 wxString strAddressFinalValue = iter->second;
5073 ProcessCaptureStrings(&strAddressFinalValue);
5075 strAddressFinalValue.insert(0, wxT("geo:"));
5077 ProcessSaveData(wxT("GEO;TYPE=home"), &strValue2, &boolValue2, &boolValue,
5078 &iter, &HomeGeographyList, &ContactData,
5079 wxT("ALTID"), &HomeGeographyListAltID,
5080 wxT("PID"), &HomeGeographyListPID,
5081 wxT("MEDIATYPE"), &HomeGeographyListMediatype,
5082 wxT("PREF"), &HomeGeographyListPref,
5083 wxT(""), &HomeGeographyListTokens );
5085 ResetSaveProcessData();
5089 ResetSaveProcessData();
5091 for (std::map<int,wxString>::iterator iter = BusinessGeographyList.begin();
5092 iter != BusinessGeographyList.end(); ++iter){
5094 wxString strAddressFinalValue = iter->second;
5096 ProcessCaptureStrings(&strAddressFinalValue);
5098 strAddressFinalValue.insert(0, wxT("geo:"));
5100 ProcessSaveData(wxT("GEO;TYPE=work"), &strValue2, &boolValue2, &boolValue,
5101 &iter, &BusinessGeographyList, &ContactData,
5102 wxT("ALTID"), &BusinessGeographyListAltID,
5103 wxT("PID"), &BusinessGeographyListPID,
5104 wxT("MEDIATYPE"), &BusinessGeographyListMediatype,
5105 wxT("PREF"), &BusinessGeographyListPref,
5106 wxT(""), &BusinessGeographyListTokens );
5108 ResetSaveProcessData();
5112 ResetSaveProcessData();
5114 for (std::map<int,wxString>::iterator iter = GeneralRelatedList.begin();
5115 iter != GeneralRelatedList.end(); ++iter){
5117 ProcessSaveData(wxT("RELATED"), &strValue2, &boolValue2, &boolValue,
5118 &iter, &GeneralRelatedList, &ContactData,
5119 wxT("ALTID"), &GeneralRelatedListAltID,
5120 wxT("PID"), &GeneralRelatedListPID,
5121 wxT("LANGUAGE"), &GeneralRelatedListLanguage,
5122 wxT("TYPE"), &GeneralRelatedListRelType,
5123 wxT("PREF"), &GeneralRelatedListPref,
5124 wxT(""), &GeneralRelatedListTokens );
5126 ResetSaveProcessData();
5130 ResetSaveProcessData();
5132 for (std::map<int,wxString>::iterator iter = GeneralWebsiteList.begin();
5133 iter != GeneralWebsiteList.end(); ++iter){
5135 ProcessSaveData(wxT("URL"), &strValue2, &boolValue2, &boolValue,
5136 &iter, &GeneralWebsiteList, &ContactData,
5137 wxT("ALTID"), &GeneralWebsiteListAltID,
5138 wxT("PID"), &GeneralWebsiteListPID,
5139 wxT("MEDIATYPE"), &GeneralWebsiteListMediatype,
5140 wxT("PREF"), &GeneralWebsiteListPref,
5141 wxT(""), &GeneralWebsiteListTokens );
5143 ResetSaveProcessData();
5147 ResetSaveProcessData();
5149 for (std::map<int,wxString>::iterator iter = HomeWebsiteList.begin();
5150 iter != HomeWebsiteList.end(); ++iter){
5152 ProcessSaveData(wxT("URL;TYPE=home"), &strValue2, &boolValue2, &boolValue,
5153 &iter, &HomeWebsiteList, &ContactData,
5154 wxT("ALTID"), &HomeWebsiteListAltID,
5155 wxT("PID"), &HomeWebsiteListPID,
5156 wxT("MEDIATYPE"), &HomeWebsiteListMediatype,
5157 wxT("PREF"), &HomeWebsiteListPref,
5158 wxT(""), &HomeWebsiteListTokens );
5160 ResetSaveProcessData();
5164 ResetSaveProcessData();
5166 for (std::map<int,wxString>::iterator iter = BusinessWebsiteList.begin();
5167 iter != BusinessWebsiteList.end(); ++iter){
5169 ProcessSaveData(wxT("URL;TYPE=work"), &strValue2, &boolValue2, &boolValue,
5170 &iter, &BusinessWebsiteList, &ContactData,
5171 wxT("ALTID"), &BusinessWebsiteListAltID,
5172 wxT("PID"), &BusinessWebsiteListPID,
5173 wxT("MEDIATYPE"), &BusinessWebsiteListMediatype,
5174 wxT("PREF"), &BusinessWebsiteListPref,
5175 wxT(""), &BusinessWebsiteListTokens );
5177 ResetSaveProcessData();
5181 ResetSaveProcessData();
5183 for (std::map<int,wxString>::iterator iter = GeneralTitleList.begin();
5184 iter != GeneralTitleList.end(); ++iter){
5186 ProcessSaveData(wxT("TITLE"), &strValue2, &boolValue2, &boolValue,
5187 &iter, &GeneralTitleList, &ContactData,
5188 wxT("ALTID"), &GeneralTitleListAltID,
5189 wxT("PID"), &GeneralTitleListPID,
5190 wxT("LANGUAGE"), &GeneralTitleListLanguage,
5191 wxT("PREF"), &GeneralTitleListPref,
5192 wxT(""), &GeneralTitleListTokens );
5194 ResetSaveProcessData();
5198 ResetSaveProcessData();
5200 for (std::map<int,wxString>::iterator iter = HomeTitleList.begin();
5201 iter != HomeTitleList.end(); ++iter){
5203 ProcessSaveData(wxT("TITLE;TYPE=home"), &strValue2, &boolValue2, &boolValue,
5204 &iter, &HomeTitleList, &ContactData,
5205 wxT("ALTID"), &HomeTitleListAltID,
5206 wxT("PID"), &HomeTitleListPID,
5207 wxT("LANGUAGE"), &HomeTitleListLanguage,
5208 wxT("PREF"), &HomeTitleListPref,
5209 wxT(""), &HomeTitleListTokens );
5211 ResetSaveProcessData();
5215 ResetSaveProcessData();
5217 for (std::map<int,wxString>::iterator iter = BusinessTitleList.begin();
5218 iter != BusinessTitleList.end(); ++iter){
5220 ProcessSaveData(wxT("TITLE;TYPE=work"), &strValue2, &boolValue2, &boolValue,
5221 &iter, &BusinessTitleList, &ContactData,
5222 wxT("ALTID"), &BusinessTitleListAltID,
5223 wxT("PID"), &BusinessTitleListPID,
5224 wxT("LANGUAGE"), &BusinessTitleListLanguage,
5225 wxT("PREF"), &BusinessTitleListPref,
5226 wxT(""), &BusinessTitleListTokens );
5228 ResetSaveProcessData();
5232 ResetSaveProcessData();
5234 for (std::map<int,wxString>::iterator iter = GeneralRoleList.begin();
5235 iter != GeneralRoleList.end(); ++iter){
5237 ProcessSaveData(wxT("ROLE"), &strValue2, &boolValue2, &boolValue,
5238 &iter, &GeneralRoleList, &ContactData,
5239 wxT("ALTID"), &GeneralRoleListAltID,
5240 wxT("PID"), &GeneralRoleListPID,
5241 wxT("LANGUAGE"), &GeneralRoleListLanguage,
5242 wxT("PREF"), &GeneralRoleListPref,
5243 wxT(""), &GeneralRoleListTokens );
5245 ResetSaveProcessData();
5249 ResetSaveProcessData();
5251 for (std::map<int,wxString>::iterator iter = HomeRoleList.begin();
5252 iter != HomeRoleList.end(); ++iter){
5254 ProcessSaveData(wxT("ROLE;TYPE=home"), &strValue2, &boolValue2, &boolValue,
5255 &iter, &HomeRoleList, &ContactData,
5256 wxT("ALTID"), &HomeRoleListAltID,
5257 wxT("PID"), &HomeRoleListPID,
5258 wxT("LANGUAGE"), &HomeRoleListLanguage,
5259 wxT("PREF"), &HomeRoleListPref,
5260 wxT(""), &HomeRoleListTokens );
5262 ResetSaveProcessData();
5266 ResetSaveProcessData();
5268 for (std::map<int,wxString>::iterator iter = BusinessRoleList.begin();
5269 iter != BusinessRoleList.end(); ++iter){
5271 ProcessSaveData(wxT("ROLE;TYPE=work"), &strValue2, &boolValue2, &boolValue,
5272 &iter, &BusinessRoleList, &ContactData,
5273 wxT("ALTID"), &BusinessRoleListAltID,
5274 wxT("PID"), &BusinessRoleListPID,
5275 wxT("LANGUAGE"), &BusinessRoleListLanguage,
5276 wxT("PREF"), &BusinessRoleListPref,
5277 wxT(""), &BusinessRoleListTokens );
5279 ResetSaveProcessData();
5283 ResetSaveProcessData();
5285 for (std::map<int,wxString>::iterator iter = GeneralOrganisationsList.begin();
5286 iter != GeneralOrganisationsList.end(); ++iter){
5288 ProcessSaveData(wxT("ORG"), &strValue2, &boolValue2, &boolValue,
5289 &iter, &GeneralOrganisationsList, &ContactData,
5290 wxT("ALTID"), &GeneralOrganisationsListAltID,
5291 wxT("PID"), &GeneralOrganisationsListPID,
5292 wxT("LANGUAGE"), &GeneralOrganisationsListLanguage,
5293 wxT("SORT-AS"), &GeneralOrganisationsListSortAs,
5294 wxT("PREF"), &GeneralOrganisationsListPref,
5295 wxT(""), &GeneralOrganisationsListTokens );
5297 ResetSaveProcessData();
5301 ResetSaveProcessData();
5303 for (std::map<int,wxString>::iterator iter = HomeOrganisationsList.begin();
5304 iter != HomeOrganisationsList.end(); ++iter){
5306 ProcessSaveData(wxT("ORG;TYPE=home"), &strValue2, &boolValue2, &boolValue,
5307 &iter, &HomeOrganisationsList, &ContactData,
5308 wxT("ALTID"), &HomeOrganisationsListAltID,
5309 wxT("PID"), &HomeOrganisationsListPID,
5310 wxT("LANGUAGE"), &HomeOrganisationsListLanguage,
5311 wxT("SORT-AS"), &HomeOrganisationsListSortAs,
5312 wxT("PREF"), &HomeOrganisationsListPref,
5313 wxT(""), &HomeOrganisationsListTokens );
5315 ResetSaveProcessData();
5319 ResetSaveProcessData();
5321 for (std::map<int,wxString>::iterator iter = BusinessOrganisationsList.begin();
5322 iter != BusinessOrganisationsList.end(); ++iter){
5324 ProcessSaveData(wxT("ORG;TYPE=work"), &strValue2, &boolValue2, &boolValue,
5325 &iter, &BusinessOrganisationsList, &ContactData,
5326 wxT("ALTID"), &BusinessOrganisationsListAltID,
5327 wxT("PID"), &BusinessOrganisationsListPID,
5328 wxT("LANGUAGE"), &BusinessOrganisationsListLanguage,
5329 wxT("SORT-AS"), &BusinessOrganisationsListSortAs,
5330 wxT("PREF"), &BusinessOrganisationsListPref,
5331 wxT(""), &BusinessOrganisationsListTokens );
5333 ResetSaveProcessData();
5337 ResetSaveProcessData();
5339 for (std::map<int,wxString>::iterator iter = GeneralNoteList.begin();
5340 iter != GeneralNoteList.end(); ++iter){
5342 ProcessSaveData(wxT("NOTE"), &strValue2, &boolValue2, &boolValue,
5343 &iter, &GeneralNoteList, &ContactData,
5344 wxT("ALTID"), &GeneralNoteListAltID,
5345 wxT("PID"), &GeneralNoteListPID,
5346 wxT("LANGUAGE"), &GeneralNoteListLanguage,
5347 wxT("PREF"), &GeneralNoteListPref,
5348 wxT(""), &GeneralNoteListTokens );
5350 ResetSaveProcessData();
5354 ResetSaveProcessData();
5356 for (std::map<int,wxString>::iterator iter = HomeNoteList.begin();
5357 iter != HomeNoteList.end(); ++iter){
5359 ProcessSaveData(wxT("NOTE;TYPE=home"), &strValue2, &boolValue2, &boolValue,
5360 &iter, &HomeNoteList, &ContactData,
5361 wxT("ALTID"), &HomeNoteListAltID,
5362 wxT("PID"), &HomeNoteListPID,
5363 wxT("LANGUAGE"), &HomeNoteListLanguage,
5364 wxT("PREF"), &HomeNoteListPref,
5365 wxT(""), &HomeNoteListTokens );
5367 ResetSaveProcessData();
5371 ResetSaveProcessData();
5373 for (std::map<int,wxString>::iterator iter = BusinessNoteList.begin();
5374 iter != BusinessNoteList.end(); ++iter){
5376 ProcessSaveData(wxT("NOTE;TYPE=work"), &strValue2, &boolValue2, &boolValue,
5377 &iter, &BusinessNoteList, &ContactData,
5378 wxT("ALTID"), &BusinessNoteListAltID,
5379 wxT("PID"), &BusinessNoteListPID,
5380 wxT("LANGUAGE"), &BusinessNoteListLanguage,
5381 wxT("PREF"), &BusinessNoteListPref,
5382 wxT(""), &BusinessNoteListTokens );
5384 ResetSaveProcessData();
5388 ResetSaveProcessData();
5390 for (std::map<int,wxString>::iterator iter = CategoriesList.begin();
5391 iter != CategoriesList.end(); ++iter){
5393 ProcessSaveData(wxT("CATEGORIES"), &strValue2, &boolValue2, &boolValue,
5394 &iter, &CategoriesList, &ContactData,
5395 wxT("ALTID"), &CategoriesListAltID,
5396 wxT("PID"), &CategoriesListPID,
5397 wxT("TYPE"), &CategoriesListType,
5398 wxT("PREF"), &CategoriesListPref,
5399 wxT(""), &CategoriesListTokens );
5401 ResetSaveProcessData();
5407 for (std::map<int, std::string>::iterator iter = PicturesList.begin();
5408 iter != PicturesList.end(); ++iter){
5410 int intValueIndex = iter->first;
5412 std::map<int, std::string>::iterator stdstriter;
5413 std::map<int, wxString>::iterator enciter;
5415 striter = PicturesListPictureType.find(intValueIndex);
5416 enciter = PicturesListPicEncType.find(intValueIndex);
5418 ProcessSaveData(wxT("PHOTO"), &strValue2, &boolValue2, &boolValue,
5419 &iter, &PicturesList, &striter,
5420 &enciter, &ContactData,
5421 wxT("ALTID"), &PicturesListAltID,
5422 wxT("PID"), &PicturesListPID,
5423 wxT("TYPE"), &PicturesListType,
5424 wxT("PREF"), &PicturesListPref,
5425 wxT(""), &PicturesListTokens);
5427 ResetSaveProcessData();
5431 ResetSaveProcessData();
5435 for (std::map<int, std::string>::iterator iter = LogosList.begin();
5436 iter != LogosList.end(); ++iter){
5438 int intValueIndex = iter->first;
5440 std::map<int, std::string>::iterator stdstriter;
5441 std::map<int, wxString>::iterator enciter;
5443 striter = LogosListPictureType.find(intValueIndex);
5444 enciter = LogosListPicEncType.find(intValueIndex);
5446 ProcessSaveData(wxT("LOGO"), &strValue2, &boolValue2, &boolValue,
5447 &iter, &LogosList, &striter,
5448 &enciter, &ContactData,
5449 wxT("ALTID"), &LogosListAltID,
5450 wxT("PID"), &LogosListPID,
5451 wxT("TYPE"), &LogosListType,
5452 wxT("PREF"), &LogosListPref,
5453 wxT(""), &LogosListTokens );
5455 ResetSaveProcessData();
5459 ResetSaveProcessData();
5463 for (std::map<int, std::string>::iterator iter = SoundsList.begin();
5464 iter != SoundsList.end(); ++iter){
5466 int intValueIndex = iter->first;
5468 std::map<int, std::string>::iterator stdstriter;
5469 std::map<int, wxString>::iterator enciter;
5471 striter = SoundsListAudioType.find(intValueIndex);
5472 enciter = SoundsListAudioEncType.find(intValueIndex);
5474 ProcessSaveData(wxT("SOUND"), &strValue2, &boolValue2, &boolValue,
5475 &iter, &SoundsList, &striter,
5476 &enciter, &ContactData,
5477 wxT("ALTID"), &SoundsListAltID,
5478 wxT("PID"), &SoundsListPID,
5479 wxT("TYPE"), &SoundsListType,
5480 wxT("PREF"), &SoundsListPref,
5481 wxT(""), &SoundsListTokens );
5483 ResetSaveProcessData();
5487 ResetSaveProcessData();
5489 for (std::map<int,wxString>::iterator iter = CalendarList.begin();
5490 iter != CalendarList.end(); ++iter){
5492 ProcessSaveData(wxT("CALURI"), &strValue2, &boolValue2, &boolValue,
5493 &iter, &CalendarList, &ContactData,
5494 wxT("ALTID"), &CalendarListAltID,
5495 wxT("PID"), &CalendarListPID,
5496 wxT("MEDIATYPE"), &CalendarListMediatype,
5497 wxT("TYPE"), &CalendarListType,
5498 wxT("PREF"), &CalendarListPref,
5499 wxT(""), &CalendarListTokens );
5501 ResetSaveProcessData();
5505 ResetSaveProcessData();
5507 for (std::map<int,wxString>::iterator iter = CalendarRequestList.begin();
5508 iter != CalendarRequestList.end(); ++iter){
5510 ProcessSaveData(wxT("CALADRURI"), &strValue2, &boolValue2, &boolValue,
5511 &iter, &CalendarRequestList, &ContactData,
5512 wxT("ALTID"), &CalendarRequestListAltID,
5513 wxT("PID"), &CalendarRequestListPID,
5514 wxT("MEDIATYPE"), &CalendarRequestListMediatype,
5515 wxT("TYPE"), &CalendarRequestListType,
5516 wxT("PREF"), &CalendarRequestListPref,
5517 wxT(""), &CalendarRequestListTokens );
5519 ResetSaveProcessData();
5523 ResetSaveProcessData();
5525 for (std::map<int,wxString>::iterator iter = FreeBusyList.begin();
5526 iter != FreeBusyList.end(); ++iter){
5528 ProcessSaveData(wxT("FBURL"), &strValue2, &boolValue2, &boolValue,
5529 &iter, &FreeBusyList, &ContactData,
5530 wxT("ALTID"), &FreeBusyListAltID,
5531 wxT("PID"), &FreeBusyListPID,
5532 wxT("MEDIATYPE"), &FreeBusyListMediatype,
5533 wxT("TYPE"), &FreeBusyListType,
5534 wxT("PREF"), &FreeBusyListPref,
5535 wxT(""), &FreeBusyListTokens );
5537 ResetSaveProcessData();
5541 for (std::map<int, wxString>::iterator iter = KeyList.begin();
5542 iter != KeyList.end(); ++iter){
5544 intValue2 = iter->first;
5546 // Process Alternative ID.
5548 striter = KeyListAltID.find(intValue2);
5550 if (striter->first == intValue2){
5552 strValue3 = striter->second;
5554 if (!strValue3.IsEmpty()){
5559 if (boolValue2 == TRUE){
5561 strValue2.Append(wxT(";"));
5569 strValue2.Append(wxT("ALTID=") + strValue3);
5579 striter = KeyListPID.find(intValue2);
5581 if (striter->first == intValue2){
5583 strValue3 = striter->second;
5585 if (!strValue3.IsEmpty()){
5590 if (boolValue2 == TRUE){
5592 strValue2.Append(wxT(";"));
5600 strValue2.Append(wxT("PID=") + strValue3);
5610 striter = KeyListType.find(intValue2);
5612 if (striter->first == intValue2){
5614 strValue3 = striter->second;
5616 if (!strValue3.IsEmpty()){
5621 if (boolValue2 == TRUE){
5623 strValue2.Append(wxT(";"));
5631 strValue2.Append(wxT("TYPE=") + strValue3);
5639 intiter = KeyListPref.find(intValue2);
5641 if (intiter->first == intValue2){
5643 intValue3 = intiter->second;
5647 if (boolValue2 == TRUE){
5649 strValue2.Append(wxT(";"));
5657 strValue2.Append(wxT("PREF=") + wxString::Format(wxT("%i"), intValue3));
5667 striter = KeyListTokens.find(intValue2);
5669 if (striter->first == intValue2){
5671 strValue3 = striter->second;
5673 if (!strValue3.IsEmpty()){
5678 if (boolValue2 == TRUE){
5680 strValue2.Append(wxT(";"));
5688 strValue2.Append(strValue3);
5696 // Get the key information.
5698 std::map<int, wxString>::iterator enciter;
5700 striter = KeyListDataType.find(intValue2);
5701 //enciter = KeyListAudioEncType.find(intValue2);
5703 wxString strValueData;
5705 strValueData = iter->second;
5706 //strValueData.insert(0, wxT("data:") + striter->second + wxT(";") + enciter->second + wxT(","));
5707 strValueData.insert(0, wxT("data:") + striter->second + wxT(";base64,"));
5710 // Add to the vCard.
5712 if (boolValue == TRUE){
5714 ContactData.AddRaw(wxT("KEY;") + strValue2, strValueData);
5718 ContactData.Add(wxT("KEY"), strValueData, TRUE);
5722 ResetSaveProcessData();
5726 // Vendor specific items.
5728 ResetSaveProcessData();
5730 for (std::map<int,wxString>::iterator iter = VendorList.begin();
5731 iter != VendorList.end(); ++iter){
5733 intValue2 = iter->first;
5735 // Get the IANA PEN number.
5737 striter = VendorListPEN.find(intValue2);
5739 if (striter->first == intValue2){
5741 strValue2 = striter->second;
5745 // Get the element name.
5747 striter = VendorListElement.find(intValue2);
5749 if (striter->first == intValue2){
5751 strValue3 = striter->second;
5757 striter = VendorList.find(intValue2);
5759 if (striter->first == intValue2){
5761 strValue = striter->second;
5765 // Add to the vCard.
5767 if (boolValue == TRUE){
5769 ContactData.AddRaw(wxT("VND-") + strValue2 + wxT("-") + strValue3, strValue);
5773 ContactData.Add(wxT("VND-") + strValue2 + wxT("-") + strValue3, strValue, FALSE);
5777 ResetSaveProcessData();
5781 ResetSaveProcessData();
5785 for (std::map<int,wxString>::iterator iter = XTokenList.begin();
5786 iter != XTokenList.end(); ++iter){
5788 intValue2 = iter->first;
5790 // Get the element name.
5792 striter = XTokenListTokens.find(intValue2);
5794 if (striter->first == intValue2){
5796 strValue2 = striter->second;
5802 striter = XTokenList.find(intValue2);
5804 if (striter->first == intValue2){
5806 strValue = striter->second;
5810 // Add to the vCard.
5812 if (boolValue == TRUE){
5814 ContactData.AddRaw(wxT("X-") + strValue2, strValue);
5818 ContactData.Add(wxT("X-") + strValue2, strValue, FALSE);
5822 ResetSaveProcessData();
5826 ResetSaveProcessData();
5828 if (FullNamesList.size() == 0){
5830 wxString FullName = cmbDisplayAs->GetValue();
5831 FullNamesList.insert(std::make_pair(0, FullName));
5832 FullNamesListAltID.insert(std::make_pair(0, wxT("")));
5833 FullNamesListPID.insert(std::make_pair(0, wxT("")));
5834 FullNamesListType.insert(std::make_pair(0, wxT("")));
5835 FullNamesListLanguage.insert(std::make_pair(0, wxT("")));
5836 FullNamesListPref.insert(std::make_pair(0, 0));
5837 FullNamesListTokens.insert(std::make_pair(0, wxT("")));
5842 for (std::map<int, wxString>::iterator iter = FullNamesList.begin();
5843 iter != FullNamesList.end(); ++iter){
5845 if (FNFirst == TRUE){
5847 iter->second = cmbDisplayAs->GetValue();
5852 std::map<int,wxString>::iterator mapS;
5854 mapS = FullNamesListTokens.find(iter->first);
5856 ProcessSaveData(wxT("FN"), &strValue2, &boolValue2, &boolValue,
5857 &iter, &FullNamesList, &ContactData,
5858 wxT("ALTID"), &FullNamesListAltID,
5859 wxT("PID"), &FullNamesListPID,
5860 wxT("TYPE"), &FullNamesListType,
5861 wxT("LANGUAGE"), &FullNamesListLanguage,
5862 wxT("PREF"), &FullNamesListPref,
5863 wxT(""), &FullNamesListTokens );
5867 ResetSaveProcessData();
5871 //ContactData.Add(wxT("FN"), cmbDisplayAs->GetValue(), FALSE);
5873 // Insert revision (REV) date.
5875 // Get today's date and time.
5877 wxDateTime DateTimeNow = wxDateTime::Now();
5881 // Set year, month and date.
5883 int intYear = DateTimeNow.GetYear();
5884 int intMonth = DateTimeNow.GetMonth();
5885 int intDay = DateTimeNow.GetDay();
5887 DateRev.Append(wxT("0") + wxString::Format(wxT("%i"), intYear));
5891 DateRev.Append(wxT("0") + wxString::Format(wxT("%i"), intMonth));
5895 DateRev.Append(wxString::Format(wxT("%i"), intMonth));
5901 DateRev.Append(wxT("0") + wxString::Format(wxT("%i"), intDay));
5905 DateRev.Append(wxString::Format(wxT("%i"), intDay));
5909 //DateRev.Append(wx);
5910 //DateRev.Append(wx);
5911 //DateRev.Append(wx);
5912 DateRev.Append(wxT("T"));
5914 // Set hour, minute and second.
5916 int intHour = DateTimeNow.GetHour();
5917 int intMinute = DateTimeNow.GetMinute();
5918 int intSecond = DateTimeNow.GetSecond();
5922 DateRev.Append(wxT("0") + wxString::Format(wxT("%i"), intHour));
5926 DateRev.Append(wxString::Format(wxT("%i"), intHour));
5930 if (intMinute < 10){
5932 DateRev.Append(wxT("0") + wxString::Format(wxT("%i"), intMinute));
5936 DateRev.Append(wxString::Format(wxT("%i"), intMinute));
5940 if (intSecond < 10){
5942 DateRev.Append(wxT("0") + wxString::Format(wxT("%i"), intSecond));
5946 DateRev.Append(wxString::Format(wxT("%i"), intSecond));
5950 // DateRev.Append(wx);
5951 // DateRev.Append(wx);
5952 // DateRev.Append(wxString DateTimeNow->);
5953 DateRev.Append(wxT("Z"));
5955 ContactData.Add(wxT("UID"), UIDToken, FALSE);
5957 // End the vCard File.
5959 ContactData.Add(wxT("END"), wxT("VCARD"), FALSE);
5962 ContactData.WriteFile(FilenameFinal);
5964 vCard34Conv ConvFileFun;
5968 ConvFileFun.ConvertToV3(FilenameFinal, &wxSData);
5970 wxString AccountDirPrefix;
5971 wxString AccountDir;
5974 #if defined(__HAIKU__)
5976 //preffilename = wxT("noo");
5978 #elif defined(__APPLE__)
5980 PrefDir = GetUserPrefDir();
5982 wxStringTokenizer wSTFilename(wxSContactFilename, wxT("/"));
5984 #elif defined(__WIN32__)
5986 PrefDir = GetUserPrefDir();
5988 wxStringTokenizer wSTFilename(wxSContactFilename, wxT("\\"));
5992 PrefDir = GetUserPrefDir();
5994 wxStringTokenizer wSTFilename(wxSContactFilename, wxT("/"));
5998 XABPreferences PrefData(PrefDir);
6000 wxString AccountType;
6002 for (int i = 0; i < PrefData.accounts.GetCount(); i++){
6004 AccountDir = PrefData.accounts.GetAccountDirectory(i) + wxT(".carddav");
6006 if (AccountDir == wxSContactAccount){
6008 AccountDirPrefix = PrefData.accounts.GetAccountDirPrefix(i);
6009 AccountDirPrefix.Trim();
6010 AccountType = PrefData.accounts.GetAccountType(i);
6017 wxString wxSplitFilename;
6018 wxString wxSDataURL;
6020 while(wSTFilename.HasMoreTokens()){
6022 wxSplitFilename = wSTFilename.GetNextToken();
6026 wxSDataURL = wxSplitFilename;
6027 //wxSDataURL.Append(wxSplitFilename);
6029 // Find out if the filename exists in the table.
6031 if (AccountType == wxT("CardDAV") || AccountType == wxT("carddav")){
6033 wxString ETagResult;
6034 wxString ETagOriginal;
6036 ETagDB *ETagDBPtr = NULL;
6038 ETagDBPtr = ETagTmrPtr->GetPointer(wxSContactAccount);
6040 wxString wxSETag = ETagDBPtr->GetETag(wxSplitFilename);
6041 wxString wxSETagOrig = ETagDBPtr->GetETagOriginal(wxSplitFilename);
6043 if (wxSETagOrig.IsEmpty()){
6045 // Generate the ETag.
6047 wxSETagOrig = wxString::Format(wxT("%X%X%X%X"), rand() % 1024, rand() % 1024, rand() % 1024, rand() % 1024);
6051 if (wxSETag.IsEmpty()){
6053 // Update empty ETag.
6055 wxSETag = wxSETagOrig;
6056 ETagDBPtr->UpdateETag(wxSplitFilename, wxSETag, wxSETagOrig);
6061 // Don't change original ETag.
6063 wxSETag = wxString::Format(wxT("%X%X%X%X"), rand() % 1024, rand() % 1024, rand() % 1024, rand() % 1024);
6064 ETagDBPtr->UpdateETag(wxSplitFilename, wxSETag);
6068 if (EditMode == FALSE){
6070 ActMgrPtr->AddTask(0, cmbDisplayAs->GetValue(), wxSContactAccount, wxSDataURL, wxSplitFilename, FilenameFinal, wxSData);
6072 FMTimer.SetFilename(FilenameFinal);
6073 FMTimer.UpdateTimestamp();
6074 FMTimer.Start(10000, FALSE);
6076 wxCommandEvent reloadevent(RELOADCONTACTLIST);
6077 reloadevent.SetString(wxSContactAccount);
6078 wxPostEvent(this->GetParent(), reloadevent);
6083 ActMgrPtr->AddTask(1, cmbDisplayAs->GetValue(), wxSContactAccount, wxSDataURL, wxSplitFilename, FilenameFinal, wxSData);
6084 FMTimer.UpdateTimestamp();
6085 FMTimer.Start(10000, FALSE);
6091 // Send a notification to update the main window
6092 // with the new details.
6097 // TODO: Workout nickname settings by priority and
6100 ucd->ContactAccount = wxSContactAccount;
6101 ucd->ContactFilename = FilenameFinal;
6102 ucd->ContactName = cmbDisplayAs->GetValue();
6103 ucd->ContactNameArray = ContactData.GetName();
6105 for (std::map<int,wxString>::iterator gniter = GeneralNicknamesList.begin();
6106 gniter != GeneralNicknamesList.end(); gniter++){
6108 ucd->ContactNickname = gniter->second;
6113 wxCommandEvent event2(CE_UPDATECONTACTLIST);
6114 event2.SetClientData(ucd);
6115 wxPostEvent(MainPtr, event2);
6119 void frmContactEditor::SaveCloseContact( wxCommandEvent& event )
6122 // Save the updated contact data and close the form.
6126 void frmContactEditor::CloseContact( wxCommandEvent& event )
6133 void frmContactEditor::CloseWindow( wxCloseEvent& event )
6136 // TODO: Check if any changes have been made,
6137 // ask if the changes should be made, process
6138 // action based on question and then close.
6140 WindowData *WData = new WindowData;
6142 WData->DataType = 1;
6143 WData->WindowPointer = this;
6144 WData->WindowID = ContactEditorUID;
6146 wxCommandEvent delevent(WINDOW_CLOSE);
6147 delevent.SetClientData(WData);
6148 wxPostEvent(GetParent(), delevent);
6155 void frmContactEditor::CutText( wxCommandEvent& event )
6157 // This function left empty for future implementation.
6160 void frmContactEditor::CopyText( wxCommandEvent& event )
6162 // This function left empty for future implementation.
6165 void frmContactEditor::PasteText( wxCommandEvent& event )
6167 // This function left empty for future implementation.
6170 void frmContactEditor::SetupContact( wxString AccountName )
6173 wxSContactAccount = AccountName;
6177 bool frmContactEditor::ProcessEvent(wxEvent& event)
6180 // This section has been taken from the wxWidgets sample code of richtext.cpp
6181 // so that simple Cut/Copy/Paste code can be made.
6183 // As this code comes from the samples of the wxWidgets library, this is licenced
6184 // under the wxWindows Library Licence and is compatable with the LGPL and is
6185 // compatable with Xestia Address Book's licence.
6187 if (event.IsCommandEvent() && !event.IsKindOf(CLASSINFO(wxChildFocusEvent)))
6189 // Problem: we can get infinite recursion because the events
6190 // climb back up to this frame, and repeat.
6191 // Assume that command events don't cause another command event
6192 // to be called, so we can rely on inCommand not being overwritten
6194 static int s_eventType = 0;
6195 static wxWindowID s_id = 0;
6197 if (s_id != event.GetId() && s_eventType != event.GetEventType())
6199 s_eventType = event.GetEventType();
6200 s_id = event.GetId();
6202 wxWindow* focusWin = wxFindFocusDescendant(this);
6203 if (focusWin && focusWin->GetEventHandler()->ProcessEvent(event))
6219 return wxFrame::ProcessEvent(event);
6222 void frmContactEditor::SetupHeaders()
6225 /* Items for the General Tab */
6227 SetupColumn(CE_NICKNAME, lboNicknames);
6228 SetupColumn(CE_ADDRESS, lboAddresses);
6229 SetupColumn(CE_EMAIL, lboEmails);
6230 SetupColumn(CE_IM, lboIM);
6231 SetupColumn(CE_TELEPHONE, lboTelephone);
6232 SetupColumn(CE_LANG, lboLanguages);
6233 SetupColumn(CE_TZ, lboTimezones);
6234 SetupColumn(CE_GEOPOSITION, lboGeoposition);
6235 SetupColumn(CE_RELATED, lboRelated);
6236 SetupColumn(CE_WEBSITE, lboWebsites);
6237 SetupColumn(CE_TITLE, lboTitles);
6238 SetupColumn(CE_ROLE, lboRoles);
6239 SetupColumn(CE_ORG, lboOrganisations);
6240 SetupColumn(CE_NOTE, lboNotes);
6242 /* Items for the Home Tab */
6244 SetupColumn(CE_NICKNAME, lboHomeNicknames);
6245 SetupColumn(CE_ADDRESS, lboHomeAddresses);
6246 SetupColumn(CE_EMAIL, lboHomeEmails);
6247 SetupColumn(CE_IM, lboHomeIM);
6248 SetupColumn(CE_TELEPHONE, lboHomeTelephone);
6249 SetupColumn(CE_LANG, lboHomeLanguages);
6250 SetupColumn(CE_TZ, lboHomeTimezones);
6251 SetupColumn(CE_GEOPOSITION, lboHomeGeoposition);
6252 SetupColumn(CE_WEBSITE, lboHomeWebsites);
6253 SetupColumn(CE_TITLE, lboHomeTitles);
6254 SetupColumn(CE_ROLE, lboHomeRoles);
6255 SetupColumn(CE_ORG, lboHomeOrganisations);
6256 SetupColumn(CE_NOTE, lboHomeNotes);
6258 /* Items for the Business Tab */
6260 SetupColumn(CE_NICKNAME, lboBusinessNicknames);
6261 SetupColumn(CE_ADDRESS, lboBusinessAddresses);
6262 SetupColumn(CE_EMAIL, lboBusinessEmail);
6263 SetupColumn(CE_IM, lboBusinessIM);
6264 SetupColumn(CE_TELEPHONE, lboBusinessTelephone);
6265 SetupColumn(CE_LANG, lboBusinessLanguages);
6266 SetupColumn(CE_TZ, lboBusinessTimezones);
6267 SetupColumn(CE_GEOPOSITION, lboBusinessGeoposition);
6268 SetupColumn(CE_WEBSITE, lboBusinessWebsites);
6269 SetupColumn(CE_TITLE, lboBusinessTitles);
6270 SetupColumn(CE_ROLE, lboBusinessRoles);
6271 SetupColumn(CE_ORG, lboBusinessOrganisations);
6272 SetupColumn(CE_NOTE, lboBusinessNotes);
6274 /* Items for the Categories Tab */
6276 SetupColumn(CE_CATEGORIES, lboCategories);
6278 /* Items for the Groups Tab */
6280 SetupColumn(CE_GROUPS, lboGroups);
6282 /* Items for the Pictures and Logos Tab */
6284 SetupColumn(CE_PICTURES, lboPictures);
6285 SetupColumn(CE_PICTURES, lboLogos);
6287 /* Items for the Sounds Tab */
6289 SetupColumn(CE_SOUNDS, lboSounds);
6291 /* Items for the Calendaring Tab */
6293 SetupColumn(CE_CALENDAR, lboCalendarAddresses);
6294 SetupColumn(CE_CALENDAR, lboCalendarRequestAddress);
6295 SetupColumn(CE_CALENDAR, lboFreeBusyAddresses);
6297 /* Items for the Security Tab */
6299 SetupColumn(CE_KEY, lboKeys);
6301 /* Items for the Other Tab */
6303 SetupColumn(CE_TOKEN, lboVendorNamespace);
6304 SetupColumn(CE_TOKEN, lboXToken);
6308 void frmContactEditor::SetupColumn(wxString ColumnType, wxListCtrl *ListCtrl)
6313 if (ColumnType == CE_NICKNAME){
6316 coldata.SetText(_("Nickname"));
6317 coldata.SetWidth(128);
6318 ListCtrl->InsertColumn(0, coldata);
6321 coldata.SetText(_("Pri."));
6322 coldata.SetWidth(32);
6323 ListCtrl->InsertColumn(1, coldata);
6325 } else if (ColumnType == CE_ADDRESS){
6328 coldata.SetText(_("Address"));
6329 coldata.SetWidth(128);
6330 ListCtrl->InsertColumn(0, coldata);
6333 coldata.SetText(_("Town"));
6334 coldata.SetWidth(64);
6335 ListCtrl->InsertColumn(1, coldata);
6338 coldata.SetText(_("County"));
6339 coldata.SetWidth(64);
6340 ListCtrl->InsertColumn(2, coldata);
6343 coldata.SetText(_("Post code"));
6344 coldata.SetWidth(48);
6345 ListCtrl->InsertColumn(3, coldata);
6348 coldata.SetText(_("Pri."));
6349 coldata.SetWidth(32);
6350 ListCtrl->InsertColumn(4, coldata);
6352 } else if (ColumnType == CE_EMAIL){
6355 coldata.SetText(_("Email address"));
6356 coldata.SetWidth(304);
6357 ListCtrl->InsertColumn(0, coldata);
6360 coldata.SetText(_("Pri."));
6361 coldata.SetWidth(32);
6362 ListCtrl->InsertColumn(1, coldata);
6364 } else if (ColumnType == CE_IM){
6367 coldata.SetText(_("Type"));
6368 coldata.SetWidth(64);
6369 ListCtrl->InsertColumn(0, coldata);
6372 coldata.SetText(_("Address"));
6373 coldata.SetWidth(240);
6374 ListCtrl->InsertColumn(1, coldata);
6377 coldata.SetText(_("Pri."));
6378 coldata.SetWidth(32);
6379 ListCtrl->InsertColumn(2, coldata);
6381 } else if (ColumnType == CE_TELEPHONE){
6384 coldata.SetText(_("Telephone number"));
6385 coldata.SetWidth(128);
6386 ListCtrl->InsertColumn(0, coldata);
6389 coldata.SetText(_("Type"));
6390 coldata.SetWidth(64);
6391 ListCtrl->InsertColumn(1, coldata);
6394 coldata.SetText(_("Pri."));
6395 coldata.SetWidth(32);
6396 ListCtrl->InsertColumn(2, coldata);
6398 } else if (ColumnType == CE_LANG){
6401 coldata.SetText(_("Language"));
6402 coldata.SetWidth(128);
6403 ListCtrl->InsertColumn(0, coldata);
6406 coldata.SetText(_("Pri."));
6407 coldata.SetWidth(32);
6408 ListCtrl->InsertColumn(1, coldata);
6410 } else if (ColumnType == CE_TZ){
6413 coldata.SetText(_("Timezone"));
6414 coldata.SetWidth(192);
6415 ListCtrl->InsertColumn(0, coldata);
6418 coldata.SetText(_("Pri."));
6419 coldata.SetWidth(32);
6420 ListCtrl->InsertColumn(1, coldata);
6422 } else if (ColumnType == CE_RELATED){
6425 coldata.SetText(_("Type"));
6426 coldata.SetWidth(64);
6427 ListCtrl->InsertColumn(0, coldata);
6430 coldata.SetText(_("Name/Description"));
6431 coldata.SetWidth(192);
6432 ListCtrl->InsertColumn(1, coldata);
6435 coldata.SetText(_("Pri."));
6436 coldata.SetWidth(32);
6437 ListCtrl->InsertColumn(2, coldata);
6439 } else if (ColumnType == CE_WEBSITE){
6442 coldata.SetText(_("Website"));
6443 coldata.SetWidth(288);
6444 ListCtrl->InsertColumn(0, coldata);
6447 coldata.SetText(_("Pri."));
6448 coldata.SetWidth(32);
6449 ListCtrl->InsertColumn(1, coldata);
6451 } else if (ColumnType == CE_TITLE){
6454 coldata.SetText(_("Title"));
6455 coldata.SetWidth(288);
6456 ListCtrl->InsertColumn(0, coldata);
6459 coldata.SetText(_("Pri."));
6460 coldata.SetWidth(32);
6461 ListCtrl->InsertColumn(1, coldata);
6463 } else if (ColumnType == CE_ROLE){
6466 coldata.SetText(_("Role"));
6467 coldata.SetWidth(288);
6468 ListCtrl->InsertColumn(0, coldata);
6471 coldata.SetText(_("Pri."));
6472 coldata.SetWidth(32);
6473 ListCtrl->InsertColumn(1, coldata);
6475 } else if (ColumnType == CE_ORG){
6478 coldata.SetText(_("Organisation"));
6479 coldata.SetWidth(288);
6480 ListCtrl->InsertColumn(0, coldata);
6483 coldata.SetText(_("Pri."));
6484 coldata.SetWidth(32);
6485 ListCtrl->InsertColumn(1, coldata);
6487 } else if (ColumnType == CE_NOTE){
6490 coldata.SetText(_("Notes"));
6491 coldata.SetWidth(288);
6492 ListCtrl->InsertColumn(0, coldata);
6495 coldata.SetText(_("Pri."));
6496 coldata.SetWidth(32);
6497 ListCtrl->InsertColumn(1, coldata);
6499 } else if (ColumnType == CE_CATEGORIES){
6502 coldata.SetText(_("Category"));
6503 coldata.SetWidth(320);
6504 ListCtrl->InsertColumn(0, coldata);
6507 coldata.SetText(_("Pri."));
6508 coldata.SetWidth(32);
6509 ListCtrl->InsertColumn(1, coldata);
6511 } else if (ColumnType == CE_GROUPS){
6514 coldata.SetText(_("Member"));
6515 coldata.SetWidth(320);
6516 ListCtrl->InsertColumn(0, coldata);
6518 } else if (ColumnType == CE_GEOPOSITION){
6521 coldata.SetText(_("Geoposition"));
6522 coldata.SetWidth(320);
6523 ListCtrl->InsertColumn(0, coldata);
6526 coldata.SetText(_("Pri."));
6527 coldata.SetWidth(32);
6528 ListCtrl->InsertColumn(1, coldata);
6530 } else if (ColumnType == CE_PICTURES){
6533 coldata.SetText(_("Pictures"));
6534 coldata.SetWidth(128);
6535 ListCtrl->InsertColumn(0, coldata);
6538 coldata.SetText(_("Type"));
6539 coldata.SetWidth(64);
6540 ListCtrl->InsertColumn(1, coldata);
6543 coldata.SetText(_("Pri."));
6544 coldata.SetWidth(32);
6545 ListCtrl->InsertColumn(2, coldata);
6547 } else if (ColumnType == CE_SOUNDS){
6550 coldata.SetText(_("Sounds"));
6551 coldata.SetWidth(128);
6552 ListCtrl->InsertColumn(0, coldata);
6555 coldata.SetText(_("Type"));
6556 coldata.SetWidth(64);
6557 ListCtrl->InsertColumn(1, coldata);
6560 coldata.SetText(_("Pri."));
6561 coldata.SetWidth(32);
6562 ListCtrl->InsertColumn(2, coldata);
6564 } else if (ColumnType == CE_CALENDAR){
6567 coldata.SetText(_("Calendar Address"));
6568 coldata.SetWidth(224);
6569 ListCtrl->InsertColumn(0, coldata);
6572 coldata.SetText(_("Type"));
6573 coldata.SetWidth(64);
6574 ListCtrl->InsertColumn(1, coldata);
6577 coldata.SetText(_("Pri."));
6578 coldata.SetWidth(32);
6579 ListCtrl->InsertColumn(2, coldata);
6581 } else if (ColumnType == CE_KEY){
6584 coldata.SetText(_("Key information"));
6585 coldata.SetWidth(224);
6586 ListCtrl->InsertColumn(0, coldata);
6589 coldata.SetText(_("Type"));
6590 coldata.SetWidth(64);
6591 ListCtrl->InsertColumn(1, coldata);
6594 coldata.SetText(_("Pri."));
6595 coldata.SetWidth(32);
6596 ListCtrl->InsertColumn(2, coldata);
6598 } else if (ColumnType == CE_TOKEN){
6601 coldata.SetText(_("Token"));
6602 coldata.SetWidth(320);
6603 ListCtrl->InsertColumn(0, coldata);
6609 int frmContactEditor::GetLastInt(std::map<int, wxString> *MapData){
6614 std::map<int,wxString>::iterator iwxsit;
6616 for( iwxsit=(*MapData).begin(); iwxsit != (*MapData).end(); iwxsit++){
6617 intResult = (*iwxsit).first;
6624 return intValueSeek;
6628 int frmContactEditor::GetLastInt(std::map<int, std::string> *MapData){
6630 /* int intResult = 0;
6632 std::map<int,std::string>::iterator iwxsit;
6634 for( iwxsit=(*MapData).begin(); iwxsit != (*MapData).end(); iwxsit++){
6635 intResult = (*iwxsit).first;
6639 return intValueSeek;
6643 bool frmContactEditor::GetSelectedItem(wxListCtrl *ListCtrlPtr,
6645 int *intSelectedData){
6648 *intSelectedData = 0;
6650 *longSelected = ListCtrlPtr->GetNextItem(*longSelected,
6652 wxLIST_STATE_SELECTED);
6654 *intSelectedData = (int)ListCtrlPtr->GetItemData(*longSelected);
6656 if (*longSelected == -1){
6665 void frmContactEditor::DeleteMapDataProcess(int IndexNum, std::map<int, std::string>* MapData){
6666 MapData->erase(IndexNum);
6669 void frmContactEditor::DeleteMapDataProcess(int IndexNum, std::map<int, wxString>* MapData){
6670 MapData->erase(IndexNum);
6673 void frmContactEditor::DeleteMapDataProcess(int IndexNum, std::map<int, int>* MapData){
6674 MapData->erase(IndexNum);
6677 void frmContactEditor::DeleteMapDataProcess(int IndexNum, std::map<int, bool>* MapData){
6678 MapData->erase(IndexNum);
6681 void frmContactEditor::ProcessSaveDataProc( wxString PropName,
6682 std::map<int,int>* MapData){
6684 int intIterVal = (*iterDataPtr)->first;
6686 std::map<int,int>::iterator intIter;
6688 intIter = MapData->find(intIterVal);
6692 if (intIter->first == intIterVal){
6694 intPropValue = intIter->second;
6698 if (*boolAdditionalPtr == TRUE){
6700 strPropertyPtr->Append(wxT(";"));
6704 *boolAdditionalPtr = TRUE;
6708 strPropertyPtr->Append(PropName + wxT("=") + wxString::Format(wxT("%i"), intPropValue));
6710 *boolExtraPtr = TRUE;
6718 void frmContactEditor::ProcessSaveDataProc( wxString PropName,
6719 std::map<int,wxString>* MapData){
6723 intIterVal = (*iterDataPtr)->first;
6725 std::map<int,wxString>::iterator strIter;
6727 strIter = MapData->find(intIterVal);
6729 if (strIter == MapData->end()){
6735 wxString strPropValue;
6737 if (strIter->first == intIterVal){
6739 strPropValue = strIter->second;
6741 if (!strPropValue.IsEmpty() && PropName.IsEmpty()){
6743 strPropValue.Trim();
6744 strPropValue.Trim();
6746 if (*boolAdditionalPtr == TRUE){
6748 strPropertyPtr->Append(wxT(";"));
6752 *boolAdditionalPtr = TRUE;
6756 strPropertyPtr->Append(strPropValue);
6758 *boolExtraPtr = TRUE;
6764 if (!strPropValue.IsEmpty()){
6766 strPropValue.Trim();
6767 strPropValue.Trim();
6769 if (*boolAdditionalPtr == TRUE){
6771 strPropertyPtr->Append(wxT(";"));
6775 *boolAdditionalPtr = TRUE;
6779 // Look for semi-colon in property name and if there is then
6782 if (PropName != wxT("TYPE")){
6784 EscapeString(&strPropValue, FALSE);
6788 if (strPropValue.find(wxT(";")) == wxNOT_FOUND && strPropValue.find(wxT(":")) == wxNOT_FOUND &&
6789 strPropValue.find(wxT(",")) == wxNOT_FOUND){
6791 strPropertyPtr->Append(PropName + wxT("=") + strPropValue);
6795 strPropertyPtr->Append(PropName + wxT("=\"") + strPropValue + wxT("\""));
6799 *boolExtraPtr = TRUE;
6807 void frmContactEditor::ProcessSaveDataStrProc( wxString PropName,
6808 std::map<int,std::string>* MapData){
6810 int intIterVal = (*iterDataStringPtr)->first;
6812 //std::map<int,wxString>::iterator strIter;
6814 std::map<int,std::string>::iterator stdstrIter;
6816 stdstrIter = MapData->find(intIterVal);
6818 if (stdstrIter->first == intIterVal){
6820 wxString strPropValue(stdstrIter->second.c_str(), wxConvUTF8);
6822 if (!strPropValue.IsEmpty() && PropName.IsEmpty()){
6824 strPropValue.Trim();
6825 strPropValue.Trim();
6827 if (*boolAdditionalPtr == TRUE){
6829 strPropertyPtr->Append(wxT(";"));
6833 *boolAdditionalPtr = TRUE;
6837 strPropertyPtr->Append(strPropValue);
6839 *boolExtraPtr = TRUE;
6845 if (!strPropValue.IsEmpty()){
6847 strPropValue.Trim();
6848 strPropValue.Trim();
6850 if (*boolAdditionalPtr == TRUE){
6852 strPropertyPtr->Append(wxT(";"));
6856 *boolAdditionalPtr = TRUE;
6860 // Look for semi-colon in property name and if there is then
6863 if (PropName != wxT("TYPE")){
6865 EscapeString(&strPropValue, FALSE);
6869 if (strPropValue.find(wxT(";")) == wxNOT_FOUND && strPropValue.find(wxT(":")) == wxNOT_FOUND &&
6870 strPropValue.find(wxT(",")) == wxNOT_FOUND){
6872 strPropertyPtr->Append(PropName + wxT("=") + strPropValue);
6876 strPropertyPtr->Append(PropName + wxT("=\"") + strPropValue + wxT("\""));
6880 *boolExtraPtr = TRUE;
6889 void frmContactEditor::ProcessSaveDataStrProc( wxString PropName,
6890 std::map<int,int>* MapData){
6892 int intIterVal = (*iterDataStringPtr)->first;
6894 std::map<int,int>::iterator intIter;
6896 intIter = MapData->find(intIterVal);
6900 if (intIter->first == intIterVal){
6902 intPropValue = intIter->second;
6906 if (*boolAdditionalPtr == TRUE){
6908 strPropertyPtr->Append(wxT(";"));
6912 *boolAdditionalPtr = TRUE;
6916 strPropertyPtr->Append(PropName + wxT("=") + wxString::Format(wxT("%i"), intPropValue));
6918 *boolExtraPtr = TRUE;
6926 void frmContactEditor::ProcessSaveDataStrProc( wxString PropName,
6927 std::map<int,wxString>* MapData){
6931 intIterVal = (*iterDataStringPtr)->first;
6933 std::map<int,wxString>::iterator strIter;
6935 strIter = MapData->find(intIterVal);
6937 wxString strPropValue;
6939 if (strIter->first == intIterVal){
6941 strPropValue = strIter->second;
6943 if (!strPropValue.IsEmpty() && PropName.IsEmpty()){
6945 strPropValue.Trim();
6946 strPropValue.Trim();
6948 if (*boolAdditionalPtr == TRUE){
6950 strPropertyPtr->Append(wxT(";"));
6954 *boolAdditionalPtr = TRUE;
6958 strPropertyPtr->Append(strPropValue);
6960 *boolExtraPtr = TRUE;
6966 if (!strPropValue.IsEmpty()){
6968 strPropValue.Trim();
6969 strPropValue.Trim();
6971 if (*boolAdditionalPtr == TRUE){
6973 strPropertyPtr->Append(wxT(";"));
6977 *boolAdditionalPtr = TRUE;
6981 // Look for semi-colon in property name and if there is then
6984 if (PropName != wxT("TYPE")){
6986 EscapeString(&strPropValue, FALSE);
6990 if (strPropValue.find(wxT(";")) == wxNOT_FOUND && strPropValue.find(wxT(":")) == wxNOT_FOUND &&
6991 strPropValue.find(wxT(",")) == wxNOT_FOUND){
6993 strPropertyPtr->Append(PropName + wxT("=") + strPropValue);
6997 strPropertyPtr->Append(PropName + wxT("=\"") + strPropValue + wxT("\""));
7001 *boolExtraPtr = TRUE;
7009 void frmContactEditor::ProcessCaptureStringsProc(wxString *strCapture){
7011 CaptureString(strCapture, FALSE);
7015 void frmContactEditor::ResetSaveProcessData(){
7028 void frmContactEditor::SetupPointers(frmActivityMgr *ActMgr, wxETagProcessTimer *ETagProc,
7029 frmMain *MainPtrInc){
7032 ETagTmrPtr = ETagProc;
7033 MainPtr = MainPtrInc;
7037 void frmContactEditor::ClearContact(){
7039 // Clear out the GUI and values.
7044 txtForename->Clear();
7045 txtSurname->Clear();
7046 txtOtherNames->Clear();
7048 cmbDisplayAs->Clear();
7049 cmbDisplayAs->SetValue(wxT(""));
7050 wxDateTime EmptyDate;
7051 wxBitmap EmptyBitmap;
7052 dapAnniversary->SetValue(EmptyDate);
7053 dapBirthday->SetValue(EmptyDate);
7054 txtBirthday->Clear();
7055 txtAnniversary->Clear();
7056 cmbGender->Select(0);
7057 txtGenderDescription->Clear();
7059 lboNicknames->DeleteAllItems();
7060 lboHomeNicknames->DeleteAllItems();
7061 lboBusinessNicknames->DeleteAllItems();
7063 lboAddresses->DeleteAllItems();
7064 lboHomeAddresses->DeleteAllItems();
7065 lboBusinessAddresses->DeleteAllItems();
7067 lboEmails->DeleteAllItems();
7068 lboHomeEmails->DeleteAllItems();
7069 lboBusinessEmail->DeleteAllItems();
7071 lboIM->DeleteAllItems();
7072 lboHomeIM->DeleteAllItems();
7073 lboBusinessIM->DeleteAllItems();
7075 lboTelephone->DeleteAllItems();
7076 lboHomeTelephone->DeleteAllItems();
7077 lboBusinessTelephone->DeleteAllItems();
7079 lboLanguages->DeleteAllItems();
7080 lboHomeLanguages->DeleteAllItems();
7081 lboBusinessLanguages->DeleteAllItems();
7083 lboTimezones->DeleteAllItems();
7084 lboHomeTimezones->DeleteAllItems();
7085 lboBusinessTimezones->DeleteAllItems();
7087 lboGeoposition->DeleteAllItems();
7088 lboHomeGeoposition->DeleteAllItems();
7089 lboBusinessGeoposition->DeleteAllItems();
7091 lboRelated->DeleteAllItems();
7093 lboWebsites->DeleteAllItems();
7094 lboHomeWebsites->DeleteAllItems();
7095 lboBusinessWebsites->DeleteAllItems();
7097 lboTitles->DeleteAllItems();
7098 lboHomeTitles->DeleteAllItems();
7099 lboBusinessTitles->DeleteAllItems();
7101 lboRoles->DeleteAllItems();
7102 lboHomeRoles->DeleteAllItems();
7103 lboBusinessRoles->DeleteAllItems();
7105 lboOrganisations->DeleteAllItems();
7106 lboHomeOrganisations->DeleteAllItems();
7107 lboBusinessOrganisations->DeleteAllItems();
7109 lboNotes->DeleteAllItems();
7110 lboHomeNotes->DeleteAllItems();
7111 lboBusinessNotes->DeleteAllItems();
7113 lboCategories->DeleteAllItems();
7115 lboGroups->DeleteAllItems();
7118 lboPictures->DeleteAllItems();
7119 imgPicture->SetBitmap(EmptyBitmap);
7122 lboLogos->DeleteAllItems();
7123 imgLogo->SetBitmap(EmptyBitmap);
7125 lboSounds->DeleteAllItems();
7127 lboCalendarAddresses->DeleteAllItems();
7128 lboCalendarRequestAddress->DeleteAllItems();
7129 lboFreeBusyAddresses->DeleteAllItems();
7131 lboKeys->DeleteAllItems();
7133 lboVendorNamespace->DeleteAllItems();
7134 lboXToken->DeleteAllItems();
7136 // Clear values out.
7139 wxString NameForename;
7140 wxString NameSurname;
7141 wxString NameOtherNames;
7142 wxString NameSuffix;
7143 wxString NameNickname;
7144 wxString NameDisplayAs;
7145 wxString NameLanguage;
7147 wxString NameTokens;
7150 wxString BirthdayAltID;
7151 wxString BirthdayCalScale;
7152 wxString BirthdayTokens;
7153 wxString Anniversary;
7154 wxString AnniversaryAltID;
7155 wxString AnniversaryCalScale;
7156 wxString AnniversaryTokens;
7159 wxString GenderDetails;
7160 wxString GenderTokens;
7164 /* We don't use these at the moment but we want to keep
7165 them for compatability reasons */
7167 /*std::map<int, wxString> ExtraFullNames;*/
7168 /*std::map<int, wxString> ExtraNicknames;*/
7170 FullNamesList.clear();
7171 FullNamesListType.clear();
7172 FullNamesListLanguage.clear();
7173 FullNamesListAltID.clear();
7174 FullNamesListPID.clear();
7175 FullNamesListTokens.clear();
7176 FullNamesListPref.clear();
7178 GeneralNicknamesList.clear();
7179 GeneralNicknamesListType.clear();
7180 GeneralNicknamesListLanguage.clear();
7181 GeneralNicknamesListAltID.clear();
7182 GeneralNicknamesListPID.clear();
7183 GeneralNicknamesListTokens.clear();
7184 GeneralNicknamesListPref.clear();
7186 GeneralAddressList.clear();
7187 GeneralAddressListTown.clear();
7188 GeneralAddressListCounty.clear();
7189 GeneralAddressListPostCode.clear();
7190 GeneralAddressListCountry.clear();
7191 GeneralAddressListLabel.clear();
7192 GeneralAddressListLang.clear();
7193 GeneralAddressListAltID.clear();
7194 GeneralAddressListPID.clear();
7195 GeneralAddressListTokens.clear();
7196 GeneralAddressListGeo.clear();
7197 GeneralAddressListTimezone.clear();
7198 GeneralAddressListType.clear();
7199 GeneralAddressListMediatype.clear();
7200 GeneralAddressListPref.clear();
7202 GeneralEmailList.clear();
7203 GeneralEmailListAltID.clear();
7204 GeneralEmailListPID.clear();
7205 GeneralEmailListType.clear();
7206 GeneralEmailListTokens.clear();
7207 GeneralEmailListPref.clear();
7209 GeneralIMList.clear();
7210 GeneralIMListAltID.clear();
7211 GeneralIMListPID.clear();
7212 GeneralIMListType.clear();
7213 GeneralIMListTokens.clear();
7214 GeneralIMListMediatype.clear();
7215 GeneralIMListPref.clear();
7217 GeneralTelephoneList.clear();
7218 GeneralTelephoneListAltID.clear();
7219 GeneralTelephoneListPID.clear();
7220 GeneralTelephoneListType.clear();
7221 GeneralTelephoneListTokens.clear();
7222 GeneralTelephoneListPref.clear();
7224 GeneralLanguageList.clear();
7225 GeneralLanguageListAltID.clear();
7226 GeneralLanguageListPID.clear();
7227 GeneralLanguageListType.clear();
7228 GeneralLanguageListTokens.clear();
7229 GeneralLanguageListPref.clear();
7231 GeneralTZList.clear();
7232 GeneralTZListAltID.clear();
7233 GeneralTZListPID.clear();
7234 GeneralTZListType.clear();
7235 GeneralTZListTokens.clear();
7236 GeneralTZListMediatype.clear();
7237 GeneralTZListPref.clear();
7239 GeneralGeographyList.clear();
7240 GeneralGeographyListAltID.clear();
7241 GeneralGeographyListPID.clear();
7242 GeneralGeographyListType.clear();
7243 GeneralGeographyListTokens.clear();
7244 GeneralGeographyListMediatype.clear();
7245 GeneralGeographyListPref.clear();
7247 GeneralRelatedList.clear();
7248 GeneralRelatedListRelType.clear();
7249 GeneralRelatedListLanguage.clear();
7250 GeneralRelatedListAltID.clear();
7251 GeneralRelatedListPID.clear();
7252 GeneralRelatedListType.clear();
7253 GeneralRelatedListTokens.clear();
7254 GeneralRelatedListPref.clear();
7256 GeneralWebsiteList.clear();
7257 GeneralWebsiteListAltID.clear();
7258 GeneralWebsiteListPID.clear();
7259 GeneralWebsiteListType.clear();
7260 GeneralWebsiteListTokens.clear();
7261 GeneralWebsiteListMediatype.clear();
7262 GeneralWebsiteListPref.clear();
7264 GeneralTitleList.clear();
7265 GeneralTitleListLanguage.clear();
7266 GeneralTitleListAltID.clear();
7267 GeneralTitleListPID.clear();
7268 GeneralTitleListType.clear();
7269 GeneralTitleListTokens.clear();
7270 GeneralTitleListPref.clear();
7272 GeneralRoleList.clear();
7273 GeneralRoleListLanguage.clear();
7274 GeneralRoleListAltID.clear();
7275 GeneralRoleListPID.clear();
7276 GeneralRoleListType.clear();
7277 GeneralRoleListTokens.clear();
7278 GeneralRoleListPref.clear();
7280 GeneralOrganisationsList.clear();
7281 GeneralOrganisationsListLanguage.clear();
7282 GeneralOrganisationsListAltID.clear();
7283 GeneralOrganisationsListPID.clear();
7284 GeneralOrganisationsListType.clear();
7285 GeneralOrganisationsListTokens.clear();
7286 GeneralOrganisationsListSortAs.clear();
7287 GeneralOrganisationsListPref.clear();
7289 GeneralNoteList.clear();
7290 GeneralNoteListLanguage.clear();
7291 GeneralNoteListAltID.clear();
7292 GeneralNoteListPID.clear();
7293 GeneralNoteListType.clear();
7294 GeneralNoteListTokens.clear();
7295 GeneralNoteListPref.clear();
7297 /* Items on Home Tab */
7299 HomeNicknamesList.clear();
7300 HomeNicknamesListType.clear();
7301 HomeNicknamesListLanguage.clear();
7302 HomeNicknamesListAltID.clear();
7303 HomeNicknamesListPID.clear();
7304 HomeNicknamesListTokens.clear();
7305 HomeNicknamesListPref.clear();
7307 HomeAddressList.clear();
7308 HomeAddressListTown.clear();
7309 HomeAddressListCounty.clear();
7310 HomeAddressListPostCode.clear();
7311 HomeAddressListCountry.clear();
7312 HomeAddressListLabel.clear();
7313 HomeAddressListLang.clear();
7314 HomeAddressListAltID.clear();
7315 HomeAddressListPID.clear();
7316 HomeAddressListTokens.clear();
7317 HomeAddressListGeo.clear();
7318 HomeAddressListTimezone.clear();
7319 HomeAddressListType.clear();
7320 HomeAddressListMediatype.clear();
7321 HomeAddressListPref.clear();
7323 HomeEmailList.clear();
7324 HomeEmailListAltID.clear();
7325 HomeEmailListPID.clear();
7326 HomeEmailListType.clear();
7327 HomeEmailListTokens.clear();
7328 HomeEmailListPref.clear();
7331 HomeIMListAltID.clear();
7332 HomeIMListPID.clear();
7333 HomeIMListType.clear();
7334 HomeIMListTokens.clear();
7335 HomeIMListMediatype.clear();
7336 HomeIMListPref.clear();
7338 HomeTelephoneList.clear();
7339 HomeTelephoneListAltID.clear();
7340 HomeTelephoneListPID.clear();
7341 HomeTelephoneListType.clear();
7342 HomeTelephoneListTokens.clear();
7343 HomeTelephoneListPref.clear();
7345 HomeLanguageList.clear();
7346 HomeLanguageListAltID.clear();
7347 HomeLanguageListPID.clear();
7348 HomeLanguageListType.clear();
7349 HomeLanguageListTokens.clear();
7350 HomeLanguageListPref.clear();
7353 HomeTZListAltID.clear();
7354 HomeTZListPID.clear();
7355 HomeTZListType.clear();
7356 HomeTZListTokens.clear();
7357 HomeTZListMediatype.clear();
7358 HomeTZListPref.clear();
7360 HomeGeographyList.clear();
7361 HomeGeographyListAltID.clear();
7362 HomeGeographyListPID.clear();
7363 HomeGeographyListType.clear();
7364 HomeGeographyListTokens.clear();
7365 HomeGeographyListMediatype.clear();
7366 HomeGeographyListPref.clear();
7368 HomeRelatedList.clear();
7369 HomeRelatedListRelType.clear();
7370 HomeRelatedListLanguage.clear();
7371 HomeRelatedListAltID.clear();
7372 HomeRelatedListPID.clear();
7373 HomeRelatedListType.clear();
7374 HomeRelatedListTokens.clear();
7375 HomeRelatedListPref.clear();
7377 HomeWebsiteList.clear();
7378 HomeWebsiteListAltID.clear();
7379 HomeWebsiteListPID.clear();
7380 HomeWebsiteListType.clear();
7381 HomeWebsiteListTokens.clear();
7382 HomeWebsiteListMediatype.clear();
7383 HomeWebsiteListPref.clear();
7385 HomeTitleList.clear();
7386 HomeTitleListLanguage.clear();
7387 HomeTitleListAltID.clear();
7388 HomeTitleListPID.clear();
7389 HomeTitleListType.clear();
7390 HomeTitleListTokens.clear();
7391 HomeTitleListPref.clear();
7393 HomeRoleList.clear();
7394 HomeRoleListLanguage.clear();
7395 HomeRoleListAltID.clear();
7396 HomeRoleListPID.clear();
7397 HomeRoleListType.clear();
7398 HomeRoleListTokens.clear();
7399 HomeRoleListPref.clear();
7401 HomeOrganisationsList.clear();
7402 HomeOrganisationsListLanguage.clear();
7403 HomeOrganisationsListAltID.clear();
7404 HomeOrganisationsListPID.clear();
7405 HomeOrganisationsListType.clear();
7406 HomeOrganisationsListTokens.clear();
7407 HomeOrganisationsListSortAs.clear();
7408 HomeOrganisationsListPref.clear();
7410 HomeNoteList.clear();
7411 HomeNoteListLanguage.clear();
7412 HomeNoteListAltID.clear();
7413 HomeNoteListPID.clear();
7414 HomeNoteListType.clear();
7415 HomeNoteListTokens.clear();
7416 HomeNoteListPref.clear();
7418 /* Items on the Business tab */
7420 BusinessNicknamesList.clear();
7421 BusinessNicknamesListType.clear();
7422 BusinessNicknamesListLanguage.clear();
7423 BusinessNicknamesListAltID.clear();
7424 BusinessNicknamesListPID.clear();
7425 BusinessNicknamesListTokens.clear();
7426 BusinessNicknamesListPref.clear();
7428 BusinessAddressList.clear();
7429 BusinessAddressListTown.clear();
7430 BusinessAddressListCounty.clear();
7431 BusinessAddressListPostCode.clear();
7432 BusinessAddressListCountry.clear();
7433 BusinessAddressListLabel.clear();
7434 BusinessAddressListLang.clear();
7435 BusinessAddressListAltID.clear();
7436 BusinessAddressListPID.clear();
7437 BusinessAddressListTokens.clear();
7438 BusinessAddressListGeo.clear();
7439 BusinessAddressListTimezone.clear();
7440 BusinessAddressListType.clear();
7441 BusinessAddressListMediatype.clear();
7442 BusinessAddressListPref.clear();
7444 BusinessEmailList.clear();
7445 BusinessEmailListAltID.clear();
7446 BusinessEmailListPID.clear();
7447 BusinessEmailListType.clear();
7448 BusinessEmailListTokens.clear();
7449 BusinessEmailListPref.clear();
7451 BusinessIMList.clear();
7452 BusinessIMListAltID.clear();
7453 BusinessIMListPID.clear();
7454 BusinessIMListType.clear();
7455 BusinessIMListTokens.clear();
7456 BusinessIMListMediatype.clear();
7457 BusinessIMListPref.clear();
7459 BusinessTelephoneList.clear();
7460 BusinessTelephoneListAltID.clear();
7461 BusinessTelephoneListPID.clear();
7462 BusinessTelephoneListType.clear();
7463 BusinessTelephoneListTokens.clear();
7464 BusinessTelephoneListPref.clear();
7466 BusinessLanguageList.clear();
7467 BusinessLanguageListAltID.clear();
7468 BusinessLanguageListPID.clear();
7469 BusinessLanguageListType.clear();
7470 BusinessLanguageListTokens.clear();
7471 BusinessLanguageListPref.clear();
7473 BusinessTZList.clear();
7474 BusinessTZListAltID.clear();
7475 BusinessTZListPID.clear();
7476 BusinessTZListType.clear();
7477 BusinessTZListTokens.clear();
7478 BusinessTZListMediatype.clear();
7479 BusinessTZListPref.clear();
7481 BusinessGeographyList.clear();
7482 BusinessGeographyListAltID.clear();
7483 BusinessGeographyListPID.clear();
7484 BusinessGeographyListType.clear();
7485 BusinessGeographyListTokens.clear();
7486 BusinessGeographyListMediatype.clear();
7487 BusinessGeographyListPref.clear();
7489 BusinessRelatedList.clear();
7490 BusinessRelatedListRelType.clear();
7491 BusinessRelatedListLanguage.clear();
7492 BusinessRelatedListAltID.clear();
7493 BusinessRelatedListPID.clear();
7494 BusinessRelatedListType.clear();
7495 BusinessRelatedListTokens.clear();
7496 BusinessRelatedListPref.clear();
7498 BusinessWebsiteList.clear();
7499 BusinessWebsiteListAltID.clear();
7500 BusinessWebsiteListPID.clear();
7501 BusinessWebsiteListType.clear();
7502 BusinessWebsiteListTokens.clear();
7503 BusinessWebsiteListMediatype.clear();
7504 BusinessWebsiteListPref.clear();
7506 BusinessTitleList.clear();
7507 BusinessTitleListLanguage.clear();
7508 BusinessTitleListAltID.clear();
7509 BusinessTitleListPID.clear();
7510 BusinessTitleListType.clear();
7511 BusinessTitleListTokens.clear();
7512 BusinessTitleListPref.clear();
7514 BusinessRoleList.clear();
7515 BusinessRoleListLanguage.clear();
7516 BusinessRoleListAltID.clear();
7517 BusinessRoleListPID.clear();
7518 BusinessRoleListType.clear();
7519 BusinessRoleListTokens.clear();
7520 BusinessRoleListPref.clear();
7522 BusinessOrganisationsList.clear();
7523 BusinessOrganisationsListLanguage.clear();
7524 BusinessOrganisationsListAltID.clear();
7525 BusinessOrganisationsListPID.clear();
7526 BusinessOrganisationsListType.clear();
7527 BusinessOrganisationsListTokens.clear();
7528 BusinessOrganisationsListSortAs.clear();
7529 BusinessOrganisationsListPref.clear();
7531 BusinessNoteList.clear();
7532 BusinessNoteListLanguage.clear();
7533 BusinessNoteListAltID.clear();
7534 BusinessNoteListPID.clear();
7535 BusinessNoteListType.clear();
7536 BusinessNoteListTokens.clear();
7537 BusinessNoteListPref.clear();
7539 /* Items on the Categories tab */
7541 CategoriesList.clear();
7542 CategoriesListAltID.clear();
7543 CategoriesListPID.clear();
7544 CategoriesListType.clear();
7545 CategoriesListTokens.clear();
7546 CategoriesListPref.clear();
7548 /* Items on the Groups tab */
7551 GroupsListAltID.clear();
7552 GroupsListPID.clear();
7553 GroupsListType.clear();
7554 GroupsListTokens.clear();
7555 GroupsListPref.clear();
7557 /* Items on the Pictures tab */
7559 PicturesList.clear();
7560 PicturesListAltID.clear();
7561 PicturesListPID.clear();
7562 PicturesListType.clear();
7563 PicturesListPicEncType.clear();
7564 PicturesListPictureType.clear();
7565 PicturesListTokens.clear();
7566 PicturesListMediatype.clear();
7567 PicturesListPref.clear();
7569 /* Items on the Logos tab */
7572 LogosListAltID.clear();
7573 LogosListPID.clear();
7574 LogosListType.clear();
7575 LogosListPicEncType.clear();
7576 LogosListPictureType.clear();
7577 LogosListTokens.clear();
7578 LogosListMediatype.clear();
7579 LogosListPref.clear();
7581 /* Items on the Sounds tab */
7584 SoundsListAltID.clear();
7585 SoundsListPID.clear();
7586 SoundsListType.clear();
7587 SoundsListAudioEncType.clear();
7588 SoundsListAudioType.clear();
7589 SoundsListTokens.clear();
7590 SoundsListMediatype.clear();
7591 SoundsListPref.clear();
7593 /* Items on the Calendaring tab */
7595 CalendarList.clear();
7596 CalendarListAltID.clear();
7597 CalendarListPID.clear();
7598 CalendarListType.clear();
7599 CalendarListTokens.clear();
7600 CalendarListMediatype.clear();
7601 CalendarListPref.clear();
7603 CalendarRequestList.clear();
7604 CalendarRequestListAltID.clear();
7605 CalendarRequestListPID.clear();
7606 CalendarRequestListType.clear();
7607 CalendarRequestListTokens.clear();
7608 CalendarRequestListMediatype.clear();
7609 CalendarRequestListPref.clear();
7611 FreeBusyList.clear();
7612 FreeBusyListAltID.clear();
7613 FreeBusyListPID.clear();
7614 FreeBusyListType.clear();
7615 FreeBusyListTokens.clear();
7616 FreeBusyListMediatype.clear();
7617 FreeBusyListPref.clear();
7619 /* Items on the Security tab */
7622 KeyListAltID.clear();
7624 KeyListKeyType.clear();
7625 KeyListDataType.clear();
7626 KeyListDataEncType.clear();
7627 KeyListType.clear();
7628 KeyListTokens.clear();
7629 KeyListPref.clear();
7631 /* Items on the Other tab */
7634 VendorListPEN.clear();
7635 VendorListElement.clear();
7638 XTokenListTokens.clear();
7640 wxSContactFilename.Clear();
7641 boolContactModified = FALSE;
7642 intSeekSelectedData = 0;
7644 /* Section for saving/loading data */
7647 ETagOriginal.Clear();
7658 BinaryDataProc = FALSE;
7662 PictureImage = wxNullBitmap;
7663 LogoImage = wxNullBitmap;
7667 void frmContactEditor::ContactFileChanged( wxCommandEvent &event ){
7673 // Check if a dialog is already open.
7675 if (DialogOpen == TRUE){
7677 FMTimer.Start(1000, FALSE);
7682 // Bring up a Yes/No modal dialog asking if the changed file should be reloaded.
7684 int QuestionResponse;
7686 QuestionResponse = wxMessageBox(_("This contact has changed. Saving the contact may overwrite or lose any changes done by that change. Do you want to reload the contact with the changes made?"), _("Contact information has changed"), wxYES_NO, this);
7688 if (QuestionResponse == wxYES){
7690 // Reload the contact.
7691 wxString wxSReloadContactName = wxSContactFilename;
7693 LoadContact(wxSReloadContactName);
7697 // Do nothing other than update the timestamp so this message
7698 // doesn't appear until the next time it changes.
7700 FMTimer.UpdateTimestamp();
7710 void frmContactEditor::UpdateMembersTab( wxCommandEvent &event ){
7712 if (cmbType->GetCurrentSelection() == 2){
7724 void frmContactEditor::SetUID(int UID){
7726 ContactEditorUID = UID;
7730 void frmContactEditor::UpdateDisplayAs( wxCommandEvent &event ){
7732 // Generate a drop down list of common names to use for the display as drop down box.
7734 wxString SetValue = cmbDisplayAs->GetValue();
7736 cmbDisplayAs->Clear();
7737 cmbDisplayAs->Append(txtForename->GetValue() + wxT(" ") + txtSurname->GetValue());
7738 if (!txtOtherNames->GetValue().IsEmpty()){
7740 cmbDisplayAs->Append(txtForename->GetValue() + wxT(" ") + txtOtherNames->GetValue() + wxT(" ") + txtForename->GetValue());
7743 cmbDisplayAs->Append(txtSurname->GetValue() + wxT(", ") + txtForename->GetValue());
7744 if (!txtOtherNames->GetValue().IsEmpty()){
7746 cmbDisplayAs->Append(txtForename->GetValue() + wxT(", ") + wxT(" ") + txtForename->GetValue() + wxT(" ") + txtOtherNames->GetValue());
7749 if (!txtTitle->GetValue().IsEmpty()){
7750 cmbDisplayAs->Append(txtTitle->GetValue() + wxT(" ") + txtForename->GetValue() + wxT(" ") + txtSurname->GetValue());
7753 cmbDisplayAs->SetValue(SetValue);
7755 this->SetTitle(cmbDisplayAs->GetValue());
7759 void frmContactEditor::UpdateName( wxCommandEvent &event ){
7761 this->SetTitle(cmbDisplayAs->GetValue());
7763 WindowData *WData = new WindowData;
7765 WData->DataType = 1;
7766 WData->WindowPointer = this;
7767 WData->WindowID = ContactEditorUID;
7769 wxCommandEvent editevent(WINDOW_EDIT);
7770 editevent.SetClientData(WData);
7771 wxPostEvent(GetParent(), editevent);