-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 @@ -103,4 +103,7 @@ static int WAVsoundDuration(const QString& filename) class SoundData : public QSound { + Q_OBJECT +signals: + void stopped(); public: SoundData ( const QString& name ) : @@ -134,9 +137,18 @@ public: } - 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; @@ -147,4 +159,19 @@ private: #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 @@ -169,4 +196,5 @@ void Sound::play() { #ifndef QT_NO_SOUND + d->killTimers(); d->playLoop(1); #endif @@ -221,2 +249,5 @@ void Sound::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 @@ -23,6 +23,8 @@ 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); |