Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Added check to get what type of picture and load accordingly as auto detection from...
[xestiaab/.git] / source / contacteditor / frmContactEditor.cpp
1 #include <map>
2 #include <string>
3 #include <thread>
4 #include <vector>
5 #include <stdlib.h>
7 #include <wx/wx.h>
8 #include <wx/ffile.h>
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"
42 #include "../enums.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
76 // not being used.
78 // Replace intResult with intValueSeek.
80 BEGIN_EVENT_TABLE(frmContactEditor, wxFrame)
81 EVT_COMMAND(wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, frmContactEditor::ContactFileChanged)
82 END_EVENT_TABLE()
84 frmContactEditor::frmContactEditor( wxWindow* parent )
85 :
86 frmContactEditorADT( parent )
87 {
88     boolContactModified = FALSE;
89     wxDateTime NoDate;
90     dapAnniversary->SetValue(NoDate);
91     dapBirthday->SetValue(NoDate);
92     tabMembers->Hide();
93     
94     // Setup the buttons.
95     
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);
100     
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);
105     btnStop->Disable();
106     FMTimer.SetupPointers(this);
107     //wxIcon contacticon;
108     //contacticon.CopyFromBitmap(contacticonbmp);
109     
112 void frmContactEditor::AddGeneralNickname( wxCommandEvent& event )
114     int intResult = 0;
115     
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,
126                                    lboNicknames,
127                                    (intValueSeek));
128     frameCENickname->ShowModal();
129     delete frameCENickname;
130     frameCENickname = NULL;
133 void frmContactEditor::ModifyGeneralNickname( wxCommandEvent& event )
135     
136     long longSelected = -1;
137     int intSelectedData = 0;
138     
139     if (!GetSelectedItem(lboNicknames,
140                          &longSelected,
141                          &intSelectedData)){
142         return;
143     }
144     
145     frmContactEditorNickname *frameCENickname = new frmContactEditorNickname ( this );
146     frameCENickname->SetupPointers(&GeneralNicknamesList,
147                                    &GeneralNicknamesListAltID,
148                                    &GeneralNicknamesListPID,
149                                    &GeneralNicknamesListType,
150                                    &GeneralNicknamesListLanguage,
151                                    &GeneralNicknamesListTokens,
152                                    &GeneralNicknamesListPref,
153                                    lboNicknames,
154                                    intSelectedData);
155     frameCENickname->SetEditorMode(TRUE, CE_GENERAL);
156     frameCENickname->ShowModal();
157     delete frameCENickname;
158     frameCENickname = NULL;
159     
162 void frmContactEditor::DeleteGeneralNickname( wxCommandEvent& event )
164     
165     long longSelected = -1;
166     int intSelectedData = 0;
167     
168     if (!GetSelectedItem(lboNicknames,
169                          &longSelected,
170                          &intSelectedData)){
171         return;
172     }
173     
174     lboNicknames->DeleteItem(longSelected);
175     
176     DeleteMapData(intSelectedData,
177                   &GeneralNicknamesList,
178                   &GeneralNicknamesListLanguage,
179                   &GeneralNicknamesListAltID,
180                   &GeneralNicknamesListPID,
181                   &GeneralNicknamesListTokens,
182                   &GeneralNicknamesListType,
183                   &GeneralNicknamesListPref);
184     
187 void frmContactEditor::AddGeneralAddress( wxCommandEvent& event )
189     
190     int intResult = 0;
191     
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,
210                                   lboAddresses,
211                                   (intValueSeek));
212     frameCEAddress->ShowModal();
213     delete frameCEAddress;
214     frameCEAddress = NULL;
217 void frmContactEditor::ModifyGeneralAddress( wxCommandEvent& event )
219     
220     long longSelected = -1;
221     int intSelectedData = 0;
222     
223     if (!GetSelectedItem(lboAddresses,
224                          &longSelected,
225                          &intSelectedData)){
226         return;
227     }
228     
229     if (longSelected == -1){
230         return;
231     }
232     
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,
249                                   lboAddresses,
250                                   intSelectedData);
251     frameCEAddress->SetEditorMode(TRUE, CE_GENERAL);
252     frameCEAddress->ShowModal();
253     delete frameCEAddress;
254     frameCEAddress = NULL;
255     
258 void frmContactEditor::DeleteGeneralAddress( wxCommandEvent& event )
260     
261     long longSelected = -1;
262     int intSelectedData = 0;
263     
264     if (!GetSelectedItem(lboAddresses,
265                          &longSelected,
266                          &intSelectedData)){
267         return;
268     }
269     
270     lboAddresses->DeleteItem(longSelected);
271     
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);
281     
284 void frmContactEditor::AddGeneralEmail( wxCommandEvent& event )
286     int intResult = 0;
287     
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,
297                                 lboEmails,
298                                 (intValueSeek));
299     frameCEEmail->ShowModal();
300     delete frameCEEmail;
301     frameCEEmail = NULL;
304 void frmContactEditor::ModifyGeneralEmail( wxCommandEvent& event )
306     long longSelected = -1;
307     int intSelectedData = 0;
308     
309     if (!GetSelectedItem(lboEmails,
310                          &longSelected,
311                          &intSelectedData)){
312         return;
313     }
314     
315     frmContactEditorEmail *frameCEEmail = new frmContactEditorEmail ( this );
316     frameCEEmail->SetupPointers(&GeneralEmailList,
317                                 &GeneralEmailListAltID,
318                                 &GeneralEmailListPID,
319                                 &GeneralEmailListType,
320                                 &GeneralEmailListTokens,
321                                 &GeneralEmailListPref,
322                                 lboEmails,
323                                 intSelectedData);
324     frameCEEmail->SetEditorMode(TRUE, CE_GENERAL);
325     frameCEEmail->ShowModal();
326     delete frameCEEmail;
327     frameCEEmail = NULL;
330 void frmContactEditor::DeleteGeneralEmail( wxCommandEvent& event )
332     long longSelected = -1;
333     int intSelectedData = 0;
334     
335     if (!GetSelectedItem(lboEmails,
336                          &longSelected,
337                          &intSelectedData)){
338         return;
339     }
340     
341     lboEmails->DeleteItem(longSelected);
342     
343     DeleteMapData(intSelectedData, &GeneralEmailList,
344                   &GeneralEmailListAltID, &GeneralEmailListPID,
345                   &GeneralEmailListType, &GeneralEmailListTokens,
346                   &GeneralEmailListPref);
347     
350 void frmContactEditor::AddGeneralIM( wxCommandEvent& event )
352     int intResult = 0;
353     
354     frmContactEditorIM *frameCEIM = new frmContactEditorIM ( this );
355     frameCEIM->SetEditorMode(FALSE, CE_GENERAL);
356     intResult = GetLastInt(&GeneralIMList);
357     frameCEIM->SetupPointers(&GeneralIMList,
358                              &GeneralIMListAltID,
359                              &GeneralIMListPID,
360                              &GeneralIMListType,
361                              &GeneralIMListTokens,
362                              &GeneralIMListMediatype,
363                              &GeneralIMListPref,
364                              lboIM,
365                              (intValueSeek));
366     frameCEIM->ShowModal();
367     delete frameCEIM;
368     frameCEIM = NULL;
371 void frmContactEditor::ModifyGeneralIM( wxCommandEvent& event )
373     long longSelected = -1;
374     int intSelectedData = 0;
375     
376     if (!GetSelectedItem(lboIM,
377                          &longSelected,
378                          &intSelectedData)){
379         return;
380     }
381     
382     frmContactEditorIM *frameCEIM = new frmContactEditorIM ( this );
383     frameCEIM->SetupPointers(&GeneralIMList,
384                              &GeneralIMListAltID,
385                              &GeneralIMListPID,
386                              &GeneralIMListType,
387                              &GeneralIMListTokens,
388                              &GeneralIMListMediatype,
389                              &GeneralIMListPref,
390                              lboIM,
391                              intSelectedData);
392     frameCEIM->SetEditorMode(TRUE, CE_GENERAL);
393     frameCEIM->ShowModal();
394     delete frameCEIM;
395     frameCEIM = NULL;
398 void frmContactEditor::DeleteGeneralIM( wxCommandEvent& event )
400     long longSelected = -1;
401     int intSelectedData = 0;
402     
403     if (!GetSelectedItem(lboIM,
404                          &longSelected,
405                          &intSelectedData)){
406         return;
407     }
408     
409     lboIM->DeleteItem(longSelected);
410     
411     DeleteMapData(intSelectedData, &GeneralIMList,
412                   &GeneralIMListAltID, &GeneralIMListPID,
413                   &GeneralIMListType, &GeneralIMListTokens,
414                   &GeneralIMListMediatype, &GeneralIMListPref);
415     
418 void frmContactEditor::AddGeneralTelephone( wxCommandEvent& event )
420     int intResult = 0;
421     
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,
431                               lboTelephone,
432                               (intValueSeek));
433     frameCETel->ShowModal();
434     delete frameCETel;
435     frameCETel = NULL;
438 void frmContactEditor::ModifyGeneralTelephone( wxCommandEvent& event )
440     long longSelected = -1;
441     int intSelectedData = 0;
442     
443     if (!GetSelectedItem(lboTelephone,
444                          &longSelected,
445                          &intSelectedData)){
446         return;
447     }
448     
449     frmContactEditorTelephone *frameCETel = new frmContactEditorTelephone ( this );
450     frameCETel->SetupPointers(&GeneralTelephoneList,
451                               &GeneralTelephoneListAltID,
452                               &GeneralTelephoneListPID,
453                               &GeneralTelephoneListType,
454                               &GeneralTelephoneListTokens,
455                               &GeneralTelephoneListPref,
456                               lboTelephone,
457                               intSelectedData);
458     frameCETel->SetEditorMode(TRUE, CE_GENERAL);
459     frameCETel->ShowModal();
460     delete frameCETel;
461     frameCETel = NULL;
464 void frmContactEditor::DeleteGeneralTelephone( wxCommandEvent& event )
466     long longSelected = -1;
467     int intSelectedData = 0;
468     
469     if (!GetSelectedItem(lboTelephone,
470                          &longSelected,
471                          &intSelectedData)){
472         return;
473     }
474     
475     lboTelephone->DeleteItem(longSelected);
476     
477     DeleteMapData(intSelectedData, &GeneralTelephoneList,
478                   &GeneralTelephoneListAltID, &GeneralTelephoneListPID,
479                   &GeneralTelephoneListType, &GeneralTelephoneListTokens,
480                   &GeneralTelephoneListPref);
481     
484 void frmContactEditor::AddGeneralLanguages( wxCommandEvent& event )
486     int intResult = 0;
487     
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,
497                                lboLanguages,
498                                (intValueSeek));
499     frameCELang->ShowModal();
500     delete frameCELang;
501     frameCELang = NULL;
504 void frmContactEditor::ModifyGeneralLanguages( wxCommandEvent& event )
506     long longSelected = -1;
507     int intSelectedData = 0;
508     
509     if (!GetSelectedItem(lboLanguages,
510                          &longSelected,
511                          &intSelectedData)){
512         return;
513     }
514     
515     frmContactEditorLanguages *frameCELang = new frmContactEditorLanguages ( this );
516     frameCELang->SetupPointers(&GeneralLanguageList,
517                                &GeneralLanguageListAltID,
518                                &GeneralLanguageListPID,
519                                &GeneralLanguageListType,
520                                &GeneralLanguageListTokens,
521                                &GeneralLanguageListPref,
522                                lboLanguages,
523                                intSelectedData);
524     frameCELang->SetEditorMode(TRUE, CE_GENERAL);
525     frameCELang->ShowModal();
526     delete frameCELang;
527     frameCELang = NULL;
530 void frmContactEditor::DeleteGeneralLanguage( wxCommandEvent& event )
532     long longSelected = -1;
533     int intSelectedData = 0;
534     
535     if (!GetSelectedItem(lboLanguages,
536                          &longSelected,
537                          &intSelectedData)){
538         return;
539     }
540     
541     lboLanguages->DeleteItem(longSelected);
542     
543     DeleteMapData(intSelectedData, &GeneralLanguageList,
544                   &GeneralLanguageListAltID, &GeneralLanguageListPID,
545                   &GeneralLanguageListType, &GeneralLanguageListTokens,
546                   &GeneralLanguageListPref);
547     
550 void frmContactEditor::AddGeneralTimezone( wxCommandEvent& event )
552     int intResult = 0;
553     
554     frmContactEditorTimezones *frameCETZ = new frmContactEditorTimezones ( this );
555     frameCETZ->SetEditorMode(FALSE, CE_GENERAL);
556     intResult = GetLastInt(&GeneralTZList);
557     frameCETZ->SetupPointers(&GeneralTZList,
558                              &GeneralTZListAltID,
559                              &GeneralTZListPID,
560                              &GeneralTZListType,
561                              &GeneralTZListTokens,
562                              &GeneralTZListMediatype,
563                              &GeneralTZListPref,
564                              lboTimezones,
565                              (intValueSeek));
566     frameCETZ->ShowModal();
567     delete frameCETZ;
568     frameCETZ = NULL;
571 void frmContactEditor::ModifyGeneralTimezone( wxCommandEvent& event )
573     long longSelected = -1;
574     int intSelectedData = 0;
575     
576     if (!GetSelectedItem(lboTimezones,
577                          &longSelected,
578                          &intSelectedData)){
579         return;
580     }
581     
582     frmContactEditorTimezones *frameCETZ = new frmContactEditorTimezones ( this );
583     frameCETZ->SetupPointers(&GeneralTZList,
584                              &GeneralTZListAltID,
585                              &GeneralTZListPID,
586                              &GeneralTZListType,
587                              &GeneralTZListTokens,
588                              &GeneralTZListMediatype,
589                              &GeneralTZListPref,
590                              lboTimezones,
591                              intSelectedData);
592     frameCETZ->SetEditorMode(TRUE, CE_GENERAL);
593     frameCETZ->ShowModal();
594     delete frameCETZ;
595     frameCETZ = NULL;
598 void frmContactEditor::DeleteGeneralTimezone( wxCommandEvent& event )
600     long longSelected = -1;
601     int intSelectedData = 0;
602     
603     if (!GetSelectedItem(lboTimezones,
604                          &longSelected,
605                          &intSelectedData)){
606         return;
607     }
608     
609     lboTimezones->DeleteItem(longSelected);
610     
611     DeleteMapData(intSelectedData, &GeneralTZList,
612                   &GeneralTZListAltID, &GeneralTZListPID,
613                   &GeneralTZListType, &GeneralTZListTokens,
614                   &GeneralTZListMediatype, &GeneralTZListPref);
615     
618 void frmContactEditor::AddGeneralGeoposition( wxCommandEvent& event )
620     int intResult = 0;
621     
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,
632                               lboGeoposition,
633                               (intValueSeek));
634     frameCEGeo->ShowModal();
635     delete frameCEGeo;
636     frameCEGeo = NULL;
639 void frmContactEditor::ModifyGeneralGeoposition( wxCommandEvent& event )
641     long longSelected = -1;
642     int intSelectedData = 0;
643     
644     if (!GetSelectedItem(lboGeoposition,
645                          &longSelected,
646                          &intSelectedData)){
647         return;
648     }
649     
650     frmContactEditorGeoposition *frameCEGeo = new frmContactEditorGeoposition ( this );
651     frameCEGeo->SetupPointers(&GeneralGeographyList,
652                               &GeneralGeographyListAltID,
653                               &GeneralGeographyListPID,
654                               &GeneralGeographyListType,
655                               &GeneralGeographyListTokens,
656                               &GeneralGeographyListMediatype,
657                               &GeneralGeographyListPref,
658                               lboGeoposition,
659                               intSelectedData);
660     frameCEGeo->SetEditorMode(TRUE, CE_GENERAL);
661     frameCEGeo->ShowModal();
662     delete frameCEGeo;
663     frameCEGeo = NULL;
666 void frmContactEditor::DeleteGeneralGeoposition( wxCommandEvent& event )
668     long longSelected = -1;
669     int intSelectedData = 0;
670     
671     if (!GetSelectedItem(lboGeoposition,
672                          &longSelected,
673                          &intSelectedData)){
674         return;
675     }
676     
677     lboGeoposition->DeleteItem(longSelected);
678     
679     DeleteMapData(intSelectedData, &GeneralGeographyList,
680                   &GeneralGeographyListAltID, &GeneralGeographyListPID,
681                   &GeneralGeographyListType, &GeneralGeographyListTokens,
682                   &GeneralGeographyListMediatype, &GeneralGeographyListPref);
683     
686 void frmContactEditor::AddGeneralRelated( wxCommandEvent& event )
688     int intResult = 0;
689     
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,
700                               lboRelated,
701                               (intValueSeek));
702     frameCERel->ShowModal();
703     delete frameCERel;
704     frameCERel = NULL;
707 void frmContactEditor::ModifyGeneralRelated( wxCommandEvent& event )
709     long longSelected = -1;
710     int intSelectedData = 0;
711     
712     if (!GetSelectedItem(lboRelated,
713                          &longSelected,
714                          &intSelectedData)){
715         return;
716     }
717     
718     frmContactEditorRelated *frameCERel = new frmContactEditorRelated ( this );
719     frameCERel->SetupPointers(&GeneralRelatedList,
720                               &GeneralRelatedListRelType,
721                               &GeneralRelatedListAltID,
722                               &GeneralRelatedListPID,
723                               &GeneralRelatedListType,
724                               &GeneralRelatedListTokens,
725                               &GeneralRelatedListPref,
726                               lboRelated,
727                               intSelectedData);
728     frameCERel->SetEditorMode(TRUE, CE_GENERAL);
729     frameCERel->ShowModal();
730     delete frameCERel;
731     frameCERel = NULL;
734 void frmContactEditor::DeleteGeneralRelated( wxCommandEvent& event )
736     long longSelected = -1;
737     int intSelectedData = 0;
738     
739     if (!GetSelectedItem(lboRelated,
740                          &longSelected,
741                          &intSelectedData)){
742         return;
743     }
744     
745     lboRelated->DeleteItem(longSelected);
746     
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 )
758     int intResult = 0;
759     
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,
770                               lboWebsites,
771                               (intValueSeek));
772     frameCEWeb->ShowModal();
773     delete frameCEWeb;
774     frameCEWeb = NULL;
777 void frmContactEditor::ModifyGeneralWebsite( wxCommandEvent& event )
779     long longSelected = -1;
780     int intSelectedData = 0;
781     
782     if (!GetSelectedItem(lboWebsites,
783                          &longSelected,
784                          &intSelectedData)){
785         return;
786     }
787     
788     frmContactEditorWebsites *frameCEWeb = new frmContactEditorWebsites ( this );
789     frameCEWeb->SetupPointers(&GeneralWebsiteList,
790                               &GeneralWebsiteListAltID,
791                               &GeneralWebsiteListPID,
792                               &GeneralWebsiteListType,
793                               &GeneralWebsiteListTokens,
794                               &GeneralWebsiteListMediatype,
795                               &GeneralWebsiteListPref,
796                               lboWebsites,
797                               intSelectedData);
798     frameCEWeb->SetEditorMode(TRUE, CE_GENERAL);
799     frameCEWeb->ShowModal();
800     delete frameCEWeb;
801     frameCEWeb = NULL;
804 void frmContactEditor::DeleteGeneralWebsite( wxCommandEvent& event )
806     long longSelected = -1;
807     int intSelectedData = 0;
808     
809     if (!GetSelectedItem(lboWebsites,
810                          &longSelected,
811                          &intSelectedData)){
812         return;
813     }
814     
815     lboWebsites->DeleteItem(longSelected);
816     
817     DeleteMapData(intSelectedData, &GeneralWebsiteList,
818                   &GeneralWebsiteListAltID, &GeneralWebsiteListPID,
819                   &GeneralWebsiteListType, &GeneralWebsiteListTokens,
820                   &GeneralWebsiteListMediatype, &GeneralWebsiteListPref);
821     
824 void frmContactEditor::AddGeneralTitle( wxCommandEvent& event )
826     int intResult = 0;
827     
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,
838                                 lboTitles,
839                                 (intValueSeek));
840     frameCETitle->ShowModal();
841     delete frameCETitle;
842     frameCETitle = NULL;
845 void frmContactEditor::ModifyGeneralTitle( wxCommandEvent& event )
847     long longSelected = -1;
848     int intSelectedData = 0;
849     
850     if (!GetSelectedItem(lboTitles,
851                          &longSelected,
852                          &intSelectedData)){
853         return;
854     }
855     
856     frmContactEditorTitles *frameCETitle = new frmContactEditorTitles ( this );
857     frameCETitle->SetupPointers(&GeneralTitleList,
858                                 &GeneralTitleListLanguage,
859                                 &GeneralTitleListAltID,
860                                 &GeneralTitleListPID,
861                                 &GeneralTitleListType,
862                                 &GeneralTitleListTokens,
863                                 &GeneralTitleListPref,
864                                 lboTitles,
865                                 intSelectedData);
866     frameCETitle->SetEditorMode(TRUE, CE_GENERAL);
867     frameCETitle->ShowModal();
868     delete frameCETitle;
869     frameCETitle = NULL;
872 void frmContactEditor::DeleteGeneralTitle( wxCommandEvent& event )
874     long longSelected = -1;
875     int intSelectedData = 0;
876     
877     if (!GetSelectedItem(lboTitles,
878                          &longSelected,
879                          &intSelectedData)){
880         return;
881     }
882     
883     lboTitles->DeleteItem(longSelected);
884     
885     DeleteMapData(intSelectedData, &GeneralTitleList,
886                   &GeneralTitleListLanguage, &GeneralTitleListAltID,
887                   &GeneralTitleListPID, &GeneralTitleListType,
888                   &GeneralTitleListTokens, &GeneralTitleListPref);
889     
892 void frmContactEditor::AddGeneralRole( wxCommandEvent& event )
894     int intResult = 0;
895     
896     frmContactEditorRoles *frameCERole = new frmContactEditorRoles ( this );
897     frameCERole->SetEditorMode(FALSE, CE_GENERAL);
898     intResult = GetLastInt(&GeneralRoleList);
899     frameCERole->SetupPointers(&GeneralRoleList,
900                                &GeneralRoleListLanguage,
901                                &GeneralRoleListAltID,
902                                &GeneralRoleListPID,
903                                &GeneralRoleListType,
904                                &GeneralRoleListTokens,
905                                &GeneralRoleListPref,
906                                lboRoles,
907                                (intValueSeek));
908     frameCERole->ShowModal();
909     delete frameCERole;
910     frameCERole = NULL;
913 void frmContactEditor::ModifyGeneralRole( wxCommandEvent& event )
915     long longSelected = -1;
916     int intSelectedData = 0;
917     
918     if (!GetSelectedItem(lboRoles,
919                          &longSelected,
920                          &intSelectedData)){
921         return;
922     }
923     
924     frmContactEditorRoles *frameCERole = new frmContactEditorRoles ( this );
925     frameCERole->SetupPointers(&GeneralRoleList,
926                                &GeneralRoleListLanguage,
927                                &GeneralRoleListAltID,
928                                &GeneralRoleListPID,
929                                &GeneralRoleListType,
930                                &GeneralRoleListTokens,
931                                &GeneralRoleListPref,
932                                lboRoles,
933                                intSelectedData);
934     frameCERole->SetEditorMode(TRUE, CE_GENERAL);
935     frameCERole->ShowModal();
936     delete frameCERole;
937     frameCERole = NULL;
940 void frmContactEditor::DeleteGeneralRole( wxCommandEvent& event )
942     long longSelected = -1;
943     int intSelectedData = 0;
944     
945     if (!GetSelectedItem(lboRoles,
946                          &longSelected,
947                          &intSelectedData)){
948         return;
949     }
950     
951     lboRoles->DeleteItem(longSelected);
952     
953     DeleteMapData(intSelectedData, &GeneralRoleList,
954                   &GeneralRoleListLanguage, &GeneralRoleListAltID,
955                   &GeneralRoleListPID, &GeneralRoleListType,
956                   &GeneralRoleListTokens, &GeneralRoleListPref);
957     
960 void frmContactEditor::AddGeneralOrganisation( wxCommandEvent& event )
962     int intResult = 0;
963     
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,
975                               lboOrganisations,
976                               (intValueSeek));
977     frameCEOrg->ShowModal();
978     delete frameCEOrg;
979     frameCEOrg = NULL;
982 void frmContactEditor::ModifyGeneralOrganisation( wxCommandEvent& event )
984     long longSelected = -1;
985     int intSelectedData = 0;
986     
987     if (!GetSelectedItem(lboOrganisations,
988                          &longSelected,
989                          &intSelectedData)){
990         return;
991     }
992     
993     frmContactEditorOrganisations *frameCEOrg = new frmContactEditorOrganisations ( this );
994     frameCEOrg->SetupPointers(&GeneralOrganisationsList,
995                               &GeneralOrganisationsListLanguage,
996                               &GeneralOrganisationsListSortAs,
997                               &GeneralOrganisationsListAltID,
998                               &GeneralOrganisationsListPID,
999                               &GeneralOrganisationsListType,
1000                               &GeneralOrganisationsListTokens,
1001                               &GeneralOrganisationsListPref,
1002                               lboOrganisations,
1003                               intSelectedData);
1004     frameCEOrg->SetEditorMode(TRUE, CE_GENERAL);
1005     frameCEOrg->ShowModal();
1006     delete frameCEOrg;
1007     frameCEOrg = NULL;
1010 void frmContactEditor::DeleteGeneralOrganisation( wxCommandEvent& event )
1012     long longSelected = -1;
1013     int intSelectedData = 0;
1014     
1015     if (!GetSelectedItem(lboOrganisations,
1016                          &longSelected,
1017                          &intSelectedData)){
1018         return;
1019     }
1020     
1021     lboOrganisations->DeleteItem(longSelected);
1022     
1023     DeleteMapData(intSelectedData, &GeneralOrganisationsList,
1024                   &GeneralOrganisationsListLanguage, &GeneralOrganisationsListSortAs,
1025                   &GeneralOrganisationsListAltID, &GeneralOrganisationsListPID,
1026                   &GeneralOrganisationsListType, &GeneralOrganisationsListTokens,
1027                   &GeneralOrganisationsListPref);
1028     
1031 void frmContactEditor::AddGeneralNote( wxCommandEvent& event )
1033     int intResult = 0;
1034     
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,
1045                                lboNotes,
1046                                (intValueSeek));
1047     frameCENote->ShowModal();
1048     delete frameCENote;
1049     frameCENote = NULL;
1052 void frmContactEditor::ModifyGeneralNote( wxCommandEvent& event )
1054     long longSelected = -1;
1055     int intSelectedData = 0;
1056     
1057     if (!GetSelectedItem(lboNotes,
1058                          &longSelected,
1059                          &intSelectedData)){
1060         return;
1061     }
1062     
1063     frmContactEditorNotes *frameCENote = new frmContactEditorNotes ( this );
1064     frameCENote->SetupPointers(&GeneralNoteList,
1065                                &GeneralNoteListLanguage,
1066                                &GeneralNoteListAltID,
1067                                &GeneralNoteListPID,
1068                                &GeneralNoteListType,
1069                                &GeneralNoteListTokens,
1070                                &GeneralNoteListPref,
1071                                lboNotes,
1072                                intSelectedData);
1073     frameCENote->SetEditorMode(TRUE, CE_GENERAL);
1074     frameCENote->ShowModal();
1075     delete frameCENote;
1076     frameCENote = NULL;
1079 void frmContactEditor::DeleteGeneralNote( wxCommandEvent& event )
1081     long longSelected = -1;
1082     int intSelectedData = 0;
1083     
1084     if (!GetSelectedItem(lboNotes,
1085                          &longSelected,
1086                          &intSelectedData)){
1087         return;
1088     }
1089     
1090     lboNotes->DeleteItem(longSelected);
1091     
1092     DeleteMapData(intSelectedData, &GeneralNoteList,
1093                   &GeneralNoteListLanguage, &GeneralNoteListAltID,
1094                   &GeneralNoteListPID, &GeneralNoteListType,
1095                   &GeneralNoteListTokens, &GeneralNoteListPref);
1096     
1099 void frmContactEditor::AddHomeNickname( wxCommandEvent& event )
1101     int intResult = 0;
1102     
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,
1113                                    lboHomeNicknames,
1114                                    (intValueSeek));
1115     frameCENickname->ShowModal();
1116     delete frameCENickname;
1117     frameCENickname = NULL;
1120 void frmContactEditor::ModifyHomeNickname( wxCommandEvent& event )
1122     long longSelected = -1;
1123     int intSelectedData = 0;
1124     
1125     if (!GetSelectedItem(lboHomeNicknames,
1126                          &longSelected,
1127                          &intSelectedData)){
1128         return;
1129     }
1130     
1131     frmContactEditorNickname *frameCENickname = new frmContactEditorNickname ( this );
1132     frameCENickname->SetupPointers(&HomeNicknamesList,
1133                                    &HomeNicknamesListAltID,
1134                                    &HomeNicknamesListPID,
1135                                    &HomeNicknamesListType,
1136                                    &HomeNicknamesListLanguage,
1137                                    &HomeNicknamesListTokens,
1138                                    &HomeNicknamesListPref,
1139                                    lboHomeNicknames,
1140                                    intSelectedData);
1141     frameCENickname->SetEditorMode(TRUE, CE_HOME);
1142     frameCENickname->ShowModal();
1143     delete frameCENickname;
1144     frameCENickname = NULL;
1147 void frmContactEditor::DeleteHomeNickname( wxCommandEvent& event )
1149     
1150     long longSelected = -1;
1151     int intSelectedData = 0;
1152     
1153     if (!GetSelectedItem(lboHomeNicknames,
1154                          &longSelected,
1155                          &intSelectedData)){
1156         return;
1157     }
1158     
1159     lboHomeNicknames->DeleteItem(longSelected);
1160     
1161     DeleteMapData(intSelectedData,
1162                   &HomeNicknamesList,
1163                   &HomeNicknamesListLanguage,
1164                   &HomeNicknamesListAltID,
1165                   &HomeNicknamesListPID,
1166                   &HomeNicknamesListTokens,
1167                   &HomeNicknamesListType,
1168                   &HomeNicknamesListPref);
1169     
1172 void frmContactEditor::AddHomeAddress( wxCommandEvent& event )
1174     int intResult = 0;
1175     
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,
1194                                   lboHomeAddresses,
1195                                   (intValueSeek));
1196     frameCEAddress->ShowModal();
1197     delete frameCEAddress;
1198     frameCEAddress = NULL;
1201 void frmContactEditor::ModifyHomeAddress( wxCommandEvent& event )
1203     long longSelected = -1;
1204     int intSelectedData = 0;
1205     
1206     if (!GetSelectedItem(lboHomeAddresses,
1207                          &longSelected,
1208                          &intSelectedData)){
1209         return;
1210     }
1211     
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,
1228                                   lboHomeAddresses,
1229                                   intSelectedData);
1230     frameCEAddress->SetEditorMode(TRUE, CE_HOME);
1231     frameCEAddress->ShowModal();
1232     delete frameCEAddress;
1233     frameCEAddress = NULL;
1236 void frmContactEditor::DeleteHomeAddress( wxCommandEvent& event )
1238     
1239     long longSelected = -1;
1240     int intSelectedData = 0;
1241     
1242     if (!GetSelectedItem(lboHomeAddresses,
1243                          &longSelected,
1244                          &intSelectedData)){
1245         return;
1246     }
1247     
1248     lboHomeAddresses->DeleteItem(longSelected);
1249     
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);
1259     
1262 void frmContactEditor::AddHomeEmail( wxCommandEvent& event )
1264     int intResult = 0;
1265     
1266     frmContactEditorEmail *frameCEEmail = new frmContactEditorEmail ( this );
1267     frameCEEmail->SetEditorMode(FALSE, CE_HOME);
1268     intResult = GetLastInt(&HomeAddressList);
1269     frameCEEmail->SetupPointers(&HomeEmailList,
1270                                 &HomeEmailListAltID,
1271                                 &HomeEmailListPID,
1272                                 &HomeEmailListType,
1273                                 &HomeEmailListTokens,
1274                                 &HomeEmailListPref,
1275                                 lboHomeEmails,
1276                                 (intValueSeek));
1277     frameCEEmail->ShowModal();
1278     delete frameCEEmail;
1279     frameCEEmail = NULL;
1282 void frmContactEditor::ModifyHomeEmail( wxCommandEvent& event )
1284     long longSelected = -1;
1285     int intSelectedData = 0;
1286     
1287     if (!GetSelectedItem(lboHomeEmails,
1288                          &longSelected,
1289                          &intSelectedData)){
1290         return;
1291     }
1292     
1293     frmContactEditorEmail *frameCEEmail = new frmContactEditorEmail ( this );
1294     frameCEEmail->SetupPointers(&HomeEmailList,
1295                                 &HomeEmailListAltID,
1296                                 &HomeEmailListPID,
1297                                 &HomeEmailListType,
1298                                 &HomeEmailListTokens,
1299                                 &HomeEmailListPref,
1300                                 lboHomeEmails,
1301                                 intSelectedData);
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;
1313     
1314     if (!GetSelectedItem(lboHomeEmails,
1315                          &longSelected,
1316                          &intSelectedData)){
1317         return;
1318     }
1319     
1320     lboHomeEmails->DeleteItem(longSelected);
1321     
1322     DeleteMapData(intSelectedData, &HomeEmailList,
1323                   &HomeEmailListAltID, &HomeEmailListPID,
1324                   &HomeEmailListType, &HomeEmailListTokens,
1325                   &HomeEmailListPref);
1329 void frmContactEditor::AddHomeIM( wxCommandEvent& event )
1331     int intResult = 0;
1332     
1333     frmContactEditorIM *frameCEIM = new frmContactEditorIM ( this );
1334     frameCEIM->SetEditorMode(FALSE, CE_HOME);
1335     intResult = GetLastInt(&HomeIMList);
1336     frameCEIM->SetupPointers(&HomeIMList,
1337                              &HomeIMListAltID,
1338                              &HomeIMListPID,
1339                              &HomeIMListType,
1340                              &HomeIMListTokens,
1341                              &HomeIMListMediatype,
1342                              &HomeIMListPref,
1343                              lboHomeIM,
1344                              (intValueSeek));
1345     frameCEIM->ShowModal();
1346     delete frameCEIM;
1347     frameCEIM = NULL;
1350 void frmContactEditor::ModifyHomeIM( wxCommandEvent& event )
1352     long longSelected = -1;
1353     int intSelectedData = 0;
1354     
1355     if (!GetSelectedItem(lboHomeIM,
1356                          &longSelected,
1357                          &intSelectedData)){
1358         return;
1359     }
1360     
1361     frmContactEditorIM *frameCEIM = new frmContactEditorIM ( this );
1362     frameCEIM->SetupPointers(&HomeIMList,
1363                              &HomeIMListAltID,
1364                              &HomeIMListPID,
1365                              &HomeIMListType,
1366                              &HomeIMListTokens,
1367                              &HomeIMListMediatype,
1368                              &HomeIMListPref,
1369                              lboHomeIM,
1370                              intSelectedData);
1371     frameCEIM->SetEditorMode(TRUE, CE_HOME);
1372     frameCEIM->ShowModal();
1373     delete frameCEIM;
1374     frameCEIM = NULL;
1377 void frmContactEditor::DeleteHomeIM( wxCommandEvent& event )
1379     long longSelected = -1;
1380     int intSelectedData = 0;
1381     
1382     if (!GetSelectedItem(lboHomeIM,
1383                          &longSelected,
1384                          &intSelectedData)){
1385         return;
1386     }
1387     
1388     lboHomeIM->DeleteItem(longSelected);
1389     
1390     DeleteMapData(intSelectedData, &HomeIMList,
1391                   &HomeIMListAltID, &HomeIMListPID,
1392                   &HomeIMListType, &HomeIMListTokens,
1393                   &HomeIMListMediatype, &HomeIMListPref);
1394     
1397 void frmContactEditor::AddHomeTelephone( wxCommandEvent& event )
1399     int intResult = 0;
1400     
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,
1410                               lboHomeTelephone,
1411                               (intValueSeek));
1412     frameCETel->ShowModal();
1413     delete frameCETel;
1414     frameCETel = NULL;
1417 void frmContactEditor::ModifyHomeTelephone( wxCommandEvent& event )
1419     long longSelected = -1;
1420     int intSelectedData = 0;
1421     
1422     if (!GetSelectedItem(lboHomeTelephone,
1423                          &longSelected,
1424                          &intSelectedData)){
1425         return;
1426     }
1427     
1428     frmContactEditorTelephone *frameCETel = new frmContactEditorTelephone ( this );
1429     frameCETel->SetupPointers(&HomeTelephoneList,
1430                               &HomeTelephoneListAltID,
1431                               &HomeTelephoneListPID,
1432                               &HomeTelephoneListType,
1433                               &HomeTelephoneListTokens,
1434                               &HomeTelephoneListPref,
1435                               lboHomeTelephone,
1436                               intSelectedData);
1437     frameCETel->SetEditorMode(TRUE, CE_HOME);
1438     frameCETel->ShowModal();
1439     delete frameCETel;
1440     frameCETel = NULL;
1443 void frmContactEditor::DeleteHomeTelephone( wxCommandEvent& event )
1445     long longSelected = -1;
1446     int intSelectedData = 0;
1447     
1448     if (!GetSelectedItem(lboHomeTelephone,
1449                          &longSelected,
1450                          &intSelectedData)){
1451         return;
1452     }
1453     
1454     lboHomeTelephone->DeleteItem(longSelected);
1455     
1456     DeleteMapData(intSelectedData, &HomeTelephoneList,
1457                   &HomeTelephoneListAltID, &HomeTelephoneListPID,
1458                   &HomeTelephoneListType, &HomeTelephoneListTokens,
1459                   &HomeTelephoneListPref);
1460     
1463 void frmContactEditor::AddHomeLanguage( wxCommandEvent& event )
1465     int intResult = 0;
1466     
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,
1476                                lboHomeLanguages,
1477                                (intValueSeek));
1478     frameCELang->ShowModal();
1479     delete frameCELang;
1480     frameCELang = NULL;
1483 void frmContactEditor::ModifyHomeLanguage( wxCommandEvent& event )
1485     long longSelected = -1;
1486     int intSelectedData = 0;
1487     
1488     if (!GetSelectedItem(lboHomeLanguages,
1489                          &longSelected,
1490                          &intSelectedData)){
1491         return;
1492     }
1493     
1494     frmContactEditorLanguages *frameCELang = new frmContactEditorLanguages ( this );
1495     frameCELang->SetupPointers(&HomeLanguageList,
1496                                &HomeLanguageListAltID,
1497                                &HomeLanguageListPID,
1498                                &HomeLanguageListType,
1499                                &HomeLanguageListTokens,
1500                                &HomeLanguageListPref,
1501                                lboHomeLanguages,
1502                                intSelectedData);
1503     frameCELang->SetEditorMode(TRUE, CE_HOME);
1504     frameCELang->ShowModal();
1505     delete frameCELang;
1506     frameCELang = NULL;
1509 void frmContactEditor::DeleteHomeLanguage( wxCommandEvent& event )
1511     long longSelected = -1;
1512     int intSelectedData = 0;
1513     
1514     if (!GetSelectedItem(lboHomeLanguages,
1515                          &longSelected,
1516                          &intSelectedData)){
1517         return;
1518     }
1519     
1520     lboHomeLanguages->DeleteItem(longSelected);
1521     
1522     DeleteMapData(intSelectedData, &HomeLanguageList,
1523                   &HomeLanguageListAltID, &HomeLanguageListPID,
1524                   &HomeLanguageListType, &HomeLanguageListTokens,
1525                   &HomeLanguageListPref);
1526     
1529 void frmContactEditor::AddHomeTimezone( wxCommandEvent& event )
1531     int intResult = 0;
1532     
1533     frmContactEditorTimezones *frameCETZ = new frmContactEditorTimezones ( this );
1534     frameCETZ->SetEditorMode(FALSE, CE_HOME);
1535     intResult = GetLastInt(&HomeTZList);
1536     frameCETZ->SetupPointers(&HomeTZList,
1537                              &HomeTZListAltID,
1538                              &HomeTZListPID,
1539                              &HomeTZListType,
1540                              &HomeTZListTokens,
1541                              &HomeTZListMediatype,
1542                              &HomeTZListPref,
1543                              lboHomeTimezones,
1544                              (intValueSeek));
1545     frameCETZ->ShowModal();
1546     delete frameCETZ;
1547     frameCETZ = NULL;
1550 void frmContactEditor::ModifyHomeTimezone( wxCommandEvent& event )
1552     long longSelected = -1;
1553     int intSelectedData = 0;
1554     
1555     if (!GetSelectedItem(lboHomeTimezones,
1556                          &longSelected,
1557                          &intSelectedData)){
1558         return;
1559     }
1560     
1561     frmContactEditorTimezones *frameCETZ = new frmContactEditorTimezones ( this );
1562     frameCETZ->SetupPointers(&HomeTZList,
1563                              &HomeTZListAltID,
1564                              &HomeTZListPID,
1565                              &HomeTZListType,
1566                              &HomeTZListTokens,
1567                              &HomeTZListMediatype,
1568                              &HomeTZListPref,
1569                              lboHomeTimezones,
1570                              intSelectedData);
1571     frameCETZ->SetEditorMode(TRUE, CE_HOME);
1572     frameCETZ->ShowModal();
1573     delete frameCETZ;
1574     frameCETZ = NULL;
1577 void frmContactEditor::DeleteHomeTimezone( wxCommandEvent& event )
1579     long longSelected = -1;
1580     int intSelectedData = 0;
1581     
1582     if (!GetSelectedItem(lboHomeTimezones,
1583                          &longSelected,
1584                          &intSelectedData)){
1585         return;
1586     }
1587     
1588     lboHomeTimezones->DeleteItem(longSelected);
1589     
1590     DeleteMapData(intSelectedData, &HomeTZList,
1591                   &HomeTZListAltID, &HomeTZListPID,
1592                   &HomeTZListType, &HomeTZListTokens,
1593                   &HomeTZListMediatype, &HomeTZListPref);
1594     
1597 void frmContactEditor::AddHomeGeoposition( wxCommandEvent& event )
1599     int intResult = 0;
1600     
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,
1611                               lboHomeGeoposition,
1612                               (intValueSeek));
1613     frameCEGeo->ShowModal();
1614     delete frameCEGeo;
1615     frameCEGeo = NULL;
1618 void frmContactEditor::ModifyHomeGeoposition( wxCommandEvent& event )
1620     long longSelected = -1;
1621     int intSelectedData = 0;
1622     
1623     if (!GetSelectedItem(lboHomeGeoposition,
1624                          &longSelected,
1625                          &intSelectedData)){
1626         return;
1627     }
1628     
1629     frmContactEditorGeoposition *frameCEGeo = new frmContactEditorGeoposition ( this );
1630     frameCEGeo->SetupPointers(&HomeGeographyList,
1631                               &HomeGeographyListAltID,
1632                               &HomeGeographyListPID,
1633                               &HomeGeographyListType,
1634                               &HomeGeographyListTokens,
1635                               &HomeGeographyListMediatype,
1636                               &HomeGeographyListPref,
1637                               lboHomeGeoposition,
1638                               intSelectedData);
1639     frameCEGeo->SetEditorMode(TRUE, CE_HOME);
1640     frameCEGeo->ShowModal();
1641     delete frameCEGeo;
1642     frameCEGeo = NULL;
1645 void frmContactEditor::DeleteHomeGeoposition( wxCommandEvent& event )
1647     long longSelected = -1;
1648     int intSelectedData = 0;
1649     
1650     if (!GetSelectedItem(lboHomeGeoposition,
1651                          &longSelected,
1652                          &intSelectedData)){
1653         return;
1654     }
1655     
1656     lboHomeGeoposition->DeleteItem(longSelected);
1657     
1658     DeleteMapData(intSelectedData, &HomeGeographyList,
1659                   &HomeGeographyListAltID, &HomeGeographyListPID,
1660                   &HomeGeographyListType, &HomeGeographyListTokens,
1661                   &HomeGeographyListMediatype, &HomeGeographyListPref);
1662     
1665 void frmContactEditor::AddHomeWebsite( wxCommandEvent& event )
1667     int intResult = 0;
1668     
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,
1679                               lboHomeWebsites,
1680                               (intValueSeek));
1681     frameCEWeb->ShowModal();
1682     delete frameCEWeb;
1683     frameCEWeb = NULL;
1686 void frmContactEditor::ModifyHomeWebsite( wxCommandEvent& event )
1688     long longSelected = -1;
1689     int intSelectedData = 0;
1690     
1691     if (!GetSelectedItem(lboHomeWebsites,
1692                          &longSelected,
1693                          &intSelectedData)){
1694         return;
1695     }
1696     
1697     frmContactEditorWebsites *frameCEWeb = new frmContactEditorWebsites ( this );
1698     frameCEWeb->SetupPointers(&HomeWebsiteList,
1699                               &HomeWebsiteListAltID,
1700                               &HomeWebsiteListPID,
1701                               &HomeWebsiteListType,
1702                               &HomeWebsiteListTokens,
1703                               &HomeWebsiteListMediatype,
1704                               &HomeWebsiteListPref,
1705                               lboHomeWebsites,
1706                               intSelectedData);
1707     frameCEWeb->SetEditorMode(TRUE, CE_HOME);
1708     frameCEWeb->ShowModal();
1709     delete frameCEWeb;
1710     frameCEWeb = NULL;
1713 void frmContactEditor::DeleteHomeWebsite( wxCommandEvent& event )
1715     long longSelected = -1;
1716     int intSelectedData = 0;
1717     
1718     if (!GetSelectedItem(lboHomeWebsites,
1719                          &longSelected,
1720                          &intSelectedData)){
1721         return;
1722     }
1723     
1724     lboHomeWebsites->DeleteItem(longSelected);
1725     
1726     DeleteMapData(intSelectedData, &HomeWebsiteList,
1727                   &HomeWebsiteListAltID, &HomeWebsiteListPID,
1728                   &HomeWebsiteListType, &HomeWebsiteListTokens,
1729                   &HomeWebsiteListMediatype, &HomeWebsiteListPref);
1730     
1733 void frmContactEditor::AddHomeTitle( wxCommandEvent& event )
1735     int intResult = 0;
1736     
1737     frmContactEditorTitles *frameCETitle = new frmContactEditorTitles ( this );
1738     frameCETitle->SetEditorMode(FALSE, CE_HOME);
1739     intResult = GetLastInt(&HomeTitleList);
1740     frameCETitle->SetupPointers(&HomeTitleList,
1741                                 &HomeTitleListLanguage,
1742                                 &HomeTitleListAltID,
1743                                 &HomeTitleListPID,
1744                                 &HomeTitleListType,
1745                                 &HomeTitleListTokens,
1746                                 &HomeTitleListPref,
1747                                 lboHomeTitles,
1748                                 (intValueSeek));
1749     frameCETitle->ShowModal();
1750     delete frameCETitle;
1751     frameCETitle = NULL;
1754 void frmContactEditor::ModifyHomeTitle( wxCommandEvent& event )
1756     long longSelected = -1;
1757     int intSelectedData = 0;
1758     
1759     if (!GetSelectedItem(lboHomeTitles,
1760                          &longSelected,
1761                          &intSelectedData)){
1762         return;
1763     }
1764     
1765     frmContactEditorTitles *frameCETitle = new frmContactEditorTitles ( this );
1766     frameCETitle->SetupPointers(&HomeTitleList,
1767                                 &HomeTitleListLanguage,
1768                                 &HomeTitleListAltID,
1769                                 &HomeTitleListPID,
1770                                 &HomeTitleListType,
1771                                 &HomeTitleListTokens,
1772                                 &HomeTitleListPref,
1773                                 lboHomeTitles,
1774                                 intSelectedData);
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;
1785     
1786     if (!GetSelectedItem(lboHomeTitles,
1787                          &longSelected,
1788                          &intSelectedData)){
1789         return;
1790     }
1791     
1792     lboHomeTitles->DeleteItem(longSelected);
1793     
1794     DeleteMapData(intSelectedData, &HomeTitleList,
1795                   &HomeTitleListLanguage, &HomeTitleListAltID,
1796                   &HomeTitleListPID, &HomeTitleListType,
1797                   &HomeTitleListTokens, &HomeTitleListPref);
1798     
1801 void frmContactEditor::AddHomeRole( wxCommandEvent& event )
1803     int intResult = 0;
1804     
1805     frmContactEditorRoles *frameCERole = new frmContactEditorRoles ( this );
1806     frameCERole->SetEditorMode(FALSE, CE_HOME);
1807     intResult = GetLastInt(&HomeRoleList);
1808     frameCERole->SetupPointers(&HomeRoleList,
1809                                &HomeRoleListLanguage,
1810                                &HomeRoleListAltID,
1811                                &HomeRoleListPID,
1812                                &HomeRoleListType,
1813                                &HomeRoleListTokens,
1814                                &HomeRoleListPref,
1815                                lboHomeRoles,
1816                                (intValueSeek));
1817     frameCERole->ShowModal();
1818     delete frameCERole;
1819     frameCERole = NULL;
1822 void frmContactEditor::ModifyHomeRole( wxCommandEvent& event )
1824     long longSelected = -1;
1825     int intSelectedData = 0;
1826     
1827     if (!GetSelectedItem(lboHomeRoles,
1828                          &longSelected,
1829                          &intSelectedData)){
1830         return;
1831     }
1832     
1833     frmContactEditorRoles *frameCERole = new frmContactEditorRoles ( this );
1834     frameCERole->SetupPointers(&HomeRoleList,
1835                                &HomeRoleListLanguage,
1836                                &HomeRoleListAltID,
1837                                &HomeRoleListPID,
1838                                &HomeRoleListType,
1839                                &HomeRoleListTokens,
1840                                &HomeRoleListPref,
1841                                lboHomeRoles,
1842                                intSelectedData);
1843     frameCERole->SetEditorMode(TRUE, CE_HOME);
1844     frameCERole->ShowModal();
1845     delete frameCERole;
1846     frameCERole = NULL;
1849 void frmContactEditor::DeleteHomeRole( wxCommandEvent& event )
1851     long longSelected = -1;
1852     int intSelectedData = 0;
1853     
1854     if (!GetSelectedItem(lboHomeRoles,
1855                          &longSelected,
1856                          &intSelectedData)){
1857         return;
1858     }
1859     
1860     lboHomeRoles->DeleteItem(longSelected);
1861     
1862     DeleteMapData(intSelectedData, &HomeRoleList,
1863                   &HomeRoleListLanguage, &HomeRoleListAltID,
1864                   &HomeRoleListPID, &HomeRoleListType,
1865                   &HomeRoleListTokens, &HomeRoleListPref);
1866     
1869 void frmContactEditor::AddHomeOrganisation( wxCommandEvent& event )
1871     int intResult = 0;
1872     
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,
1885                               (intValueSeek));
1886     frameCEOrg->ShowModal();
1887     delete frameCEOrg;
1888     frameCEOrg = NULL;
1891 void frmContactEditor::ModifyHomeOrganisation( wxCommandEvent& event )
1893     long longSelected = -1;
1894     int intSelectedData = 0;
1895     
1896     if (!GetSelectedItem(lboHomeOrganisations,
1897                          &longSelected,
1898                          &intSelectedData)){
1899         return;
1900     }
1901     
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,
1912                               intSelectedData);
1913     frameCEOrg->SetEditorMode(TRUE, CE_HOME);
1914     frameCEOrg->ShowModal();
1915     delete frameCEOrg;
1916     frameCEOrg = NULL;
1919 void frmContactEditor::DeleteHomeOrganisation( wxCommandEvent& event )
1921     long longSelected = -1;
1922     int intSelectedData = 0;
1923     
1924     if (!GetSelectedItem(lboHomeOrganisations,
1925                          &longSelected,
1926                          &intSelectedData)){
1927         return;
1928     }
1929     
1930     lboHomeOrganisations->DeleteItem(longSelected);
1931     
1932     DeleteMapData(intSelectedData, &HomeOrganisationsList,
1933                   &HomeOrganisationsListLanguage, &HomeOrganisationsListSortAs,
1934                   &HomeOrganisationsListAltID, &HomeOrganisationsListPID,
1935                   &HomeOrganisationsListType, &HomeOrganisationsListTokens,
1936                   &HomeOrganisationsListPref);
1937     
1940 void frmContactEditor::AddHomeNote( wxCommandEvent& event )
1942     int intResult = 0;
1943     
1944     frmContactEditorNotes *frameCENote = new frmContactEditorNotes ( this );
1945     frameCENote->SetEditorMode(FALSE, CE_HOME);
1946     intResult = GetLastInt(&HomeNoteList);
1947     frameCENote->SetupPointers(&HomeNoteList,
1948                                &HomeNoteListLanguage,
1949                                &HomeNoteListAltID,
1950                                &HomeNoteListPID,
1951                                &HomeNoteListType,
1952                                &HomeNoteListTokens,
1953                                &HomeNoteListPref,
1954                                lboHomeNotes,
1955                                (intValueSeek));
1956     frameCENote->ShowModal();
1957     delete frameCENote;
1958     frameCENote = NULL;
1961 void frmContactEditor::ModifyHomeNote( wxCommandEvent& event )
1963     long longSelected = -1;
1964     int intSelectedData = 0;
1965     
1966     if (!GetSelectedItem(lboHomeNotes,
1967                          &longSelected,
1968                          &intSelectedData)){
1969         return;
1970     }
1971     
1972     frmContactEditorNotes *frameCENote = new frmContactEditorNotes ( this );
1973     frameCENote->SetupPointers(&HomeNoteList,
1974                                &HomeNoteListLanguage,
1975                                &HomeNoteListAltID,
1976                                &HomeNoteListPID,
1977                                &HomeNoteListType,
1978                                &HomeNoteListTokens,
1979                                &HomeNoteListPref,
1980                                lboHomeNotes,
1981                                intSelectedData);
1982     frameCENote->SetEditorMode(TRUE, CE_HOME);
1983     frameCENote->ShowModal();
1984     delete frameCENote;
1985     frameCENote = NULL;
1988 void frmContactEditor::DeleteHomeNote( wxCommandEvent& event )
1990     long longSelected = -1;
1991     int intSelectedData = 0;
1992     
1993     if (!GetSelectedItem(lboHomeNotes,
1994                          &longSelected,
1995                          &intSelectedData)){
1996         return;
1997     }
1998     
1999     lboNotes->DeleteItem(longSelected);
2000     
2001     DeleteMapData(intSelectedData, &HomeNoteList,
2002                   &HomeNoteListLanguage, &HomeNoteListAltID,
2003                   &HomeNoteListPID, &HomeNoteListType,
2004                   &HomeNoteListTokens, &HomeNoteListPref);
2005     
2008 void frmContactEditor::AddBusinessNickname( wxCommandEvent& event )
2010     int intResult = 0;
2011     
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,
2023                                    (intValueSeek));
2024     frameCENickname->ShowModal();
2025     delete frameCENickname;
2026     frameCENickname = NULL;
2029 void frmContactEditor::ModifyBusinessNickname( wxCommandEvent& event )
2031     long longSelected = -1;
2032     int intSelectedData = 0;
2033     
2034     if (!GetSelectedItem(lboBusinessNicknames,
2035                          &longSelected,
2036                          &intSelectedData)){
2037         return;
2038     }
2039     
2040     frmContactEditorNickname *frameCENickname = new frmContactEditorNickname ( this );
2041     frameCENickname->SetupPointers(&BusinessNicknamesList,
2042                                    &BusinessNicknamesListAltID,
2043                                    &BusinessNicknamesListPID,
2044                                    &BusinessNicknamesListType,
2045                                    &BusinessNicknamesListLanguage,
2046                                    &BusinessNicknamesListTokens,
2047                                    &BusinessNicknamesListPref,
2048                                    lboBusinessNicknames,
2049                                    intSelectedData);
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;
2060     
2061     if (!GetSelectedItem(lboBusinessNicknames,
2062                          &longSelected,
2063                          &intSelectedData)){
2064         return;
2065     }
2066     
2067     lboBusinessNicknames->DeleteItem(longSelected);
2068     
2069     DeleteMapData(intSelectedData,
2070                   &BusinessNicknamesList,
2071                   &BusinessNicknamesListLanguage,
2072                   &BusinessNicknamesListAltID,
2073                   &BusinessNicknamesListPID,
2074                   &BusinessNicknamesListTokens,
2075                   &BusinessNicknamesListType,
2076                   &BusinessNicknamesListPref);
2079 void frmContactEditor::AddBusinessAddress( wxCommandEvent& event )
2081     int intResult = 0;
2082     
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,
2102                                   (intValueSeek));
2103     frameCEAddress->ShowModal();
2104     delete frameCEAddress;
2105     frameCEAddress = NULL;
2108 void frmContactEditor::ModifyBusinessAddress( wxCommandEvent& event )
2110     long longSelected = -1;
2111     int intSelectedData = 0;
2112     
2113     if (!GetSelectedItem(lboBusinessAddresses,
2114                          &longSelected,
2115                          &intSelectedData)){
2116         return;
2117     }
2118     
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,
2136                                   intSelectedData);
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;
2147     
2148     if (!GetSelectedItem(lboBusinessAddresses,
2149                          &longSelected,
2150                          &intSelectedData)){
2151         return;
2152     }
2153     
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);
2164     
2167 void frmContactEditor::AddBusinessEmail( wxCommandEvent& event )
2169     int intResult = 0;
2170     
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,
2180                                 lboBusinessEmail,
2181                                 (intValueSeek));
2182     frameCEEmail->ShowModal();
2183     delete frameCEEmail;
2184     frameCEEmail = NULL;
2187 void frmContactEditor::ModifyBusinessEmail( wxCommandEvent& event )
2189     long longSelected = -1;
2190     int intSelectedData = 0;
2191     
2192     if (!GetSelectedItem(lboBusinessEmail,
2193                          &longSelected,
2194                          &intSelectedData)){
2195         return;
2196     }
2197     
2198     frmContactEditorEmail *frameCEEmail = new frmContactEditorEmail ( this );
2199     frameCEEmail->SetupPointers(&BusinessEmailList,
2200                                 &BusinessEmailListAltID,
2201                                 &BusinessEmailListPID,
2202                                 &BusinessEmailListType,
2203                                 &BusinessEmailListTokens,
2204                                 &BusinessEmailListPref,
2205                                 lboBusinessEmail,
2206                                 intSelectedData);
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;
2217     
2218     if (!GetSelectedItem(lboBusinessEmail,
2219                          &longSelected,
2220                          &intSelectedData)){
2221         return;
2222     }
2223     
2224     lboBusinessEmail->DeleteItem(longSelected);
2225     
2226     DeleteMapData(intSelectedData, &BusinessEmailList,
2227                   &BusinessEmailListAltID, &BusinessEmailListPID,
2228                   &BusinessEmailListType, &BusinessEmailListTokens,
2229                   &BusinessEmailListPref);
2230     
2233 void frmContactEditor::AddBusinessIM( wxCommandEvent& event )
2235     int intResult = 0;
2236     
2237     frmContactEditorIM *frameCEIM = new frmContactEditorIM ( this );
2238     frameCEIM->SetEditorMode(FALSE, CE_WORK);
2239     intResult = GetLastInt(&BusinessIMList);
2240     frameCEIM->SetupPointers(&BusinessIMList,
2241                              &BusinessIMListAltID,
2242                              &BusinessIMListPID,
2243                              &BusinessIMListType,
2244                              &BusinessIMListTokens,
2245                              &BusinessIMListMediatype,
2246                              &BusinessIMListPref,
2247                              lboBusinessIM,
2248                              (intValueSeek));
2249     frameCEIM->ShowModal();
2250     delete frameCEIM;
2251     frameCEIM = NULL;
2254 void frmContactEditor::ModifyBusinessIM( wxCommandEvent& event )
2256     long longSelected = -1;
2257     int intSelectedData = 0;
2258     
2259     if (!GetSelectedItem(lboBusinessIM,
2260                          &longSelected,
2261                          &intSelectedData)){
2262         return;
2263     }
2264     
2265     frmContactEditorIM *frameCEIM = new frmContactEditorIM ( this );
2266     frameCEIM->SetupPointers(&BusinessIMList,
2267                              &BusinessIMListAltID,
2268                              &BusinessIMListPID,
2269                              &BusinessIMListType,
2270                              &BusinessIMListTokens,
2271                              &BusinessIMListMediatype,
2272                              &BusinessIMListPref,
2273                              lboBusinessIM,
2274                              intSelectedData);
2275     frameCEIM->SetEditorMode(TRUE, CE_WORK);
2276     frameCEIM->ShowModal();
2277     delete frameCEIM;
2278     frameCEIM = NULL;
2281 void frmContactEditor::DeleteBusinessIM( wxCommandEvent& event )
2283     long longSelected = -1;
2284     int intSelectedData = 0;
2285     
2286     if (!GetSelectedItem(lboBusinessIM,
2287                          &longSelected,
2288                          &intSelectedData)){
2289         return;
2290     }
2291     
2292     lboBusinessIM->DeleteItem(longSelected);
2293     
2294     DeleteMapData(intSelectedData, &BusinessIMList,
2295                   &BusinessIMListAltID, &BusinessIMListPID,
2296                   &BusinessIMListType, &BusinessIMListTokens,
2297                   &BusinessIMListMediatype, &BusinessIMListPref);
2298     
2301 void frmContactEditor::AddBusinessTelephone( wxCommandEvent& event )
2303     int intResult = 0;
2304     
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,
2315                               (intValueSeek));
2316     frameCETel->ShowModal();
2317     delete frameCETel;
2318     frameCETel = NULL;
2321 void frmContactEditor::ModifyBusinessTelephone( wxCommandEvent& event )
2323     long longSelected = -1;
2324     int intSelectedData = 0;
2325     
2326     if (!GetSelectedItem(lboBusinessTelephone,
2327                          &longSelected,
2328                          &intSelectedData)){
2329         return;
2330     }
2331     
2332     frmContactEditorTelephone *frameCETel = new frmContactEditorTelephone ( this );
2333     frameCETel->SetupPointers(&BusinessTelephoneList,
2334                               &BusinessTelephoneListAltID,
2335                               &BusinessTelephoneListPID,
2336                               &BusinessTelephoneListType,
2337                               &BusinessTelephoneListTokens,
2338                               &BusinessTelephoneListPref,
2339                               lboBusinessTelephone,
2340                               intSelectedData);
2341     frameCETel->SetEditorMode(TRUE, CE_WORK);
2342     frameCETel->ShowModal();
2343     delete frameCETel;
2344     frameCETel = NULL;
2347 void frmContactEditor::DeleteBusinessTelephone( wxCommandEvent& event )
2349     long longSelected = -1;
2350     int intSelectedData = 0;
2351     
2352     if (!GetSelectedItem(lboBusinessTelephone,
2353                          &longSelected,
2354                          &intSelectedData)){
2355         return;
2356     }
2357     
2358     lboBusinessTelephone->DeleteItem(longSelected);
2359     
2360     DeleteMapData(intSelectedData, &BusinessTelephoneList,
2361                   &BusinessTelephoneListAltID, &BusinessTelephoneListPID,
2362                   &BusinessTelephoneListType, &BusinessTelephoneListTokens,
2363                   &BusinessTelephoneListPref);
2364     
2367 void frmContactEditor::AddBusinessLanguage( wxCommandEvent& event )
2369     int intResult = 0;
2370     
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,
2381                                (intValueSeek));
2382     frameCELang->ShowModal();
2383     delete frameCELang;
2384     frameCELang = NULL;
2387 void frmContactEditor::ModifyBusinessLanguage( wxCommandEvent& event )
2389     long longSelected = -1;
2390     int intSelectedData = 0;
2391     
2392     if (!GetSelectedItem(lboBusinessLanguages,
2393                          &longSelected,
2394                          &intSelectedData)){
2395         return;
2396     }
2397     
2398     frmContactEditorLanguages *frameCELang = new frmContactEditorLanguages ( this );
2399     frameCELang->SetupPointers(&BusinessLanguageList,
2400                                &BusinessLanguageListAltID,
2401                                &BusinessLanguageListPID,
2402                                &BusinessLanguageListType,
2403                                &BusinessLanguageListTokens,
2404                                &BusinessLanguageListPref,
2405                                lboBusinessLanguages,
2406                                intSelectedData);
2407     frameCELang->SetEditorMode(TRUE, CE_WORK);
2408     frameCELang->ShowModal();
2409     delete frameCELang;
2410     frameCELang = NULL;
2413 void frmContactEditor::DeleteBusinessLanguage( wxCommandEvent& event )
2415     long longSelected = -1;
2416     int intSelectedData = 0;
2417     
2418     if (!GetSelectedItem(lboBusinessLanguages,
2419                          &longSelected,
2420                          &intSelectedData)){
2421         return;
2422     }
2423     
2424     lboBusinessLanguages->DeleteItem(longSelected);
2425     
2426     DeleteMapData(intSelectedData, &BusinessLanguageList,
2427                   &BusinessLanguageListAltID, &BusinessLanguageListPID,
2428                   &BusinessLanguageListType, &BusinessLanguageListTokens,
2429                   &BusinessLanguageListPref);
2430     
2433 void frmContactEditor::AddBusinessTimezone( wxCommandEvent& event )
2435     int intResult = 0;
2436     
2437     frmContactEditorTimezones *frameCETZ = new frmContactEditorTimezones ( this );
2438     frameCETZ->SetEditorMode(FALSE, CE_WORK);
2439     intResult = GetLastInt(&BusinessTZList);
2440     frameCETZ->SetupPointers(&BusinessTZList,
2441                              &BusinessTZListAltID,
2442                              &BusinessTZListPID,
2443                              &BusinessTZListType,
2444                              &BusinessTZListTokens,
2445                              &BusinessTZListMediatype,
2446                              &BusinessTZListPref,
2447                              lboBusinessTimezones,
2448                              (intValueSeek));
2449     frameCETZ->ShowModal();
2450     delete frameCETZ;
2451     frameCETZ = NULL;
2454 void frmContactEditor::ModifyBusinessTimezone( wxCommandEvent& event )
2456     long longSelected = -1;
2457     int intSelectedData = 0;
2458     
2459     if (!GetSelectedItem(lboBusinessTimezones,
2460                          &longSelected,
2461                          &intSelectedData)){
2462         return;
2463     }
2464     
2465     frmContactEditorTimezones *frameCETZ = new frmContactEditorTimezones ( this );
2466     frameCETZ->SetupPointers(&BusinessTZList,
2467                              &BusinessTZListAltID,
2468                              &BusinessTZListPID,
2469                              &BusinessTZListType,
2470                              &BusinessTZListTokens,
2471                              &BusinessTZListMediatype,
2472                              &BusinessTZListPref,
2473                              lboBusinessTimezones,
2474                              intSelectedData);
2475     frameCETZ->SetEditorMode(TRUE, CE_WORK);
2476     frameCETZ->ShowModal();
2477     delete frameCETZ;
2478     frameCETZ = NULL;
2481 void frmContactEditor::DeleteBusinessTimezone( wxCommandEvent& event )
2483     long longSelected = -1;
2484     int intSelectedData = 0;
2485     
2486     if (!GetSelectedItem(lboBusinessTimezones,
2487                          &longSelected,
2488                          &intSelectedData)){
2489         return;
2490     }
2491     
2492     lboBusinessTimezones->DeleteItem(longSelected);
2493     
2494     DeleteMapData(intSelectedData, &BusinessTZList,
2495                   &BusinessTZListAltID, &BusinessTZListPID,
2496                   &BusinessTZListType, &BusinessTZListTokens,
2497                   &BusinessTZListMediatype, &BusinessTZListPref);
2498     
2501 void frmContactEditor::AddBusinessGeoposition( wxCommandEvent& event )
2503     int intResult = 0;
2504     
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,
2516                               (intValueSeek));
2517     frameCEGeo->ShowModal();
2518     delete frameCEGeo;
2519     frameCEGeo = NULL;
2522 void frmContactEditor::ModifyBusinessGeoposition( wxCommandEvent& event )
2524     long longSelected = -1;
2525     int intSelectedData = 0;
2526     
2527     if (!GetSelectedItem(lboBusinessGeoposition,
2528                          &longSelected,
2529                          &intSelectedData)){
2530         return;
2531     }
2532     
2533     frmContactEditorGeoposition *frameCEGeo = new frmContactEditorGeoposition ( this );
2534     frameCEGeo->SetupPointers(&BusinessGeographyList,
2535                               &BusinessGeographyListAltID,
2536                               &BusinessGeographyListPID,
2537                               &BusinessGeographyListType,
2538                               &BusinessGeographyListTokens,
2539                               &BusinessGeographyListMediatype,
2540                               &BusinessGeographyListPref,
2541                               lboBusinessGeoposition,
2542                               intSelectedData);
2543     frameCEGeo->SetEditorMode(TRUE, CE_WORK);
2544     frameCEGeo->ShowModal();
2545     delete frameCEGeo;
2546     frameCEGeo = NULL;
2549 void frmContactEditor::DeleteBusinessGeoposition( wxCommandEvent& event )
2551     long longSelected = -1;
2552     int intSelectedData = 0;
2553     
2554     if (!GetSelectedItem(lboBusinessGeoposition,
2555                          &longSelected,
2556                          &intSelectedData)){
2557         return;
2558     }
2559     
2560     lboBusinessGeoposition->DeleteItem(longSelected);
2561     
2562     DeleteMapData(intSelectedData, &BusinessGeographyList,
2563                   &BusinessGeographyListAltID, &BusinessGeographyListPID,
2564                   &BusinessGeographyListType, &BusinessGeographyListTokens,
2565                   &BusinessGeographyListMediatype, &BusinessGeographyListPref);
2566     
2569 void frmContactEditor::AddBusinessWebsite( wxCommandEvent& event )
2571     int intResult = 0;
2572     
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,
2584                               (intValueSeek));
2585     frameCEWeb->ShowModal();
2586     delete frameCEWeb;
2587     frameCEWeb = NULL;
2590 void frmContactEditor::ModifyBusinessWebsite( wxCommandEvent& event )
2592     long longSelected = -1;
2593     int intSelectedData = 0;
2594     
2595     if (!GetSelectedItem(lboBusinessWebsites,
2596                          &longSelected,
2597                          &intSelectedData)){
2598         return;
2599     }
2600     
2601     frmContactEditorWebsites *frameCEWeb = new frmContactEditorWebsites ( this );
2602     frameCEWeb->SetupPointers(&BusinessWebsiteList,
2603                               &BusinessWebsiteListAltID,
2604                               &BusinessWebsiteListPID,
2605                               &BusinessWebsiteListType,
2606                               &BusinessWebsiteListTokens,
2607                               &BusinessWebsiteListMediatype,
2608                               &BusinessWebsiteListPref,
2609                               lboBusinessWebsites,
2610                               intSelectedData);
2611     frameCEWeb->SetEditorMode(TRUE, CE_WORK);
2612     frameCEWeb->ShowModal();
2613     delete frameCEWeb;
2614     frameCEWeb = NULL;
2617 void frmContactEditor::DeleteBusinessWebsite( wxCommandEvent& event )
2619     long longSelected = -1;
2620     int intSelectedData = 0;
2621     
2622     if (!GetSelectedItem(lboBusinessWebsites,
2623                          &longSelected,
2624                          &intSelectedData)){
2625         return;
2626     }
2627     
2628     lboBusinessWebsites->DeleteItem(longSelected);
2629     
2630     DeleteMapData(intSelectedData, &BusinessWebsiteList,
2631                   &BusinessWebsiteListAltID, &BusinessWebsiteListPID,
2632                   &BusinessWebsiteListType, &BusinessWebsiteListTokens,
2633                   &BusinessWebsiteListMediatype, &BusinessWebsiteListPref);
2634     
2637 void frmContactEditor::AddBusinessTitle( wxCommandEvent& event )
2639     int intResult = 0;
2640     
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,
2651                                 lboBusinessTitles,
2652                                 (intValueSeek));
2653     frameCETitle->ShowModal();
2654     delete frameCETitle;
2655     frameCETitle = NULL;
2658 void frmContactEditor::ModifyBusinessTitle( wxCommandEvent& event )
2660     long longSelected = -1;
2661     int intSelectedData = 0;
2662     
2663     if (!GetSelectedItem(lboBusinessTitles,
2664                          &longSelected,
2665                          &intSelectedData)){
2666         return;
2667     }
2668     
2669     frmContactEditorTitles *frameCETitle = new frmContactEditorTitles ( this );
2670     frameCETitle->SetupPointers(&BusinessTitleList,
2671                                 &BusinessTitleListLanguage,
2672                                 &BusinessTitleListAltID,
2673                                 &BusinessTitleListPID,
2674                                 &BusinessTitleListType,
2675                                 &BusinessTitleListTokens,
2676                                 &BusinessTitleListPref,
2677                                 lboBusinessTitles,
2678                                 intSelectedData);
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;
2689     
2690     if (!GetSelectedItem(lboBusinessTitles,
2691                          &longSelected,
2692                          &intSelectedData)){
2693         return;
2694     }
2695     
2696     lboTitles->DeleteItem(longSelected);
2697     
2698     DeleteMapData(intSelectedData, &BusinessTitleList,
2699                   &BusinessTitleListLanguage, &BusinessTitleListAltID,
2700                   &BusinessTitleListPID, &BusinessTitleListType,
2701                   &BusinessTitleListTokens, &BusinessTitleListPref);
2702     
2705 void frmContactEditor::AddBusinessRole( wxCommandEvent& event )
2707     int intResult = 0;
2708     
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,
2719                                lboBusinessRoles,
2720                                (intValueSeek));
2721     frameCERole->ShowModal();
2722     delete frameCERole;
2723     frameCERole = NULL;
2726 void frmContactEditor::ModifyBusinessRole( wxCommandEvent& event )
2728     long longSelected = -1;
2729     int intSelectedData = 0;
2730     
2731     if (!GetSelectedItem(lboBusinessRoles,
2732                          &longSelected,
2733                          &intSelectedData)){
2734         return;
2735     }
2736     
2737     frmContactEditorRoles *frameCERole = new frmContactEditorRoles ( this );
2738     frameCERole->SetupPointers(&BusinessRoleList,
2739                                &BusinessRoleListLanguage,
2740                                &BusinessRoleListAltID,
2741                                &BusinessRoleListPID,
2742                                &BusinessRoleListType,
2743                                &BusinessRoleListTokens,
2744                                &BusinessRoleListPref,
2745                                lboBusinessRoles,
2746                                intSelectedData);
2747     frameCERole->SetEditorMode(TRUE, CE_WORK);
2748     frameCERole->ShowModal();
2749     delete frameCERole;
2750     frameCERole = NULL;
2753 void frmContactEditor::DeleteBusinessRole( wxCommandEvent& event )
2755     long longSelected = -1;
2756     int intSelectedData = 0;
2757     
2758     if (!GetSelectedItem(lboBusinessRoles,
2759                          &longSelected,
2760                          &intSelectedData)){
2761         return;
2762     }
2763     
2764     lboBusinessRoles->DeleteItem(longSelected);
2765     
2766     DeleteMapData(intSelectedData, &BusinessRoleList,
2767                   &BusinessRoleListLanguage, &BusinessRoleListAltID,
2768                   &BusinessRoleListPID, &BusinessRoleListType,
2769                   &BusinessRoleListTokens, &BusinessRoleListPref);
2770     
2773 void frmContactEditor::AddBusinessOrganisation( wxCommandEvent& event )
2775     int intResult = 0;
2776     
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,
2789                               (intValueSeek));
2790     frameCEOrg->ShowModal();
2791     delete frameCEOrg;
2792     frameCEOrg = NULL;
2795 void frmContactEditor::ModifyBusinessOrganisation( wxCommandEvent& event )
2797     long longSelected = -1;
2798     int intSelectedData = 0;
2799     
2800     if (!GetSelectedItem(lboBusinessOrganisations,
2801                          &longSelected,
2802                          &intSelectedData)){
2803         return;
2804     }
2805     
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,
2816                               intSelectedData);
2817     frameCEOrg->SetEditorMode(TRUE, CE_WORK);
2818     frameCEOrg->ShowModal();
2819     delete frameCEOrg;
2820     frameCEOrg = NULL;
2823 void frmContactEditor::DeleteBusinessOrganisation( wxCommandEvent& event )
2825     long longSelected = -1;
2826     int intSelectedData = 0;
2827     
2828     if (!GetSelectedItem(lboBusinessOrganisations,
2829                          &longSelected,
2830                          &intSelectedData)){
2831         return;
2832     }
2833     
2834     lboBusinessOrganisations->DeleteItem(longSelected);
2835     
2836     DeleteMapData(intSelectedData, &BusinessOrganisationsList,
2837                   &BusinessOrganisationsListLanguage, &BusinessOrganisationsListSortAs,
2838                   &BusinessOrganisationsListAltID, &BusinessOrganisationsListPID,
2839                   &BusinessOrganisationsListType, &BusinessOrganisationsListTokens,
2840                   &BusinessOrganisationsListPref);
2841     
2844 void frmContactEditor::AddBusinessNote( wxCommandEvent& event )
2846     int intResult = 0;
2847     
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,
2858                                lboBusinessNotes,
2859                                (intValueSeek));
2860     frameCENote->ShowModal();
2861     delete frameCENote;
2862     frameCENote = NULL;
2865 void frmContactEditor::ModifyBusinessNote( wxCommandEvent& event )
2867     long longSelected = -1;
2868     int intSelectedData = 0;
2869     
2870     if (!GetSelectedItem(lboBusinessNotes,
2871                          &longSelected,
2872                          &intSelectedData)){
2873         return;
2874     }
2875     
2876     frmContactEditorNotes *frameCENote = new frmContactEditorNotes ( this );
2877     frameCENote->SetupPointers(&BusinessNoteList,
2878                                &BusinessNoteListLanguage,
2879                                &BusinessNoteListAltID,
2880                                &BusinessNoteListPID,
2881                                &BusinessNoteListType,
2882                                &BusinessNoteListTokens,
2883                                &BusinessNoteListPref,
2884                                lboBusinessNotes,
2885                                intSelectedData);
2886     frameCENote->SetEditorMode(TRUE, CE_WORK);
2887     frameCENote->ShowModal();
2888     delete frameCENote;
2889     frameCENote = NULL;
2892 void frmContactEditor::DeleteBusinessNote( wxCommandEvent& event )
2894     long longSelected = -1;
2895     int intSelectedData = 0;
2896     
2897     if (!GetSelectedItem(lboBusinessNotes,
2898                          &longSelected,
2899                          &intSelectedData)){
2900         return;
2901     }
2902     
2903     lboBusinessNotes->DeleteItem(longSelected);
2904     
2905     DeleteMapData(intSelectedData, &BusinessNoteList,
2906                   &BusinessNoteListLanguage, &BusinessNoteListAltID,
2907                   &BusinessNoteListPID, &BusinessNoteListType,
2908                   &BusinessNoteListTokens, &BusinessNoteListPref);
2909     
2912 void frmContactEditor::AddCategory( wxCommandEvent& event )
2914     int intResult = 0;
2915     
2916     frmContactEditorCategory *frameCECategory = new frmContactEditorCategory ( this );
2917     frameCECategory->SetEditorMode(FALSE);
2918     intResult = GetLastInt(&CategoriesList);
2919     frameCECategory->SetupPointers(&CategoriesList,
2920                                    &CategoriesListAltID,
2921                                    &CategoriesListPID,
2922                                    &CategoriesListType,
2923                                    &CategoriesListTokens,
2924                                    &CategoriesListPref,
2925                                    lboCategories,
2926                                    (intValueSeek));
2927     frameCECategory->ShowModal();
2928     delete frameCECategory;
2929     frameCECategory = NULL;
2932 void frmContactEditor::ModifyCategory( wxCommandEvent& event )
2934     long longSelected = -1;
2935     int intSelectedData = 0;
2936     
2937     if (!GetSelectedItem(lboCategories,
2938                          &longSelected,
2939                          &intSelectedData)){
2940         return;
2941     }
2942     
2943     frmContactEditorCategory *frameCECategory = new frmContactEditorCategory ( this );
2944     frameCECategory->SetupPointers(&CategoriesList,
2945                                    &CategoriesListAltID,
2946                                    &CategoriesListPID,
2947                                    &CategoriesListType,
2948                                    &CategoriesListTokens,
2949                                    &CategoriesListPref,
2950                                    lboCategories,
2951                                    intSelectedData);
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;
2962     
2963     if (!GetSelectedItem(lboCategories,
2964                          &longSelected,
2965                          &intSelectedData)){
2966         return;
2967     }
2968     
2969     lboCategories->DeleteItem(longSelected);
2970     
2971     DeleteMapData(intSelectedData, &CategoriesList,
2972                   &CategoriesListAltID, &CategoriesListPID,
2973                   &CategoriesListType, &CategoriesListTokens,
2974                   &CategoriesListPref);
2975     
2978 void frmContactEditor::AddGroup( wxCommandEvent& event )
2980     
2981     int intResult = 0;
2982     
2983     XABViewMode XVMData = MainPtr->GetViewMode();
2984     
2985     frmContactEditorGroup *frameCEGroup = new frmContactEditorGroup ( this );
2986     frameCEGroup->SetEditorMode(FALSE, XVMData);
2987     intResult = GetLastInt(&GroupsList);
2988     frameCEGroup->SetupPointers(&GroupsList,
2989                                 lboGroups,
2990                                 wxSContactAccount,
2991                                 intValueSeek);
2992     frameCEGroup->ShowModal();
2993     delete frameCEGroup;
2994     frameCEGroup = NULL;
2995     
2998 void frmContactEditor::ModifyGroup( wxCommandEvent& event )
3000     
3001     return;
3002     
3005 void frmContactEditor::DeleteGroup( wxCommandEvent& event )
3007     
3008     long longSelected = -1;
3009     int intSelectedData = 0;
3010     
3011     if (!GetSelectedItem(lboGroups,
3012                          &longSelected,
3013                          &intSelectedData)){
3014         return;
3015     }
3016     
3017     lboGroups->DeleteItem(longSelected);
3018     
3019     DeleteMapData(intSelectedData, &GroupsList);
3020     
3023 void frmContactEditor::AddPicture( wxCommandEvent& event )
3025     int intResult = 0;
3026     
3027     frmContactEditorPicture *frameCEPicture = new frmContactEditorPicture ( this );
3028     frameCEPicture->SetEditorMode(FALSE);
3029     intResult = GetLastInt(&PicturesList);
3030     frameCEPicture->SetupPointers(&PicturesList,
3031                                   &PicturesListAltID,
3032                                   &PicturesListPID,
3033                                   &PicturesListType,
3034                                   &PicturesListPicEncType,
3035                                   &PicturesListPictureType,
3036                                   &PicturesListTokens,
3037                                   &PicturesListMediatype,
3038                                   &PicturesListPref,
3039                                   lboPictures,
3040                                   (intValueSeek));
3041     frameCEPicture->ShowModal();
3042     delete frameCEPicture;
3043     frameCEPicture = NULL;
3046 void frmContactEditor::ModifyPicture( wxCommandEvent& event )
3048     long longSelected = -1;
3049     int intSelectedData = 0;
3050     
3051     if (!GetSelectedItem(lboPictures,
3052                          &longSelected,
3053                          &intSelectedData)){
3054         return;
3055     }
3056     
3057     frmContactEditorPicture *frameCEPicture = new frmContactEditorPicture ( this );
3058     frameCEPicture->SetupPointers(&PicturesList,
3059                                   &PicturesListAltID,
3060                                   &PicturesListPID,
3061                                   &PicturesListType,
3062                                   &PicturesListPicEncType,
3063                                   &PicturesListPictureType,
3064                                   &PicturesListTokens,
3065                                   &PicturesListMediatype,
3066                                   &PicturesListPref,
3067                                   lboPictures,
3068                                   intSelectedData);
3069     frameCEPicture->SetEditorMode(TRUE);
3070     frameCEPicture->ShowModal();
3071     delete frameCEPicture;
3072     frameCEPicture = NULL;
3073     
3076 void frmContactEditor::DeletePicture( wxCommandEvent& event )
3078     long longSelected = -1;
3079     int intSelectedData = 0;
3080     
3081     if (!GetSelectedItem(lboPictures,
3082                          &longSelected,
3083                          &intSelectedData)){
3084         return;
3085     }
3086     
3087     lboPictures->DeleteItem(longSelected);
3088     
3089     DeleteMapData(intSelectedData,
3090                   &PicturesList, &PicturesListAltID, &PicturesListPID, &PicturesListType,
3091                   &PicturesListPicEncType, &PicturesListPictureType, &PicturesListTokens,
3092                   &PicturesListMediatype, &PicturesListPref);
3093     
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;
3097     
3098     imgPicture->SetBitmap(PictureImage);
3101 void frmContactEditor::LoadPicture( wxListEvent& event )
3103     
3104     long longSelected = -1;
3105     int intSelectedData = 0;
3106     
3107     if (!GetSelectedItem(lboPictures,
3108                          &longSelected,
3109                          &intSelectedData)){
3110         return;
3111     }
3112     
3113     std::string base64dec;
3114     
3115     std::map<int,std::string>::iterator initier;
3116     std::map<int,wxString>::iterator pictypeiter;
3117     
3118     initier = PicturesList.find(intSelectedData);
3119     pictypeiter = PicturesListPictureType.find(intSelectedData);
3120     
3121     base64dec = base64_decode(initier->second);
3122     
3123     wxMemoryInputStream istream(base64dec.c_str(), (size_t)base64dec.size());
3124     wxImage photo;
3125     //wxMemoryInputStream istream(base64dec, (size_t)base64dec.size());
3126     
3127     wxPuts(wxT("PicType:") + pictypeiter->second);
3128     
3129     if (pictypeiter->second == wxT("image/jpeg")){
3130         
3131         if (!photo.LoadFile(istream, wxBITMAP_TYPE_JPEG)){
3132         
3133             return;
3134         
3135         }
3136         
3137     } else if (pictypeiter->second == wxT("image/png")){
3138         
3139         if (!photo.LoadFile(istream, wxBITMAP_TYPE_PNG)){
3140             
3141             return;
3142             
3143         }
3144         
3145     } else {
3146     
3147         return;
3148     
3149     }
3150     
3151     PictureImage = (wxBitmap)photo;
3152     imgPicture->SetBitmap(PictureImage);
3153     
3156 void frmContactEditor::LoadLogo( wxListEvent& event )
3158     
3159     long longSelected = -1;
3160     int intSelectedData = 0;
3161     
3162     if (!GetSelectedItem(lboLogos,
3163                          &longSelected,
3164                          &intSelectedData)){
3165         return;
3166     }
3167     
3168     std::string base64dec;
3169     
3170     std::map<int,std::string>::iterator initier;
3171     
3172     initier = LogosList.find(intSelectedData);
3173     
3174     base64dec = base64_decode(initier->second);
3175     
3176     
3177     wxMemoryInputStream istream(base64dec.c_str(), (size_t)base64dec.size());
3178     wxImage photo;
3179     //wxMemoryInputStream istream(base64dec, (size_t)base64dec.size());
3180     
3181     if (!photo.LoadFile(istream, wxBITMAP_TYPE_ANY)){
3182         
3183         return;
3184         
3185     }
3186     
3187     
3188     LogoImage = (wxBitmap)photo;
3189     imgLogo->SetBitmap(LogoImage);
3190     
3193 void frmContactEditor::AddLogo( wxCommandEvent& event )
3195     int intResult = 0;
3196     
3197     frmContactEditorPicture *frameCELogo = new frmContactEditorPicture ( this );
3198     frameCELogo->SetEditorMode(FALSE);
3199     intResult = GetLastInt(&LogosList);
3200     frameCELogo->SetupPointers(&LogosList,
3201                                &LogosListAltID,
3202                                &LogosListPID,
3203                                &LogosListType,
3204                                &LogosListPicEncType,
3205                                &LogosListPictureType,
3206                                &LogosListTokens,
3207                                &LogosListMediatype,
3208                                &LogosListPref,
3209                                lboLogos,
3210                                (intValueSeek));
3211     frameCELogo->ShowModal();
3212     delete frameCELogo;
3213     frameCELogo = NULL;
3216 void frmContactEditor::ModifyLogo( wxCommandEvent& event )
3218     long longSelected = -1;
3219     int intSelectedData = 0;
3220     
3221     if (!GetSelectedItem(lboLogos,
3222                          &longSelected,
3223                          &intSelectedData)){
3224         return;
3225     }
3226     
3227     frmContactEditorPicture *frameCELogo = new frmContactEditorPicture ( this );
3228     frameCELogo->SetupPointers(&LogosList,
3229                                &LogosListAltID,
3230                                &LogosListPID,
3231                                &LogosListType,
3232                                &LogosListPicEncType,
3233                                &LogosListPictureType,
3234                                &LogosListTokens,
3235                                &LogosListMediatype,
3236                                &LogosListPref,
3237                                lboLogos,
3238                                intSelectedData);
3239     frameCELogo->SetEditorMode(TRUE);
3240     frameCELogo->ShowModal();
3241     delete frameCELogo;
3242     frameCELogo = NULL;
3245 void frmContactEditor::DeleteLogo( wxCommandEvent& event )
3247     long longSelected = -1;
3248     int intSelectedData = 0;
3249     
3250     if (!GetSelectedItem(lboLogos,
3251                          &longSelected,
3252                          &intSelectedData)){
3253         return;
3254     }
3255     
3256     lboLogos->DeleteItem(longSelected);
3257     
3258     DeleteMapData(intSelectedData,
3259                   &LogosList, &LogosListAltID, &LogosListPID, &LogosListType,
3260                   &LogosListPicEncType, &LogosListPictureType, &LogosListTokens,
3261                   &LogosListMediatype, &LogosListPref);
3262     
3263     wxMemoryInputStream istream(misc_emptyimage_png, sizeof(misc_emptyimage_png));
3264     wxImage misc_emptyimage_png(istream, wxBITMAP_TYPE_PNG);
3265     LogoImage = (wxBitmap)misc_emptyimage_png;
3266     
3267     imgLogo->SetBitmap(LogoImage);
3270 void frmContactEditor::AddSound( wxCommandEvent& event )
3272     int intResult = 0;
3273     
3274     frmContactEditorSound *frameCESound = new frmContactEditorSound ( this );
3275     frameCESound->SetEditorMode(FALSE);
3276     intResult = GetLastInt(&SoundsList);
3277     frameCESound->SetupPointers(&SoundsList,
3278                                 &SoundsListAltID,
3279                                 &SoundsListPID,
3280                                 &SoundsListType,
3281                                 &SoundsListAudioType,
3282                                 &SoundsListAudioEncType,
3283                                 &SoundsListTokens,
3284                                 &SoundsListMediatype,
3285                                 &SoundsListPref,
3286                                 lboSounds,
3287                                 (intValueSeek));
3288     frameCESound->ShowModal();
3289     delete frameCESound;
3290     frameCESound = NULL;
3293 void frmContactEditor::ModifySound( wxCommandEvent& event )
3295     long longSelected = -1;
3296     int intSelectedData = 0;
3297     
3298     if (!GetSelectedItem(lboSounds,
3299                          &longSelected,
3300                          &intSelectedData)){
3301         return;
3302     }
3303     
3304     frmContactEditorSound *frameCESound = new frmContactEditorSound ( this );
3305     frameCESound->SetupPointers(&SoundsList,
3306                                 &SoundsListAltID,
3307                                 &SoundsListPID,
3308                                 &SoundsListType,
3309                                 &SoundsListAudioType,
3310                                 &SoundsListAudioEncType,
3311                                 &SoundsListTokens,
3312                                 &SoundsListMediatype,
3313                                 &SoundsListPref,
3314                                 lboSounds,
3315                                 intSelectedData);
3316     frameCESound->SetEditorMode(TRUE);
3317     frameCESound->ShowModal();
3318     delete frameCESound;
3319     frameCESound = NULL;
3322 void frmContactEditor::DeleteSound( wxCommandEvent& event )
3324     long longSelected = -1;
3325     int intSelectedData = 0;
3326     
3327     if (!GetSelectedItem(lboSounds,
3328                          &longSelected,
3329                          &intSelectedData)){
3330         return;
3331     }
3332     
3333     lboSounds->DeleteItem(longSelected);
3334     
3335     DeleteMapData(intSelectedData, &SoundsList, &SoundsListAltID,
3336                   &SoundsListPID, &SoundsListType, &SoundsListAudioType,
3337                   &SoundsListAudioEncType, &SoundsListTokens, &SoundsListMediatype,
3338                   &SoundsListPref);
3339     
3342 void frmContactEditor::PlaySoundDetach()
3344     
3345     if (!AudioStreamPlayback.openFromMemory(base64dec.c_str(), base64declen)){
3346         
3347         // Can't load file. We must flee...
3348         // Also show an error message too.
3349         
3350         wxMessageBox(_("This file is in an audio format that is unsupported or is not an audio file."), _("Error opening audio file"), wxICON_ERROR);
3351         
3352         return;
3353         
3354     }
3355     
3356     btnStop->Enable();
3357     
3358     //AudioStreamPlayback.setbuffer(AudioBuffer);
3359     AudioStreamPlayback.play();
3360     
3361     /*timespec n1, n2;
3362      
3363      n1.tv_sec = 0;
3364      n1.tv_nsec = 100000000L;*/
3365     
3366     //while (TimeA != TimeB){
3367     while (AudioStreamPlayback.getStatus() == sf::SoundSource::Playing){
3368         
3369         // We poll this every 100ms in order to conserve CPU usage.
3370         
3371         SleepFor(100000000);
3372         
3373     }
3374     
3375     btnStop->Disable();
3376     
3379 void frmContactEditor::PlaySound( wxCommandEvent& event )
3381     
3382     //sf::Music *AudioPlayback = new sf::Music;
3383     //AudioStream *AudioStreamPlayback = new AudioStream;
3384     //sf::SoundBuffer *AudioBuffer = new sf::SoundBuffer;
3385     
3386     //sf::Sound *AudioPlayback = new sf::Sound;
3387     
3388     //delete(AudioPlayback);
3389     
3390     //delete(AudioPlayback);
3391     //delete(AudioStreamPlayback);
3392     //delete(AudioBuffer);
3393     
3394     //AudioPlayback = NULL;
3395     //AudioStreamPlayback = NULL;
3396     //AudioBuffer = NULL;
3397     
3398     //return;
3399     
3400     long longSelected = -1;
3401     int intSelectedData = 0;
3402     
3403     // Check if sound is still being played and if it is, stop it.
3404     
3405     if (AudioStreamPlayback.getStatus() == sf::SoundSource::Playing){
3406         
3407         AudioStreamPlayback.stop();
3408         
3409     }
3410     
3411     if (!GetSelectedItem(lboSounds,
3412                          &longSelected,
3413                          &intSelectedData)){
3414         return;
3415     }
3416     
3417     std::map<int, std::string>::iterator initier;
3418     
3419     initier = SoundsList.find(intSelectedData);
3420     
3421     base64dec = base64_decode(initier->second);
3422     base64declen = base64dec.size();
3423     
3424     std::thread AudioPlaybackThread(&frmContactEditor::PlaySoundDetach, this);
3425     AudioPlaybackThread.detach();
3426     
3427     return;
3428     
3431 void frmContactEditor::StopSound( wxCommandEvent& event )
3433     
3434     if (AudioStreamPlayback.getStatus() == sf::SoundSource::Playing){
3435         
3436         AudioStreamPlayback.stop();
3437         
3438     }
3439     
3440     btnStop->Disable();
3441     
3442     return;
3443     
3446 void frmContactEditor::AddCalendarAddress( wxCommandEvent& event )
3448     int intResult = 0;
3449     
3450     frmContactEditorCalAdr *frameCECalAdr = new frmContactEditorCalAdr ( this );
3451     frameCECalAdr->SetEditorMode(FALSE);
3452     intResult = GetLastInt(&CalendarList);
3453     frameCECalAdr->SetupPointers(&CalendarList,
3454                                  &CalendarListAltID,
3455                                  &CalendarListPID,
3456                                  &CalendarListType,
3457                                  &CalendarListTokens,
3458                                  &CalendarListPref,
3459                                  lboCalendarAddresses,
3460                                  (intValueSeek));
3461     frameCECalAdr->ShowModal();
3462     delete frameCECalAdr;
3463     frameCECalAdr = NULL;
3466 void frmContactEditor::ModifyCalendarAddress( wxCommandEvent& event )
3468     long longSelected = -1;
3469     int intSelectedData = 0;
3470     
3471     if (!GetSelectedItem(lboCalendarAddresses,
3472                          &longSelected,
3473                          &intSelectedData)){
3474         return;
3475     }
3476     
3477     frmContactEditorCalAdr *frameCECalAdr = new frmContactEditorCalAdr ( this );
3478     frameCECalAdr->SetupPointers(&CalendarList,
3479                                  &CalendarListAltID,
3480                                  &CalendarListPID,
3481                                  &CalendarListType,
3482                                  &CalendarListTokens,
3483                                  &CalendarListPref,
3484                                  lboCalendarAddresses,
3485                                  intSelectedData);
3486     frameCECalAdr->SetEditorMode(TRUE);
3487     frameCECalAdr->ShowModal();
3488     delete frameCECalAdr;
3489     frameCECalAdr = NULL;
3492 void frmContactEditor::DeleteCalendarAddress( wxCommandEvent& event )
3494     long longSelected = -1;
3495     int intSelectedData = 0;
3496     
3497     if (!GetSelectedItem(lboCalendarAddresses,
3498                          &longSelected,
3499                          &intSelectedData)){
3500         return;
3501     }
3502     
3503     lboCalendarAddresses->DeleteItem(longSelected);
3504     
3505     DeleteMapData(intSelectedData, &CalendarList, &CalendarListAltID,
3506                   &CalendarListPID, &CalendarListType, &CalendarListTokens,
3507                   &CalendarListPref);
3508     
3511 void frmContactEditor::AddCalendarRequest( wxCommandEvent& event )
3513     int intResult = 0;
3514     
3515     frmContactEditorCalAdr *frameCECalAdr = new frmContactEditorCalAdr ( this );
3516     frameCECalAdr->SetEditorMode(FALSE);
3517     intResult = GetLastInt(&CalendarRequestList);
3518     frameCECalAdr->SetupPointers(&CalendarRequestList,
3519                                  &CalendarRequestListAltID,
3520                                  &CalendarRequestListPID,
3521                                  &CalendarRequestListType,
3522                                  &CalendarRequestListTokens,
3523                                  &CalendarRequestListPref,
3524                                  lboCalendarRequestAddress,
3525                                  (intValueSeek));
3526     frameCECalAdr->ShowModal();
3527     delete frameCECalAdr;
3528     frameCECalAdr = NULL;
3531 void frmContactEditor::ModifyCalendarRequest( wxCommandEvent& event )
3533     long longSelected = -1;
3534     int intSelectedData = 0;
3535     
3536     if (!GetSelectedItem(lboCalendarRequestAddress,
3537                          &longSelected,
3538                          &intSelectedData)){
3539         return;
3540     }
3541     
3542     frmContactEditorCalAdr *frameCECalAdr = new frmContactEditorCalAdr ( this );
3543     frameCECalAdr->SetupPointers(&CalendarList,
3544                                  &CalendarRequestListAltID,
3545                                  &CalendarRequestListPID,
3546                                  &CalendarRequestListType,
3547                                  &CalendarRequestListTokens,
3548                                  &CalendarRequestListPref,
3549                                  lboCalendarRequestAddress,
3550                                  intSelectedData);
3551     frameCECalAdr->SetEditorMode(TRUE);
3552     frameCECalAdr->ShowModal();
3553     delete frameCECalAdr;
3554     frameCECalAdr = NULL;
3557 void frmContactEditor::DeleteCalendarRequest( wxCommandEvent& event )
3559     long longSelected = -1;
3560     int intSelectedData = 0;
3561     
3562     if (!GetSelectedItem(lboCalendarRequestAddress,
3563                          &longSelected,
3564                          &intSelectedData)){
3565         return;
3566     }
3567     
3568     lboCalendarRequestAddress->DeleteItem(longSelected);
3569     
3570     DeleteMapData(intSelectedData, &CalendarRequestList,
3571                   &CalendarRequestListAltID, &CalendarRequestListPID,
3572                   &CalendarRequestListType, &CalendarRequestListTokens,
3573                   &CalendarRequestListPref);
3576 void frmContactEditor::AddFreeBusy( wxCommandEvent& event )
3578     int intResult = 0;
3579     
3580     frmContactEditorCalAdr *frameCECalAdr = new frmContactEditorCalAdr ( this );
3581     frameCECalAdr->SetEditorMode(FALSE);
3582     intResult = GetLastInt(&FreeBusyList);
3583     frameCECalAdr->SetupPointers(&FreeBusyList,
3584                                  &FreeBusyListAltID,
3585                                  &FreeBusyListPID,
3586                                  &FreeBusyListType,
3587                                  &FreeBusyListTokens,
3588                                  &FreeBusyListPref,
3589                                  lboFreeBusyAddresses,
3590                                  (intValueSeek));
3591     frameCECalAdr->ShowModal();
3592     delete frameCECalAdr;
3593     frameCECalAdr = NULL;
3596 void frmContactEditor::ModifyFreeBusy( wxCommandEvent& event )
3598     long longSelected = -1;
3599     int intSelectedData = 0;
3600     
3601     if (!GetSelectedItem(lboFreeBusyAddresses,
3602                          &longSelected,
3603                          &intSelectedData)){
3604         return;
3605     }
3606     
3607     frmContactEditorCalAdr *frameCECalAdr = new frmContactEditorCalAdr ( this );
3608     frameCECalAdr->SetupPointers(&FreeBusyList,
3609                                  &FreeBusyListAltID,
3610                                  &FreeBusyListPID,
3611                                  &FreeBusyListType,
3612                                  &FreeBusyListTokens,
3613                                  &FreeBusyListPref,
3614                                  lboFreeBusyAddresses,
3615                                  intSelectedData);
3616     frameCECalAdr->SetEditorMode(TRUE);
3617     frameCECalAdr->ShowModal();
3618     delete frameCECalAdr;
3619     frameCECalAdr = NULL;
3622 void frmContactEditor::DeleteFreeBusy( wxCommandEvent& event )
3624     long longSelected = -1;
3625     int intSelectedData = 0;
3626     
3627     if (!GetSelectedItem(lboFreeBusyAddresses,
3628                          &longSelected,
3629                          &intSelectedData)){
3630         return;
3631     }
3632     
3633     lboFreeBusyAddresses->DeleteItem(longSelected);
3634     
3635     DeleteMapData(intSelectedData, &FreeBusyList, &FreeBusyListAltID,
3636                   &FreeBusyListPID, &FreeBusyListType, &FreeBusyListTokens,
3637                   &FreeBusyListPref);
3638     
3641 void frmContactEditor::AddKey( wxCommandEvent& event )
3643     int intResult = 0;
3644     
3645     frmContactEditorKey *frameCEKey = new frmContactEditorKey ( this );
3646     frameCEKey->SetEditorMode(FALSE);
3647     intResult = GetLastInt(&KeyList);
3648     frameCEKey->SetupPointers(&KeyList,
3649                               &KeyListAltID,
3650                               &KeyListPID,
3651                               &KeyListKeyType,
3652                               &KeyListDataType,
3653                               &KeyListType,
3654                               &KeyListTokens,
3655                               &KeyListPref,
3656                               lboKeys,
3657                               (intValueSeek));
3658     frameCEKey->ShowModal();
3659     delete frameCEKey;
3660     frameCEKey = NULL;
3663 void frmContactEditor::ModifyKey( wxCommandEvent& event )
3665     long longSelected = -1;
3666     int intSelectedData = 0;
3667     
3668     if (!GetSelectedItem(lboKeys,
3669                          &longSelected,
3670                          &intSelectedData)){
3671         return;
3672     }
3673     
3674     frmContactEditorKey *frameCEKey = new frmContactEditorKey ( this );
3675     frameCEKey->SetupPointers(&KeyList,
3676                               &KeyListAltID,
3677                               &KeyListPID,
3678                               &KeyListKeyType,
3679                               &KeyListDataType,
3680                               &KeyListType,
3681                               &KeyListTokens,
3682                               &KeyListPref,
3683                               lboKeys,
3684                               intSelectedData);
3685     frameCEKey->SetEditorMode(TRUE);
3686     frameCEKey->ShowModal();
3687     delete frameCEKey;
3688     frameCEKey = NULL;
3691 void frmContactEditor::DeleteKey( wxCommandEvent& event )
3693     long longSelected = -1;
3694     int intSelectedData = 0;
3695     
3696     if (!GetSelectedItem(lboKeys,
3697                          &longSelected,
3698                          &intSelectedData)){
3699         return;
3700     }
3701     
3702     lboKeys->DeleteItem(longSelected);
3703     
3704     DeleteMapData(intSelectedData, &KeyList, &KeyListAltID,
3705                   &KeyListPID, &KeyListKeyType, &KeyListDataType, &KeyListType,
3706                   &KeyListTokens, &KeyListPref);
3707     
3710 void frmContactEditor::AddVendorNamespace( wxCommandEvent& event )
3712     int intResult = 0;
3713     
3714     frmContactEditorVendor *frameCEVen = new frmContactEditorVendor ( this );
3715     frameCEVen->SetEditorMode(FALSE);
3716     intResult = GetLastInt(&VendorList);
3717     frameCEVen->SetupPointers(&VendorList,
3718                               &VendorListPEN,
3719                               &VendorListElement,
3720                               lboVendorNamespace,
3721                               (intValueSeek));
3722     frameCEVen->ShowModal();
3723     delete frameCEVen;
3724     frameCEVen = NULL;
3727 void frmContactEditor::ModifyVendorNamespace( wxCommandEvent& event )
3729     long longSelected = -1;
3730     int intSelectedData = 0;
3731     
3732     if (!GetSelectedItem(lboVendorNamespace,
3733                          &longSelected,
3734                          &intSelectedData)){
3735         return;
3736     }
3737     
3738     frmContactEditorVendor *frameCEVen = new frmContactEditorVendor ( this );
3739     frameCEVen->SetupPointers(&VendorList,
3740                               &VendorListPEN,
3741                               &VendorListElement,
3742                               lboVendorNamespace,
3743                               intSelectedData);
3744     frameCEVen->SetEditorMode(TRUE);
3745     frameCEVen->ShowModal();
3746     delete frameCEVen;
3747     frameCEVen = NULL;
3750 void frmContactEditor::DeleteVendorNamespace( wxCommandEvent& event )
3752     long longSelected = -1;
3753     int intSelectedData = 0;
3754     
3755     if (!GetSelectedItem(lboVendorNamespace,
3756                          &longSelected,
3757                          &intSelectedData)){
3758         return;
3759     }
3760     
3761     lboVendorNamespace->DeleteItem(longSelected);
3762     
3763     DeleteMapData(intSelectedData, &VendorList, &VendorListPEN,
3764                   &VendorListElement);
3765     
3768 void frmContactEditor::AddXToken( wxCommandEvent& event )
3770     int intResult = 0;
3771     
3772     frmContactEditorXToken *frameCEXT = new frmContactEditorXToken ( this );
3773     frameCEXT->SetEditorMode(FALSE);
3774     intResult = GetLastInt(&XTokenList);
3775     frameCEXT->SetupPointers(&XTokenList,
3776                              &XTokenListTokens,
3777                              lboXToken,
3778                              (intValueSeek));
3779     frameCEXT->ShowModal();
3780     delete frameCEXT;
3781     frameCEXT = NULL;
3784 void frmContactEditor::ModifyXToken( wxCommandEvent& event )
3786     long longSelected = -1;
3787     int intSelectedData = 0;
3788     
3789     if (!GetSelectedItem(lboXToken,
3790                          &longSelected,
3791                          &intSelectedData)){
3792         return;
3793     }
3794     
3795     frmContactEditorXToken *frameCEXT = new frmContactEditorXToken ( this );
3796     frameCEXT->SetupPointers(&XTokenList,
3797                              &XTokenListTokens,
3798                              lboXToken,
3799                              intSelectedData);
3800     frameCEXT->SetEditorMode(TRUE);
3801     frameCEXT->ShowModal();
3802     delete frameCEXT;
3803     frameCEXT = NULL;
3806 void frmContactEditor::DeleteXToken( wxCommandEvent& event )
3808     long longSelected = -1;
3809     int intSelectedData = 0;
3810     
3811     if (!GetSelectedItem(lboXToken,
3812                          &longSelected,
3813                          &intSelectedData)){
3814         return;
3815     }
3816     
3817     lboXToken->DeleteItem(longSelected);
3818     
3819     DeleteMapData(intSelectedData, &XTokenList, &XTokenListTokens);
3820     
3823 void frmContactEditor::SaveContact( wxCommandEvent& event )
3825     
3826     // Check if Display As combo box has a value in it.
3827     // Do not go any further if there is no value.
3828     
3829     wxString cmbDisplayAsValue = cmbDisplayAs->GetValue();
3830     
3831     if (cmbDisplayAsValue.IsEmpty()){
3832         
3833         wxMessageBox(_("Display As value cannot be left blank."), _("Display As value empty"), wxICON_ERROR);
3834         return;
3835         
3836     }
3837     
3838     // Save the updated contact data.
3839     
3840     vCard ContactData;
3841     wxString FilenameFinal;
3842     bool ReplaceContact = FALSE;
3843     
3844     if (cmbType->GetCurrentSelection() == 1 ||
3845         cmbType->GetCurrentSelection() == 3 ||
3846         cmbType->GetCurrentSelection() == 4){
3847         
3848         if (IsGroup == TRUE){
3849             
3850             // Mark contact for replacing.
3851             
3852             ReplaceContact = TRUE;
3853             
3854         }
3855         
3856     } else if (cmbType->GetCurrentSelection() == 2){
3857         
3858         if (IsGroup == TRUE){
3859             
3860             // Mark contact for replacing.
3861             
3862             ReplaceContact = TRUE;
3863             
3864         }
3865         
3866     }
3867     
3868     if (ReplaceContact == TRUE){
3869         
3870         wxString wxDelSplitFilename;
3871         wxString wxDelFinalFilename;
3872         wxString wxSDelDataURL;
3873         wxStringTokenizer wSTDelFilename(wxSContactFilename, wxT("/"));
3874         while(wSTDelFilename.HasMoreTokens()){
3875             
3876             wxDelSplitFilename = wSTDelFilename.GetNextToken();
3877             
3878         }
3879         
3880         wxSDelDataURL = wxDelSplitFilename;
3881         
3882         // Delete the contact from the server as it will be useless in certain
3883         // address book clients.
3884         
3885         ActMgrPtr->AddTask(2, cmbDisplayAs->GetValue(), wxSContactAccount, wxSDelDataURL, wxDelSplitFilename, wxSContactFilename, wxT(""));
3886         
3887         // Clear the filename so the trigger to recreate the UID is done.
3888         
3889         wxSContactFilename.Clear();
3890         EditMode = FALSE;
3891         
3892     }
3893     
3894     if (wxSContactFilename.IsEmpty()){
3895         
3896         // Generate a random UUID.
3897         
3898         UIDToken = GenerateUUID();
3899         UIDToken = UIDToken.MakeUpper();
3900         
3901         // Setup the filename.
3902         
3903         FilenameFinal = GetAccountDir(wxSContactAccount, FALSE);
3904         
3905 #if defined(__HAIKU__)
3906         
3907         //preffilename = wxT("noo");
3908         
3909 #elif defined(__WIN32__)
3910         
3911         FilenameFinal = GetAccountDir(wxSContactAccount, FALSE);
3912         FilenameFinal.Append(UIDToken);
3913         FilenameFinal.Append(wxT(".vcf"));
3914         wxSContactFilename = FilenameFinal;
3915         
3916 #else
3917         
3918         FilenameFinal = GetAccountDir(wxSContactAccount, FALSE);
3919         FilenameFinal.Append(UIDToken);
3920         FilenameFinal.Append(wxT(".vcf"));
3921         wxSContactFilename = FilenameFinal;
3922         
3923 #endif
3924         
3925     } else {
3926         
3927         if (UIDToken.IsEmpty()){
3928             
3929             // UID Token is empty. (Shouldn't be).
3930             // Generate a new UID Token.
3931             
3932             /*boost::uuids::uuid ContactUUID = boost::uuids::random_generator()();
3933              std::string sstContactUUID = boost::uuids::to_string(ContactUUID);
3934              wxString strContactUUID(sstContactUUID.c_str(), wxConvUTF8);
3935              UIDToken = strContactUUID;*/
3936             UIDToken = GenerateUUID();
3937             UIDToken = UIDToken.MakeUpper();
3938             
3939         }
3940         FilenameFinal = wxSContactFilename;
3941         
3942     }
3943     
3944     // Setup the data and write it into the account folder.
3945     
3946     // Begin preperations to write the contact to a file.
3947     
3948     bool boolValue = FALSE;
3949     bool boolValue2 = FALSE;
3950     bool FNFirst = TRUE;
3951     bool NNGeneralFirst = TRUE;
3952     bool NNHomeFirst = TRUE;
3953     bool NNWorkFirst = TRUE;
3954     int intFNCount = 0;
3955     std::map<int,int>::iterator intiter;
3956     std::map<int,wxString>::iterator striter;
3957     
3958     ContactData.Add(wxT("BEGIN"), wxT("VCARD"), FALSE);
3959     ContactData.Add(wxT("VERSION"), wxT("4.0"), FALSE);
3960     
3961     // Setup the version string.
3962     
3963     strValue.Append(wxT("-//Xestia//Address Book Version "));
3964     strValue.Append(wxT(XSDAB_VERSION));
3965     strValue.Append(wxT("//KW"));
3966     
3967     ContactData.Add(wxT("PRODID"), strValue, FALSE);
3968     
3969     // Setup the name.
3970     
3971     strValue.Clear();
3972     
3973     // Setup the name field.
3974     
3975     strValue = txtSurname->GetValue() + wxT(";") +
3976     txtForename->GetValue() + wxT(";") +
3977     txtOtherNames->GetValue() + wxT(";") +
3978     txtTitle->GetValue() + wxT(";") +
3979     txtSuffix->GetValue();
3980     
3981     strValue2 = ContactData.Convert(cmbDisplayAs->GetValue(), FALSE);
3982     strValue2.Trim();
3983     
3984     if (NameTokens.IsEmpty()){
3985         ContactData.Add(wxT("N;SORT-AS=\"") + strValue2 + wxT("\""), strValue, FALSE);
3986     } else {
3987         ContactData.Add(wxT("N;SORT-AS=\"") + strValue2 + wxT("\";") + NameTokens, strValue, FALSE);
3988     }
3989     
3990     if (cmbType->GetCurrentSelection() == 1){
3991         
3992         ContactData.AddRaw(wxT("KIND"), wxT("individual"));
3993         
3994     } else if (cmbType->GetCurrentSelection() == 2){
3995         
3996         ContactData.AddRaw(wxT("KIND"), wxT("group"));
3997         
3998         // Go through each of the members and write them out.
3999         
4000         for (std::map<int, wxString>::iterator itemiter = GroupsList.begin();
4001              itemiter != GroupsList.end(); ++itemiter){
4002             
4003             ContactData.Add(wxT("MEMBER:urn:uuid"), itemiter->second, FALSE);
4004             
4005         }
4006         
4007     } else if (cmbType->GetCurrentSelection() == 3){
4008         
4009         ContactData.AddRaw(wxT("KIND"), wxT("org"));
4010         
4011     } else if (cmbType->GetCurrentSelection() == 4){
4012         
4013         ContactData.AddRaw(wxT("KIND"), wxT("location"));
4014         
4015     }
4016     
4017     
4018     // Setup the nicknames (General, Home & Business).
4019     
4020     strValue.Clear();
4021     strValue2.Clear();
4022     strValue3.Clear();
4023     
4024     boolValue = FALSE;
4025     boolValue2 = FALSE;
4026     intValue2 = 0;
4027     intValue  = 0;
4028     
4029     // Setup the gender.
4030     
4031     if (cmbGender->GetCurrentSelection() != 0){
4032         
4033         switch(cmbGender->GetCurrentSelection()){
4034                 
4035             case 1:
4036                 
4037                 strValue = wxT("M");
4038                 break;
4039                 
4040             case 2:
4041                 
4042                 strValue = wxT("F");
4043                 break;
4044                 
4045             case 3:
4046                 
4047                 strValue = wxT("O");
4048                 break;
4049                 
4050             case 4:
4051                 
4052                 strValue = wxT("N");
4053                 break;
4054                 
4055             case 5:
4056                 
4057                 strValue = wxT("U");
4058                 break;
4059                 
4060         }
4061         
4062     }
4063     
4064     if (!txtGenderDescription->IsEmpty()){
4065         
4066         strValue2 = txtGenderDescription->GetValue();
4067         
4068     }
4069     
4070     if (!strValue.IsEmpty() || !strValue2.IsEmpty()){
4071         
4072         EscapeString(&strValue2, FALSE);
4073         
4074         if (!GenderTokens.IsEmpty()){
4075             
4076             if (!strValue2.IsEmpty()){
4077                 
4078                 ContactData.AddRaw(wxT("GENDER;") + GenderTokens, strValue + wxT(";") + strValue2);
4079                 
4080             } else {
4081                 
4082                 ContactData.AddRaw(wxT("GENDER;") + GenderTokens, strValue);
4083                 
4084             }
4085             
4086         } else {
4087             
4088             if (!strValue2.IsEmpty()){
4089                 
4090                 ContactData.AddRaw(wxT("GENDER"), strValue + wxT(";") + strValue2);
4091                 
4092             } else {
4093                 
4094                 ContactData.AddRaw(wxT("GENDER"), strValue);
4095                 
4096             }
4097             
4098         }
4099         
4100     }
4101     
4102     strValue.Clear();
4103     strValue2.Clear();
4104     strValue3.Clear();
4105     
4106     boolValue = FALSE;
4107     boolValue2 = FALSE;
4108     intValue2 = 0;
4109     intValue  = 0;
4110     
4111     // Process Label.
4112     
4113     strValue3 = BirthdayAltID;
4114     
4115     if (!strValue3.IsEmpty()){
4116         
4117         strValue3.Trim();
4118         strValue3.Trim();
4119         boolValue2 = TRUE;
4120         strValue2.Append(wxT("ALTID=\"") + strValue3 + wxT("\""));
4121         
4122         boolValue = TRUE;
4123         
4124     }
4125     
4126     //strValue3 = ContactData.Convert(GeneralAddressList, FALSE);
4127     //strValue2 =
4128     
4129     // Process Language.
4130     
4131     strValue3 = BirthdayCalScale;
4132     
4133     if (!strValue3.IsEmpty()){
4134         
4135         strValue3.Trim();
4136         strValue3.Trim();
4137         
4138         if (boolValue2 == TRUE){
4139             
4140             strValue2.Append(wxT(";"));
4141             
4142         } else {
4143             
4144             boolValue2 = TRUE;
4145             
4146         }
4147         
4148         strValue2.Append(wxT("CALSCALE=") + strValue3);
4149         
4150         boolValue = TRUE;
4151         
4152     }
4153     
4154     // Process Tokens.
4155     
4156     strValue2 = BirthdayTokens;
4157     
4158     // Get the birthday and write it.
4159     
4160     ResetSaveProcessData();
4161     
4162     if (!txtBirthday->IsEmpty()){
4163         
4164         strValue = txtBirthday->GetValue();
4165         
4166         if (!strValue.IsEmpty() || !strValue2.IsEmpty()){
4167             
4168             if (!strValue2.IsEmpty()){
4169                 
4170                 EscapeString(&strValue2, FALSE);
4171                 EscapeString(&strValue, FALSE);
4172                 
4173                 ContactData.AddRaw(wxT("BDAY;VALUE=text;") + strValue2 + wxT(";"), strValue);
4174                 
4175             } else {
4176                 
4177                 EscapeString(&strValue, FALSE);
4178                 
4179                 ContactData.AddRaw(wxT("BDAY;VALUE=text"), strValue);
4180                 
4181             }
4182             
4183         }
4184         
4185     } else {
4186         
4187         // Deal with date.
4188         
4189         // Get Day, Month & Year.
4190         
4191         wxDateTime BirthdayDate;
4192         wxDateTime::Month BirthdayMonth;
4193         int BirthdayDay;
4194         int BirthdayYear;
4195         wxString DataBeforeT;
4196         wxString DataAfterT;
4197         wxString FinalBirthdayString;
4198         bool ProcessDataAfterT = FALSE;
4199         
4200         BirthdayDate = dapBirthday->GetValue();
4201         
4202         if (BirthdayDate.IsValid()){
4203             
4204             BirthdayDay = BirthdayDate.GetDay();
4205             BirthdayMonth = BirthdayDate.GetMonth();
4206             BirthdayYear = BirthdayDate.GetYear();
4207             
4208             // Look for T and replace data before this.
4209             
4210             wxStringTokenizer wSTDate(Birthday, wxT("T"));
4211             
4212             while (wSTDate.HasMoreTokens()){
4213                 
4214                 if (ProcessDataAfterT == FALSE){
4215                     
4216                     DataBeforeT = wSTDate.GetNextToken();
4217                     ProcessDataAfterT = TRUE;
4218                     
4219                 } else {
4220                     
4221                     DataAfterT = wSTDate.GetNextToken();
4222                     break;
4223                     
4224                 }
4225                 
4226             }
4227             
4228             // If there is not T then replace altogether.
4229             
4230             wxString FinalBirthdayDay;
4231             wxString FinalBirthdayMonth;
4232             wxString FinalBirthdayYear;
4233             
4234             if (BirthdayDay < 10){
4235                 
4236                 FinalBirthdayDay = wxT("0") + wxString::Format(wxT("%i"), BirthdayDay);
4237                 
4238             } else {
4239                 
4240                 FinalBirthdayDay = wxString::Format(wxT("%i"), BirthdayDay);
4241                 
4242             }
4243             
4244             if (((int)BirthdayMonth + 1) < 10){
4245                 
4246                 FinalBirthdayMonth = wxT("0") + wxString::Format(wxT("%i"), ((int)BirthdayMonth + 1));
4247                 
4248             } else {
4249                 
4250                 FinalBirthdayMonth = wxString::Format(wxT("%i"), ((int)BirthdayMonth + 1));
4251                 
4252             }
4253             
4254             if (BirthdayYear == 0){
4255                 
4256                 FinalBirthdayYear = wxT("--");
4257                 
4258             } else {
4259                 
4260                 FinalBirthdayYear = wxString::Format(wxT("%i"), BirthdayYear);
4261                 
4262             }
4263             
4264             if (!DataAfterT.IsEmpty()){
4265                 
4266                 FinalBirthdayString = FinalBirthdayYear + FinalBirthdayMonth + FinalBirthdayDay + wxT("T") + DataAfterT;
4267                 
4268             } else {
4269                 
4270                 FinalBirthdayString = FinalBirthdayYear + FinalBirthdayMonth + FinalBirthdayDay;
4271                 
4272             }
4273             
4274             if (!FinalBirthdayString.IsEmpty() || !strValue2.IsEmpty()){
4275                 
4276                 if (!strValue2.IsEmpty()){
4277                     
4278                     EscapeString(&strValue2, FALSE);
4279                     EscapeString(&strValue, FALSE);
4280                     
4281                     ContactData.AddRaw(wxT("BDAY") + strValue2 + wxT(";"), FinalBirthdayString);
4282                     
4283                 } else {
4284                     
4285                     EscapeString(&strValue, FALSE);
4286                     
4287                     ContactData.AddRaw(wxT("BDAY"), FinalBirthdayString);
4288                     
4289                 }
4290                 
4291             }
4292             
4293         }
4294         
4295     }
4296     
4297     ResetSaveProcessData();
4298     
4299     // Process Label.
4300     
4301     strValue3 = AnniversaryAltID;
4302     
4303     if (!strValue3.IsEmpty()){
4304         
4305         strValue3.Trim();
4306         strValue3.Trim();
4307         boolValue2 = TRUE;
4308         strValue2.Append(wxT("ALTID=\"") + strValue3 + wxT("\""));
4309         
4310         boolValue = TRUE;
4311         
4312     }
4313     
4314     //strValue3 = ContactData.Convert(GeneralAddressList, FALSE);
4315     //strValue2 =
4316     
4317     // Process Language.
4318     
4319     strValue3 = AnniversaryCalScale;
4320     
4321     if (!strValue3.IsEmpty()){
4322         
4323         strValue3.Trim();
4324         strValue3.Trim();
4325         
4326         if (boolValue2 == TRUE){
4327             
4328             strValue2.Append(wxT(";"));
4329             
4330         } else {
4331             
4332             boolValue2 = TRUE;
4333             
4334         }
4335         
4336         strValue2.Append(wxT("CALSCALE=") + strValue3);
4337         
4338         boolValue = TRUE;
4339         
4340     }
4341     
4342     // Process Tokens.
4343     
4344     strValue2 = AnniversaryTokens;
4345     
4346     // Deal with ANNIVERSARY.
4347     
4348     if (!txtAnniversary->IsEmpty()){
4349         
4350         strValue = txtAnniversary->GetValue();
4351         
4352         if (!strValue.IsEmpty() || !strValue2.IsEmpty()){
4353             
4354             if (!strValue2.IsEmpty()){
4355                 
4356                 EscapeString(&strValue2, FALSE);
4357                 EscapeString(&strValue, FALSE);
4358                 
4359                 ContactData.AddRaw(wxT("ANNIVERSARY;VALUE=text;") + strValue2 + wxT(";"), strValue);
4360                 
4361             } else {
4362                 
4363                 EscapeString(&strValue, FALSE);
4364                 
4365                 ContactData.AddRaw(wxT("ANNIVERSARY;VALUE=text"), strValue);
4366                 
4367             }
4368             
4369         }
4370         
4371     } else {
4372         
4373         // Look for T and replace data before this.
4374         
4375         // Get Day, Month & Year.
4376         
4377         wxDateTime AnniversaryDate;
4378         wxDateTime::Month AnniversaryMonth;
4379         int AnniversaryDay;
4380         int AnniversaryYear;
4381         wxString DataBeforeT;
4382         wxString DataAfterT;
4383         wxString FinalAnniversaryString;
4384         bool ProcessDataAfterT = FALSE;
4385         
4386         AnniversaryDate = dapAnniversary->GetValue();
4387         
4388         if (AnniversaryDate.IsValid()){
4389             
4390             AnniversaryDay = AnniversaryDate.GetDay();
4391             AnniversaryMonth = AnniversaryDate.GetMonth();
4392             AnniversaryYear = AnniversaryDate.GetYear();
4393             
4394             // Look for T and replace data before this.
4395             
4396             wxStringTokenizer wSTDate(Anniversary, wxT("T"));
4397             
4398             while (wSTDate.HasMoreTokens()){
4399                 
4400                 if (ProcessDataAfterT == FALSE){
4401                     
4402                     DataBeforeT = wSTDate.GetNextToken();
4403                     ProcessDataAfterT = TRUE;
4404                     
4405                 } else {
4406                     
4407                     DataAfterT = wSTDate.GetNextToken();
4408                     break;
4409                     
4410                 }
4411                 
4412             }
4413             
4414             // If there is not T then replace altogether.
4415             
4416             wxString FinalAnniversaryDay;
4417             wxString FinalAnniversaryMonth;
4418             wxString FinalAnniversaryYear;
4419             
4420             if (AnniversaryDay < 10){
4421                 
4422                 FinalAnniversaryDay = wxT("0") + wxString::Format(wxT("%i"), AnniversaryDay);
4423                 
4424             } else {
4425                 
4426                 FinalAnniversaryDay = wxString::Format(wxT("%i"), AnniversaryDay);
4427                 
4428             }
4429             
4430             if (((int)AnniversaryMonth + 1) < 10){
4431                 
4432                 FinalAnniversaryMonth = wxT("0") + wxString::Format(wxT("%i"), ((int)AnniversaryMonth + 1));
4433                 
4434             } else {
4435                 
4436                 FinalAnniversaryMonth = wxString::Format(wxT("%i"), ((int)AnniversaryMonth + 1));
4437                 
4438             }
4439             
4440             if (AnniversaryYear == 0){
4441                 
4442                 FinalAnniversaryYear = wxT("--");
4443                 
4444             } else {
4445                 
4446                 FinalAnniversaryYear = wxString::Format(wxT("%i"), AnniversaryYear);
4447                 
4448             }
4449             
4450             if (!DataAfterT.IsEmpty()){
4451                 
4452                 FinalAnniversaryString = FinalAnniversaryYear + FinalAnniversaryMonth + FinalAnniversaryDay + wxT("T") + DataAfterT;
4453                 
4454             } else {
4455                 
4456                 FinalAnniversaryString = FinalAnniversaryYear + FinalAnniversaryMonth + FinalAnniversaryDay;
4457                 
4458             }
4459             
4460             if (!FinalAnniversaryString.IsEmpty() || !strValue2.IsEmpty()){
4461                 
4462                 if (!strValue2.IsEmpty()){
4463                     
4464                     EscapeString(&strValue2, FALSE);
4465                     EscapeString(&strValue, FALSE);
4466                     
4467                     ContactData.AddRaw(wxT("ANNIVERSARY") + strValue2 + wxT(";"), FinalAnniversaryString);
4468                     
4469                 } else {
4470                     
4471                     EscapeString(&strValue, FALSE);
4472                     
4473                     ContactData.AddRaw(wxT("ANNIVERSARY"), FinalAnniversaryString);
4474                     
4475                 }
4476                 
4477             }
4478             
4479         }
4480         
4481     }
4482     
4483     // Setup the addresses (General, Home, Business).
4484     
4485     //intValue = GeneralAddressList.size();
4486     ResetSaveProcessData();
4487     
4488     for (std::map<int,wxString>::iterator iter = GeneralAddressList.begin();
4489          iter != GeneralAddressList.end(); ++iter){
4490         
4491         int intSeekValue = iter->first;
4492         
4493         wxString strAddressString;
4494         wxString strAddressFinalValue;
4495         std::map<int, wxString>::iterator iterValue;
4496         
4497         strAddressString.Append(wxT(";;"));
4498         
4499         // Get Address
4500         
4501         iterValue = GeneralAddressList.find(intSeekValue);
4502         strAddressFinalValue = iterValue->second;
4503         ProcessCaptureStrings(&strAddressFinalValue);
4504         strAddressString.Append(strAddressFinalValue + wxT(";"));
4505         strAddressFinalValue.Clear();
4506         
4507         // Get Town
4508         
4509         iterValue = GeneralAddressListTown.find(intSeekValue);
4510         strAddressFinalValue = iterValue->second;
4511         ProcessCaptureStrings(&strAddressFinalValue);
4512         strAddressString.Append(strAddressFinalValue + wxT(";"));
4513         strAddressFinalValue.Clear();
4514         
4515         // Get County
4516         
4517         iterValue = GeneralAddressListCounty.find(intSeekValue);
4518         strAddressFinalValue = iterValue->second;
4519         ProcessCaptureStrings(&strAddressFinalValue);
4520         strAddressString.Append(strAddressFinalValue + wxT(";"));
4521         strAddressFinalValue.Clear();
4522         
4523         // Get Post Code
4524         
4525         iterValue = GeneralAddressListPostCode.find(intSeekValue);
4526         strAddressFinalValue = iterValue->second;
4527         ProcessCaptureStrings(&strAddressFinalValue);
4528         strAddressString.Append(strAddressFinalValue + wxT(";"));
4529         strAddressFinalValue.Clear();
4530         
4531         // Get Country
4532         
4533         iterValue = GeneralAddressListCountry.find(intSeekValue);
4534         strAddressFinalValue = iterValue->second;
4535         ProcessCaptureStrings(&strAddressFinalValue);
4536         strAddressString.Append(strAddressFinalValue);
4537         strAddressFinalValue.Clear();
4538         
4539         ProcessSaveData(wxT("ADR"), &strValue2, &boolValue2, &boolValue,
4540                         &iter, &strAddressString, &ContactData,
4541                         wxT("LABEL"), &GeneralAddressListLabel,
4542                         wxT("LANGUAGE"), &GeneralAddressListLang,
4543                         wxT("ALTID"), &GeneralAddressListAltID,
4544                         wxT("PID"), &GeneralAddressListPID,
4545                         wxT("GEO"), &GeneralAddressListGeo,
4546                         wxT("TZ"), &GeneralAddressListTimezone,
4547                         wxT("MEDIATYPE"), &GeneralAddressListMediatype,
4548                         wxT("PREF"), &GeneralAddressListPref,
4549                         wxT(""), &GeneralAddressListTokens );
4550         
4551         ResetSaveProcessData();
4552         
4553     }
4554     
4555     ResetSaveProcessData();
4556     
4557     for (std::map<int,wxString>::iterator iter = HomeAddressList.begin();
4558          iter != HomeAddressList.end(); ++iter){
4559         
4560         int intSeekValue = iter->first;
4561         
4562         wxString strAddressString;
4563         wxString strAddressFinalValue;
4564         std::map<int, wxString>::iterator iterValue;
4565         
4566         strAddressString.Append(wxT(";;"));
4567         
4568         // Get Address
4569         
4570         iterValue = HomeAddressList.find(intSeekValue);
4571         strAddressFinalValue = iterValue->second;
4572         ProcessCaptureStrings(&strAddressFinalValue);
4573         
4574         strAddressString.Append(strAddressFinalValue + wxT(";"));
4575         
4576         // Get Town
4577         
4578         iterValue = HomeAddressListTown.find(intSeekValue);
4579         strAddressFinalValue = iterValue->second;
4580         ProcessCaptureStrings(&strAddressFinalValue);
4581         
4582         strAddressString.Append(strAddressFinalValue + wxT(";"));
4583         
4584         // Get County
4585         
4586         iterValue = HomeAddressListCounty.find(intSeekValue);
4587         strAddressFinalValue = iterValue->second;
4588         ProcessCaptureStrings(&strAddressFinalValue);
4589         
4590         strAddressString.Append(strAddressFinalValue + wxT(";"));
4591         
4592         // Get Post Code
4593         
4594         iterValue = HomeAddressListPostCode.find(intSeekValue);
4595         strAddressFinalValue = iterValue->second;
4596         ProcessCaptureStrings(&strAddressFinalValue);
4597         
4598         strAddressString.Append(strAddressFinalValue + wxT(";"));
4599         
4600         // Get Country
4601         
4602         iterValue = HomeAddressListCountry.find(intSeekValue);
4603         strAddressFinalValue = iterValue->second;
4604         ProcessCaptureStrings(&strAddressFinalValue);
4605         
4606         strAddressString.Append(strAddressFinalValue);
4607         
4608         ProcessSaveData(wxT("ADR;TYPE=home"), &strValue2, &boolValue2, &boolValue,
4609                         &iter, &strAddressString, &ContactData,
4610                         wxT("LABEL"), &HomeAddressListLabel,
4611                         wxT("LANGUAGE"), &HomeAddressListLang,
4612                         wxT("ALTID"), &HomeAddressListAltID,
4613                         wxT("PID"), &HomeAddressListPID,
4614                         wxT("GEO"), &HomeAddressListGeo,
4615                         wxT("TZ"), &HomeAddressListTimezone,
4616                         wxT("MEDIATYPE"), &HomeAddressListMediatype,
4617                         wxT("PREF"), &HomeAddressListPref,
4618                         wxT(""), &HomeAddressListTokens );
4619         
4620         ResetSaveProcessData();
4621         
4622     }
4623     
4624     ResetSaveProcessData();
4625     
4626     for (std::map<int,wxString>::iterator iter = BusinessAddressList.begin();
4627          iter != BusinessAddressList.end(); ++iter){
4628         
4629         int intSeekValue = iter->first;
4630         
4631         wxString strAddressString;
4632         wxString strAddressFinalValue;
4633         std::map<int, wxString>::iterator iterValue;
4634         
4635         strAddressString.Append(wxT(";;"));
4636         
4637         // Get Address
4638         
4639         iterValue = BusinessAddressList.find(intSeekValue);
4640         strAddressFinalValue = iterValue->second;
4641         ProcessCaptureStrings(&strAddressFinalValue);
4642         
4643         strAddressString.Append(strAddressFinalValue + wxT(";"));
4644         
4645         // Get Town
4646         
4647         iterValue = BusinessAddressListTown.find(intSeekValue);
4648         strAddressFinalValue = iterValue->second;
4649         ProcessCaptureStrings(&strAddressFinalValue);
4650         
4651         strAddressString.Append(strAddressFinalValue + wxT(";"));
4652         
4653         // Get County
4654         
4655         iterValue = BusinessAddressListCounty.find(intSeekValue);
4656         strAddressFinalValue = iterValue->second;
4657         ProcessCaptureStrings(&strAddressFinalValue);
4658         
4659         strAddressString.Append(strAddressFinalValue + wxT(";"));
4660         
4661         // Get Post Code
4662         
4663         iterValue = BusinessAddressListPostCode.find(intSeekValue);
4664         strAddressFinalValue = iterValue->second;
4665         ProcessCaptureStrings(&strAddressFinalValue);
4666         
4667         strAddressString.Append(strAddressFinalValue + wxT(";"));
4668         
4669         // Get Country
4670         
4671         iterValue = BusinessAddressListCountry.find(intSeekValue);
4672         strAddressFinalValue = iterValue->second;
4673         ProcessCaptureStrings(&strAddressFinalValue);
4674         
4675         strAddressString.Append(strAddressFinalValue);
4676         
4677         ProcessSaveData(wxT("ADR;TYPE=work"), &strValue2, &boolValue2, &boolValue,
4678                         &iter, &strAddressString, &ContactData,
4679                         wxT("LABEL"), &BusinessAddressListLabel,
4680                         wxT("LANGUAGE"), &BusinessAddressListLang,
4681                         wxT("ALTID"), &BusinessAddressListAltID,
4682                         wxT("PID"), &BusinessAddressListPID,
4683                         wxT("GEO"), &BusinessAddressListGeo,
4684                         wxT("TZ"), &BusinessAddressListTimezone,
4685                         wxT("MEDIATYPE"), &BusinessAddressListMediatype,
4686                         wxT("PREF"), &BusinessAddressListPref,
4687                         wxT(""), &BusinessAddressListTokens );
4688         
4689         ResetSaveProcessData();
4690         
4691     }
4692     
4693     // Sort out nicknames (if any).
4694     
4695     for (std::map<int,wxString>::iterator iter = GeneralNicknamesList.begin();
4696          iter != GeneralNicknamesList.end(); ++iter){
4697         
4698         intValue2 = iter->first;
4699         
4700         // Process Alternative ID.
4701         
4702         ProcessSaveData(wxT("NICKNAME"), &strValue2, &boolValue2, &boolValue,
4703                         &iter, &GeneralNicknamesList, &ContactData,
4704                         wxT("LANGUAGE"), &GeneralNicknamesListLanguage,
4705                         wxT("ALTID"), &GeneralNicknamesListAltID,
4706                         wxT("PID"), &GeneralNicknamesListPID,
4707                         wxT("PREF"), &GeneralNicknamesListPref,
4708                         wxT(""), &GeneralNicknamesListTokens );
4709         
4710         ResetSaveProcessData();
4711         
4712     }
4713     
4714     ResetSaveProcessData();
4715     
4716     for (std::map<int,wxString>::iterator iter = HomeNicknamesList.begin();
4717          iter != HomeNicknamesList.end(); ++iter){
4718         
4719         ProcessSaveData(wxT("NICKNAME;TYPE=home"), &strValue2, &boolValue2, &boolValue,
4720                         &iter, &HomeNicknamesList, &ContactData,
4721                         wxT("LANGUAGE"), &HomeNicknamesListLanguage,
4722                         wxT("ALTID"), &HomeNicknamesListAltID,
4723                         wxT("PID"), &HomeNicknamesListPID,
4724                         wxT("PREF"), &HomeNicknamesListPref,
4725                         wxT(""), &HomeNicknamesListTokens );
4726         
4727         ResetSaveProcessData();
4728         
4729     }
4730     
4731     ResetSaveProcessData();
4732     
4733     for (std::map<int,wxString>::iterator iter = BusinessNicknamesList.begin();
4734          iter != BusinessNicknamesList.end(); ++iter){
4735         
4736         ProcessSaveData(wxT("NICKNAME;TYPE=work"), &strValue2, &boolValue2, &boolValue,
4737                         &iter, &BusinessNicknamesList, &ContactData,
4738                         wxT("LANGUAGE"), &BusinessNicknamesListLanguage,
4739                         wxT("ALTID"), &BusinessNicknamesListAltID,
4740                         wxT("PID"), &BusinessNicknamesListPID,
4741                         wxT("PREF"), &BusinessNicknamesListPref,
4742                         wxT(""), &BusinessNicknamesListTokens );
4743         
4744         ResetSaveProcessData();
4745         
4746     }
4747     
4748     ResetSaveProcessData();
4749     
4750     // Sort out email (general, home and business).
4751     
4752     for (std::map<int,wxString>::iterator iter = GeneralEmailList.begin();
4753          iter != GeneralEmailList.end(); ++iter){
4754         
4755         //strValue3 = ContactData.Convert(GeneralAddressList, FALSE);
4756         //strValue2 =
4757         
4758         wxString strAddressFinalValue;
4759         std::map<int, wxString>::iterator iterValue;
4760         
4761         ProcessSaveData(wxT("EMAIL"), &strValue2, &boolValue2, &boolValue,
4762                         &iter, &GeneralEmailList, &ContactData,
4763                         wxT("ALTID"), &GeneralEmailListAltID,
4764                         wxT("PID"), &GeneralEmailListPID,
4765                         wxT("PREF"), &GeneralEmailListPref,
4766                         wxT(""), &GeneralEmailListTokens );
4767         
4768         ResetSaveProcessData();
4769         
4770     }
4771     
4772     ResetSaveProcessData();
4773     
4774     for (std::map<int,wxString>::iterator iter = HomeEmailList.begin();
4775          iter != HomeEmailList.end(); ++iter){
4776         
4777         //strValue3 = ContactData.Convert(GeneralAddressList, FALSE);
4778         //strValue2 =
4779         
4780         ProcessSaveData(wxT("EMAIL;TYPE=home"), &strValue2, &boolValue2, &boolValue,
4781                         &iter, &HomeEmailList, &ContactData,
4782                         wxT("ALTID"), &HomeEmailListAltID,
4783                         wxT("PID"), &HomeEmailListPID,
4784                         wxT("PREF"), &HomeEmailListPref,
4785                         wxT(""), &HomeEmailListTokens );
4786         
4787         ResetSaveProcessData();
4788         
4789     }
4790     
4791     ResetSaveProcessData();
4792     
4793     for (std::map<int,wxString>::iterator iter = BusinessEmailList.begin();
4794          iter != BusinessEmailList.end(); ++iter){
4795         
4796         //strValue3 = ContactData.Convert(GeneralAddressList, FALSE);
4797         //strValue2 =
4798         
4799         ProcessSaveData(wxT("EMAIL;TYPE=work"), &strValue2, &boolValue2, &boolValue,
4800                         &iter, &BusinessEmailList, &ContactData,
4801                         wxT("ALTID"), &BusinessEmailListAltID,
4802                         wxT("PID"), &BusinessEmailListPID,
4803                         wxT("PREF"), &BusinessEmailListPref,
4804                         wxT(""), &BusinessEmailListTokens );
4805         
4806         ResetSaveProcessData();
4807         
4808     }
4809     
4810     ResetSaveProcessData();
4811     
4812     for (std::map<int,wxString>::iterator iter = GeneralIMList.begin();
4813          iter != GeneralIMList.end(); ++iter){
4814         
4815         intValue2 = iter->first;
4816         
4817         // Process Alternative ID.
4818         
4819         ProcessSaveData(wxT("IMPP"), &strValue2, &boolValue2, &boolValue,
4820                         &iter, &GeneralIMList, &ContactData,
4821                         wxT("ALTID"), &GeneralIMListAltID,
4822                         wxT("PID"), &GeneralIMListPID,
4823                         wxT("MEDIATYPE"), &GeneralIMListMediatype,
4824                         wxT("PREF"), &GeneralIMListPref,
4825                         wxT(""), &GeneralIMListTokens );
4826         
4827         ResetSaveProcessData();
4828         
4829     }
4830     
4831     ResetSaveProcessData();
4832     
4833     for (std::map<int,wxString>::iterator iter = HomeIMList.begin();
4834          iter != HomeIMList.end(); ++iter){
4835         
4836         ProcessSaveData(wxT("IMPP;TYPE=home"), &strValue2, &boolValue2, &boolValue,
4837                         &iter, &HomeIMList, &ContactData,
4838                         wxT("ALTID"), &HomeIMListAltID,
4839                         wxT("PID"), &HomeIMListPID,
4840                         wxT("MEDIATYPE"), &HomeIMListMediatype,
4841                         wxT("PREF"), &HomeIMListPref,
4842                         wxT(""), &HomeIMListTokens );
4843         
4844         ResetSaveProcessData();
4845         
4846     }
4847     
4848     ResetSaveProcessData();
4849     
4850     for (std::map<int,wxString>::iterator iter = BusinessIMList.begin();
4851          iter != BusinessIMList.end(); ++iter){
4852         
4853         ProcessSaveData(wxT("IMPP;TYPE=work"), &strValue2, &boolValue2, &boolValue,
4854                         &iter, &BusinessIMList, &ContactData,
4855                         wxT("ALTID"), &BusinessIMListAltID,
4856                         wxT("PID"), &BusinessIMListPID,
4857                         wxT("MEDIATYPE"), &BusinessIMListMediatype,
4858                         wxT("PREF"), &BusinessIMListPref,
4859                         wxT(""), &BusinessIMListTokens );
4860         
4861         ResetSaveProcessData();
4862         
4863     }
4864     
4865     ResetSaveProcessData();
4866     
4867     for (std::map<int,wxString>::iterator iter = GeneralTelephoneList.begin();
4868          iter != GeneralTelephoneList.end(); ++iter){
4869         
4870         wxString strAddressFinalValue = iter->second;
4871         
4872         ProcessCaptureStrings(&strAddressFinalValue);
4873         
4874         strAddressFinalValue.insert(0, wxT("tel:"));
4875         
4876         ProcessSaveData(wxT("TEL"), &strValue2, &boolValue2, &boolValue,
4877                         &iter, &strAddressFinalValue, &ContactData,
4878                         wxT("ALTID"), &GeneralTelephoneListAltID,
4879                         wxT("PID"), &GeneralTelephoneListPID,
4880                         wxT("TYPE"), &GeneralTelephoneListType,
4881                         wxT("PREF"), &GeneralTelephoneListPref,
4882                         wxT(""), &GeneralTelephoneListTokens );
4883         
4884         ResetSaveProcessData();
4885         
4886     }
4887     
4888     ResetSaveProcessData();
4889     
4890     for (std::map<int,wxString>::iterator iter = HomeTelephoneList.begin();
4891          iter != HomeTelephoneList.end(); ++iter){
4892         
4893         wxString strAddressFinalValue = iter->second;
4894         
4895         ProcessCaptureStrings(&strAddressFinalValue);
4896         
4897         strAddressFinalValue.insert(0, wxT("tel:"));
4898         
4899         ProcessSaveData(wxT("TEL"), &strValue2, &boolValue2, &boolValue,
4900                         &iter, &strAddressFinalValue, &ContactData,
4901                         wxT("ALTID"), &HomeTelephoneListAltID,
4902                         wxT("PID"), &HomeTelephoneListPID,
4903                         wxT("TYPE"), &HomeTelephoneListType,
4904                         wxT("PREF"), &HomeTelephoneListPref,
4905                         wxT(""), &HomeTelephoneListTokens );
4906         
4907         ResetSaveProcessData();
4908         
4909     }
4910     
4911     ResetSaveProcessData();
4912     
4913     for (std::map<int,wxString>::iterator iter = BusinessTelephoneList.begin();
4914          iter != BusinessTelephoneList.end(); ++iter){
4915         
4916         wxString strAddressFinalValue = iter->second;
4917         
4918         ProcessCaptureStrings(&strAddressFinalValue);
4919         
4920         strAddressFinalValue.insert(0, wxT("tel:"));
4921         
4922         ProcessSaveData(wxT("TEL"), &strValue2, &boolValue2, &boolValue,
4923                         &iter, &strAddressFinalValue, &ContactData,
4924                         wxT("ALTID"), &BusinessTelephoneListAltID,
4925                         wxT("PID"), &BusinessTelephoneListPID,
4926                         wxT("TYPE"), &BusinessTelephoneListType,
4927                         wxT("PREF"), &BusinessTelephoneListPref,
4928                         wxT(""), &BusinessTelephoneListTokens );
4929         
4930         ResetSaveProcessData();
4931         
4932     }
4933     
4934     ResetSaveProcessData();
4935     
4936     for (std::map<int,wxString>::iterator iter = GeneralLanguageList.begin();
4937          iter != GeneralLanguageList.end(); ++iter){
4938         
4939         intValue2 = iter->first;
4940         
4941         ProcessSaveData(wxT("LANG"), &strValue2, &boolValue2, &boolValue,
4942                         &iter, &GeneralLanguageList, &ContactData,
4943                         wxT("ALTID"), &GeneralLanguageListAltID,
4944                         wxT("PID"), &GeneralLanguageListPID,
4945                         wxT("PREF"), &GeneralLanguageListPref,
4946                         wxT(""), &GeneralLanguageListTokens );
4947         
4948         ResetSaveProcessData();
4949         
4950     }
4951     
4952     ResetSaveProcessData();
4953     
4954     for (std::map<int,wxString>::iterator iter = HomeLanguageList.begin();
4955          iter != HomeLanguageList.end(); ++iter){
4956         
4957         ProcessSaveData(wxT("LANG;TYPE=home"), &strValue2, &boolValue2, &boolValue,
4958                         &iter, &HomeLanguageList, &ContactData,
4959                         wxT("ALTID"), &HomeLanguageListAltID,
4960                         wxT("PID"), &HomeLanguageListPID,
4961                         wxT("PREF"), &HomeLanguageListPref,
4962                         wxT(""), &HomeLanguageListTokens );
4963         
4964         ResetSaveProcessData();
4965         
4966     }
4967     
4968     ResetSaveProcessData();
4969     
4970     for (std::map<int,wxString>::iterator iter = BusinessLanguageList.begin();
4971          iter != BusinessLanguageList.end(); ++iter){
4972         
4973         ProcessSaveData(wxT("LANG;TYPE=work"), &strValue2, &boolValue2, &boolValue,
4974                         &iter, &BusinessLanguageList, &ContactData,
4975                         wxT("ALTID"), &BusinessLanguageListAltID,
4976                         wxT("PID"), &BusinessLanguageListPID,
4977                         wxT("PREF"), &BusinessLanguageListPref,
4978                         wxT(""), &BusinessLanguageListTokens );
4979         
4980         ResetSaveProcessData();
4981         
4982     }
4983     
4984     ResetSaveProcessData();
4985     
4986     for (std::map<int,wxString>::iterator iter = GeneralTZList.begin();
4987          iter != GeneralTZList.end(); ++iter){
4988         
4989         ProcessSaveData(wxT("TZ"), &strValue2, &boolValue2, &boolValue,
4990                         &iter, &GeneralTZList, &ContactData,
4991                         wxT("ALTID"), &GeneralTZListAltID,
4992                         wxT("PID"), &GeneralTZListPID,
4993                         wxT("MEDIATYPE"), &GeneralTZListMediatype,
4994                         wxT("PREF"), &GeneralTZListPref,
4995                         wxT(""), &GeneralTZListTokens );
4996         
4997         ResetSaveProcessData();
4998         
4999     }
5000     
5001     ResetSaveProcessData();
5002     
5003     for (std::map<int,wxString>::iterator iter = HomeTZList.begin();
5004          iter != HomeTZList.end(); ++iter){
5005         
5006         ProcessSaveData(wxT("TZ;TYPE=home"), &strValue2, &boolValue2, &boolValue,
5007                         &iter, &HomeTZList, &ContactData,
5008                         wxT("ALTID"), &HomeTZListAltID,
5009                         wxT("PID"), &HomeTZListPID,
5010                         wxT("MEDIATYPE"), &HomeTZListMediatype,
5011                         wxT("PREF"), &HomeTZListPref,
5012                         wxT(""), &HomeTZListTokens );
5013         
5014         ResetSaveProcessData();
5015         
5016     }
5017     
5018     ResetSaveProcessData();
5019     
5020     for (std::map<int,wxString>::iterator iter = BusinessTZList.begin();
5021          iter != BusinessTZList.end(); ++iter){
5022         
5023         ProcessSaveData(wxT("TZ;TYPE=work"), &strValue2, &boolValue2, &boolValue,
5024                         &iter, &BusinessTZList, &ContactData,
5025                         wxT("ALTID"), &BusinessTZListAltID,
5026                         wxT("PID"), &BusinessTZListPID,
5027                         wxT("MEDIATYPE"), &BusinessTZListMediatype,
5028                         wxT("PREF"), &BusinessTZListPref,
5029                         wxT(""), &BusinessTZListTokens );
5030         
5031         ResetSaveProcessData();
5032         
5033     }
5034     
5035     ResetSaveProcessData();
5036     
5037     for (std::map<int,wxString>::iterator iter = GeneralGeographyList.begin();
5038          iter != GeneralGeographyList.end(); ++iter){
5039         
5040         wxString strAddressFinalValue = iter->second;
5041         
5042         ProcessCaptureStrings(&strAddressFinalValue);
5043         
5044         strAddressFinalValue.insert(0, wxT("geo:"));
5045         
5046         ProcessSaveData(wxT("GEO"), &strValue2, &boolValue2, &boolValue,
5047                         &iter, &strAddressFinalValue, &ContactData,
5048                         wxT("ALTID"), &GeneralGeographyListAltID,
5049                         wxT("PID"), &GeneralGeographyListPID,
5050                         wxT("MEDIATYPE"), &GeneralGeographyListMediatype,
5051                         wxT("PREF"), &GeneralGeographyListPref,
5052                         wxT(""), &GeneralGeographyListTokens );
5053         
5054         ResetSaveProcessData();
5055         
5056     }
5057     
5058     ResetSaveProcessData();
5059     
5060     for (std::map<int,wxString>::iterator iter = HomeGeographyList.begin();
5061          iter != HomeGeographyList.end(); ++iter){
5062         
5063         wxString strAddressFinalValue = iter->second;
5064         
5065         ProcessCaptureStrings(&strAddressFinalValue);
5066         
5067         strAddressFinalValue.insert(0, wxT("geo:"));
5068         
5069         ProcessSaveData(wxT("GEO;TYPE=home"), &strValue2, &boolValue2, &boolValue,
5070                         &iter, &HomeGeographyList, &ContactData,
5071                         wxT("ALTID"), &HomeGeographyListAltID,
5072                         wxT("PID"), &HomeGeographyListPID,
5073                         wxT("MEDIATYPE"), &HomeGeographyListMediatype,
5074                         wxT("PREF"), &HomeGeographyListPref,
5075                         wxT(""), &HomeGeographyListTokens );
5076         
5077         ResetSaveProcessData();
5078         
5079     }
5080     
5081     ResetSaveProcessData();
5082     
5083     for (std::map<int,wxString>::iterator iter = BusinessGeographyList.begin();
5084          iter != BusinessGeographyList.end(); ++iter){
5085         
5086         wxString strAddressFinalValue = iter->second;
5087         
5088         ProcessCaptureStrings(&strAddressFinalValue);
5089         
5090         strAddressFinalValue.insert(0, wxT("geo:"));
5091         
5092         ProcessSaveData(wxT("GEO;TYPE=work"), &strValue2, &boolValue2, &boolValue,
5093                         &iter, &BusinessGeographyList, &ContactData,
5094                         wxT("ALTID"), &BusinessGeographyListAltID,
5095                         wxT("PID"), &BusinessGeographyListPID,
5096                         wxT("MEDIATYPE"), &BusinessGeographyListMediatype,
5097                         wxT("PREF"), &BusinessGeographyListPref,
5098                         wxT(""), &BusinessGeographyListTokens );
5099         
5100         ResetSaveProcessData();
5101         
5102     }
5103     
5104     ResetSaveProcessData();
5105     
5106     for (std::map<int,wxString>::iterator iter = GeneralRelatedList.begin();
5107          iter != GeneralRelatedList.end(); ++iter){
5108         
5109         ProcessSaveData(wxT("RELATED"), &strValue2, &boolValue2, &boolValue,
5110                         &iter, &GeneralRelatedList, &ContactData,
5111                         wxT("ALTID"), &GeneralRelatedListAltID,
5112                         wxT("PID"), &GeneralRelatedListPID,
5113                         wxT("LANGUAGE"), &GeneralRelatedListLanguage,
5114                         wxT("TYPE"), &GeneralRelatedListRelType,
5115                         wxT("PREF"), &GeneralRelatedListPref,
5116                         wxT(""), &GeneralRelatedListTokens );
5117         
5118         ResetSaveProcessData();
5119         
5120     }
5121     
5122     ResetSaveProcessData();
5123     
5124     for (std::map<int,wxString>::iterator iter = GeneralWebsiteList.begin();
5125          iter != GeneralWebsiteList.end(); ++iter){
5126         
5127         ProcessSaveData(wxT("URL"), &strValue2, &boolValue2, &boolValue,
5128                         &iter, &GeneralWebsiteList, &ContactData,
5129                         wxT("ALTID"), &GeneralWebsiteListAltID,
5130                         wxT("PID"), &GeneralWebsiteListPID,
5131                         wxT("MEDIATYPE"), &GeneralWebsiteListMediatype,
5132                         wxT("PREF"), &GeneralWebsiteListPref,
5133                         wxT(""), &GeneralWebsiteListTokens );
5134         
5135         ResetSaveProcessData();
5136         
5137     }
5138     
5139     ResetSaveProcessData();
5140     
5141     for (std::map<int,wxString>::iterator iter = HomeWebsiteList.begin();
5142          iter != HomeWebsiteList.end(); ++iter){
5143         
5144         ProcessSaveData(wxT("URL;TYPE=home"), &strValue2, &boolValue2, &boolValue,
5145                         &iter, &HomeWebsiteList, &ContactData,
5146                         wxT("ALTID"), &HomeWebsiteListAltID,
5147                         wxT("PID"), &HomeWebsiteListPID,
5148                         wxT("MEDIATYPE"), &HomeWebsiteListMediatype,
5149                         wxT("PREF"), &HomeWebsiteListPref,
5150                         wxT(""), &HomeWebsiteListTokens );
5151         
5152         ResetSaveProcessData();
5153         
5154     }
5155     
5156     ResetSaveProcessData();
5157     
5158     for (std::map<int,wxString>::iterator iter = BusinessWebsiteList.begin();
5159          iter != BusinessWebsiteList.end(); ++iter){
5160         
5161         ProcessSaveData(wxT("URL;TYPE=work"), &strValue2, &boolValue2, &boolValue,
5162                         &iter, &BusinessWebsiteList, &ContactData,
5163                         wxT("ALTID"), &BusinessWebsiteListAltID,
5164                         wxT("PID"), &BusinessWebsiteListPID,
5165                         wxT("MEDIATYPE"), &BusinessWebsiteListMediatype,
5166                         wxT("PREF"), &BusinessWebsiteListPref,
5167                         wxT(""), &BusinessWebsiteListTokens );
5168         
5169         ResetSaveProcessData();
5170         
5171     }
5172     
5173     ResetSaveProcessData();
5174     
5175     for (std::map<int,wxString>::iterator iter = GeneralTitleList.begin();
5176          iter != GeneralTitleList.end(); ++iter){
5177         
5178         ProcessSaveData(wxT("TITLE"), &strValue2, &boolValue2, &boolValue,
5179                         &iter, &GeneralTitleList, &ContactData,
5180                         wxT("ALTID"), &GeneralTitleListAltID,
5181                         wxT("PID"), &GeneralTitleListPID,
5182                         wxT("LANGUAGE"), &GeneralTitleListLanguage,
5183                         wxT("PREF"), &GeneralTitleListPref,
5184                         wxT(""), &GeneralTitleListTokens );
5185         
5186         ResetSaveProcessData();
5187         
5188     }
5189     
5190     ResetSaveProcessData();
5191     
5192     for (std::map<int,wxString>::iterator iter = HomeTitleList.begin();
5193          iter != HomeTitleList.end(); ++iter){
5194         
5195         ProcessSaveData(wxT("TITLE;TYPE=home"), &strValue2, &boolValue2, &boolValue,
5196                         &iter, &HomeTitleList, &ContactData,
5197                         wxT("ALTID"), &HomeTitleListAltID,
5198                         wxT("PID"), &HomeTitleListPID,
5199                         wxT("LANGUAGE"), &HomeTitleListLanguage,
5200                         wxT("PREF"), &HomeTitleListPref,
5201                         wxT(""), &HomeTitleListTokens );
5202         
5203         ResetSaveProcessData();
5204         
5205     }
5206     
5207     ResetSaveProcessData();
5208     
5209     for (std::map<int,wxString>::iterator iter = BusinessTitleList.begin();
5210          iter != BusinessTitleList.end(); ++iter){
5211         
5212         ProcessSaveData(wxT("TITLE;TYPE=work"), &strValue2, &boolValue2, &boolValue,
5213                         &iter, &BusinessTitleList, &ContactData,
5214                         wxT("ALTID"), &BusinessTitleListAltID,
5215                         wxT("PID"), &BusinessTitleListPID,
5216                         wxT("LANGUAGE"), &BusinessTitleListLanguage,
5217                         wxT("PREF"), &BusinessTitleListPref,
5218                         wxT(""), &BusinessTitleListTokens );
5219         
5220         ResetSaveProcessData();
5221         
5222     }
5223     
5224     ResetSaveProcessData();
5225     
5226     for (std::map<int,wxString>::iterator iter = GeneralRoleList.begin();
5227          iter != GeneralRoleList.end(); ++iter){
5228         
5229         ProcessSaveData(wxT("ROLE"), &strValue2, &boolValue2, &boolValue,
5230                         &iter, &GeneralRoleList, &ContactData,
5231                         wxT("ALTID"), &GeneralRoleListAltID,
5232                         wxT("PID"), &GeneralRoleListPID,
5233                         wxT("LANGUAGE"), &GeneralRoleListLanguage,
5234                         wxT("PREF"), &GeneralRoleListPref,
5235                         wxT(""), &GeneralRoleListTokens );
5236         
5237         ResetSaveProcessData();
5238         
5239     }
5240     
5241     ResetSaveProcessData();
5242     
5243     for (std::map<int,wxString>::iterator iter = HomeRoleList.begin();
5244          iter != HomeRoleList.end(); ++iter){
5245         
5246         ProcessSaveData(wxT("ROLE;TYPE=home"), &strValue2, &boolValue2, &boolValue,
5247                         &iter, &HomeRoleList, &ContactData,
5248                         wxT("ALTID"), &HomeRoleListAltID,
5249                         wxT("PID"), &HomeRoleListPID,
5250                         wxT("LANGUAGE"), &HomeRoleListLanguage,
5251                         wxT("PREF"), &HomeRoleListPref,
5252                         wxT(""), &HomeRoleListTokens );
5253         
5254         ResetSaveProcessData();
5255         
5256     }
5257     
5258     ResetSaveProcessData();
5259     
5260     for (std::map<int,wxString>::iterator iter = BusinessRoleList.begin();
5261          iter != BusinessRoleList.end(); ++iter){
5262         
5263         ProcessSaveData(wxT("ROLE;TYPE=work"), &strValue2, &boolValue2, &boolValue,
5264                         &iter, &BusinessRoleList, &ContactData,
5265                         wxT("ALTID"), &BusinessRoleListAltID,
5266                         wxT("PID"), &BusinessRoleListPID,
5267                         wxT("LANGUAGE"), &BusinessRoleListLanguage,
5268                         wxT("PREF"), &BusinessRoleListPref,
5269                         wxT(""), &BusinessRoleListTokens );
5270         
5271         ResetSaveProcessData();
5272         
5273     }
5274     
5275     ResetSaveProcessData();
5276     
5277     for (std::map<int,wxString>::iterator iter = GeneralOrganisationsList.begin();
5278          iter != GeneralOrganisationsList.end(); ++iter){
5279         
5280         ProcessSaveData(wxT("ORG"), &strValue2, &boolValue2, &boolValue,
5281                         &iter, &GeneralOrganisationsList, &ContactData,
5282                         wxT("ALTID"), &GeneralOrganisationsListAltID,
5283                         wxT("PID"), &GeneralOrganisationsListPID,
5284                         wxT("LANGUAGE"), &GeneralOrganisationsListLanguage,
5285                         wxT("SORT-AS"), &GeneralOrganisationsListSortAs,
5286                         wxT("PREF"), &GeneralOrganisationsListPref,
5287                         wxT(""), &GeneralOrganisationsListTokens );
5288         
5289         ResetSaveProcessData();
5290         
5291     }
5292     
5293     ResetSaveProcessData();
5294     
5295     for (std::map<int,wxString>::iterator iter = HomeOrganisationsList.begin();
5296          iter != HomeOrganisationsList.end(); ++iter){
5297         
5298         ProcessSaveData(wxT("ORG;TYPE=home"), &strValue2, &boolValue2, &boolValue,
5299                         &iter, &HomeOrganisationsList, &ContactData,
5300                         wxT("ALTID"), &HomeOrganisationsListAltID,
5301                         wxT("PID"), &HomeOrganisationsListPID,
5302                         wxT("LANGUAGE"), &HomeOrganisationsListLanguage,
5303                         wxT("SORT-AS"), &HomeOrganisationsListSortAs,
5304                         wxT("PREF"), &HomeOrganisationsListPref,
5305                         wxT(""), &HomeOrganisationsListTokens );
5306         
5307         ResetSaveProcessData();
5308         
5309     }
5310     
5311     ResetSaveProcessData();
5312     
5313     for (std::map<int,wxString>::iterator iter = BusinessOrganisationsList.begin();
5314          iter != BusinessOrganisationsList.end(); ++iter){
5315         
5316         ProcessSaveData(wxT("ORG;TYPE=work"), &strValue2, &boolValue2, &boolValue,
5317                         &iter, &BusinessOrganisationsList, &ContactData,
5318                         wxT("ALTID"), &BusinessOrganisationsListAltID,
5319                         wxT("PID"), &BusinessOrganisationsListPID,
5320                         wxT("LANGUAGE"), &BusinessOrganisationsListLanguage,
5321                         wxT("SORT-AS"), &BusinessOrganisationsListSortAs,
5322                         wxT("PREF"), &BusinessOrganisationsListPref,
5323                         wxT(""), &BusinessOrganisationsListTokens );
5324         
5325         ResetSaveProcessData();
5326         
5327     }
5328     
5329     ResetSaveProcessData();
5330     
5331     for (std::map<int,wxString>::iterator iter = GeneralNoteList.begin();
5332          iter != GeneralNoteList.end(); ++iter){
5333         
5334         ProcessSaveData(wxT("NOTE"), &strValue2, &boolValue2, &boolValue,
5335                         &iter, &GeneralNoteList, &ContactData,
5336                         wxT("ALTID"), &GeneralNoteListAltID,
5337                         wxT("PID"), &GeneralNoteListPID,
5338                         wxT("LANGUAGE"), &GeneralNoteListLanguage,
5339                         wxT("PREF"), &GeneralNoteListPref,
5340                         wxT(""), &GeneralNoteListTokens );
5341         
5342         ResetSaveProcessData();
5343         
5344     }
5345     
5346     ResetSaveProcessData();
5347     
5348     for (std::map<int,wxString>::iterator iter = HomeNoteList.begin();
5349          iter != HomeNoteList.end(); ++iter){
5350         
5351         ProcessSaveData(wxT("NOTE;TYPE=home"), &strValue2, &boolValue2, &boolValue,
5352                         &iter, &HomeNoteList, &ContactData,
5353                         wxT("ALTID"), &HomeNoteListAltID,
5354                         wxT("PID"), &HomeNoteListPID,
5355                         wxT("LANGUAGE"), &HomeNoteListLanguage,
5356                         wxT("PREF"), &HomeNoteListPref,
5357                         wxT(""), &HomeNoteListTokens );
5358         
5359         ResetSaveProcessData();
5360         
5361     }
5362     
5363     ResetSaveProcessData();
5364     
5365     for (std::map<int,wxString>::iterator iter = BusinessNoteList.begin();
5366          iter != BusinessNoteList.end(); ++iter){
5367         
5368         ProcessSaveData(wxT("NOTE;TYPE=work"), &strValue2, &boolValue2, &boolValue,
5369                         &iter, &BusinessNoteList, &ContactData,
5370                         wxT("ALTID"), &BusinessNoteListAltID,
5371                         wxT("PID"), &BusinessNoteListPID,
5372                         wxT("LANGUAGE"), &BusinessNoteListLanguage,
5373                         wxT("PREF"), &BusinessNoteListPref,
5374                         wxT(""), &BusinessNoteListTokens );
5375         
5376         ResetSaveProcessData();
5377         
5378     }
5379     
5380     ResetSaveProcessData();
5381     
5382     for (std::map<int,wxString>::iterator iter = CategoriesList.begin();
5383          iter != CategoriesList.end(); ++iter){
5384         
5385         ProcessSaveData(wxT("CATEGORIES"), &strValue2, &boolValue2, &boolValue,
5386                         &iter, &CategoriesList, &ContactData,
5387                         wxT("ALTID"), &CategoriesListAltID,
5388                         wxT("PID"), &CategoriesListPID,
5389                         wxT("TYPE"), &CategoriesListType,
5390                         wxT("PREF"), &CategoriesListPref,
5391                         wxT(""), &CategoriesListTokens );
5392         
5393         ResetSaveProcessData();
5394         
5395     }
5396     
5397     // Pictures.
5398     
5399     for (std::map<int, std::string>::iterator iter = PicturesList.begin();
5400          iter != PicturesList.end(); ++iter){
5401         
5402         int intValueIndex = iter->first;
5403         
5404         std::map<int, std::string>::iterator stdstriter;
5405         std::map<int, wxString>::iterator enciter;
5406         
5407         striter = PicturesListPictureType.find(intValueIndex);
5408         enciter = PicturesListPicEncType.find(intValueIndex);
5409         
5410         ProcessSaveData(wxT("PHOTO"), &strValue2, &boolValue2, &boolValue,
5411                         &iter, &PicturesList, &striter,
5412                         &enciter, &ContactData,
5413                         wxT("ALTID"), &PicturesListAltID,
5414                         wxT("PID"), &PicturesListPID,
5415                         wxT("TYPE"), &PicturesListType,
5416                         wxT("PREF"), &PicturesListPref,
5417                         wxT(""), &PicturesListTokens);
5418         
5419         ResetSaveProcessData();
5420         
5421     }
5422     
5423     ResetSaveProcessData();
5424     
5425     // Logos.
5426     
5427     for (std::map<int, std::string>::iterator iter = LogosList.begin();
5428          iter != LogosList.end(); ++iter){
5429         
5430         int intValueIndex = iter->first;
5431         
5432         std::map<int, std::string>::iterator stdstriter;
5433         std::map<int, wxString>::iterator enciter;
5434         
5435         striter = LogosListPictureType.find(intValueIndex);
5436         enciter = LogosListPicEncType.find(intValueIndex);
5437         
5438         ProcessSaveData(wxT("LOGO"), &strValue2, &boolValue2, &boolValue,
5439                         &iter, &LogosList, &striter,
5440                         &enciter, &ContactData,
5441                         wxT("ALTID"), &LogosListAltID,
5442                         wxT("PID"), &LogosListPID,
5443                         wxT("TYPE"), &LogosListType,
5444                         wxT("PREF"), &LogosListPref,
5445                         wxT(""), &LogosListTokens );
5446         
5447         ResetSaveProcessData();
5448         
5449     }
5450     
5451     ResetSaveProcessData();
5452     
5453     // Sounds.
5454     
5455     for (std::map<int, std::string>::iterator iter = SoundsList.begin();
5456          iter != SoundsList.end(); ++iter){
5457         
5458         int intValueIndex = iter->first;
5459         
5460         std::map<int, std::string>::iterator stdstriter;
5461         std::map<int, wxString>::iterator enciter;
5462         
5463         striter = SoundsListAudioType.find(intValueIndex);
5464         enciter = SoundsListAudioEncType.find(intValueIndex);
5465         
5466         ProcessSaveData(wxT("SOUND"), &strValue2, &boolValue2, &boolValue,
5467                         &iter, &SoundsList, &striter,
5468                         &enciter, &ContactData,
5469                         wxT("ALTID"), &SoundsListAltID,
5470                         wxT("PID"), &SoundsListPID,
5471                         wxT("TYPE"), &SoundsListType,
5472                         wxT("PREF"), &SoundsListPref,
5473                         wxT(""), &SoundsListTokens );
5474         
5475         ResetSaveProcessData();
5476         
5477     }
5478     
5479     ResetSaveProcessData();
5480     
5481     for (std::map<int,wxString>::iterator iter = CalendarList.begin();
5482          iter != CalendarList.end(); ++iter){
5483         
5484         ProcessSaveData(wxT("CALURI"), &strValue2, &boolValue2, &boolValue,
5485                         &iter, &CalendarList, &ContactData,
5486                         wxT("ALTID"), &CalendarListAltID,
5487                         wxT("PID"), &CalendarListPID,
5488                         wxT("MEDIATYPE"), &CalendarListMediatype,
5489                         wxT("TYPE"), &CalendarListType,
5490                         wxT("PREF"), &CalendarListPref,
5491                         wxT(""), &CalendarListTokens );
5492         
5493         ResetSaveProcessData();
5494         
5495     }
5496     
5497     ResetSaveProcessData();
5498     
5499     for (std::map<int,wxString>::iterator iter = CalendarRequestList.begin();
5500          iter != CalendarRequestList.end(); ++iter){
5501         
5502         ProcessSaveData(wxT("CALADRURI"), &strValue2, &boolValue2, &boolValue,
5503                         &iter, &CalendarRequestList, &ContactData,
5504                         wxT("ALTID"), &CalendarRequestListAltID,
5505                         wxT("PID"), &CalendarRequestListPID,
5506                         wxT("MEDIATYPE"), &CalendarRequestListMediatype,
5507                         wxT("TYPE"), &CalendarRequestListType,
5508                         wxT("PREF"), &CalendarRequestListPref,
5509                         wxT(""), &CalendarRequestListTokens );
5510         
5511         ResetSaveProcessData();
5512         
5513     }
5514     
5515     ResetSaveProcessData();
5516     
5517     for (std::map<int,wxString>::iterator iter = FreeBusyList.begin();
5518          iter != FreeBusyList.end(); ++iter){
5519         
5520         ProcessSaveData(wxT("FBURL"), &strValue2, &boolValue2, &boolValue,
5521                         &iter, &FreeBusyList, &ContactData,
5522                         wxT("ALTID"), &FreeBusyListAltID,
5523                         wxT("PID"), &FreeBusyListPID,
5524                         wxT("MEDIATYPE"), &FreeBusyListMediatype,
5525                         wxT("TYPE"), &FreeBusyListType,
5526                         wxT("PREF"), &FreeBusyListPref,
5527                         wxT(""), &FreeBusyListTokens );
5528         
5529         ResetSaveProcessData();
5530         
5531     }
5532     
5533     for (std::map<int, wxString>::iterator iter = KeyList.begin();
5534          iter != KeyList.end(); ++iter){
5535         
5536         intValue2 = iter->first;
5537         
5538         // Process Alternative ID.
5539         
5540         striter = KeyListAltID.find(intValue2);
5541         
5542         if (striter->first == intValue2){
5543             
5544             strValue3 = striter->second;
5545             
5546             if (!strValue3.IsEmpty()){
5547                 
5548                 strValue3.Trim();
5549                 strValue3.Trim();
5550                 
5551                 if (boolValue2 == TRUE){
5552                     
5553                     strValue2.Append(wxT(";"));
5554                     
5555                 } else {
5556                     
5557                     boolValue2 = TRUE;
5558                     
5559                 }
5560                 
5561                 strValue2.Append(wxT("ALTID=") + strValue3);
5562                 
5563                 boolValue = TRUE;
5564                 
5565             }
5566             
5567         }
5568         
5569         // Process PID.
5570         
5571         striter = KeyListPID.find(intValue2);
5572         
5573         if (striter->first == intValue2){
5574             
5575             strValue3 = striter->second;
5576             
5577             if (!strValue3.IsEmpty()){
5578                 
5579                 strValue3.Trim();
5580                 strValue3.Trim();
5581                 
5582                 if (boolValue2 == TRUE){
5583                     
5584                     strValue2.Append(wxT(";"));
5585                     
5586                 } else {
5587                     
5588                     boolValue2 = TRUE;
5589                     
5590                 }
5591                 
5592                 strValue2.Append(wxT("PID=") + strValue3);
5593                 
5594                 boolValue = TRUE;
5595                 
5596             }
5597             
5598         }
5599         
5600         // Process Type.
5601         
5602         striter = KeyListType.find(intValue2);
5603         
5604         if (striter->first == intValue2){
5605             
5606             strValue3 = striter->second;
5607             
5608             if (!strValue3.IsEmpty()){
5609                 
5610                 strValue3.Trim();
5611                 strValue3.Trim();
5612                 
5613                 if (boolValue2 == TRUE){
5614                     
5615                     strValue2.Append(wxT(";"));
5616                     
5617                 } else {
5618                     
5619                     boolValue2 = TRUE;
5620                     
5621                 }
5622                 
5623                 strValue2.Append(wxT("TYPE=") + strValue3);
5624                 
5625                 boolValue = TRUE;
5626                 
5627             }
5628             
5629         }
5630         
5631         intiter = KeyListPref.find(intValue2);
5632         
5633         if (intiter->first == intValue2){
5634             
5635             intValue3 = intiter->second;
5636             
5637             if (intValue3){
5638                 
5639                 if (boolValue2 == TRUE){
5640                     
5641                     strValue2.Append(wxT(";"));
5642                     
5643                 } else {
5644                     
5645                     boolValue2 = TRUE;
5646                     
5647                 }
5648                 
5649                 strValue2.Append(wxT("PREF=") + wxString::Format(wxT("%i"), intValue3));
5650                 
5651                 boolValue = TRUE;
5652                 
5653             }
5654             
5655         }       
5656         
5657         // Process Tokens.
5658         
5659         striter = KeyListTokens.find(intValue2);
5660         
5661         if (striter->first == intValue2){
5662             
5663             strValue3 = striter->second;
5664             
5665             if (!strValue3.IsEmpty()){
5666                 
5667                 strValue3.Trim();
5668                 strValue3.Trim();
5669                 
5670                 if (boolValue2 == TRUE){
5671                     
5672                     strValue2.Append(wxT(";"));
5673                     
5674                 } else {
5675                     
5676                     boolValue2 = TRUE;
5677                     
5678                 }
5679                 
5680                 strValue2.Append(strValue3);
5681                 
5682                 boolValue = TRUE;
5683                 
5684             }
5685             
5686         }       
5687         
5688         // Get the key information.
5689         
5690         std::map<int, wxString>::iterator enciter;
5691         
5692         striter = KeyListDataType.find(intValue2);      
5693         //enciter = KeyListAudioEncType.find(intValue2);
5694         
5695         wxString strValueData;
5696         
5697         strValueData = iter->second;    
5698         //strValueData.insert(0, wxT("data:") + striter->second + wxT(";") + enciter->second + wxT(","));
5699         strValueData.insert(0, wxT("data:") + striter->second + wxT(";base64,"));       
5700         
5701         
5702         // Add to the vCard.
5703         
5704         if (boolValue == TRUE){
5705             
5706             ContactData.AddRaw(wxT("KEY;") + strValue2, strValueData);
5707             
5708         } else {
5709             
5710             ContactData.Add(wxT("KEY"), strValueData, TRUE);
5711             
5712         }
5713         
5714         ResetSaveProcessData();   
5715         
5716     }
5717     
5718     // Vendor specific items.
5719     
5720     ResetSaveProcessData();   
5721     
5722     for (std::map<int,wxString>::iterator iter = VendorList.begin();
5723          iter != VendorList.end(); ++iter){
5724         
5725         intValue2 = iter->first;        
5726         
5727         // Get the IANA PEN number.
5728         
5729         striter = VendorListPEN.find(intValue2);
5730         
5731         if (striter->first == intValue2){
5732             
5733             strValue2 = striter->second;
5734             
5735         }
5736         
5737         // Get the element name.
5738         
5739         striter = VendorListElement.find(intValue2);
5740         
5741         if (striter->first == intValue2){
5742             
5743             strValue3 = striter->second;
5744             
5745         }
5746         
5747         // Get the address.
5748         
5749         striter = VendorList.find(intValue2);
5750         
5751         if (striter->first == intValue2){
5752             
5753             strValue = striter->second;
5754             
5755         }
5756         
5757         // Add to the vCard.
5758         
5759         if (boolValue == TRUE){
5760             
5761             ContactData.AddRaw(wxT("VND-") + strValue2 + wxT("-") + strValue3, strValue);
5762             
5763         } else {
5764             
5765             ContactData.Add(wxT("VND-") + strValue2 + wxT("-") + strValue3, strValue, FALSE);
5766             
5767         }
5768         
5769         ResetSaveProcessData();
5770         
5771     }              
5772     
5773     ResetSaveProcessData();  
5774     
5775     // X-Tokens.
5776     
5777     for (std::map<int,wxString>::iterator iter = XTokenList.begin();
5778          iter != XTokenList.end(); ++iter){
5779         
5780         intValue2 = iter->first;        
5781         
5782         // Get the element name.
5783         
5784         striter = XTokenListTokens.find(intValue2);
5785         
5786         if (striter->first == intValue2){
5787             
5788             strValue2 = striter->second;
5789             
5790         }       
5791         
5792         // Get the address.
5793         
5794         striter = XTokenList.find(intValue2);
5795         
5796         if (striter->first == intValue2){
5797             
5798             strValue = striter->second;
5799             
5800         }
5801         
5802         // Add to the vCard.
5803         
5804         if (boolValue == TRUE){
5805             
5806             ContactData.AddRaw(wxT("X-") + strValue2, strValue);
5807             
5808         } else {
5809             
5810             ContactData.Add(wxT("X-") + strValue2, strValue, FALSE);
5811             
5812         }
5813         
5814         ResetSaveProcessData();
5815         
5816     }
5817     
5818     ResetSaveProcessData();
5819     
5820     if (FullNamesList.size() == 0){
5821         
5822         wxString FullName = cmbDisplayAs->GetValue();
5823         FullNamesList.insert(std::make_pair(0, FullName));
5824         FullNamesListAltID.insert(std::make_pair(0, wxT("")));
5825         FullNamesListPID.insert(std::make_pair(0, wxT("")));
5826         FullNamesListType.insert(std::make_pair(0, wxT("")));
5827         FullNamesListLanguage.insert(std::make_pair(0, wxT("")));
5828         FullNamesListPref.insert(std::make_pair(0, 0));
5829         FullNamesListTokens.insert(std::make_pair(0, wxT("")));
5830         FNFirst = FALSE;
5831         
5832     }
5833     
5834     for (std::map<int, wxString>::iterator iter = FullNamesList.begin();
5835          iter != FullNamesList.end(); ++iter){
5836         
5837         if (FNFirst == TRUE){
5838             
5839             iter->second = cmbDisplayAs->GetValue();
5840             FNFirst = FALSE;
5841             
5842         }
5843         
5844         std::map<int,wxString>::iterator mapS;
5845         
5846         mapS = FullNamesListTokens.find(iter->first);
5847         
5848         ProcessSaveData(wxT("FN"), &strValue2, &boolValue2, &boolValue, 
5849                         &iter, &FullNamesList, &ContactData,
5850                         wxT("ALTID"), &FullNamesListAltID,
5851                         wxT("PID"), &FullNamesListPID,
5852                         wxT("TYPE"), &FullNamesListType,
5853                         wxT("LANGUAGE"), &FullNamesListLanguage,
5854                         wxT("PREF"), &FullNamesListPref,
5855                         wxT(""), &FullNamesListTokens );
5856         
5857         // Get the address.
5858         
5859         ResetSaveProcessData();    
5860         
5861     }
5862     
5863     //ContactData.Add(wxT("FN"), cmbDisplayAs->GetValue(), FALSE);
5864     
5865     // Insert revision (REV) date.
5866     
5867     // Get today's date and time.
5868     
5869     wxDateTime DateTimeNow = wxDateTime::Now();
5870     
5871     wxString DateRev;
5872     
5873     // Set year, month and date.
5874     
5875     int intYear = DateTimeNow.GetYear();
5876     int intMonth = DateTimeNow.GetMonth();
5877     int intDay = DateTimeNow.GetDay();
5878     
5879     DateRev.Append(wxT("0") + wxString::Format(wxT("%i"), intYear));
5880     
5881     if (intMonth < 10){
5882         
5883         DateRev.Append(wxT("0") + wxString::Format(wxT("%i"), intMonth));
5884         
5885     } else {
5886         
5887         DateRev.Append(wxString::Format(wxT("%i"), intMonth));
5888         
5889     }
5890     
5891     if (intDay < 10){
5892         
5893         DateRev.Append(wxT("0") + wxString::Format(wxT("%i"), intDay));
5894         
5895     } else {
5896         
5897         DateRev.Append(wxString::Format(wxT("%i"), intDay));
5898         
5899     }
5900     
5901     //DateRev.Append(wx);
5902     //DateRev.Append(wx);
5903     //DateRev.Append(wx);
5904     DateRev.Append(wxT("T"));
5905     
5906     // Set hour, minute and second.
5907     
5908     int intHour = DateTimeNow.GetHour();
5909     int intMinute = DateTimeNow.GetMinute();
5910     int intSecond = DateTimeNow.GetSecond();
5911     
5912     if (intHour < 10){
5913         
5914         DateRev.Append(wxT("0") + wxString::Format(wxT("%i"), intHour));
5915         
5916     } else {
5917         
5918         DateRev.Append(wxString::Format(wxT("%i"), intHour));    
5919         
5920     }
5921     
5922     if (intMinute < 10){
5923         
5924         DateRev.Append(wxT("0") + wxString::Format(wxT("%i"), intMinute));
5925         
5926     } else {
5927         
5928         DateRev.Append(wxString::Format(wxT("%i"), intMinute));
5929         
5930     }
5931     
5932     if (intSecond < 10){
5933         
5934         DateRev.Append(wxT("0") + wxString::Format(wxT("%i"), intSecond));
5935         
5936     } else {
5937         
5938         DateRev.Append(wxString::Format(wxT("%i"), intSecond));
5939         
5940     }
5941     
5942     //   DateRev.Append(wx);
5943     //   DateRev.Append(wx);
5944     //   DateRev.Append(wxString DateTimeNow->);
5945     DateRev.Append(wxT("Z"));    
5946     
5947     ContactData.Add(wxT("UID"), UIDToken, FALSE);
5948     
5949     // End the vCard File.
5950     
5951     ContactData.Add(wxT("END"), wxT("VCARD"), FALSE);
5952     
5953     FMTimer.Stop();
5954     ContactData.WriteFile(FilenameFinal);
5955     
5956     vCard34Conv ConvFileFun;
5957     
5958     wxString wxSData;
5959     
5960     ConvFileFun.ConvertToV3(FilenameFinal, &wxSData);
5961     
5962     wxString AccountDirPrefix;
5963     wxString AccountDir;
5964     wxString PrefDir;
5965     
5966 #if defined(__HAIKU__)
5967     
5968     //preffilename = wxT("noo");
5970 #elif defined(__APPLE__)
5971     
5972     PrefDir = GetUserPrefDir();
5973     
5974     wxStringTokenizer wSTFilename(wxSContactFilename, wxT("/"));
5975     
5976 #elif defined(__WIN32__)
5977     
5978     PrefDir = GetUserPrefDir();
5979     
5980     wxStringTokenizer wSTFilename(wxSContactFilename, wxT("\\"));
5981     
5982 #else
5983     
5984     PrefDir = GetUserPrefDir();
5985     
5986     wxStringTokenizer wSTFilename(wxSContactFilename, wxT("/"));
5987     
5988 #endif
5989     
5990     XABPreferences PrefData(PrefDir);
5991     
5992     wxString AccountType;
5993     
5994     for (int i = 0; i < PrefData.accounts.GetCount(); i++){
5995         
5996         AccountDir = PrefData.accounts.GetAccountDirectory(i) + wxT(".carddav");
5997         
5998         if (AccountDir == wxSContactAccount){
5999             
6000             AccountDirPrefix = PrefData.accounts.GetAccountDirPrefix(i);
6001             AccountDirPrefix.Trim();
6002             AccountType = PrefData.accounts.GetAccountType(i);
6003             break;
6004             
6005         }
6006         
6007     }
6008     
6009     wxString wxSplitFilename;
6010     wxString wxSDataURL;
6011     
6012     while(wSTFilename.HasMoreTokens()){
6013         
6014         wxSplitFilename = wSTFilename.GetNextToken();
6015         
6016     }
6017     
6018     wxSDataURL = wxSplitFilename;
6019     //wxSDataURL.Append(wxSplitFilename);
6020     
6021     // Find out if the filename exists in the table.
6022     
6023     if (AccountType == wxT("CardDAV") || AccountType == wxT("carddav")){
6024         
6025         wxString ETagResult;
6026         wxString ETagOriginal;
6027         
6028         ETagDB *ETagDBPtr = NULL;
6029         
6030         ETagDBPtr = ETagTmrPtr->GetPointer(wxSContactAccount);
6031         
6032         wxString wxSETag = ETagDBPtr->GetETag(wxSplitFilename);
6033         wxString wxSETagOrig = ETagDBPtr->GetETagOriginal(wxSplitFilename);
6034         
6035         if (wxSETagOrig.IsEmpty()){
6036             
6037             // Generate the ETag.
6038             
6039             wxSETagOrig = wxString::Format(wxT("%X%X%X%X"), rand() % 1024, rand() % 1024, rand() % 1024, rand() % 1024);
6040             
6041         }
6042         
6043         if (wxSETag.IsEmpty()){
6044             
6045             // Update empty ETag.
6046             
6047             wxSETag = wxSETagOrig;
6048             ETagDBPtr->UpdateETag(wxSplitFilename, wxSETag, wxSETagOrig);
6049             
6050         }
6051         else {
6052             
6053             // Don't change original ETag.
6054             
6055             wxSETag = wxString::Format(wxT("%X%X%X%X"), rand() % 1024, rand() % 1024, rand() % 1024, rand() % 1024);
6056             ETagDBPtr->UpdateETag(wxSplitFilename, wxSETag);
6057             
6058         }
6059         
6060         if (EditMode == FALSE){
6061             
6062             ActMgrPtr->AddTask(0, cmbDisplayAs->GetValue(), wxSContactAccount, wxSDataURL, wxSplitFilename, FilenameFinal, wxSData);
6063             EditMode = TRUE;
6064             FMTimer.SetFilename(FilenameFinal);
6065             FMTimer.UpdateTimestamp();
6066             FMTimer.Start(10000, FALSE);
6067             
6068         }
6069         else {
6070             
6071             ActMgrPtr->AddTask(1, cmbDisplayAs->GetValue(), wxSContactAccount, wxSDataURL, wxSplitFilename, FilenameFinal, wxSData);
6072             FMTimer.UpdateTimestamp();
6073             FMTimer.Start(10000, FALSE);
6074             
6075         }
6076         
6077     }
6078     
6079     // Send a notification to update the main window
6080     // with the new details.
6081     
6082     UCNotif *ucd;
6083     ucd = new UCNotif;
6084     
6085     // TODO: Workout nickname settings by priority and
6086     // type.
6087     
6088     ucd->ContactAccount = wxSContactAccount;
6089     ucd->ContactFilename = FilenameFinal;
6090     ucd->ContactName = cmbDisplayAs->GetValue();
6091     ucd->ContactNameArray = ContactData.GetName();
6092     
6093     for (std::map<int,wxString>::iterator gniter = GeneralNicknamesList.begin();
6094          gniter != GeneralNicknamesList.end(); gniter++){
6095         
6096         ucd->ContactNickname = gniter->second;
6097         break;
6098         
6099     }
6100     
6101     wxCommandEvent event2(CE_UPDATECONTACTLIST);
6102     event2.SetClientData(ucd);
6103     wxPostEvent(MainPtr, event2);
6104     
6107 void frmContactEditor::SaveCloseContact( wxCommandEvent& event )
6109     
6110     // Save the updated contact data and close the form.
6111     
6114 void frmContactEditor::CloseContact( wxCommandEvent& event )
6116     
6117     Close();
6118     
6121 void frmContactEditor::CloseWindow( wxCloseEvent& event )
6123     
6124     // TODO: Check if any changes have been made,
6125     // ask if the changes should be made, process
6126     // action based on question and then close.
6127     
6128     WindowData *WData = new WindowData;
6129     
6130     WData->DataType = 1;
6131     WData->WindowPointer = this;
6132     WData->WindowID = ContactEditorUID;
6133     
6134     wxCommandEvent delevent(WINDOW_CLOSE);
6135     delevent.SetClientData(WData);
6136     wxPostEvent(GetParent(), delevent);
6137     
6138     Destroy();
6139     
6143 void frmContactEditor::CutText( wxCommandEvent& event )
6145     // This function left empty for future implementation.
6148 void frmContactEditor::CopyText( wxCommandEvent& event )
6150     // This function left empty for future implementation.
6153 void frmContactEditor::PasteText( wxCommandEvent& event )
6155     // This function left empty for future implementation.
6158 void frmContactEditor::SetupContact( wxString AccountName )
6160     
6161     wxSContactAccount = AccountName;
6162     
6165 bool frmContactEditor::ProcessEvent(wxEvent& event)
6167     
6168     // This section has been taken from the wxWidgets sample code of richtext.cpp
6169     // so that simple Cut/Copy/Paste code can be made.
6170     
6171     // As this code comes from the samples of the wxWidgets library, this is licenced
6172     // under the wxWindows Library Licence and is compatable with the LGPL and is
6173     // compatable with Xestia Address Book's licence.
6174     
6175     if (event.IsCommandEvent() && !event.IsKindOf(CLASSINFO(wxChildFocusEvent)))
6176     {
6177         // Problem: we can get infinite recursion because the events
6178         // climb back up to this frame, and repeat.
6179         // Assume that command events don't cause another command event
6180         // to be called, so we can rely on inCommand not being overwritten
6181         
6182         static int s_eventType = 0;
6183         static wxWindowID s_id = 0;
6184         
6185         if (s_id != event.GetId() && s_eventType != event.GetEventType())
6186         {
6187             s_eventType = event.GetEventType();
6188             s_id = event.GetId();
6189             
6190             wxWindow* focusWin = wxFindFocusDescendant(this);
6191             if (focusWin && focusWin->GetEventHandler()->ProcessEvent(event))
6192             {
6193                 //s_command = NULL;
6194                 s_eventType = 0;
6195                 s_id = 0;
6196                 return true;
6197             }
6198             s_eventType = 0;
6199             s_id = 0;
6200         }
6201         else
6202         {
6203             return false;
6204         }
6205     }
6206     
6207     return wxFrame::ProcessEvent(event);
6210 void frmContactEditor::SetupHeaders()
6212     
6213     /* Items for the General Tab */
6214     
6215     SetupColumn(CE_NICKNAME, lboNicknames);
6216     SetupColumn(CE_ADDRESS, lboAddresses);
6217     SetupColumn(CE_EMAIL, lboEmails);
6218     SetupColumn(CE_IM, lboIM);
6219     SetupColumn(CE_TELEPHONE, lboTelephone);
6220     SetupColumn(CE_LANG, lboLanguages);
6221     SetupColumn(CE_TZ, lboTimezones);
6222     SetupColumn(CE_GEOPOSITION, lboGeoposition);
6223     SetupColumn(CE_RELATED, lboRelated);
6224     SetupColumn(CE_WEBSITE, lboWebsites);
6225     SetupColumn(CE_TITLE, lboTitles);
6226     SetupColumn(CE_ROLE, lboRoles);
6227     SetupColumn(CE_ORG, lboOrganisations);
6228     SetupColumn(CE_NOTE, lboNotes);
6229     
6230     /* Items for the Home Tab */
6231     
6232     SetupColumn(CE_NICKNAME, lboHomeNicknames);
6233     SetupColumn(CE_ADDRESS, lboHomeAddresses);
6234     SetupColumn(CE_EMAIL, lboHomeEmails);
6235     SetupColumn(CE_IM, lboHomeIM);
6236     SetupColumn(CE_TELEPHONE, lboHomeTelephone);        
6237     SetupColumn(CE_LANG, lboHomeLanguages);
6238     SetupColumn(CE_TZ, lboHomeTimezones);
6239     SetupColumn(CE_GEOPOSITION, lboHomeGeoposition);
6240     SetupColumn(CE_WEBSITE, lboHomeWebsites);
6241     SetupColumn(CE_TITLE, lboHomeTitles);
6242     SetupColumn(CE_ROLE, lboHomeRoles);
6243     SetupColumn(CE_ORG, lboHomeOrganisations);
6244     SetupColumn(CE_NOTE, lboHomeNotes);
6245     
6246     /* Items for the Business Tab */
6247     
6248     SetupColumn(CE_NICKNAME, lboBusinessNicknames);
6249     SetupColumn(CE_ADDRESS, lboBusinessAddresses);
6250     SetupColumn(CE_EMAIL, lboBusinessEmail);
6251     SetupColumn(CE_IM, lboBusinessIM);
6252     SetupColumn(CE_TELEPHONE, lboBusinessTelephone);    
6253     SetupColumn(CE_LANG, lboBusinessLanguages);
6254     SetupColumn(CE_TZ, lboBusinessTimezones);
6255     SetupColumn(CE_GEOPOSITION, lboBusinessGeoposition);
6256     SetupColumn(CE_WEBSITE, lboBusinessWebsites);
6257     SetupColumn(CE_TITLE, lboBusinessTitles);
6258     SetupColumn(CE_ROLE, lboBusinessRoles);
6259     SetupColumn(CE_ORG, lboBusinessOrganisations);
6260     SetupColumn(CE_NOTE, lboBusinessNotes);     
6261     
6262     /* Items for the Categories Tab */
6263     
6264     SetupColumn(CE_CATEGORIES, lboCategories);
6265     
6266     /* Items for the Groups Tab */
6267     
6268     SetupColumn(CE_GROUPS, lboGroups);
6269     
6270     /* Items for the Pictures and Logos Tab */
6271     
6272     SetupColumn(CE_PICTURES, lboPictures);
6273     SetupColumn(CE_PICTURES, lboLogos); 
6274     
6275     /* Items for the Sounds Tab */
6276     
6277     SetupColumn(CE_SOUNDS, lboSounds);
6278     
6279     /* Items for the Calendaring Tab */
6280     
6281     SetupColumn(CE_CALENDAR, lboCalendarAddresses);
6282     SetupColumn(CE_CALENDAR, lboCalendarRequestAddress);
6283     SetupColumn(CE_CALENDAR, lboFreeBusyAddresses);     
6284     
6285     /* Items for the Security Tab */
6286     
6287     SetupColumn(CE_KEY, lboKeys);
6288     
6289     /* Items for the Other Tab */
6290     
6291     SetupColumn(CE_TOKEN, lboVendorNamespace);
6292     SetupColumn(CE_TOKEN, lboXToken);
6293     
6296 void frmContactEditor::SetupColumn(wxString ColumnType, wxListCtrl *ListCtrl)
6298     
6299     wxListItem coldata; 
6300     
6301     if (ColumnType == CE_NICKNAME){
6302         
6303         coldata.SetId(0);
6304         coldata.SetText(_("Nickname"));
6305         coldata.SetWidth(128);
6306         ListCtrl->InsertColumn(0, coldata);
6307         
6308         coldata.SetId(1);
6309         coldata.SetText(_("Pri."));
6310         coldata.SetWidth(32);
6311         ListCtrl->InsertColumn(1, coldata);             
6312         
6313     } else if (ColumnType == CE_ADDRESS){
6314         
6315         coldata.SetId(0);
6316         coldata.SetText(_("Address"));
6317         coldata.SetWidth(128);
6318         ListCtrl->InsertColumn(0, coldata);
6319         
6320         coldata.SetId(1);
6321         coldata.SetText(_("Town"));
6322         coldata.SetWidth(64);
6323         ListCtrl->InsertColumn(1, coldata);             
6324         
6325         coldata.SetId(2);
6326         coldata.SetText(_("County"));
6327         coldata.SetWidth(64);
6328         ListCtrl->InsertColumn(2, coldata);
6329         
6330         coldata.SetId(3);
6331         coldata.SetText(_("Post code"));
6332         coldata.SetWidth(48);
6333         ListCtrl->InsertColumn(3, coldata);
6334         
6335         coldata.SetId(4);
6336         coldata.SetText(_("Pri."));
6337         coldata.SetWidth(32);
6338         ListCtrl->InsertColumn(4, coldata);             
6339         
6340     } else if (ColumnType == CE_EMAIL){
6341         
6342         coldata.SetId(0);
6343         coldata.SetText(_("Email address"));
6344         coldata.SetWidth(304);
6345         ListCtrl->InsertColumn(0, coldata);
6346         
6347         coldata.SetId(1);
6348         coldata.SetText(_("Pri."));
6349         coldata.SetWidth(32);
6350         ListCtrl->InsertColumn(1, coldata);
6351         
6352     } else if (ColumnType == CE_IM){
6353         
6354         coldata.SetId(0);
6355         coldata.SetText(_("Type"));
6356         coldata.SetWidth(64);
6357         ListCtrl->InsertColumn(0, coldata);
6358         
6359         coldata.SetId(1);
6360         coldata.SetText(_("Address"));
6361         coldata.SetWidth(240);
6362         ListCtrl->InsertColumn(1, coldata);
6363         
6364         coldata.SetId(2);
6365         coldata.SetText(_("Pri."));
6366         coldata.SetWidth(32);
6367         ListCtrl->InsertColumn(2, coldata);             
6368         
6369     } else if (ColumnType == CE_TELEPHONE){
6370         
6371         coldata.SetId(0);
6372         coldata.SetText(_("Telephone number"));
6373         coldata.SetWidth(128);
6374         ListCtrl->InsertColumn(0, coldata);
6375         
6376         coldata.SetId(1);
6377         coldata.SetText(_("Type"));
6378         coldata.SetWidth(64);
6379         ListCtrl->InsertColumn(1, coldata);             
6380         
6381         coldata.SetId(2);
6382         coldata.SetText(_("Pri."));
6383         coldata.SetWidth(32);
6384         ListCtrl->InsertColumn(2, coldata);             
6385         
6386     } else if (ColumnType == CE_LANG){
6387         
6388         coldata.SetId(0);
6389         coldata.SetText(_("Language"));
6390         coldata.SetWidth(128);
6391         ListCtrl->InsertColumn(0, coldata);
6392         
6393         coldata.SetId(1);
6394         coldata.SetText(_("Pri."));
6395         coldata.SetWidth(32);
6396         ListCtrl->InsertColumn(1, coldata);             
6397         
6398     } else if (ColumnType == CE_TZ){
6399         
6400         coldata.SetId(0);
6401         coldata.SetText(_("Timezone"));
6402         coldata.SetWidth(192);
6403         ListCtrl->InsertColumn(0, coldata);
6404         
6405         coldata.SetId(1);
6406         coldata.SetText(_("Pri."));
6407         coldata.SetWidth(32);
6408         ListCtrl->InsertColumn(1, coldata);             
6409         
6410     } else if (ColumnType == CE_RELATED){
6411         
6412         coldata.SetId(0);
6413         coldata.SetText(_("Type"));
6414         coldata.SetWidth(64);
6415         ListCtrl->InsertColumn(0, coldata);
6416         
6417         coldata.SetId(1);
6418         coldata.SetText(_("Name/Description"));
6419         coldata.SetWidth(192);
6420         ListCtrl->InsertColumn(1, coldata);
6421         
6422         coldata.SetId(2);
6423         coldata.SetText(_("Pri."));
6424         coldata.SetWidth(32);
6425         ListCtrl->InsertColumn(2, coldata);
6426         
6427     } else if (ColumnType == CE_WEBSITE){
6428         
6429         coldata.SetId(0);
6430         coldata.SetText(_("Website"));
6431         coldata.SetWidth(288);
6432         ListCtrl->InsertColumn(0, coldata);
6433         
6434         coldata.SetId(1);
6435         coldata.SetText(_("Pri."));
6436         coldata.SetWidth(32);
6437         ListCtrl->InsertColumn(1, coldata);
6438         
6439     } else if (ColumnType == CE_TITLE){
6440         
6441         coldata.SetId(0);
6442         coldata.SetText(_("Title"));
6443         coldata.SetWidth(288);
6444         ListCtrl->InsertColumn(0, coldata);
6445         
6446         coldata.SetId(1);
6447         coldata.SetText(_("Pri."));
6448         coldata.SetWidth(32);
6449         ListCtrl->InsertColumn(1, coldata);
6450         
6451     } else if (ColumnType == CE_ROLE){
6452         
6453         coldata.SetId(0);
6454         coldata.SetText(_("Role"));
6455         coldata.SetWidth(288);
6456         ListCtrl->InsertColumn(0, coldata);
6457         
6458         coldata.SetId(1);
6459         coldata.SetText(_("Pri."));
6460         coldata.SetWidth(32);
6461         ListCtrl->InsertColumn(1, coldata);
6462         
6463     } else if (ColumnType == CE_ORG){
6464         
6465         coldata.SetId(0);
6466         coldata.SetText(_("Organisation"));
6467         coldata.SetWidth(288);
6468         ListCtrl->InsertColumn(0, coldata);
6469         
6470         coldata.SetId(1);
6471         coldata.SetText(_("Pri."));
6472         coldata.SetWidth(32);
6473         ListCtrl->InsertColumn(1, coldata);
6474         
6475     } else if (ColumnType == CE_NOTE){
6476         
6477         coldata.SetId(0);
6478         coldata.SetText(_("Notes"));
6479         coldata.SetWidth(288);
6480         ListCtrl->InsertColumn(0, coldata);
6481         
6482         coldata.SetId(1);
6483         coldata.SetText(_("Pri."));
6484         coldata.SetWidth(32);
6485         ListCtrl->InsertColumn(1, coldata);     
6486         
6487     } else if (ColumnType == CE_CATEGORIES){
6488         
6489         coldata.SetId(0);
6490         coldata.SetText(_("Category"));
6491         coldata.SetWidth(320);
6492         ListCtrl->InsertColumn(0, coldata);
6493         
6494         coldata.SetId(1);
6495         coldata.SetText(_("Pri."));
6496         coldata.SetWidth(32);
6497         ListCtrl->InsertColumn(1, coldata);
6498         
6499     } else if (ColumnType == CE_GROUPS){
6500         
6501         coldata.SetId(0);
6502         coldata.SetText(_("Member"));
6503         coldata.SetWidth(320);
6504         ListCtrl->InsertColumn(0, coldata);
6505         
6506     } else if (ColumnType == CE_GEOPOSITION){
6507         
6508         coldata.SetId(0);
6509         coldata.SetText(_("Geoposition"));
6510         coldata.SetWidth(320);
6511         ListCtrl->InsertColumn(0, coldata);
6512         
6513         coldata.SetId(1);
6514         coldata.SetText(_("Pri."));
6515         coldata.SetWidth(32);
6516         ListCtrl->InsertColumn(1, coldata);
6517         
6518     } else if (ColumnType == CE_PICTURES){
6519         
6520         coldata.SetId(0);
6521         coldata.SetText(_("Pictures"));
6522         coldata.SetWidth(128);
6523         ListCtrl->InsertColumn(0, coldata);
6524         
6525         coldata.SetId(1);
6526         coldata.SetText(_("Type"));
6527         coldata.SetWidth(64);
6528         ListCtrl->InsertColumn(1, coldata);             
6529         
6530         coldata.SetId(2);
6531         coldata.SetText(_("Pri."));
6532         coldata.SetWidth(32);
6533         ListCtrl->InsertColumn(2, coldata);
6534         
6535     } else if (ColumnType == CE_SOUNDS){
6536         
6537         coldata.SetId(0);
6538         coldata.SetText(_("Sounds"));
6539         coldata.SetWidth(128);
6540         ListCtrl->InsertColumn(0, coldata);
6541         
6542         coldata.SetId(1);
6543         coldata.SetText(_("Type"));
6544         coldata.SetWidth(64);
6545         ListCtrl->InsertColumn(1, coldata);             
6546         
6547         coldata.SetId(2);
6548         coldata.SetText(_("Pri."));
6549         coldata.SetWidth(32);
6550         ListCtrl->InsertColumn(2, coldata);
6551         
6552     } else if (ColumnType == CE_CALENDAR){
6553         
6554         coldata.SetId(0);
6555         coldata.SetText(_("Calendar Address"));
6556         coldata.SetWidth(224);
6557         ListCtrl->InsertColumn(0, coldata);
6558         
6559         coldata.SetId(1);
6560         coldata.SetText(_("Type"));
6561         coldata.SetWidth(64);
6562         ListCtrl->InsertColumn(1, coldata);             
6563         
6564         coldata.SetId(2);
6565         coldata.SetText(_("Pri."));
6566         coldata.SetWidth(32);
6567         ListCtrl->InsertColumn(2, coldata);
6568         
6569     } else if (ColumnType == CE_KEY){
6570         
6571         coldata.SetId(0);
6572         coldata.SetText(_("Key information"));
6573         coldata.SetWidth(224);
6574         ListCtrl->InsertColumn(0, coldata);
6575         
6576         coldata.SetId(1);
6577         coldata.SetText(_("Type"));
6578         coldata.SetWidth(64);
6579         ListCtrl->InsertColumn(1, coldata);             
6580         
6581         coldata.SetId(2);
6582         coldata.SetText(_("Pri."));
6583         coldata.SetWidth(32);
6584         ListCtrl->InsertColumn(2, coldata);
6585         
6586     } else if (ColumnType == CE_TOKEN){
6587         
6588         coldata.SetId(0);
6589         coldata.SetText(_("Token"));
6590         coldata.SetWidth(320);
6591         ListCtrl->InsertColumn(0, coldata);
6592         
6593     }
6594     
6597 int frmContactEditor::GetLastInt(std::map<int, wxString> *MapData){
6598     
6599     /*
6600      int intResult = 0;
6601      
6602      std::map<int,wxString>::iterator iwxsit;
6603      
6604      for( iwxsit=(*MapData).begin(); iwxsit != (*MapData).end(); iwxsit++){
6605      intResult = (*iwxsit).first;
6606      }
6607      
6608      return intResult;
6609      */
6610     
6611     intValueSeek++;
6612     return intValueSeek;
6613     
6616 int frmContactEditor::GetLastInt(std::map<int, std::string> *MapData){
6617     
6618     /* int intResult = 0;
6619      
6620      std::map<int,std::string>::iterator iwxsit;
6621      
6622      for( iwxsit=(*MapData).begin(); iwxsit != (*MapData).end(); iwxsit++){
6623      intResult = (*iwxsit).first;
6624      }*/
6625     
6626     intValueSeek++;
6627     return intValueSeek;
6628     
6631 bool frmContactEditor::GetSelectedItem(wxListCtrl *ListCtrlPtr, 
6632                                        long *longSelected,
6633                                        int *intSelectedData){
6634     
6635     *longSelected = -1;
6636     *intSelectedData = 0;
6637     
6638     *longSelected = ListCtrlPtr->GetNextItem(*longSelected, 
6639                                              wxLIST_NEXT_ALL,
6640                                              wxLIST_STATE_SELECTED);
6641     
6642     *intSelectedData = (int)ListCtrlPtr->GetItemData(*longSelected);
6643     
6644     if (*longSelected == -1){
6645         return FALSE;
6646     }
6647     else {
6648         return TRUE;
6649     }
6650     
6653 void frmContactEditor::DeleteMapDataProcess(int IndexNum, std::map<int, std::string>* MapData){
6654     MapData->erase(IndexNum);
6657 void frmContactEditor::DeleteMapDataProcess(int IndexNum, std::map<int, wxString>* MapData){
6658     MapData->erase(IndexNum);
6661 void frmContactEditor::DeleteMapDataProcess(int IndexNum, std::map<int, int>* MapData){
6662     MapData->erase(IndexNum);
6665 void frmContactEditor::DeleteMapDataProcess(int IndexNum, std::map<int, bool>* MapData){
6666     MapData->erase(IndexNum);
6669 void frmContactEditor::ProcessSaveDataProc( wxString PropName,
6670                                            std::map<int,int>* MapData){
6671     
6672     int intIterVal = (*iterDataPtr)->first;
6673     
6674     std::map<int,int>::iterator intIter;
6675     
6676     intIter = MapData->find(intIterVal);
6677     
6678     int intPropValue; 
6679     
6680     if (intIter->first == intIterVal){
6681         
6682         intPropValue = intIter->second;
6683         
6684         if (intPropValue){
6685             
6686             if (*boolAdditionalPtr == TRUE){
6687                 
6688                 strPropertyPtr->Append(wxT(";"));
6689                 
6690             } else {
6691                 
6692                 *boolAdditionalPtr = TRUE;
6693                 
6694             }
6695             
6696             strPropertyPtr->Append(PropName + wxT("=") + wxString::Format(wxT("%i"), intPropValue));
6697             
6698             *boolExtraPtr = TRUE;
6699             
6700         }
6701         
6702     }
6703     
6706 void frmContactEditor::ProcessSaveDataProc( wxString PropName,
6707                                            std::map<int,wxString>* MapData){
6708     
6709     int intIterVal;
6710     
6711     intIterVal = (*iterDataPtr)->first;
6712     
6713     std::map<int,wxString>::iterator strIter;
6714     
6715     strIter = MapData->find(intIterVal);
6716     
6717     if (strIter == MapData->end()){
6718         
6719         return;
6720         
6721     }
6722     
6723     wxString strPropValue;
6724     
6725     if (strIter->first == intIterVal){
6726         
6727         strPropValue = strIter->second;
6728         
6729         if (!strPropValue.IsEmpty() && PropName.IsEmpty()){
6730             
6731             strPropValue.Trim();
6732             strPropValue.Trim();
6733             
6734             if (*boolAdditionalPtr == TRUE){
6735                 
6736                 strPropertyPtr->Append(wxT(";"));
6737                 
6738             } else {
6739                 
6740                 *boolAdditionalPtr = TRUE;
6741                 
6742             }
6743             
6744             strPropertyPtr->Append(strPropValue);       
6745             
6746             *boolExtraPtr = TRUE;
6747             
6748             return;
6749             
6750         }
6751         
6752         if (!strPropValue.IsEmpty()){
6753             
6754             strPropValue.Trim();
6755             strPropValue.Trim();
6756             
6757             if (*boolAdditionalPtr == TRUE){
6758                 
6759                 strPropertyPtr->Append(wxT(";"));
6760                 
6761             } else {
6762                 
6763                 *boolAdditionalPtr = TRUE;
6764                 
6765             }
6766             
6767             // Look for semi-colon in property name and if there is then
6768             // quote the value.
6769             
6770             if (PropName != wxT("TYPE")){
6771                 
6772                 EscapeString(&strPropValue, FALSE);     
6773                 
6774             }
6775             
6776             if (strPropValue.find(wxT(";")) == wxNOT_FOUND && strPropValue.find(wxT(":")) == wxNOT_FOUND &&
6777                 strPropValue.find(wxT(",")) == wxNOT_FOUND){
6778                 
6779                 strPropertyPtr->Append(PropName + wxT("=") + strPropValue);
6780                 
6781             } else {
6782                 
6783                 strPropertyPtr->Append(PropName + wxT("=\"") + strPropValue + wxT("\""));
6784                 
6785             }
6786             
6787             *boolExtraPtr = TRUE;
6788             
6789         }
6790         
6791     }
6792     
6795 void frmContactEditor::ProcessSaveDataStrProc( wxString PropName,
6796                                               std::map<int,std::string>* MapData){
6797     
6798     int intIterVal = (*iterDataStringPtr)->first;
6799     
6800     //std::map<int,wxString>::iterator strIter;
6801     
6802     std::map<int,std::string>::iterator stdstrIter;
6803     
6804     stdstrIter = MapData->find(intIterVal);     
6805     
6806     if (stdstrIter->first == intIterVal){
6807         
6808         wxString strPropValue(stdstrIter->second.c_str(), wxConvUTF8);
6809         
6810         if (!strPropValue.IsEmpty() && PropName.IsEmpty()){
6811             
6812             strPropValue.Trim();
6813             strPropValue.Trim();
6814             
6815             if (*boolAdditionalPtr == TRUE){
6816                 
6817                 strPropertyPtr->Append(wxT(";"));
6818                 
6819             } else {
6820                 
6821                 *boolAdditionalPtr = TRUE;
6822                 
6823             }
6824             
6825             strPropertyPtr->Append(strPropValue);
6826             
6827             *boolExtraPtr = TRUE;
6828             
6829             return;
6830             
6831         }
6832         
6833         if (!strPropValue.IsEmpty()){
6834             
6835             strPropValue.Trim();
6836             strPropValue.Trim();
6837             
6838             if (*boolAdditionalPtr == TRUE){
6839                 
6840                 strPropertyPtr->Append(wxT(";"));
6841                 
6842             } else {
6843                 
6844                 *boolAdditionalPtr = TRUE;
6845                 
6846             }
6847             
6848             // Look for semi-colon in property name and if there is then
6849             // quote the value.
6850             
6851             if (PropName != wxT("TYPE")){
6852                 
6853                 EscapeString(&strPropValue, FALSE);
6854                 
6855             }
6856             
6857             if (strPropValue.find(wxT(";")) == wxNOT_FOUND && strPropValue.find(wxT(":")) == wxNOT_FOUND &&
6858                 strPropValue.find(wxT(",")) == wxNOT_FOUND){
6859                 
6860                 strPropertyPtr->Append(PropName + wxT("=") + strPropValue);
6861                 
6862             } else {
6863                 
6864                 strPropertyPtr->Append(PropName + wxT("=\"") + strPropValue + wxT("\""));
6865                 
6866             }
6867             
6868             *boolExtraPtr = TRUE;
6869             
6870         }
6871         
6872     }
6873     
6877 void frmContactEditor::ProcessSaveDataStrProc( wxString PropName,
6878                                               std::map<int,int>* MapData){
6879     
6880     int intIterVal = (*iterDataStringPtr)->first;
6881     
6882     std::map<int,int>::iterator intIter;
6883     
6884     intIter = MapData->find(intIterVal);
6885     
6886     int intPropValue; 
6887     
6888     if (intIter->first == intIterVal){
6889         
6890         intPropValue = intIter->second;
6891         
6892         if (intPropValue){
6893             
6894             if (*boolAdditionalPtr == TRUE){
6895                 
6896                 strPropertyPtr->Append(wxT(";"));
6897                 
6898             } else {
6899                 
6900                 *boolAdditionalPtr = TRUE;
6901                 
6902             }
6903             
6904             strPropertyPtr->Append(PropName + wxT("=") + wxString::Format(wxT("%i"), intPropValue));
6905             
6906             *boolExtraPtr = TRUE;
6907             
6908         }
6909         
6910     }
6911     
6914 void frmContactEditor::ProcessSaveDataStrProc( wxString PropName,
6915                                               std::map<int,wxString>* MapData){
6916     
6917     int intIterVal;
6918     
6919     intIterVal = (*iterDataStringPtr)->first;
6920     
6921     std::map<int,wxString>::iterator strIter;
6922     
6923     strIter = MapData->find(intIterVal);
6924     
6925     wxString strPropValue;
6926     
6927     if (strIter->first == intIterVal){
6928         
6929         strPropValue = strIter->second;
6930         
6931         if (!strPropValue.IsEmpty() && PropName.IsEmpty()){
6932             
6933             strPropValue.Trim();
6934             strPropValue.Trim();
6935             
6936             if (*boolAdditionalPtr == TRUE){
6937                 
6938                 strPropertyPtr->Append(wxT(";"));
6939                 
6940             } else {
6941                 
6942                 *boolAdditionalPtr = TRUE;
6943                 
6944             }
6945             
6946             strPropertyPtr->Append(strPropValue);       
6947             
6948             *boolExtraPtr = TRUE;
6949             
6950             return;
6951             
6952         }
6953         
6954         if (!strPropValue.IsEmpty()){
6955             
6956             strPropValue.Trim();
6957             strPropValue.Trim();
6958             
6959             if (*boolAdditionalPtr == TRUE){
6960                 
6961                 strPropertyPtr->Append(wxT(";"));
6962                 
6963             } else {
6964                 
6965                 *boolAdditionalPtr = TRUE;
6966                 
6967             }
6968             
6969             // Look for semi-colon in property name and if there is then
6970             // quote the value.
6971             
6972             if (PropName != wxT("TYPE")){
6973                 
6974                 EscapeString(&strPropValue, FALSE);
6975                 
6976             }
6977             
6978             if (strPropValue.find(wxT(";")) == wxNOT_FOUND && strPropValue.find(wxT(":")) == wxNOT_FOUND &&
6979                 strPropValue.find(wxT(",")) == wxNOT_FOUND){
6980                 
6981                 strPropertyPtr->Append(PropName + wxT("=") + strPropValue);
6982                 
6983             } else {
6984                 
6985                 strPropertyPtr->Append(PropName + wxT("=\"") + strPropValue + wxT("\""));
6986                 
6987             }
6988             
6989             *boolExtraPtr = TRUE;
6990             
6991         }
6992         
6993     }
6994     
6997 void frmContactEditor::ProcessCaptureStringsProc(wxString *strCapture){
6998     
6999     CaptureString(strCapture, FALSE);
7000     
7003 void frmContactEditor::ResetSaveProcessData(){
7004     
7005     strValue.Clear();
7006     strValue2.Clear();
7007     strValue3.Clear();    
7008     
7009     boolValue = FALSE;
7010     boolValue2 = FALSE;    
7011     intValue2 = 0;
7012     intValue  = 0;
7013     
7016 void frmContactEditor::SetupPointers(frmActivityMgr *ActMgr, wxETagProcessTimer *ETagProc,
7017                                      frmMain *MainPtrInc){
7018     
7019     ActMgrPtr = ActMgr;
7020     ETagTmrPtr = ETagProc;
7021     MainPtr = MainPtrInc;
7022     
7025 void frmContactEditor::ClearContact(){
7026     
7027     // Clear out the GUI and values.
7028     
7029     // Clear GUI.
7030     
7031     txtTitle->Clear();
7032     txtForename->Clear();
7033     txtSurname->Clear();
7034     txtOtherNames->Clear();
7035     txtSuffix->Clear();
7036     cmbDisplayAs->Clear();
7037     cmbDisplayAs->SetValue(wxT(""));
7038     wxDateTime EmptyDate;
7039     wxBitmap EmptyBitmap;
7040     dapAnniversary->SetValue(EmptyDate);
7041     dapBirthday->SetValue(EmptyDate);
7042     txtBirthday->Clear();
7043     txtAnniversary->Clear();
7044     cmbGender->Select(0);
7045     txtGenderDescription->Clear();
7046     
7047     lboNicknames->DeleteAllItems();
7048     lboHomeNicknames->DeleteAllItems();
7049     lboBusinessNicknames->DeleteAllItems();
7050     
7051     lboAddresses->DeleteAllItems();
7052     lboHomeAddresses->DeleteAllItems();
7053     lboBusinessAddresses->DeleteAllItems();
7054     
7055     lboEmails->DeleteAllItems();
7056     lboHomeEmails->DeleteAllItems();
7057     lboBusinessEmail->DeleteAllItems();
7058     
7059     lboIM->DeleteAllItems();
7060     lboHomeIM->DeleteAllItems();
7061     lboBusinessIM->DeleteAllItems();
7062     
7063     lboTelephone->DeleteAllItems();
7064     lboHomeTelephone->DeleteAllItems();
7065     lboBusinessTelephone->DeleteAllItems();
7066     
7067     lboLanguages->DeleteAllItems();
7068     lboHomeLanguages->DeleteAllItems();
7069     lboBusinessLanguages->DeleteAllItems();
7070     
7071     lboTimezones->DeleteAllItems();
7072     lboHomeTimezones->DeleteAllItems();
7073     lboBusinessTimezones->DeleteAllItems();
7074     
7075     lboGeoposition->DeleteAllItems();
7076     lboHomeGeoposition->DeleteAllItems();
7077     lboBusinessGeoposition->DeleteAllItems();
7078     
7079     lboRelated->DeleteAllItems();
7080     
7081     lboWebsites->DeleteAllItems();
7082     lboHomeWebsites->DeleteAllItems();
7083     lboBusinessWebsites->DeleteAllItems();
7084     
7085     lboTitles->DeleteAllItems();
7086     lboHomeTitles->DeleteAllItems();
7087     lboBusinessTitles->DeleteAllItems();
7088     
7089     lboRoles->DeleteAllItems();
7090     lboHomeRoles->DeleteAllItems();
7091     lboBusinessRoles->DeleteAllItems();
7092     
7093     lboOrganisations->DeleteAllItems();
7094     lboHomeOrganisations->DeleteAllItems();
7095     lboBusinessOrganisations->DeleteAllItems();
7096     
7097     lboNotes->DeleteAllItems();
7098     lboHomeNotes->DeleteAllItems();
7099     lboBusinessNotes->DeleteAllItems();
7100     
7101     lboCategories->DeleteAllItems();
7102     
7103     lboGroups->DeleteAllItems();
7104     
7105     // Clear Picture
7106     lboPictures->DeleteAllItems();
7107     imgPicture->SetBitmap(EmptyBitmap);
7108     
7109     // Clear Logo
7110     lboLogos->DeleteAllItems();
7111     imgLogo->SetBitmap(EmptyBitmap);
7112     
7113     lboSounds->DeleteAllItems();
7114     
7115     lboCalendarAddresses->DeleteAllItems();
7116     lboCalendarRequestAddress->DeleteAllItems();
7117     lboFreeBusyAddresses->DeleteAllItems();
7118     
7119     lboKeys->DeleteAllItems();
7120     
7121     lboVendorNamespace->DeleteAllItems();
7122     lboXToken->DeleteAllItems();
7123     
7124     // Clear values out.
7125     
7126     wxString NameTitle;
7127     wxString NameForename;
7128     wxString NameSurname;
7129     wxString NameOtherNames;
7130     wxString NameSuffix;
7131     wxString NameNickname;
7132     wxString NameDisplayAs;
7133     wxString NameLanguage;
7134     wxString NameAltID;
7135     wxString NameTokens;
7136     
7137     wxString Birthday;
7138     wxString BirthdayAltID;
7139     wxString BirthdayCalScale;
7140     wxString BirthdayTokens;
7141     wxString Anniversary;
7142     wxString AnniversaryAltID;
7143     wxString AnniversaryCalScale;
7144     wxString AnniversaryTokens;
7145     
7146     wxString Gender;
7147     wxString GenderDetails;
7148     wxString GenderTokens;
7149     
7150     wxString UIDToken;
7151     
7152     /* We don't use these at the moment but we want to keep
7153      them for compatability reasons */
7154     
7155     /*std::map<int, wxString> ExtraFullNames;*/
7156     /*std::map<int, wxString> ExtraNicknames;*/
7157     
7158     FullNamesList.clear();    
7159     FullNamesListType.clear();
7160     FullNamesListLanguage.clear();
7161     FullNamesListAltID.clear();
7162     FullNamesListPID.clear();
7163     FullNamesListTokens.clear();
7164     FullNamesListPref.clear();
7165     
7166     GeneralNicknamesList.clear();
7167     GeneralNicknamesListType.clear();
7168     GeneralNicknamesListLanguage.clear();
7169     GeneralNicknamesListAltID.clear();
7170     GeneralNicknamesListPID.clear();
7171     GeneralNicknamesListTokens.clear();        
7172     GeneralNicknamesListPref.clear();        
7173     
7174     GeneralAddressList.clear();
7175     GeneralAddressListTown.clear();
7176     GeneralAddressListCounty.clear();
7177     GeneralAddressListPostCode.clear();
7178     GeneralAddressListCountry.clear();
7179     GeneralAddressListLabel.clear();
7180     GeneralAddressListLang.clear();        
7181     GeneralAddressListAltID.clear();
7182     GeneralAddressListPID.clear();
7183     GeneralAddressListTokens.clear();
7184     GeneralAddressListGeo.clear();
7185     GeneralAddressListTimezone.clear();        
7186     GeneralAddressListType.clear();
7187     GeneralAddressListMediatype.clear();
7188     GeneralAddressListPref.clear();
7189     
7190     GeneralEmailList.clear();
7191     GeneralEmailListAltID.clear();
7192     GeneralEmailListPID.clear();
7193     GeneralEmailListType.clear();
7194     GeneralEmailListTokens.clear();
7195     GeneralEmailListPref.clear();
7196     
7197     GeneralIMList.clear();
7198     GeneralIMListAltID.clear();
7199     GeneralIMListPID.clear();
7200     GeneralIMListType.clear();
7201     GeneralIMListTokens.clear();
7202     GeneralIMListMediatype.clear();
7203     GeneralIMListPref.clear();
7204     
7205     GeneralTelephoneList.clear();
7206     GeneralTelephoneListAltID.clear();
7207     GeneralTelephoneListPID.clear();
7208     GeneralTelephoneListType.clear();
7209     GeneralTelephoneListTokens.clear();
7210     GeneralTelephoneListPref.clear();
7211     
7212     GeneralLanguageList.clear();
7213     GeneralLanguageListAltID.clear();
7214     GeneralLanguageListPID.clear();
7215     GeneralLanguageListType.clear();
7216     GeneralLanguageListTokens.clear();
7217     GeneralLanguageListPref.clear();
7218     
7219     GeneralTZList.clear();
7220     GeneralTZListAltID.clear();
7221     GeneralTZListPID.clear();
7222     GeneralTZListType.clear();
7223     GeneralTZListTokens.clear();
7224     GeneralTZListMediatype.clear();
7225     GeneralTZListPref.clear();
7226     
7227     GeneralGeographyList.clear();
7228     GeneralGeographyListAltID.clear();
7229     GeneralGeographyListPID.clear();
7230     GeneralGeographyListType.clear();
7231     GeneralGeographyListTokens.clear();
7232     GeneralGeographyListMediatype.clear();
7233     GeneralGeographyListPref.clear();
7234     
7235     GeneralRelatedList.clear();
7236     GeneralRelatedListRelType.clear();
7237     GeneralRelatedListLanguage.clear();
7238     GeneralRelatedListAltID.clear();
7239     GeneralRelatedListPID.clear();
7240     GeneralRelatedListType.clear();
7241     GeneralRelatedListTokens.clear();
7242     GeneralRelatedListPref.clear();
7243     
7244     GeneralWebsiteList.clear();
7245     GeneralWebsiteListAltID.clear();
7246     GeneralWebsiteListPID.clear();
7247     GeneralWebsiteListType.clear();
7248     GeneralWebsiteListTokens.clear();
7249     GeneralWebsiteListMediatype.clear();
7250     GeneralWebsiteListPref.clear();
7251     
7252     GeneralTitleList.clear();
7253     GeneralTitleListLanguage.clear();        
7254     GeneralTitleListAltID.clear();
7255     GeneralTitleListPID.clear();
7256     GeneralTitleListType.clear();
7257     GeneralTitleListTokens.clear();
7258     GeneralTitleListPref.clear();
7259     
7260     GeneralRoleList.clear();
7261     GeneralRoleListLanguage.clear();        
7262     GeneralRoleListAltID.clear();
7263     GeneralRoleListPID.clear();
7264     GeneralRoleListType.clear();
7265     GeneralRoleListTokens.clear();
7266     GeneralRoleListPref.clear();
7267     
7268     GeneralOrganisationsList.clear();
7269     GeneralOrganisationsListLanguage.clear();        
7270     GeneralOrganisationsListAltID.clear();
7271     GeneralOrganisationsListPID.clear();
7272     GeneralOrganisationsListType.clear();
7273     GeneralOrganisationsListTokens.clear();
7274     GeneralOrganisationsListSortAs.clear();
7275     GeneralOrganisationsListPref.clear();
7276     
7277     GeneralNoteList.clear();
7278     GeneralNoteListLanguage.clear();        
7279     GeneralNoteListAltID.clear();
7280     GeneralNoteListPID.clear();
7281     GeneralNoteListType.clear();
7282     GeneralNoteListTokens.clear();
7283     GeneralNoteListPref.clear();
7284     
7285     /* Items on Home Tab */        
7286     
7287     HomeNicknamesList.clear();
7288     HomeNicknamesListType.clear();
7289     HomeNicknamesListLanguage.clear();
7290     HomeNicknamesListAltID.clear();
7291     HomeNicknamesListPID.clear();
7292     HomeNicknamesListTokens.clear();        
7293     HomeNicknamesListPref.clear();        
7294     
7295     HomeAddressList.clear();
7296     HomeAddressListTown.clear();
7297     HomeAddressListCounty.clear();
7298     HomeAddressListPostCode.clear();
7299     HomeAddressListCountry.clear();
7300     HomeAddressListLabel.clear();
7301     HomeAddressListLang.clear();        
7302     HomeAddressListAltID.clear();
7303     HomeAddressListPID.clear();
7304     HomeAddressListTokens.clear();
7305     HomeAddressListGeo.clear();
7306     HomeAddressListTimezone.clear();        
7307     HomeAddressListType.clear();
7308     HomeAddressListMediatype.clear();
7309     HomeAddressListPref.clear();
7310     
7311     HomeEmailList.clear();
7312     HomeEmailListAltID.clear();
7313     HomeEmailListPID.clear();
7314     HomeEmailListType.clear();
7315     HomeEmailListTokens.clear();
7316     HomeEmailListPref.clear();
7317     
7318     HomeIMList.clear();
7319     HomeIMListAltID.clear();
7320     HomeIMListPID.clear();
7321     HomeIMListType.clear();
7322     HomeIMListTokens.clear();
7323     HomeIMListMediatype.clear();
7324     HomeIMListPref.clear();
7325     
7326     HomeTelephoneList.clear();
7327     HomeTelephoneListAltID.clear();
7328     HomeTelephoneListPID.clear();
7329     HomeTelephoneListType.clear();
7330     HomeTelephoneListTokens.clear();
7331     HomeTelephoneListPref.clear();
7332     
7333     HomeLanguageList.clear();
7334     HomeLanguageListAltID.clear();
7335     HomeLanguageListPID.clear();
7336     HomeLanguageListType.clear();
7337     HomeLanguageListTokens.clear();
7338     HomeLanguageListPref.clear();
7339     
7340     HomeTZList.clear();
7341     HomeTZListAltID.clear();
7342     HomeTZListPID.clear();
7343     HomeTZListType.clear();
7344     HomeTZListTokens.clear();
7345     HomeTZListMediatype.clear();
7346     HomeTZListPref.clear();
7347     
7348     HomeGeographyList.clear();
7349     HomeGeographyListAltID.clear();
7350     HomeGeographyListPID.clear();
7351     HomeGeographyListType.clear();
7352     HomeGeographyListTokens.clear();
7353     HomeGeographyListMediatype.clear();
7354     HomeGeographyListPref.clear();
7355     
7356     HomeRelatedList.clear();
7357     HomeRelatedListRelType.clear();
7358     HomeRelatedListLanguage.clear();
7359     HomeRelatedListAltID.clear();
7360     HomeRelatedListPID.clear();
7361     HomeRelatedListType.clear();
7362     HomeRelatedListTokens.clear();
7363     HomeRelatedListPref.clear();        
7364     
7365     HomeWebsiteList.clear();
7366     HomeWebsiteListAltID.clear();
7367     HomeWebsiteListPID.clear();
7368     HomeWebsiteListType.clear();
7369     HomeWebsiteListTokens.clear();
7370     HomeWebsiteListMediatype.clear();
7371     HomeWebsiteListPref.clear();
7372     
7373     HomeTitleList.clear();
7374     HomeTitleListLanguage.clear();
7375     HomeTitleListAltID.clear();
7376     HomeTitleListPID.clear();
7377     HomeTitleListType.clear();
7378     HomeTitleListTokens.clear();
7379     HomeTitleListPref.clear();
7380     
7381     HomeRoleList.clear();
7382     HomeRoleListLanguage.clear();        
7383     HomeRoleListAltID.clear();
7384     HomeRoleListPID.clear();
7385     HomeRoleListType.clear();
7386     HomeRoleListTokens.clear();
7387     HomeRoleListPref.clear();
7388     
7389     HomeOrganisationsList.clear();
7390     HomeOrganisationsListLanguage.clear();        
7391     HomeOrganisationsListAltID.clear();
7392     HomeOrganisationsListPID.clear();
7393     HomeOrganisationsListType.clear();
7394     HomeOrganisationsListTokens.clear();
7395     HomeOrganisationsListSortAs.clear();
7396     HomeOrganisationsListPref.clear();
7397     
7398     HomeNoteList.clear();
7399     HomeNoteListLanguage.clear();        
7400     HomeNoteListAltID.clear();
7401     HomeNoteListPID.clear();
7402     HomeNoteListType.clear();
7403     HomeNoteListTokens.clear();
7404     HomeNoteListPref.clear();        
7405     
7406     /* Items on the Business tab */
7407     
7408     BusinessNicknamesList.clear();
7409     BusinessNicknamesListType.clear();
7410     BusinessNicknamesListLanguage.clear();
7411     BusinessNicknamesListAltID.clear();
7412     BusinessNicknamesListPID.clear();
7413     BusinessNicknamesListTokens.clear();        
7414     BusinessNicknamesListPref.clear();        
7415     
7416     BusinessAddressList.clear();
7417     BusinessAddressListTown.clear();
7418     BusinessAddressListCounty.clear();
7419     BusinessAddressListPostCode.clear();
7420     BusinessAddressListCountry.clear();
7421     BusinessAddressListLabel.clear();
7422     BusinessAddressListLang.clear();        
7423     BusinessAddressListAltID.clear();
7424     BusinessAddressListPID.clear();
7425     BusinessAddressListTokens.clear();
7426     BusinessAddressListGeo.clear();
7427     BusinessAddressListTimezone.clear();        
7428     BusinessAddressListType.clear();
7429     BusinessAddressListMediatype.clear();
7430     BusinessAddressListPref.clear();
7431     
7432     BusinessEmailList.clear();
7433     BusinessEmailListAltID.clear();
7434     BusinessEmailListPID.clear();
7435     BusinessEmailListType.clear();
7436     BusinessEmailListTokens.clear();
7437     BusinessEmailListPref.clear();
7438     
7439     BusinessIMList.clear();
7440     BusinessIMListAltID.clear();
7441     BusinessIMListPID.clear();
7442     BusinessIMListType.clear();
7443     BusinessIMListTokens.clear();
7444     BusinessIMListMediatype.clear();
7445     BusinessIMListPref.clear();
7446     
7447     BusinessTelephoneList.clear();
7448     BusinessTelephoneListAltID.clear();
7449     BusinessTelephoneListPID.clear();
7450     BusinessTelephoneListType.clear();
7451     BusinessTelephoneListTokens.clear();
7452     BusinessTelephoneListPref.clear();
7453     
7454     BusinessLanguageList.clear();
7455     BusinessLanguageListAltID.clear();
7456     BusinessLanguageListPID.clear();
7457     BusinessLanguageListType.clear();
7458     BusinessLanguageListTokens.clear();
7459     BusinessLanguageListPref.clear();
7460     
7461     BusinessTZList.clear();
7462     BusinessTZListAltID.clear();
7463     BusinessTZListPID.clear();
7464     BusinessTZListType.clear();
7465     BusinessTZListTokens.clear();
7466     BusinessTZListMediatype.clear();
7467     BusinessTZListPref.clear();
7468     
7469     BusinessGeographyList.clear();
7470     BusinessGeographyListAltID.clear();
7471     BusinessGeographyListPID.clear();
7472     BusinessGeographyListType.clear();
7473     BusinessGeographyListTokens.clear();
7474     BusinessGeographyListMediatype.clear();
7475     BusinessGeographyListPref.clear();
7476     
7477     BusinessRelatedList.clear();
7478     BusinessRelatedListRelType.clear();
7479     BusinessRelatedListLanguage.clear();
7480     BusinessRelatedListAltID.clear();
7481     BusinessRelatedListPID.clear();
7482     BusinessRelatedListType.clear();
7483     BusinessRelatedListTokens.clear();
7484     BusinessRelatedListPref.clear();            
7485     
7486     BusinessWebsiteList.clear();
7487     BusinessWebsiteListAltID.clear();
7488     BusinessWebsiteListPID.clear();
7489     BusinessWebsiteListType.clear();
7490     BusinessWebsiteListTokens.clear();
7491     BusinessWebsiteListMediatype.clear();
7492     BusinessWebsiteListPref.clear();
7493     
7494     BusinessTitleList.clear();
7495     BusinessTitleListLanguage.clear();        
7496     BusinessTitleListAltID.clear();
7497     BusinessTitleListPID.clear();
7498     BusinessTitleListType.clear();
7499     BusinessTitleListTokens.clear();
7500     BusinessTitleListPref.clear();
7501     
7502     BusinessRoleList.clear();
7503     BusinessRoleListLanguage.clear();        
7504     BusinessRoleListAltID.clear();
7505     BusinessRoleListPID.clear();
7506     BusinessRoleListType.clear();
7507     BusinessRoleListTokens.clear();
7508     BusinessRoleListPref.clear();
7509     
7510     BusinessOrganisationsList.clear();
7511     BusinessOrganisationsListLanguage.clear();        
7512     BusinessOrganisationsListAltID.clear();
7513     BusinessOrganisationsListPID.clear();
7514     BusinessOrganisationsListType.clear();
7515     BusinessOrganisationsListTokens.clear();
7516     BusinessOrganisationsListSortAs.clear();        
7517     BusinessOrganisationsListPref.clear();
7518     
7519     BusinessNoteList.clear();
7520     BusinessNoteListLanguage.clear();        
7521     BusinessNoteListAltID.clear();
7522     BusinessNoteListPID.clear();
7523     BusinessNoteListType.clear();
7524     BusinessNoteListTokens.clear();
7525     BusinessNoteListPref.clear();        
7526     
7527     /* Items on the Categories tab */
7528     
7529     CategoriesList.clear();
7530     CategoriesListAltID.clear();
7531     CategoriesListPID.clear();
7532     CategoriesListType.clear();
7533     CategoriesListTokens.clear();
7534     CategoriesListPref.clear();    
7535     
7536     /* Items on the Groups tab */
7537     
7538     GroupsList.clear();
7539     GroupsListAltID.clear();
7540     GroupsListPID.clear();
7541     GroupsListType.clear();
7542     GroupsListTokens.clear();
7543     GroupsListPref.clear();
7544     
7545     /* Items on the Pictures tab */
7546     
7547     PicturesList.clear();
7548     PicturesListAltID.clear();
7549     PicturesListPID.clear();
7550     PicturesListType.clear();
7551     PicturesListPicEncType.clear();
7552     PicturesListPictureType.clear();
7553     PicturesListTokens.clear();
7554     PicturesListMediatype.clear();        
7555     PicturesListPref.clear();
7556     
7557     /* Items on the Logos tab */
7558     
7559     LogosList.clear();
7560     LogosListAltID.clear();
7561     LogosListPID.clear();
7562     LogosListType.clear();
7563     LogosListPicEncType.clear();        
7564     LogosListPictureType.clear();
7565     LogosListTokens.clear();
7566     LogosListMediatype.clear();        
7567     LogosListPref.clear();
7568     
7569     /* Items on the Sounds tab */
7570     
7571     SoundsList.clear();
7572     SoundsListAltID.clear();
7573     SoundsListPID.clear();
7574     SoundsListType.clear();
7575     SoundsListAudioEncType.clear();        
7576     SoundsListAudioType.clear();        
7577     SoundsListTokens.clear();
7578     SoundsListMediatype.clear();        
7579     SoundsListPref.clear();    
7580     
7581     /* Items on the Calendaring tab */
7582     
7583     CalendarList.clear();
7584     CalendarListAltID.clear();
7585     CalendarListPID.clear();
7586     CalendarListType.clear();
7587     CalendarListTokens.clear();
7588     CalendarListMediatype.clear();        
7589     CalendarListPref.clear();
7590     
7591     CalendarRequestList.clear();
7592     CalendarRequestListAltID.clear();
7593     CalendarRequestListPID.clear();
7594     CalendarRequestListType.clear();
7595     CalendarRequestListTokens.clear();
7596     CalendarRequestListMediatype.clear();        
7597     CalendarRequestListPref.clear();        
7598     
7599     FreeBusyList.clear();
7600     FreeBusyListAltID.clear();
7601     FreeBusyListPID.clear();
7602     FreeBusyListType.clear();
7603     FreeBusyListTokens.clear();
7604     FreeBusyListMediatype.clear();        
7605     FreeBusyListPref.clear();
7606     
7607     /* Items on the Security tab */
7608     
7609     KeyList.clear();
7610     KeyListAltID.clear();
7611     KeyListPID.clear();
7612     KeyListKeyType.clear();        
7613     KeyListDataType.clear();        
7614     KeyListDataEncType.clear();
7615     KeyListType.clear();
7616     KeyListTokens.clear();
7617     KeyListPref.clear();
7618     
7619     /* Items on the Other tab */
7620     
7621     VendorList.clear();
7622     VendorListPEN.clear();
7623     VendorListElement.clear();
7624     
7625     XTokenList.clear();        
7626     XTokenListTokens.clear();
7627     
7628     wxSContactFilename.Clear();
7629     boolContactModified = FALSE;
7630     intSeekSelectedData = 0;
7631     
7632     /* Section for saving/loading data */
7633     
7634     ETag.Clear();
7635     ETagOriginal.Clear();
7636     
7637     strValue.Clear();
7638     strValue2.Clear();
7639     strValue3.Clear();
7640     
7641     boolValue = FALSE;
7642     boolValue2 = FALSE;
7643     intValue = 0;
7644     intValue2 = 0;
7645     intValue3 = 0;
7646     BinaryDataProc = FALSE;
7647     EditMode = TRUE;
7648     DialogOpen = FALSE;
7649     
7650     PictureImage = wxNullBitmap;
7651     LogoImage = wxNullBitmap;
7652     
7655 void frmContactEditor::ContactFileChanged( wxCommandEvent &event ){
7656     
7657     // Stop the timer.
7658     
7659     FMTimer.Stop();
7660     
7661     // Check if a dialog is already open.
7662     
7663     if (DialogOpen == TRUE){
7664         
7665         FMTimer.Start(1000, FALSE);
7666         return;
7667         
7668     }
7669     
7670     // Bring up a Yes/No modal dialog asking if the changed file should be reloaded.
7671     
7672     int QuestionResponse;
7673     
7674     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);
7675     
7676     if (QuestionResponse == wxYES){
7677         
7678         // Reload the contact.
7679         wxString wxSReloadContactName = wxSContactFilename;
7680         ClearContact();
7681         LoadContact(wxSReloadContactName);
7682         
7683     } else {
7684         
7685         // Do nothing other than update the timestamp so this message
7686         // doesn't appear until the next time it changes.
7687         
7688         FMTimer.UpdateTimestamp();
7689         
7690     }  
7691     
7692     // Start the timer.
7693     
7694     FMTimer.Start();
7695     
7698 void frmContactEditor::UpdateMembersTab( wxCommandEvent &event ){
7699     
7700     if (cmbType->GetCurrentSelection() == 2){
7701         
7702         tabMembers->Show();     
7703         
7704     } else {
7705         
7706         tabMembers->Hide();
7707         
7708     }
7709     
7712 void frmContactEditor::SetUID(int UID){
7713     
7714     ContactEditorUID = UID;
7715     
7718 void frmContactEditor::UpdateDisplayAs( wxCommandEvent &event ){
7719     
7720     // Generate a drop down list of common names to use for the display as drop down box.
7721     
7722     wxString SetValue = cmbDisplayAs->GetValue();
7723     
7724     cmbDisplayAs->Clear();
7725     cmbDisplayAs->Append(txtForename->GetValue() + wxT(" ") + txtSurname->GetValue());
7726     if (!txtOtherNames->GetValue().IsEmpty()){
7727         
7728         cmbDisplayAs->Append(txtForename->GetValue() + wxT(" ") + txtOtherNames->GetValue()  + wxT(" ") + txtForename->GetValue());     
7729         
7730     }
7731     cmbDisplayAs->Append(txtSurname->GetValue() + wxT(", ") + txtForename->GetValue()); 
7732     if (!txtOtherNames->GetValue().IsEmpty()){
7733         
7734         cmbDisplayAs->Append(txtForename->GetValue() + wxT(", ") + wxT(" ") + txtForename->GetValue() + wxT(" ") + txtOtherNames->GetValue());
7735         
7736     }
7737     if (!txtTitle->GetValue().IsEmpty()){
7738         cmbDisplayAs->Append(txtTitle->GetValue() + wxT(" ") + txtSurname->GetValue() + wxT(" ") + txtForename->GetValue());
7739     }
7740     
7741     cmbDisplayAs->SetValue(SetValue);
7742     
7743     this->SetTitle(cmbDisplayAs->GetValue());
7744     
7747 void frmContactEditor::UpdateName( wxCommandEvent &event ){
7748     
7749     this->SetTitle(cmbDisplayAs->GetValue());
7750     
7751     WindowData *WData = new WindowData;
7752     
7753     WData->DataType = 1;
7754     WData->WindowPointer = this;
7755     WData->WindowID = ContactEditorUID;
7756     
7757     wxCommandEvent editevent(WINDOW_EDIT);
7758     editevent.SetClientData(WData);
7759     wxPostEvent(GetParent(), editevent);
7760     
Xestia Software Development
Yn Maystri
© 2006 - 2019 Xestia Software Development
Software

Xestia Address Book
Xestia Calendar
Development

Xestia Gelforn
Everything else

About
News
Privacy Policy