X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2Fcontacteditor%2FfrmContactEditor-Sound.cpp;h=369238c227882c8ea1973bae2151d21fd17255c9;hb=bfe817b5bfae33a1eb666c463643ec119cd1d66d;hp=162662657e7f7f92d9d3af28e6f14937d00aae11;hpb=8398317ac255c2ece9e723aa4161f0e11ee0af3a;p=xestiaab%2F.git diff --git a/source/contacteditor/frmContactEditor-Sound.cpp b/source/contacteditor/frmContactEditor-Sound.cpp index 1626626..369238c 100644 --- a/source/contacteditor/frmContactEditor-Sound.cpp +++ b/source/contacteditor/frmContactEditor-Sound.cpp @@ -1,6 +1,6 @@ // frmContactEditor-Sound.cpp - frmContactEditor Sound tab subroutines. // -// (c) 2012-2015 Xestia Software Development. +// (c) 2012-2016 Xestia Software Development. // // This file is part of Xestia Address Book. // @@ -17,190 +17,239 @@ // with Xestia Address Book. If not, see #include "frmContactEditor.h" -#include "frmContactEditorSound.h" -#include "../common/base64.h" -#include -#include void frmContactEditor::AddSound( wxCommandEvent& event ) { - int intResult = 0; - - frmContactEditorSound *frameCESound = new frmContactEditorSound ( this ); - frameCESound->SetEditorMode(FALSE); - intResult = GetLastInt(&SoundsList); - frameCESound->SetupPointers(&SoundsList, - &SoundsListAltID, - &SoundsListPID, - &SoundsListType, - &SoundsListAudioType, - &SoundsListAudioEncType, - &SoundsListTokens, - &SoundsListMediatype, - &SoundsListPref, - lboSounds, - (intValueSeek)); - frameCESound->ShowModal(); - delete frameCESound; - frameCESound = NULL; + + // Bring up a form to add sound. + + frmContactEditorSound *frameCESound = new frmContactEditorSound ( this ); + frameCESound->SetEditorMode(FALSE); + frameCESound->SetupPointers(&ContactEditorData.SoundsList, + &ContactEditorData.SoundsListAltID, + &ContactEditorData.SoundsListPID, + &ContactEditorData.SoundsListType, + &ContactEditorData.SoundsListAudioType, + &ContactEditorData.SoundsListAudioEncType, + &ContactEditorData.SoundsListTokens, + &ContactEditorData.SoundsListMediatype, + &ContactEditorData.SoundsListPref, + lboSounds, + (intValueSeek)); + frameCESound->ShowModal(); + delete frameCESound; + frameCESound = NULL; + } void frmContactEditor::ModifySound( wxCommandEvent& event ) { - long longSelected = -1; - int intSelectedData = 0; - - if (!GetSelectedItem(lboSounds, - &longSelected, - &intSelectedData)){ - return; - } - - frmContactEditorSound *frameCESound = new frmContactEditorSound ( this ); - frameCESound->SetupPointers(&SoundsList, - &SoundsListAltID, - &SoundsListPID, - &SoundsListType, - &SoundsListAudioType, - &SoundsListAudioEncType, - &SoundsListTokens, - &SoundsListMediatype, - &SoundsListPref, - lboSounds, - intSelectedData); - frameCESound->SetEditorMode(TRUE); - frameCESound->ShowModal(); - delete frameCESound; - frameCESound = NULL; + + // Bring up a form to modify sound. + + long longSelected = -1; + int intSelectedData = 0; + + if (lboSounds->GetItemCount() == 0 || !GetSelectedItem(lboSounds, + &longSelected, + &intSelectedData)){ + return; + } + + frmContactEditorSound *frameCESound = new frmContactEditorSound ( this ); + frameCESound->SetupPointers(&ContactEditorData.SoundsList, + &ContactEditorData.SoundsListAltID, + &ContactEditorData.SoundsListPID, + &ContactEditorData.SoundsListType, + &ContactEditorData.SoundsListAudioType, + &ContactEditorData.SoundsListAudioEncType, + &ContactEditorData.SoundsListTokens, + &ContactEditorData.SoundsListMediatype, + &ContactEditorData.SoundsListPref, + lboSounds, + intSelectedData); + frameCESound->SetEditorMode(TRUE); + frameCESound->ShowModal(); + delete frameCESound; + frameCESound = NULL; + } void frmContactEditor::DeleteSound( wxCommandEvent& event ) { - long longSelected = -1; - int intSelectedData = 0; - - if (!GetSelectedItem(lboSounds, - &longSelected, - &intSelectedData)){ - return; - } + + // Bring up a form to delete sound. + + long longSelected = -1; + int intSelectedData = 0; - lboSounds->DeleteItem(longSelected); + if (lboSounds->GetItemCount() == 0 || !GetSelectedItem(lboSounds, + &longSelected, + &intSelectedData)){ + return; + } - DeleteMapData(intSelectedData, &SoundsList, &SoundsListAltID, - &SoundsListPID, &SoundsListType, &SoundsListAudioType, - &SoundsListAudioEncType, &SoundsListTokens, &SoundsListMediatype, - &SoundsListPref); + lboSounds->DeleteItem(longSelected); + DeleteMapData(intSelectedData, &ContactEditorData.SoundsList, &ContactEditorData.SoundsListAltID, + &ContactEditorData.SoundsListPID, &ContactEditorData.SoundsListType, &ContactEditorData.SoundsListAudioType, + &ContactEditorData.SoundsListAudioEncType, &ContactEditorData.SoundsListTokens, &ContactEditorData.SoundsListMediatype, + &ContactEditorData.SoundsListPref); + } void frmContactEditor::PlaySoundDetach() { - if (!AudioStreamPlayback.openFromMemory(base64dec.c_str(), base64declen)){ + // Play the sound and detach. + + if (!AudioStreamPlaybackPointer->openFromMemory(base64dec.c_str(), base64declen)){ - // Can't load file. We must flee... - // Also show an error message too. + // 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); + wxMessageBox(_("This file is in an audio format that is unsupported or is not an audio file."), _("Error opening audio file"), wxICON_ERROR); - return; + return; - } + } - btnStop->Enable(); - - //AudioStreamPlayback.setbuffer(AudioBuffer); - AudioStreamPlayback.play(); - - /*timespec n1, n2; - - n1.tv_sec = 0; - n1.tv_nsec = 100000000L;*/ + btnStop->Enable(); + + AudioStreamPlaybackPointer->play(); - //while (TimeA != TimeB){ - while (AudioStreamPlayback.getStatus() == sf::SoundSource::Playing){ + while (AudioStreamPlaybackPointer->getStatus() == sf::SoundSource::Playing){ - // We poll this every 100ms in order to conserve CPU usage. + // We poll this every 100ms in order to conserve CPU usage. - SleepFor(100000000); + SleepFor(10000000); - } - - btnStop->Disable(); + } + + btnStop->Disable(); + btnPlay->Enable(); } void frmContactEditor::PlaySound( wxCommandEvent& event ) { - //sf::Music *AudioPlayback = new sf::Music; - //AudioStream *AudioStreamPlayback = new AudioStream; - //sf::SoundBuffer *AudioBuffer = new sf::SoundBuffer; - - //sf::Sound *AudioPlayback = new sf::Sound; - - //delete(AudioPlayback); + // Play the sound. - //delete(AudioPlayback); - //delete(AudioStreamPlayback); - //delete(AudioBuffer); + long longSelected = -1; + int intSelectedData = 0; - //AudioPlayback = NULL; - //AudioStreamPlayback = NULL; - //AudioBuffer = NULL; - - //return; - - long longSelected = -1; - int intSelectedData = 0; - - // Check if sound is still being played and if it is, stop it. + if (AudioStreamPlaybackPointer == nullptr){ + + AudioStreamPlaybackPointer = new AudioStream; + + } + + // Check if sound is still being played and if it is, stop it. - if (AudioStreamPlayback.getStatus() == sf::SoundSource::Playing){ + if (AudioStreamPlaybackPointer->getStatus() == sf::SoundSource::Playing){ - AudioStreamPlayback.stop(); + AudioStreamPlaybackPointer->stop(); - } - - if (!GetSelectedItem(lboSounds, - &longSelected, - &intSelectedData)){ - return; - } + } - std::map::iterator initier; + if (lboSounds->GetItemCount() == 0 || !GetSelectedItem(lboSounds, + &longSelected, + &intSelectedData)){ + return; + } + + btnPlay->Disable(); + + std::map::iterator initier; - initier = SoundsList.find(intSelectedData); + initier = ContactEditorData.SoundsList.find(intSelectedData); - base64dec = base64_decode(initier->second); - base64declen = base64dec.size(); + base64dec = base64_decode(initier->second); + base64declen = base64dec.size(); - std::thread AudioPlaybackThread(&frmContactEditor::PlaySoundDetach, this); - AudioPlaybackThread.detach(); + std::thread AudioPlaybackThread(&frmContactEditor::PlaySoundDetach, this); + AudioPlaybackThread.detach(); - return; + return; } void frmContactEditor::StopSound( wxCommandEvent& event ) { - - if (AudioStreamPlayback.getStatus() == sf::SoundSource::Playing){ - - AudioStreamPlayback.stop(); + + // Stop the sound. + + if (AudioStreamPlaybackPointer != nullptr && AudioStreamPlaybackPointer->getStatus() == sf::SoundSource::Playing){ - } + AudioStreamPlaybackPointer->stop(); + + } - btnStop->Disable(); - - return; + btnStop->Disable(); + btnPlay->Enable(); + + return; } void frmContactEditor::SaveSound( wxCommandEvent &event ) { + + // Save the sound. + + long longSelected = -1; + int intSelectedData = 0; + + if (lboSounds->GetItemCount() == 0 || !GetSelectedItem(lboSounds, + &longSelected, + &intSelectedData)){ + + return; + + } + + wxString FileTypes; + + wxString FinalFilename; + + std::map::iterator initier; + std::map::iterator soundtypeiter; + + initier = ContactEditorData.SoundsList.find(intSelectedData); + soundtypeiter = ContactEditorData.SoundsListAudioType.find(intSelectedData); + + // Open up the dialog to save the picture. + + wxFileDialog ExportDlg(this, wxT("Save Sound"), wxT(""), wxT(""), + FileTypes, wxFD_SAVE|wxFD_OVERWRITE_PROMPT); + + if (ExportDlg.ShowModal() == wxID_CANCEL){ + + return; + + } + + // Write out the picture to the file. + + wxFile SoundFile; + + if (SoundFile.Open(ExportDlg.GetPath(), wxFile::write)){ + + std::string base64dec; + + initier = ContactEditorData.SoundsList.find(intSelectedData); + base64dec = base64_decode(initier->second); + + SoundFile.Write(base64dec.c_str(), (size_t)base64dec.size()); + + SoundFile.Close(); + + } else { + + wxMessageBox(_("An error occured whilst saving the sound. Check that you have free space and permissions to write the picture at this location."), _("Sound save error"), wxOK, this); + return; - return; + } } \ No newline at end of file