Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
getcontactinfo.cpp: Fix issue with using wxTransparentColour
[xestiaab/.git] / source / common / getcontactinfo.cpp
index b783d8b..a07ec4a 100644 (file)
@@ -24,8 +24,6 @@
 #include <wx/fs_mem.h>
 #include <wx/mstream.h>
 #include <wx/filesys.h>
-#include <wx/datetime.h>
-//#include <b64/decode.h>
 #include <string>
 
 #include "getcontactinfo.h"
 #include "../vcard/vcard34conv.h"
 
 void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID, 
-       wxString OldSID, std::map<wxString, wxString> *MemoryFSList){
+       wxString OldSID, std::map<wxString, wxString> *MemoryFSList, wxColour backgroundColour){
+
+       // Load the vCard contact data into the wxHTMLWindow given.
 
        // Show message to user that the contact information is loading.
 
+       HTMLObj->SetBorders(0);
+       HTMLObj->SetBackgroundColour(wxColour(160,160,160,0));
+               
        wxString PageData;
        
        wxFileSystem::AddHandler(new wxMemoryFSHandler);
-       //wxMemoryFSHandler::AddFile();
        
        PageData.append(wxT("<html>"));
        PageData.append(wxT("<head>"));
@@ -92,7 +94,6 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
        // MAke sure new session ID doesn't conflict with existing
        // data. If there is a match, generate a new one and check again.
        
-       bool SIDMatch = FALSE;
        wxString SIDTemp;
        
        for (std::map<wxString, wxString>::iterator striter = MemoryFSList->begin();
@@ -122,20 +123,32 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
        PageData.append(wxT("<head>"));
        PageData.append(wxT("<title>Contact Information</title>"));     
        PageData.append(wxT("</head>"));
+       
+       // Process the CSS section.
+       
        PageData.append(wxT("<body>"));
 
        // Process the data in the vCard object.
        
        // Name (Display As)
        
-       PageData.append(wxT("<table>"));
+       ArrayvCardOutData FNList;
+       FNList = vCardObj->GetByPartial(wxT("FN"));
+       
+       PageData.append(wxT("<table style=\"background: #cccccc; width: 100%\">"));
        PageData.append(wxT("<tr>"));
-       PageData.append(wxT("<td>"));
+       PageData.append(wxT("<td style=\"width:100%\">"));
        PageData.append(wxT("<h2>"));
-       PageData.append(vCardObj->Get(wxT("FN")));
+       
+       if (FNList.PropCount > 0){
+               FNList.PropValues[0].Trim();
+        CaptureString(&FNList.PropValues[0], false);
+               PageData.append(FNList.PropValues[0]);
+       }
+       
        PageData.append(wxT("</h2>"));
        PageData.append(wxT("</td>"));
-       PageData.append(wxT("<td>"));
+       PageData.append(wxT("<td style=\"width: 200px;\">"));
        
        // Define common variables for ADR.
        
@@ -180,28 +193,6 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
        ArrayvCardOutData ContactData = vCardObj->GetByPartial(wxT("PHOTO"));
        
        if (ContactData.PropCount > 0){
-
-               // Split the data.
-
-               
-               
-               /*std::map<int,int> SplitPts;
-               std::map<int,int> SplitLen;
-               std::map<wxString,wxString> SplitData;
-               int intSize = 0;
-               
-               SplitPropertyData(&ContactData.PropData[0], 
-                       &SplitPts, 
-                       &SplitLen, 
-                       0,
-                       &SplitData);
-               
-               for (std::map<wxString, wxString>::iterator striter = SplitData.begin();
-               striter != SplitData.end(); striter++){
-               
-                       raise(SIGABRT);
-               
-               }*/
                
                // Look for the X-ABCROP-RECTANGLE.
                
@@ -251,9 +242,6 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
                                
                                        PhotoRectData.GetNextToken();
 
-                                       //PhotoRectPoints.SetX(wxAtoi(PhotoRectData.GetNextToken()));
-                                       //PhotoRectPoints.SetY(wxAtoi(PhotoRectData.GetNextToken()) - 100);
-
                                        int PointXBase = wxAtoi(PhotoRectData.GetNextToken());
                                        int PointYBase = wxAtoi(PhotoRectData.GetNextToken());
                                        int PointWBase = wxAtoi(PhotoRectData.GetNextToken());
@@ -283,23 +271,6 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
                                        } else {
                                        
                                        }
-                                       
-                                       /*int PointX = PointXBase;
-                                       int PointY = PointYBase;
-                                       int PointW = PointWBase;
-                                       int PointH = PointHBase;*/
-
-                                       // Bottom Left Method
-                                       
-                                       /*int PointX = wxAtoi(PhotoRectData.GetNextToken());
-                                       int PointY = photo.GetHeight() - wxAtoi(PhotoRectData.GetNextToken()) - 340;
-                                       int PointW = wxAtoi(PhotoRectData.GetNextToken());
-                                       int PointH = wxAtoi(PhotoRectData.GetNextToken());*/
-                                       
-                                       // Bottom Right Method
-                                       
-                                       /*int PointXRemain = photo.GetWidth() - PointX - 140;
-                                       int PointYRemain = photo.GetHeight() - PointY - 140;*/
                                                                                
                                        PhotoRectPoints.SetX(PointX);
                                        PhotoRectPoints.SetY(PointY);
@@ -417,12 +388,13 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
        ContactData = vCardObj->GetByPartial(wxT("PHOTO"));
        
        bool AddBreak = FALSE;
+       wxString TypePageData;
        
        if (ContactData.PropCount > 1){
        
-               PageData.append(wxT("<img src=\"memory:cipto.png\" alt=\""));
-               PageData.append(_("This contact has multiple photos."));
-               PageData.append(wxT("\">"));
+               TypePageData.append(wxT("<img src=\"memory:cipto.png\" alt=\""));
+               TypePageData.append(_("This contact has multiple photos."));
+               TypePageData.append(wxT("\">"));
                AddBreak = TRUE;
        
        }
@@ -431,9 +403,9 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
        
        if (ContactData.PropCount > 1){
        
-               PageData.append(wxT("<img src=\"memory:cilog.png\" alt=\""));
-               PageData.append(_("This contact has multiple logos."));
-               PageData.append(wxT("\">"));
+               TypePageData.append(wxT("<img src=\"memory:cilog.png\" alt=\""));
+               TypePageData.append(_("This contact has multiple logos."));
+               TypePageData.append(wxT("\">"));
                AddBreak = TRUE;
        
        }
@@ -442,9 +414,9 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
        
        if (ContactData.PropCount >= 1){
        
-               PageData.append(wxT("<img src=\"memory:cisnd.png\" alt=\""));
-               PageData.append(_("This contact has audio information."));
-               PageData.append(wxT("\">"));
+               TypePageData.append(wxT("<img src=\"memory:cisnd.png\" alt=\""));
+               TypePageData.append(_("This contact has audio information."));
+               TypePageData.append(wxT("\">"));
                AddBreak = TRUE;
        
        }
@@ -453,9 +425,9 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
 
        if (ContactData.PropCount >= 1){
        
-               PageData.append(wxT("<img src=\"memory:cikey.png\" alt=\""));
-               PageData.append(_("This contact has crytographic keys."));
-               PageData.append(wxT("\">"));
+               TypePageData.append(wxT("<img src=\"memory:cikey.png\" alt=\""));
+               TypePageData.append(_("This contact has crytographic keys."));
+               TypePageData.append(wxT("\">"));
                AddBreak = TRUE;
        
        }
@@ -464,9 +436,9 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
        
        if (ContactData.PropCount >= 1){
        
-               PageData.append(wxT("<img src=\"memory:civen.png\" alt=\""));
-               PageData.append(_("This contact has vendor-specific information."));
-               PageData.append(wxT("\">"));
+               TypePageData.append(wxT("<img src=\"memory:civen.png\" alt=\""));
+               TypePageData.append(_("This contact has vendor-specific information."));
+               TypePageData.append(wxT("\">"));
                AddBreak = TRUE;
        
        }
@@ -475,25 +447,28 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
        
        if (ContactData.PropCount >= 1){
        
-               PageData.append(wxT("<img src=\"memory:ciext.png\" alt=\""));
-               PageData.append(_("This contact has extended information."));
-               PageData.append(wxT("\">"));
+               TypePageData.append(wxT("<img src=\"memory:ciext.png\" alt=\""));
+               TypePageData.append(_("This contact has extended information."));
+               TypePageData.append(wxT("\">"));
                AddBreak = TRUE;
 
        }
        
+       if (!TypePageData.IsEmpty()){
+               
+               PageData.append("<table style=\"{background: #dddddd; width:100%}\"><tr><td>");
+               PageData.append(TypePageData);
+               PageData.append("</tr></td></table>");
+               
+       }
+       
        if (AddBreak == TRUE){
        
                PageData.append(wxT("<br><br>"));
        
        }
        
-       bool MultiLogoIcon = FALSE;
-       bool MultiPhotoIcon = FALSE;
-       bool SoundIcon = FALSE;
-       bool KeyIcon = FALSE;
-       bool VendorIcon = FALSE;
-       bool XTokenIcon = FALSE;
+       // TODO: Setup the second table.
        
        // Process Birthday
        
@@ -501,7 +476,11 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
 
        DataDisplay = FALSE;
        DataLines.clear();
-
+       wxDateTime DateFormat;
+       long MonthValue = 0;
+       long DayValue = 0;
+       long YearValue = 0;
+       
        if (ContactData.PropCount > 0){
        
                wxString BDayLine;
@@ -513,10 +492,59 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
                        BDayLine = ContactData.PropValues[i];
                
                        BDayLine.Trim();
-                       CaptureString(&BDayLine, FALSE);
-                       ConvertToHTML(&BDayLine);
+                       
+                       if (BDayLine.Mid(0,4) == wxT("1604")){
+                               
+                               BDayLine = BDayLine.Mid(4,4);
+
+                               BDayLine.Mid(0,2).ToLong(&MonthValue);
+                               BDayLine.Mid(2,2).ToLong(&DayValue);
+                               
+                               MonthValue--;
+                               
+                               DateFormat.Set((wxDateTime::wxDateTime_t)(int)DayValue, (wxDateTime::Month)(MonthValue), 0, 0, 0, 0, 0);
+                               
+                       } else if (BDayLine.Mid(0,2) == wxT("--")){
+
+                               BDayLine = BDayLine.Mid(2,4);
+
+                               BDayLine.Mid(0,2).ToLong(&MonthValue);
+                               BDayLine.Mid(2,2).ToLong(&DayValue);
+                               
+                               MonthValue--;
+                               
+                               DateFormat.Set((wxDateTime::wxDateTime_t)(int)DayValue, (wxDateTime::Month)(MonthValue), 0, 0, 0, 0, 0);
+                               
+                       } else {
+                               
+                               
+                               BDayLine.Mid(0,4).ToLong(&YearValue);
+                               BDayLine.Mid(4,2).ToLong(&MonthValue);
+                               BDayLine.Mid(6,2).ToLong(&DayValue);
+                               
+                               MonthValue--;
+                               
+                               DateFormat.Set((wxDateTime::wxDateTime_t)(int)DayValue, (wxDateTime::Month)(MonthValue), YearValue, 0, 0, 0, 0);                                
+                               
+                       }
+                       
+                       wxString BDayOutput;
+                       
+                       BDayOutput.append(wxString::Format(wxT("%02i"), (int)DayValue));
+                       BDayOutput.append(wxT("/"));
+                       BDayOutput.append(wxString::Format(wxT("%02i"), (int)(MonthValue + 1)));
+                       
+                       if (DateFormat.GetYear() != 0){
+                               
+                               BDayOutput.append(wxT("/"));
+                               BDayOutput.append(wxString::Format(wxT("%04i"), (int)YearValue));
+                               
+                       }
+                       
+                       CaptureString(&BDayOutput, FALSE);
+                       ConvertToHTML(&BDayOutput);
                
-                       DataLines.append(BDayLine);
+                       DataLines.append(BDayOutput);
 
                        break;
                
@@ -526,6 +554,14 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
                
        }
        
+       if (backgroundColour != wxTransparentColour){
+               PageData.append("<table CELLPADDING=4 style=\"{background-color: ");
+               PageData.append(backgroundColour.GetAsString(wxC2S_CSS_SYNTAX));
+               PageData.append("; width: 100%;}\"><tr><td>");          
+       } else {
+               PageData.append("<table CELLPADDING=4 style=\"{width: 100%;}\"><tr><td>");
+       }
+       
        if (DataDisplay == TRUE){
        
                DataLines.Trim();
@@ -553,12 +589,60 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
                        // Grab the first anniversary only.
 
                        AnniLine = ContactData.PropValues[i];
-               
                        AnniLine.Trim();
-                       CaptureString(&AnniLine, FALSE);
-                       ConvertToHTML(&AnniLine);
+                       
+                       if (AnniLine.Mid(0,4) == wxT("1604")){
+                               
+                               AnniLine = AnniLine.Mid(4,4);
+
+                               AnniLine.Mid(0,2).ToLong(&MonthValue);
+                               AnniLine.Mid(2,2).ToLong(&DayValue);
+                               
+                               MonthValue--;
+                               
+                               DateFormat.Set((wxDateTime::wxDateTime_t)(int)DayValue, (wxDateTime::Month)(MonthValue), 0, 0, 0, 0, 0);
+                               
+                       } else if (AnniLine.Mid(0,2) == wxT("--")){
+
+                               AnniLine = AnniLine.Mid(2,4);
+
+                               AnniLine.Mid(0,2).ToLong(&MonthValue);
+                               AnniLine.Mid(2,2).ToLong(&DayValue);
+                               
+                               MonthValue--;
+                               
+                               DateFormat.Set((wxDateTime::wxDateTime_t)(int)DayValue, (wxDateTime::Month)(MonthValue), 0, 0, 0, 0, 0);
+                               
+                       } else {
+                               
+                               
+                               AnniLine.Mid(0,4).ToLong(&YearValue);
+                               AnniLine.Mid(4,2).ToLong(&MonthValue);
+                               AnniLine.Mid(6,2).ToLong(&DayValue);
+                               
+                               MonthValue--;
+                               
+                               DateFormat.Set((wxDateTime::wxDateTime_t)(int)DayValue, (wxDateTime::Month)(MonthValue), YearValue, 0, 0, 0, 0);                                
+                               
+                       }
+                       
+                       wxString AnniDayOutput;
+                       
+                       AnniDayOutput.append(wxString::Format(wxT("%02i"), (int)DayValue));
+                       AnniDayOutput.append(wxT("/"));
+                       AnniDayOutput.append(wxString::Format(wxT("%02i"), (int)(MonthValue + 1)));
+                       
+                       if (DateFormat.GetYear() != 0){
+                               
+                               AnniDayOutput.append(wxT("/"));
+                               AnniDayOutput.append(wxString::Format(wxT("%04i"), (int)YearValue));
+                               
+                       }
+                       
+                       CaptureString(&AnniDayOutput, FALSE);
+                       ConvertToHTML(&AnniDayOutput);
                
-                       DataLines.append(AnniLine);
+                       DataLines.append(AnniDayOutput);
 
                        break;
                
@@ -692,7 +776,6 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
                                        
                                        SLiter = SplitLength.find(1);
                                                                                
-                                       //txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
                                        AddressPOBox = AddressLine.Mid(0, SLiter->second);
                                        intPrevValue = intiter->second;
                                
@@ -703,7 +786,6 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
                                        SLiter = SplitLength.find(2);
                                        
                                        AddressExtended = AddressLine.Mid(intPrevValue, SLiter->second);
-                                       //txtForename->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
                                        intPrevValue = intiter->second;
                                
                                } else if (intiter->first == 3){
@@ -713,7 +795,6 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
                                        SLiter = SplitLength.find(3);
                                                                                
                                        AddressStreet = AddressLine.Mid(intPrevValue, SLiter->second);
-                                       //txtOtherNames->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
                                        intPrevValue = intiter->second;
                                
                                } else if (intiter->first == 4){
@@ -723,10 +804,7 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
                                        SLiter = SplitLength.find(4);
                                        
                                        AddressLocality = AddressLine.Mid(intPrevValue, SLiter->second);
-                                       //txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
                                        intPrevValue = intiter->second;
-                                       
-                                       //txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, wxSTRING_MAXLEN), TRUE));
                                
                                } else if (intiter->first == 5){
                                
@@ -735,10 +813,7 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
                                        SLiter = SplitLength.find(5);
                                        
                                        AddressRegion = AddressLine.Mid(intPrevValue, SLiter->second);
-                                       //txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
                                        intPrevValue = intiter->second;
-                                       
-                                       //txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, wxSTRING_MAXLEN), TRUE));
                                
                                } else if (intiter->first == 6){
                                
@@ -747,13 +822,11 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
                                        SLiter = SplitLength.find(6);
                                        
                                        AddressPostalCode = AddressLine.Mid(intPrevValue, SLiter->second);
-                                       //txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
                                        intPrevValue = intiter->second;
                                        
                                        // Deal with country.
                                        
                                        AddressCountry = AddressLine.Mid(intPrevValue);
-                                       //txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, wxSTRING_MAXLEN), TRUE));
                                
                                }
                        
@@ -1618,6 +1691,8 @@ void LoadContactData(vCard *vCardObj, wxHtmlWindow *HTMLObj, wxString SID,
 
        // Display the HTML document on the screen.
 
+       PageData.append("</td></tr></table>");
+       
        PageData.append(wxT("</body>"));
        PageData.append(wxT("</html>"));
 
@@ -1631,6 +1706,8 @@ void SplitPropertyData(wxString *PropertyLine,
        int intSize,
        std::map<wxString,wxString> *SplitData){
        
+       // Split the property data into SplitData.
+       
        wxString DataStr;
        wxStringTokenizer PropertyElement;
        wxString PropertyName;
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