Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Split frmContactEditor-Load.cpp into 24 files to make it more manageable.
[xestiaab/.git] / source / contacteditor / frmContactEditor-LoadLogo.cpp
1 #include "frmContactEditor.h"
2 #include "../common/base64.h"
4 void frmContactEditor::LoadLogo(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *LogoCount){
6         size_t intPropertyLen = wxSPropertySeg1.Len();
7         std::map<int, int> SplitPoints;
8         std::map<int, int> SplitLength;
9         std::map<int, int>::iterator SLiter;                    
10         wxString PropertyData;
11         wxString PropertyName;
12         wxString PropertyValue;
13         wxString PropertyTokens;
14         bool FirstToken = TRUE;
15         int intSplitsFound = 0;
16         int intSplitSize = 0;
17         int intPrevValue = 6;
18         int intPref = 0;                        
19         int intType = 0;
20         long ListCtrlIndex;
21         
22         SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
23         
24         intPrevValue = 5;
25         
26         // Look for type before continuing.                     
27         
28         for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
29         intiter != SplitPoints.end(); ++intiter){
30         
31                 SLiter = SplitLength.find(intiter->first);
32         
33                 PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
34                 
35                 wxStringTokenizer PropertyElement (PropertyData, wxT("="));
36                 PropertyName = PropertyElement.GetNextToken();                          
37                 PropertyValue = PropertyElement.GetNextToken();
38                 
39                 intPrevValue = intiter->second;
40                 
41                 if (PropertyName == wxT("TYPE")){
42                 
43                         if (PropertyValue == wxT("work")){
44                         
45                                 intType = 2;
46                         
47                         } else if (PropertyValue == wxT("home")){
49                                 intType = 1;
50                         
51                         } else {
52                         
53                                 intType = 0;
54                         
55                         }
56                 
57                 }
58         
59         }
60         
61         // Setup blank lines for later on.
62         
63         LogosList.insert(std::make_pair(intValueSeek, ""));
64         LogosListType.insert(std::make_pair(intValueSeek, wxT("")));
65         LogosListAltID.insert(std::make_pair(intValueSeek, wxT("")));
66         LogosListPID.insert(std::make_pair(intValueSeek, wxT("")));
67         LogosListPref.insert(std::make_pair(intValueSeek, 0));
68         LogosListPicEncType.insert(std::make_pair(intValueSeek, wxT("")));
69         LogosListPictureType.insert(std::make_pair(intValueSeek, wxT("")));                     
70         LogosListTokens.insert(std::make_pair(intValueSeek, wxT("")));
71         LogosListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
73         intPrevValue = 5;
75         for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
76         intiter != SplitPoints.end(); ++intiter){
77         
78                 SLiter = SplitLength.find(intiter->first);
79         
80                 PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
81                 
82                 wxStringTokenizer PropertyElement (PropertyData, wxT("="));
83                 PropertyName = PropertyElement.GetNextToken();                          
84                 PropertyValue = PropertyElement.GetNextToken();
85                 
86                 intPrevValue = intiter->second;
87                 
88                 // Process properties.
89                 
90                 size_t intPropertyValueLen = PropertyValue.Len();
91                 
92                 if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
93                         
94                         PropertyValue.Trim();
95                         PropertyValue.RemoveLast();
96                         
97                 }                               
98                 
99                 if (PropertyValue.Mid(0, 1) == wxT("\"")){
100                         
101                         PropertyValue.Remove(0, 1);
102                         
103                 }
104                 
105                 ProcessCaptureStrings(&PropertyValue);  
106                 
107                 if (PropertyName == wxT("ALTID")){
109                         if (intType == 0){ LogosListAltID.erase(intValueSeek); LogosListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
110                         else if (intType == 1){ LogosListAltID.erase(intValueSeek); LogosListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
111                         else if (intType == 2){ LogosListAltID.erase(intValueSeek); LogosListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
112                 
113                 } else if (PropertyName == wxT("PID")){
115                         if (intType == 0){ LogosListPID.erase(intValueSeek); LogosListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
116                         else if (intType == 1){ LogosListPID.erase(intValueSeek); LogosListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
117                         else if (intType == 2){ LogosListPID.erase(intValueSeek); LogosListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
118                 
119                 } else if (PropertyName == wxT("PREF")){
120                         
121                         intPref = wxAtoi(PropertyValue);
122                 
123                         if (intType == 0){ LogosListPref.erase(intValueSeek); LogosListPref.insert(std::make_pair(intValueSeek, intPref)); }
124                         else if (intType == 1){ LogosListPref.erase(intValueSeek); LogosListPref.insert(std::make_pair(intValueSeek, intPref)); }
125                         else if (intType == 2){ LogosListPref.erase(intValueSeek); LogosListPref.insert(std::make_pair(intValueSeek, intPref)); }
126                 
127                 } else if (PropertyName == wxT("MEDIATYPE")){
128                 
129                         if (intType == 0){ LogosListMediatype.erase(intValueSeek); LogosListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
130                         else if (intType == 1){ LogosListMediatype.erase(intValueSeek); LogosListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
131                         else if (intType == 2){ LogosListMediatype.erase(intValueSeek); LogosListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
132                 
133                 } else {
134                 
135                         // Something else we don't know about so append
136                         // to the tokens variable.
137                         
138                         if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
139                         
140                                 if (FirstToken == TRUE){
141                                 
142                                         PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
143                                         FirstToken = FALSE;
144                                 
145                                 } else {
146                                 
147                                         PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
148                                 
149                                 }
150                         
151                         }
152                 
153                 }
154         
155         }       
156         
157         intPropertyLen = wxSPropertySeg2.Len();
158         SplitPoints.clear();
159         SplitLength.clear();
160         intSplitsFound = 0;
161         intSplitSize = 0;
162         intPrevValue = 0;
163         
164         wxString wxSPhotoURI;
165         wxString wxSPhotoMIME;
166         wxString wxSPhotoEncoding;
167         wxString wxSPhotoData;
168         std::string base64enc;
169         
170         ProcessCaptureStrings(&wxSPropertySeg2);
171         
172         if (intSplitsFound == 0){
173         
174         } else {
175         
176                 std::map<int, int>::iterator striter;
177         
178                 striter = SplitLength.find(1);
179         
180                 wxStringTokenizer wSTDataType(wxSPropertySeg2.Mid(0, striter->second), wxT(":"));
181         
182                 while (wSTDataType.HasMoreTokens() == TRUE){
183                 
184                         wxSPhotoURI = wSTDataType.GetNextToken();
185                         wxSPhotoMIME = wSTDataType.GetNextToken();
186                         break;
187                 
188                 }                       
189         
190                 wxStringTokenizer wSTDataInfo(wxSPropertySeg2.Mid((striter->second + 1)), wxT(","));                    
191         
192                 while (wSTDataInfo.HasMoreTokens() == TRUE){
193                 
194                         wxSPhotoEncoding = wSTDataInfo.GetNextToken();
195                         wxSPhotoData = wSTDataInfo.GetNextToken();                                      
196                         base64enc = wxSPhotoData.mb_str();
197                         break;
198                 
199                 }
200         
201         }
202         
203         // Add the data to the General/Home/Work address variables.
204         
205         wxListItem coldata;
207         coldata.SetId(intValueSeek);
208         coldata.SetData(intValueSeek);
209         coldata.SetText(_("Picture"));
210         
211         ListCtrlIndex = lboLogos->InsertItem(coldata);
212                 
213         if (intPref > 0 && intPref < 101){
214                 
215                 lboLogos->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
216         
217         }
218                 
219         LogosList.erase(intValueSeek);
220         LogosListType.erase(intValueSeek);
221         LogosListTokens.erase(intValueSeek);
222         LogosListPictureType.erase(intValueSeek);
223         LogosListPicEncType.erase(intValueSeek);
224         LogosList.insert(std::make_pair(intValueSeek, base64enc));
225         LogosListPictureType.insert(std::make_pair(intValueSeek, wxSPhotoMIME));
226         LogosListPicEncType.insert(std::make_pair(intValueSeek, wxSPhotoEncoding));
227         
228         if (intType == 0){
229         
230                 LogosListType.insert(std::make_pair(intValueSeek, wxT("")));
231         
232         } else if (intType == 1){
233         
234                 LogosListType.insert(std::make_pair(intValueSeek, wxT("home")));
235                 lboLogos->SetItem(ListCtrlIndex, 1, _("Home"));
236         
237         } else if (intType == 2){
238         
239                 LogosListType.insert(std::make_pair(intValueSeek, wxT("work")));
240                 lboLogos->SetItem(ListCtrlIndex, 1, _("Work"));                         
241         
242         }
243         
244         LogosListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
245         
246         LogoCount++;
247         intValueSeek++;
248                         
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