summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--library/sound.cpp31
-rw-r--r--library/sound.h2
2 files changed, 33 insertions, 0 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;
@@ -135,20 +138,44 @@ public:
bool isFinished ( ) const
{
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();