You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebase/khotkeys/kcontrol/voicerecordpage.cpp

125 lines
3.7 KiB

/****************************************************************************
KHotKeys
Copyright (C) 2005 Olivier Goffart < ogoffart @ kde.org >
Distributed under the terms of the GNU General Public License version 2.
****************************************************************************/
#include <tqwidget.h>
#include <tqlabel.h>
#include <tqpushbutton.h>
#include <klineedit.h>
#include <kstandarddirs.h>
#include <tdelocale.h>
#include <tdemessagebox.h>
#include "voicerecordpage.h"
#include "voicerecorder.h"
#include "voicesignature.h"
#include "voices.h"
namespace KHotKeys
{
VoiceRecordPage::VoiceRecordPage( const TQString &voiceid_P, TQWidget *parent, const char *name)
: TQVBox(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 TQLabel(_message, this, "label");
_label->setAlignment(TQLabel::AlignLeft | TQLabel::WordBreak |
TQLabel::AlignVCenter);
_lineEdit = new KLineEdit( this );
_lineEdit->setText(voiceid_P);
Sound s;
if(voiceid_P!=TQString::null)
{
TQString fileName = locateLocal( "data", "khotkeys/" + voiceid_P + "1.wav" );
s.load(fileName);
}
_recorder1 = new VoiceRecorder(s, voiceid_P, this, "recorder");
if(voiceid_P!=TQString::null)
{
TQString 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);
TQWidget *spacer = new TQWidget(this, "spacer");
setStretchFactor(spacer, 1);
connect(_recorder1, TQT_SIGNAL(recorded(bool)) , this, TQT_SLOT(slotChanged()));
connect(_recorder2, TQT_SIGNAL(recorded(bool)) , this, TQT_SLOT(slotChanged()));
connect(_lineEdit , TQT_SIGNAL( textChanged (const TQString&)) , this , TQT_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 ) ) );
}
TQString VoiceRecordPage::getVoiceId() const
{
return _lineEdit->text();
}
VoiceSignature VoiceRecordPage::getVoiceSignature(int ech) const
{
VoiceRecorder *recorder= (ech==1) ? _recorder1 : _recorder2 ;
TQString fileName = locateLocal( "data", "khotkeys/" + getVoiceId() + TQString::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"