-rw-r--r-- | library/sound.cpp | 35 | ||||
-rw-r--r-- | library/sound.h | 2 |
2 files changed, 35 insertions, 2 deletions
diff --git a/library/sound.cpp b/library/sound.cpp index ee2aabc..d1e2388 100644 --- a/library/sound.cpp +++ b/library/sound.cpp @@ -99,12 +99,15 @@ static int WAVsoundDuration(const QString& filename) //qDebug("%dms",total); return total; } class SoundData : public QSound { + Q_OBJECT +signals: + void stopped(); public: SoundData ( const QString& name ) : QSound ( Resource::findSound ( name )), filename ( Resource::findSound ( name )) { loopsleft=0; @@ -130,25 +133,49 @@ public: return; } } play(); } - bool isFinished ( ) const + bool isFinished ( ) const { - return ( loopsleft == 0 ); + return ( loopsleft == 0 ); } + /* + * non virtual reimplementation + * @internal + */ + void killTimers() { + QObject::killTimers(); + emit stopped(); + } + private: QString filename; int loopsleft; int ms; }; #endif + +/* + * @internal + * Using sender() when the slot is called is unsafe! + * + * @param snd instance + * @param obj The QObject to be called + * @param slot connect SIGNAL(stopped()) to slot + */ +void register_qpe_sound_finished( Sound* snd, QObject* obj, const char* slot ) { +#ifndef QT_NO_SOUND + QObject::connect(snd->d, SIGNAL(stopped()), obj, slot ); +#endif +} + /*! Opens a wave sound file \a name for playing * Resource is used for finding the file **/ Sound::Sound(const QString& name) { #ifndef QT_NO_SOUND @@ -165,12 +192,13 @@ Sound::~Sound() } /*! Play the sound once */ void Sound::play() { #ifndef QT_NO_SOUND + d->killTimers(); d->playLoop(1); #endif } /*! Play the sound, repeatedly until stop() is called */ void Sound::playLoop() @@ -217,6 +245,9 @@ void Sound::soundAlarm() ties together QSound and the available sound resources. To sound an audible system alarm, call the static method soundAlarm() \ingroup qtopiaemb */ + + +#include "sound.moc" diff --git a/library/sound.h b/library/sound.h index 9f35107..daef70f 100644 --- a/library/sound.h +++ b/library/sound.h @@ -19,14 +19,16 @@ **********************************************************************/ #ifndef SOUND_H #define SOUND_H class QString; class SoundData; +class QObject; class Sound { + /*INTERNAL*/ friend void register_qpe_sound_finished( Sound*, QObject *obj, const char* slot); public: Sound(const QString& name); ~Sound(); void play(); void playLoop(); |