X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2Fcontacteditor%2FfrmContactEditor-Picture.cpp;h=e2eeae7089591f9095f11a8d5ebbf1a2fb732ea0;hb=bac054ea5eda94fe663d8b1a7c680ae80de8075c;hp=ce2bb561530aae020d9353e72630ae1b9ecf010d;hpb=da64d37d0a13895554e4ad945c46dd0af6d1c0e6;p=xestiaab%2F.git diff --git a/source/contacteditor/frmContactEditor-Picture.cpp b/source/contacteditor/frmContactEditor-Picture.cpp index ce2bb56..e2eeae7 100644 --- a/source/contacteditor/frmContactEditor-Picture.cpp +++ b/source/contacteditor/frmContactEditor-Picture.cpp @@ -1,6 +1,6 @@ // frmContactEditor-Picture.cpp - frmContactEditor Picture tab subroutines. // -// (c) 2012-2015 Xestia Software Development. +// (c) 2012-2016 Xestia Software Development. // // This file is part of Xestia Address Book. // @@ -16,145 +16,238 @@ // You should have received a copy of the GNU General Public License along // with Xestia Address Book. If not, see +#include #include "frmContactEditor.h" #include "frmContactEditorPicture.h" #include "../common/base64.h" void frmContactEditor::AddPicture( wxCommandEvent& event ) { - int intResult = 0; - - frmContactEditorPicture *frameCEPicture = new frmContactEditorPicture ( this ); - frameCEPicture->SetEditorMode(FALSE); - intResult = GetLastInt(&PicturesList); - frameCEPicture->SetupPointers(&PicturesList, - &PicturesListAltID, - &PicturesListPID, - &PicturesListType, - &PicturesListPicEncType, - &PicturesListPictureType, - &PicturesListTokens, - &PicturesListMediatype, - &PicturesListPref, - lboPictures, - (intValueSeek)); - frameCEPicture->ShowModal(); - delete frameCEPicture; - frameCEPicture = NULL; + + // Bring up window for adding a picture. + + frmContactEditorPicture *frameCEPicture = new frmContactEditorPicture ( this ); + frameCEPicture->SetEditorMode(FALSE); + frameCEPicture->SetupPointers(&ContactEditorData.PicturesList, + &ContactEditorData.PicturesListAltID, + &ContactEditorData.PicturesListPID, + &ContactEditorData.PicturesListType, + &ContactEditorData.PicturesListPicEncType, + &ContactEditorData.PicturesListPictureType, + &ContactEditorData.PicturesListTokens, + &ContactEditorData.PicturesListMediatype, + &ContactEditorData.PicturesListPref, + lboPictures, + (intValueSeek), + TRUE); + frameCEPicture->ShowModal(); + delete frameCEPicture; + frameCEPicture = NULL; + intValueSeek++; + } void frmContactEditor::ModifyPicture( wxCommandEvent& event ) { - long longSelected = -1; - int intSelectedData = 0; - - if (!GetSelectedItem(lboPictures, - &longSelected, - &intSelectedData)){ - return; - } - - frmContactEditorPicture *frameCEPicture = new frmContactEditorPicture ( this ); - frameCEPicture->SetupPointers(&PicturesList, - &PicturesListAltID, - &PicturesListPID, - &PicturesListType, - &PicturesListPicEncType, - &PicturesListPictureType, - &PicturesListTokens, - &PicturesListMediatype, - &PicturesListPref, - lboPictures, - intSelectedData); - frameCEPicture->SetEditorMode(TRUE); - frameCEPicture->ShowModal(); - delete frameCEPicture; - frameCEPicture = NULL; + + // Bring up window for modifying a picture. + + long longSelected = -1; + int intSelectedData = 0; + + if (lboPictures->GetItemCount() == 0 || !GetSelectedItem(lboPictures, + &longSelected, + &intSelectedData)){ + return; + } + + frmContactEditorPicture *frameCEPicture = new frmContactEditorPicture ( this ); + frameCEPicture->SetupPointers(&ContactEditorData.PicturesList, + &ContactEditorData.PicturesListAltID, + &ContactEditorData.PicturesListPID, + &ContactEditorData.PicturesListType, + &ContactEditorData.PicturesListPicEncType, + &ContactEditorData.PicturesListPictureType, + &ContactEditorData.PicturesListTokens, + &ContactEditorData.PicturesListMediatype, + &ContactEditorData.PicturesListPref, + lboPictures, + intSelectedData, + TRUE); + frameCEPicture->SetEditorMode(TRUE); + frameCEPicture->ShowModal(); + delete frameCEPicture; + frameCEPicture = NULL; } void frmContactEditor::DeletePicture( wxCommandEvent& event ) { - long longSelected = -1; - int intSelectedData = 0; - - if (!GetSelectedItem(lboPictures, - &longSelected, - &intSelectedData)){ - return; - } - - lboPictures->DeleteItem(longSelected); - - DeleteMapData(intSelectedData, - &PicturesList, &PicturesListAltID, &PicturesListPID, &PicturesListType, - &PicturesListPicEncType, &PicturesListPictureType, &PicturesListTokens, - &PicturesListMediatype, &PicturesListPref); - - wxMemoryInputStream istream(misc_emptyimage_png, sizeof(misc_emptyimage_png)); - wxImage misc_emptyimage_png(istream, wxBITMAP_TYPE_PNG); - PictureImage = (wxBitmap)misc_emptyimage_png; - - imgPicture->SetBitmap(PictureImage); + + // Bring up window for deleting a picture. + + long longSelected = -1; + int intSelectedData = 0; + + if (lboPictures->GetItemCount() == 0 || !GetSelectedItem(lboPictures, + &longSelected, + &intSelectedData)){ + return; + } + + lboPictures->DeleteItem(longSelected); + + DeleteMapData(intSelectedData, + &ContactEditorData.PicturesList, &ContactEditorData.PicturesListAltID, &ContactEditorData.PicturesListPID, &ContactEditorData.PicturesListType, + &ContactEditorData.PicturesListPicEncType, &ContactEditorData.PicturesListPictureType, &ContactEditorData.PicturesListTokens, + &ContactEditorData.PicturesListMediatype, &ContactEditorData.PicturesListPref); + + wxMemoryInputStream istream(misc_emptyimage_png, sizeof(misc_emptyimage_png)); + wxImage misc_emptyimage_png(istream, wxBITMAP_TYPE_PNG); + PictureImage = (wxBitmap)misc_emptyimage_png; + + imgPicture->SetBitmap(PictureImage); + } void frmContactEditor::LoadPicture( wxListEvent& event ) { - long longSelected = -1; - int intSelectedData = 0; - - if (!GetSelectedItem(lboPictures, - &longSelected, - &intSelectedData)){ - return; - } + // Load the picture. + + long longSelected = -1; + int intSelectedData = 0; - std::string base64dec; + if (lboPictures->GetItemCount() == 0 || !GetSelectedItem(lboPictures, + &longSelected, + &intSelectedData)){ + return; + } - std::map::iterator initier; - std::map::iterator pictypeiter; + std::string base64dec; + + std::map::iterator initier; + std::map::iterator pictypeiter; - initier = PicturesList.find(intSelectedData); - pictypeiter = PicturesListPictureType.find(intSelectedData); + initier = ContactEditorData.PicturesList.find(intSelectedData); + pictypeiter = ContactEditorData.PicturesListPictureType.find(intSelectedData); - base64dec = base64_decode(initier->second); + base64dec = base64_decode(initier->second); - wxMemoryInputStream istream(base64dec.c_str(), (size_t)base64dec.size()); - wxImage photo; - //wxMemoryInputStream istream(base64dec, (size_t)base64dec.size()); + wxMemoryInputStream istream(base64dec.c_str(), (size_t)base64dec.size()); + wxImage photo; - if (pictypeiter->second == wxT("image/jpeg")){ + if (pictypeiter->second == wxT("image/jpeg")){ - if (!photo.LoadFile(istream, wxBITMAP_TYPE_JPEG)){ + if (!photo.LoadFile(istream, wxBITMAP_TYPE_JPEG)){ - return; + return; - } + } - } else if (pictypeiter->second == wxT("image/png")){ + } else if (pictypeiter->second == wxT("image/png")){ - if (!photo.LoadFile(istream, wxBITMAP_TYPE_PNG)){ + if (!photo.LoadFile(istream, wxBITMAP_TYPE_PNG)){ - return; + return; - } + } - } else if (pictypeiter->second == wxT("image/gif")){ + } else if (pictypeiter->second == wxT("image/gif")){ - if (!photo.LoadFile(istream, wxBITMAP_TYPE_GIF)){ + if (!photo.LoadFile(istream, wxBITMAP_TYPE_GIF)){ - return; + return; - } + } - } else { + } else { - return; + return; - } + } - PictureImage = (wxBitmap)photo; - imgPicture->SetBitmap(PictureImage); + PictureImage = (wxBitmap)photo; + imgPicture->SetBitmap(PictureImage); } + +void frmContactEditor::SavePicture( wxCommandEvent &event ) +{ + + // Save the picture to a file. + + long longSelected = -1; + int intSelectedData = 0; + + if (lboPictures->GetItemCount() == 0 || !GetSelectedItem(lboPictures, + &longSelected, + &intSelectedData)){ + + return; + + } + + wxString FileTypes; + + wxString FinalFilename; + + std::map::iterator initier; + std::map::iterator pictypeiter; + + initier = ContactEditorData.PicturesList.find(intSelectedData); + pictypeiter = ContactEditorData.PicturesListPictureType.find(intSelectedData); + + if (pictypeiter->second == wxT("image/jpeg")){ + + FileTypes.Append("JPEG Image (*.jpeg)|*.jpeg"); + + } else if (pictypeiter->second == wxT("image/png")){ + + FileTypes.Append("PNG Image (*.png)|*.png"); + + } else if (pictypeiter->second == wxT("image/gif")){ + + FileTypes.Append("GIF Image (*.gif)|*.gif"); + + } else { + + wxMessageBox(_("Picture format for saving is not supported."), _("Picture format unsupported"), wxOK, this); + return; + + } + + // Open up the dialog to save the picture. + + wxFileDialog ExportDlg(this, wxT("Save Picture"), wxT(""), wxT(""), + FileTypes, wxFD_SAVE|wxFD_OVERWRITE_PROMPT); + + if (ExportDlg.ShowModal() == wxID_CANCEL){ + + return; + + } + + // Write out the picture to the file. + + wxFile PictureFile; + + if (PictureFile.Open(ExportDlg.GetPath(), wxFile::write)){ + + std::string base64dec; + + initier = ContactEditorData.PicturesList.find(intSelectedData); + base64dec = base64_decode(initier->second); + + PictureFile.Write(base64dec.c_str(), (size_t)base64dec.size()); + + PictureFile.Close(); + + } else { + + wxMessageBox(_("An error occured whilst saving the picture. Check that you have free space and permissions to write the picture at this location."), _("Picture save error"), wxOK, this); + return; + + } + +} \ No newline at end of file