diff options
Diffstat (limited to 'khotkeys/kcontrol/voicerecordpage.cpp')
-rw-r--r-- | khotkeys/kcontrol/voicerecordpage.cpp | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/khotkeys/kcontrol/voicerecordpage.cpp b/khotkeys/kcontrol/voicerecordpage.cpp new file mode 100644 index 000000000..385d78dda --- /dev/null +++ b/khotkeys/kcontrol/voicerecordpage.cpp @@ -0,0 +1,124 @@ +/**************************************************************************** + + KHotKeys + + Copyright (C) 2005 Olivier Goffart < ogoffart @ kde.org > + + Distributed under the terms of the GNU General Public License version 2. + +****************************************************************************/ + +#include <qwidget.h> +#include <qlabel.h> +#include <qpushbutton.h> +#include <klineedit.h> +#include <kstandarddirs.h> + +#include <klocale.h> +#include <kmessagebox.h> + +#include "voicerecordpage.h" +#include "voicerecorder.h" +#include "voicesignature.h" +#include "voices.h" + +namespace KHotKeys +{ + +VoiceRecordPage::VoiceRecordPage( const QString &voiceid_P, QWidget *parent, const char *name) + : QVBox(parent, name) , _original_voiceId(voiceid_P) + { + _message = i18n("Enter a code for the sound (e.g. the word you are saying) and record the same word twice."); + + _label = new QLabel(_message, this, "label"); + _label->setAlignment(QLabel::AlignLeft | QLabel::WordBreak | + QLabel::AlignVCenter); + + _lineEdit = new KLineEdit( this ); + _lineEdit->setText(voiceid_P); + + + Sound s; + if(voiceid_P!=QString::null) + { + QString fileName = locateLocal( "data", "khotkeys/" + voiceid_P + "1.wav" ); + s.load(fileName); + } + _recorder1 = new VoiceRecorder(s, voiceid_P, this, "recorder"); + if(voiceid_P!=QString::null) + { + QString fileName = locateLocal( "data", "khotkeys/" + voiceid_P + "2.wav" ); + s.load(fileName); + } + _recorder2 = new VoiceRecorder(s, voiceid_P, this, "recorder"); + + //_recorder->setMinimumHeight(150); + //setStretchFactor(_recorder, 1); + + QWidget *spacer = new QWidget(this, "spacer"); + setStretchFactor(spacer, 1); + + + connect(_recorder1, SIGNAL(recorded(bool)) , this, SLOT(slotChanged())); + connect(_recorder2, SIGNAL(recorded(bool)) , this, SLOT(slotChanged())); + connect(_lineEdit , SIGNAL( textChanged (const QString&)) , this , SLOT(slotChanged())); + + + } + +VoiceRecordPage::~VoiceRecordPage() + { + } + +void VoiceRecordPage::slotChanged() + { + bool voiceCodeOK=!_lineEdit->text().isEmpty(); + if( voiceCodeOK && _lineEdit->text() != _original_voiceId) + { + voiceCodeOK=!voice_handler->doesVoiceCodeExists(_lineEdit->text()); + if(!voiceCodeOK) + { + _label->setText(i18n("<qt>%1<br><font color='red'>The sound code already exists</font></qt>").arg(_message)); + } + } + if( voiceCodeOK ) + { + voiceCodeOK=_recorder1->state()!=VoiceRecorder::sIncorrect && _recorder2->state()!=VoiceRecorder::sIncorrect; + if(!voiceCodeOK) + { + _label->setText(i18n("<qt>%1<br><font color='red'>One of the sound references is not correct</font></qt>").arg(_message)); + } + } + if( voiceCodeOK ) + _label->setText(_message); + + emit voiceRecorded( voiceCodeOK && + ( ( (_recorder1->state()==VoiceRecorder::sModified || _recorder2->state()==VoiceRecorder::sModified || _lineEdit->text() != _original_voiceId) + && !_original_voiceId.isEmpty()) + || (_recorder1->state()==VoiceRecorder::sModified && _recorder2->state()==VoiceRecorder::sModified ) ) ); + } + +QString VoiceRecordPage::getVoiceId() const + { + return _lineEdit->text(); + } + +VoiceSignature VoiceRecordPage::getVoiceSignature(int ech) const + { + VoiceRecorder *recorder= (ech==1) ? _recorder1 : _recorder2 ; + QString fileName = locateLocal( "data", "khotkeys/" + getVoiceId() + QString::number(ech) + ".wav" ); + Sound s=recorder->sound(); + s.save(fileName); + return VoiceSignature(s); + } + +bool VoiceRecordPage::isModifiedSignature(int ech) const + { + VoiceRecorder *recorder= (ech==1) ? _recorder1 : _recorder2 ; + return recorder->state()==VoiceRecorder::sModified; + } + + +} // namespace KHotKeys + +#include "voicerecordpage.moc" |