-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 @@ -101,8 +101,11 @@ static int WAVsoundDuration(const QString& filename) return total; } class SoundData : public QSound { + Q_OBJECT +signals: + void stopped(); public: SoundData ( const QString& name ) : QSound ( Resource::findSound ( name )), filename ( Resource::findSound ( name )) @@ -132,21 +135,45 @@ public: } 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) @@ -167,8 +194,9 @@ Sound::~Sound() /*! Play the sound once */ void Sound::play() { #ifndef QT_NO_SOUND + d->killTimers(); d->playLoop(1); #endif } @@ -219,4 +247,7 @@ void Sound::soundAlarm() 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 @@ -21,10 +21,12 @@ #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(); |