#include "frmContactEditorSound.h" #include #include #include #include "../common/textprocessing.h" #include "../common/base64.h" #include "../common/mime.h" frmContactEditorSound::frmContactEditorSound( wxWindow* parent ) : frmContactEditorSoundADT( parent ) { EditorMode = FALSE; sliPriority->Disable(); cmbType->Append(wxT("")); cmbType->Append(_("Home")); cmbType->Append(_("Work")); } void frmContactEditorSound::EnablePriority( wxCommandEvent& event ) { if (chkUsePref->IsChecked()){ sliPriority->Enable(); } else { sliPriority->Disable(); } } void frmContactEditorSound::ProcessData( wxCommandEvent& event ) { long ListCtrlIndex; if (EditorMode == FALSE){ // Load the file into memory. wxFile AudioFile; wxString wxSAudioString; wxString wxSAudioFilename; wxString wxSAudioMIMEType; sf::SoundBuffer AudioBuffer; wxFileOffset len; std::string b64enc; wxSAudioFilename = fipSound->GetPath(); /* #if wxABI_VERSION < 20900 if (AudioFile.Open(wxSAudioFilename.c_str(), wxT("rb"))){ #else if (AudioFile.Open(wxSAudioFilename, wxT("rb"))){ #endif */ if (AudioFile.Open(wxSAudioFilename, wxFile::read)){ ssize_t flen; len = AudioFile.Length(); unsigned char* AudioFileData = new unsigned char[len]; flen = AudioFile.Read(AudioFileData, (size_t)len); // Get MIME Type. /*const char *MIMEType; magic_t MagicCookie = magic_open(MAGIC_MIME); magic_setflags(MagicCookie, MAGIC_MIME_TYPE); if (!MagicCookie){ wxMessageBox(_("An error occured with the support library for getting the picture type."), _("Error opening picture file"), wxICON_ERROR); return; } if (magic_load(MagicCookie, NULL) != 0) { wxMessageBox(_("An error occured whilst determining the picture type."), _("Error opening picture file"), wxICON_ERROR); return; } MIMEType = magic_file(MagicCookie, wxSAudioFilename.mb_str()); wxSAudioMIMEType = wxString::FromUTF8(MIMEType); magic_close(MagicCookie);*/ wxSAudioMIMEType = GetMIME(wxSAudioFilename); // Check to make sure it is an audio file. if (!AudioBuffer.loadFromMemory(AudioFileData, (size_t)len)){ // Can't load file. We must flee... // Also show an error message too. wxMessageBox(_("This file is in an audio format that is unsupported or is not an audio file."), _("Error opening audio file"), wxICON_ERROR); return; } // Covert the file into base64. b64enc = base64_encode(AudioFileData, (int)len); delete[] AudioFileData; } else { wxMessageBox(_("There was an error opening the audio file!"), _("Error opening audio file"), wxICON_ERROR); return; } SoundListPtr->insert(std::make_pair(SoundListIndex, b64enc)); wxString strValue; strValue.Clear(); strValue = cmbType->GetString(cmbType->GetSelection()); // Setup Sound Type. if (strValue == _("Home")) { SoundListTypePtr->insert(std::make_pair(SoundListIndex, wxT("home"))); } else if (strValue == _("Work")) { SoundListTypePtr->insert(std::make_pair(SoundListIndex, wxT("work"))); } else { SoundListTypePtr->insert(std::make_pair(SoundListIndex, wxT(""))); } // Setup Organisation Priority. if (chkUsePref->IsChecked()){ SoundListPrefPtr->insert(std::make_pair(SoundListIndex, sliPriority->GetValue())); } else { SoundListPrefPtr->insert(std::make_pair(SoundListIndex, 0)); } // Setup MIME Type. SoundListAudioTypePtr->insert(std::make_pair(SoundListIndex, wxSAudioMIMEType)); // Setup Encoding Type. SoundListAudioEncTypePtr->insert(std::make_pair(SoundListIndex, wxT("base64"))); // Add to form. wxListItem coldata; coldata.SetId(SoundListIndex); coldata.SetData(SoundListIndex); coldata.SetText(_("Sound")); ListCtrlIndex = SoundListCtrlPtr->InsertItem(coldata); if (strValue == _("Home")) { SoundListCtrlPtr->SetItem(ListCtrlIndex, 1, _("Home")); } else if (strValue == _("Work")) { SoundListCtrlPtr->SetItem(ListCtrlIndex, 1, _("Work")); } else { } if (chkUsePref->IsChecked()){ SoundListCtrlPtr->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), sliPriority->GetValue())); } this->Close(); } else if (EditorMode == TRUE) { // Do not touch the audio file but update the settings // associated with the audio file. long longSelected = -1; wxString strValue; // Update Category Type. SoundListTypePtr->erase(SoundListIndex); strValue = cmbType->GetString(cmbType->GetSelection()); if (strValue == _("Home")) { SoundListTypePtr->insert(std::make_pair(SoundListIndex, wxT("home"))); } else if (strValue == _("Work")) { SoundListTypePtr->insert(std::make_pair(SoundListIndex, wxT("work"))); } // Update Category Priority. SoundListPrefPtr->erase(SoundListIndex); if (chkUsePref->IsChecked()){ SoundListPrefPtr->insert(std::make_pair(SoundListIndex, sliPriority->GetValue())); } else { SoundListPrefPtr->insert(std::make_pair(SoundListIndex, 0)); } // Update form. longSelected = SoundListCtrlPtr->GetNextItem(longSelected, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); if (longSelected == -1){ return; } SoundListCtrlPtr->SetItem(longSelected, 0, wxT("Sound")); SoundListCtrlPtr->SetItem(longSelected, 1, strValue); if (chkUsePref->IsChecked()){ SoundListCtrlPtr->SetItem(longSelected, 2, wxString::Format(wxT("%i"), sliPriority->GetValue())); } else { SoundListCtrlPtr->SetItem(longSelected, 2, wxT("")); } this->Close(); } } void frmContactEditorSound::CloseWindow( wxCommandEvent& event ) { this->Close(); } void frmContactEditorSound::SetEditorMode(bool EditMode) { // Set if the editor is adding or editing an address. // FALSE = Add // TRUE = Edit if (EditMode == FALSE){ EditorMode = FALSE; btnAction->SetLabel(_("Add")); this->SetTitle(_("Add Sound")); } else if (EditMode == TRUE){ EditorMode = TRUE; btnAction->SetLabel(_("Modify")); this->SetTitle(_("Modify Sound")); fipSound->Disable(); std::map::iterator intiter; std::map::iterator striter; wxString strValue; // Load the data into the form. Get the website. striter = SoundListTypePtr->find(SoundListIndex); if (striter->first == SoundListIndex){ strValue = striter->second; } if (strValue == wxT("home")){ cmbType->SetSelection(1); } else if (strValue == wxT("work")){ cmbType->SetSelection(2); } else { cmbType->SetSelection(0); } //strValue.Clear(); // Get the website priority. intiter = SoundListPrefPtr->find(SoundListIndex); if (intiter->first == SoundListIndex && intiter->second > 0){ sliPriority->SetValue(intiter->second); sliPriority->Enable(); chkUsePref->SetValue(TRUE); } } } void frmContactEditorSound::SetupPointers(std::map *SoundList, std::map *SoundListAltID, std::map *SoundListPID, std::map *SoundListType, std::map *SoundListAudioType, std::map *SoundListAudioEncType, std::map *SoundListTokens, std::map *SoundListMediatype, std::map *SoundListPref, wxListCtrl *SoundListCtrl, int SoundIndex ) { SoundListPtr = SoundList; SoundListAltIDPtr = SoundListAltID; SoundListPIDPtr = SoundListPID; SoundListTypePtr = SoundListType; SoundListAudioTypePtr = SoundListAudioType; SoundListAudioEncTypePtr = SoundListAudioEncType; SoundListTokensPtr = SoundListTokens; SoundListMediatypePtr = SoundListMediatype; SoundListPrefPtr = SoundListPref; SoundListCtrlPtr = SoundListCtrl; SoundListIndex = SoundIndex; }