diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | ce599e4f9f94b4eb00c1b5edb85bce5431ab3df2 (patch) | |
tree | d3bb9f5d25a2dc09ca81adecf39621d871534297 /klettres/klettres/soundfactory.cpp | |
download | tdeedu-ce599e4f9f94b4eb00c1b5edb85bce5431ab3df2.tar.gz tdeedu-ce599e4f9f94b4eb00c1b5edb85bce5431ab3df2.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdeedu@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'klettres/klettres/soundfactory.cpp')
-rw-r--r-- | klettres/klettres/soundfactory.cpp | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/klettres/klettres/soundfactory.cpp b/klettres/klettres/soundfactory.cpp new file mode 100644 index 00000000..31f243fa --- /dev/null +++ b/klettres/klettres/soundfactory.cpp @@ -0,0 +1,148 @@ +/* ------------------------------------------------------------- + From KDE Tuberling + mailto:e.bischoff@noos.fr + ------------------------------------------------------------- */ +/* + * Copyright (C) 2001 Eric Bischoff + 2004-2006 Anne-Marie Mahfouf <annma@kde.org> + + This program is free software; you can redistribute it and/or + modify it under the terms of version 2 of the GNU General Public + License as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +#include <stdlib.h> + +#include <kmessagebox.h> +#include <klocale.h> +#include <kaudioplayer.h> +#include <kdebug.h> +#include <kstandarddirs.h> + +#include "soundfactory.h" +#include "soundfactory.moc" +#include "klettres.h" +#include "prefs.h" + + +SoundFactory::SoundFactory(KLettres *parent, const char *name) + : QObject(parent, name) +{ + klettres = parent; + + namesList = filesList = 0; + sounds = 0; + + bool ok = klettres->loadLayout(m_layoutsDocument); + if (ok) change(Prefs::language()); + if (!ok) loadFailure(); +} + +SoundFactory::~SoundFactory() +{ +} + +void SoundFactory::change(QString currentLanguage) +{ + //go load the sounds for the current language + bool ok = loadLanguage(m_layoutsDocument, currentLanguage); + kdDebug() << "ok " << ok << endl; + //tell the user if there are no sounds + if (!ok) loadFailure(); +} + +void SoundFactory::playSound(int mySound) +{ + QString soundFile; + + if ((uint) mySound >= sounds) return; + + soundFile = locate("data", "klettres/" + filesList[mySound]); + kdDebug() << "soundFile " << soundFile << endl; + + if (soundFile == 0) return; + + KAudioPlayer::play(soundFile); +} + +void SoundFactory::loadFailure() +{ + KMessageBox::error(klettres, i18n("Error while loading the sound names.")); +} + +bool SoundFactory::loadLanguage(QDomDocument &layoutDocument, QString currentLanguage) +{ + QDomNodeList languagesList, + alphabetList, + syllablesList, + soundNamesList; + QDomElement languageElement, + alphabetElement, + syllableElement, + soundNameElement; + QDomAttr nameAttribute, fileAttribute; + + languagesList = layoutDocument.elementsByTagName("language"); + QDomAttr codeAttribute; + //check if the sound files match current language + languageElement = (const QDomElement &) languagesList.item(0).toElement(); + codeAttribute = languageElement.attributeNode("code"); + if (currentLanguage != codeAttribute.value()) { + kdDebug() << "Fail reading language !!! " << endl; + return false; + } + else kdDebug() << "current language " << currentLanguage << endl; + //load the sounds for level 1 and 2 (alphabet) + if ((Prefs::level() == 1) || (Prefs::level() == 2)) + { + alphabetList = languageElement.elementsByTagName("alphabet"); + if (alphabetList.count() != 1) + return false; + + alphabetElement = (const QDomElement &) alphabetList.item(0).toElement(); + + soundNamesList = alphabetElement.elementsByTagName("sound"); + } + + //load the sounds for level 3 and 4 (syllables) + if ((Prefs::level() == 3) || (Prefs::level() == 4)) + { + syllablesList = languageElement.elementsByTagName("syllables"); + if (syllablesList.count() != 1) + return false; + + syllableElement = (const QDomElement &) syllablesList.item(0).toElement(); + + soundNamesList = syllableElement.elementsByTagName("sound"); + } + //Counts the number of sounds + sounds = soundNamesList.count(); + if (sounds < 1) + return false; + + namesList.clear(); + filesList.clear(); + + for (uint sound = 0; sound < sounds; sound++) + { + soundNameElement = (const QDomElement &) soundNamesList.item(sound).toElement(); + nameAttribute = soundNameElement.attributeNode("name"); + //namesList helds the names of the letter or syllable to display + namesList.append(nameAttribute.value()); + fileAttribute = soundNameElement.attributeNode("file"); + //filesList helds the names of the sound files (i.e the location of the sounds like fr/alpha/a-0.mp3) + filesList.append(fileAttribute.value()); + } + if (namesList.isEmpty()) return false; + if (filesList.isEmpty()) return false; + return true; +} + |