Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
All items in the Logos tab in the contact editor now use ContactDataObject.
[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     frameCELogo->ShowModal();
103     delete frameCELogo;
104     frameCELogo = NULL;
107 void frmContactEditor::ModifyLogo( wxCommandEvent& event )
109     long longSelected = -1;
110     int intSelectedData = 0;
111     
112     if (!GetSelectedItem(lboLogos,
113                          &longSelected,
114                          &intSelectedData)){
115         return;
116     }
117     
118     frmContactEditorPicture *frameCELogo = new frmContactEditorPicture ( this );
119     frameCELogo->SetupPointers(&ContactEditorData.LogosList,
120                                &ContactEditorData.LogosListAltID,
121                                &ContactEditorData.LogosListPID,
122                                &ContactEditorData.LogosListType,
123                                &ContactEditorData.LogosListPicEncType,
124                                &ContactEditorData.LogosListPictureType,
125                                &ContactEditorData.LogosListTokens,
126                                &ContactEditorData.LogosListMediatype,
127                                &ContactEditorData.LogosListPref,
128                                lboLogos,
129                                intSelectedData);
130     frameCELogo->SetEditorMode(TRUE);
131     frameCELogo->ShowModal();
132     delete frameCELogo;
133     frameCELogo = NULL;
136 void frmContactEditor::DeleteLogo( wxCommandEvent& event )
138     long longSelected = -1;
139     int intSelectedData = 0;
140     
141     if (!GetSelectedItem(lboLogos,
142                          &longSelected,
143                          &intSelectedData)){
144         return;
145     }
146     
147     lboLogos->DeleteItem(longSelected);
148     
149     DeleteMapData(intSelectedData,
150                   &ContactEditorData.LogosList, &ContactEditorData.LogosListAltID, &ContactEditorData.LogosListPID, &ContactEditorData.LogosListType,
151                   &ContactEditorData.LogosListPicEncType, &ContactEditorData.LogosListPictureType, &ContactEditorData.LogosListTokens,
152                   &ContactEditorData.LogosListMediatype, &ContactEditorData.LogosListPref);
153     
154     wxMemoryInputStream istream(misc_emptyimage_png, sizeof(misc_emptyimage_png));
155     wxImage misc_emptyimage_png(istream, wxBITMAP_TYPE_PNG);
156     LogoImage = (wxBitmap)misc_emptyimage_png;
157     
158     imgLogo->SetBitmap(LogoImage);
161 void frmContactEditor::SaveLogo( wxCommandEvent &event )
163         
164         long longSelected = -1;
165         int intSelectedData = 0;
166     
167         if (!GetSelectedItem(lboLogos,
168                          &longSelected,
169                          &intSelectedData)){
170                 
171                 return;
172                 
173         }
174         
175         wxString FileTypes;
176         
177         wxString FinalFilename;
178         
179         std::map<int,std::string>::iterator initier;
180         std::map<int,wxString>::iterator logotypeiter;
181     
182         initier = ContactEditorData.LogosList.find(intSelectedData);
183         logotypeiter = ContactEditorData.LogosListPictureType.find(intSelectedData);
184         
185         if (logotypeiter->second == wxT("image/jpeg")){
186     
187                 FileTypes.Append("JPEG Image (*.jpeg)|*.jpeg");
188         
189         } else if (logotypeiter->second == wxT("image/png")){
191                 FileTypes.Append("PNG Image (*.png)|*.png");        
192         
193         } else if (logotypeiter->second == wxT("image/gif")){
194         
195                 FileTypes.Append("GIF Image (*.gif)|*.gif"); 
196         
197         } else {
199                 wxMessageBox(_("Picture format for saving is not supported."), _("Picture format unsupported"), wxOK, this);
200                 return;
202         }
203         
204         // Open up the dialog to save the picture.
205         
206         wxFileDialog ExportDlg(this, wxT("Save Logo"), wxT(""), wxT(""),
207                 FileTypes, wxFD_SAVE|wxFD_OVERWRITE_PROMPT);
208         
209         if (ExportDlg.ShowModal() == wxID_CANCEL){
210         
211                 return;
212         
213         }
214         
215         // Write out the picture to the file.
216         
217         wxFile LogoFile;
218         
219         if (LogoFile.Open(ExportDlg.GetPath(), wxFile::write)){
220         
221                 std::string base64dec;
222                 
223                 initier = ContactEditorData.LogosList.find(intSelectedData);
224                 base64dec = base64_decode(initier->second);
225                 
226                 LogoFile.Write(base64dec.c_str(), (size_t)base64dec.size());
228                 LogoFile.Close();
229         
230         } else {
231         
232                 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);
233                 return;
234         
235         }
236         
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