Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Fixed crash in frmContactEditorOrganisations in Edit mode.
[xestiaab/.git] / source / contacteditor / frmContactEditor-Logo.cpp
1 // frmContactEditor-Logo.cpp - frmContactEditor Logo tab subroutines.
2 //
3 // (c) 2012-2016 Xestia Software Development.
4 //
5 // This file is part of Xestia Address Book.
6 //
7 // Xestia Address Book is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by the
9 // Free Software Foundation, version 3 of the license.
10 //
11 // Xestia Address Book is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License along
17 // with Xestia Address Book. If not, see <http://www.gnu.org/licenses/>
19 #include "frmContactEditor.h"
20 #include "frmContactEditorPicture.h"
21 #include "../common/base64.h"
23 void frmContactEditor::LoadLogo( wxListEvent& event )
24 {
25     
26     long longSelected = -1;
27     int intSelectedData = 0;
28     
29     if (!GetSelectedItem(lboLogos,
30                          &longSelected,
31                          &intSelectedData)){
32         return;
33     }
34     
35     std::string base64dec;
36     
37     std::map<int,std::string>::iterator initier;
38     std::map<int,wxString>::iterator pictypeiter;
39     
40     initier = ContactEditorData.LogosList.find(intSelectedData);
41     pictypeiter = ContactEditorData.LogosListPictureType.find(intSelectedData);
42     
43     base64dec = base64_decode(initier->second);
44     
45     wxMemoryInputStream istream(base64dec.c_str(), (size_t)base64dec.size());
46     wxImage photo;
47     //wxMemoryInputStream istream(base64dec, (size_t)base64dec.size());
48     
49     if (pictypeiter->second == wxT("image/jpeg")){
50         
51         if (!photo.LoadFile(istream, wxBITMAP_TYPE_JPEG)){
52         
53             return;
54         
55         }
56         
57     } else if (pictypeiter->second == wxT("image/png")){
58         
59         if (!photo.LoadFile(istream, wxBITMAP_TYPE_PNG)){
60             
61             return;
62             
63         }
64         
65     } else if (pictypeiter->second == wxT("image/gif")){
66         
67         if (!photo.LoadFile(istream, wxBITMAP_TYPE_GIF)){
68             
69             return;
70             
71         }
72         
73     } else {
74     
75         return;
76     
77     }
78     
79     LogoImage = (wxBitmap)photo;
80     imgLogo->SetBitmap(LogoImage);
81     
82 }
84 void frmContactEditor::AddLogo( wxCommandEvent& event )
85 {
86     int intResult = 0;
87     
88     frmContactEditorPicture *frameCELogo = new frmContactEditorPicture ( this );
89     frameCELogo->SetEditorMode(FALSE);
90     intResult = GetLastInt(&ContactEditorData.LogosList);
91     frameCELogo->SetupPointers(&ContactEditorData.LogosList,
92                                &ContactEditorData.LogosListAltID,
93                                &ContactEditorData.LogosListPID,
94                                &ContactEditorData.LogosListType,
95                                &ContactEditorData.LogosListPicEncType,
96                                &ContactEditorData.LogosListPictureType,
97                                &ContactEditorData.LogosListTokens,
98                                &ContactEditorData.LogosListMediatype,
99                                &ContactEditorData.LogosListPref,
100                                lboLogos,
101                                (intValueSeek),
102                                FALSE);
103     frameCELogo->ShowModal();
104     delete frameCELogo;
105     frameCELogo = NULL;
108 void frmContactEditor::ModifyLogo( wxCommandEvent& event )
110     long longSelected = -1;
111     int intSelectedData = 0;
112     
113     if (!GetSelectedItem(lboLogos,
114                          &longSelected,
115                          &intSelectedData)){
116         return;
117     }
118     
119     frmContactEditorPicture *frameCELogo = new frmContactEditorPicture ( this );
120     frameCELogo->SetupPointers(&ContactEditorData.LogosList,
121                                &ContactEditorData.LogosListAltID,
122                                &ContactEditorData.LogosListPID,
123                                &ContactEditorData.LogosListType,
124                                &ContactEditorData.LogosListPicEncType,
125                                &ContactEditorData.LogosListPictureType,
126                                &ContactEditorData.LogosListTokens,
127                                &ContactEditorData.LogosListMediatype,
128                                &ContactEditorData.LogosListPref,
129                                lboLogos,
130                                intSelectedData,
131                                FALSE);
132     frameCELogo->SetEditorMode(TRUE);
133     frameCELogo->ShowModal();
134     delete frameCELogo;
135     frameCELogo = NULL;
138 void frmContactEditor::DeleteLogo( wxCommandEvent& event )
140     long longSelected = -1;
141     int intSelectedData = 0;
142     
143     if (!GetSelectedItem(lboLogos,
144                          &longSelected,
145                          &intSelectedData)){
146         return;
147     }
148     
149     lboLogos->DeleteItem(longSelected);
150     
151     DeleteMapData(intSelectedData,
152                   &ContactEditorData.LogosList, &ContactEditorData.LogosListAltID, &ContactEditorData.LogosListPID, &ContactEditorData.LogosListType,
153                   &ContactEditorData.LogosListPicEncType, &ContactEditorData.LogosListPictureType, &ContactEditorData.LogosListTokens,
154                   &ContactEditorData.LogosListMediatype, &ContactEditorData.LogosListPref);
155     
156     wxMemoryInputStream istream(misc_emptyimage_png, sizeof(misc_emptyimage_png));
157     wxImage misc_emptyimage_png(istream, wxBITMAP_TYPE_PNG);
158     LogoImage = (wxBitmap)misc_emptyimage_png;
159     
160     imgLogo->SetBitmap(LogoImage);
163 void frmContactEditor::SaveLogo( wxCommandEvent &event )
165         
166         long longSelected = -1;
167         int intSelectedData = 0;
168     
169         if (!GetSelectedItem(lboLogos,
170                          &longSelected,
171                          &intSelectedData)){
172                 
173                 return;
174                 
175         }
176         
177         wxString FileTypes;
178         
179         wxString FinalFilename;
180         
181         std::map<int,std::string>::iterator initier;
182         std::map<int,wxString>::iterator logotypeiter;
183     
184         initier = ContactEditorData.LogosList.find(intSelectedData);
185         logotypeiter = ContactEditorData.LogosListPictureType.find(intSelectedData);
186         
187         if (logotypeiter->second == wxT("image/jpeg")){
188     
189                 FileTypes.Append("JPEG Image (*.jpeg)|*.jpeg");
190         
191         } else if (logotypeiter->second == wxT("image/png")){
193                 FileTypes.Append("PNG Image (*.png)|*.png");        
194         
195         } else if (logotypeiter->second == wxT("image/gif")){
196         
197                 FileTypes.Append("GIF Image (*.gif)|*.gif"); 
198         
199         } else {
201                 wxMessageBox(_("Picture format for saving is not supported."), _("Picture format unsupported"), wxOK, this);
202                 return;
204         }
205         
206         // Open up the dialog to save the picture.
207         
208         wxFileDialog ExportDlg(this, wxT("Save Logo"), wxT(""), wxT(""),
209                 FileTypes, wxFD_SAVE|wxFD_OVERWRITE_PROMPT);
210         
211         if (ExportDlg.ShowModal() == wxID_CANCEL){
212         
213                 return;
214         
215         }
216         
217         // Write out the picture to the file.
218         
219         wxFile LogoFile;
220         
221         if (LogoFile.Open(ExportDlg.GetPath(), wxFile::write)){
222         
223                 std::string base64dec;
224                 
225                 initier = ContactEditorData.LogosList.find(intSelectedData);
226                 base64dec = base64_decode(initier->second);
227                 
228                 LogoFile.Write(base64dec.c_str(), (size_t)base64dec.size());
230                 LogoFile.Close();
231         
232         } else {
233         
234                 wxMessageBox(_("An error occured whilst saving the logo. Check that you have free space and permissions to write the picture at this location."), _("Logo save error"), wxOK, this);
235                 return;
236         
237         }
238         
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