summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/sound.cpp35
-rw-r--r--library/sound.h2
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)
99 99
100//qDebug("%dms",total); 100//qDebug("%dms",total);
101 return total; 101 return total;
102} 102}
103 103
104class SoundData : public QSound { 104class SoundData : public QSound {
105 Q_OBJECT
106signals:
107 void stopped();
105public: 108public:
106 SoundData ( const QString& name ) : 109 SoundData ( const QString& name ) :
107 QSound ( Resource::findSound ( name )), 110 QSound ( Resource::findSound ( name )),
108 filename ( Resource::findSound ( name )) 111 filename ( Resource::findSound ( name ))
109 { 112 {
110 loopsleft=0; 113 loopsleft=0;
@@ -130,25 +133,49 @@ public:
130 return; 133 return;
131 } 134 }
132 } 135 }
133 play(); 136 play();
134 } 137 }
135 138
136 bool isFinished ( ) const 139 bool isFinished ( ) const
137 { 140 {
138 return ( loopsleft == 0 ); 141 return ( loopsleft == 0 );
139 } 142 }
140 143
144 /*
145 * non virtual reimplementation
146 * @internal
147 */
148 void killTimers() {
149 QObject::killTimers();
150 emit stopped();
151 }
152
141private: 153private:
142 QString filename; 154 QString filename;
143 int loopsleft; 155 int loopsleft;
144 int ms; 156 int ms;
145}; 157};
146 158
147#endif 159#endif
148 160
161
162/*
163 * @internal
164 * Using sender() when the slot is called is unsafe!
165 *
166 * @param snd instance
167 * @param obj The QObject to be called
168 * @param slot connect SIGNAL(stopped()) to slot
169 */
170void register_qpe_sound_finished( Sound* snd, QObject* obj, const char* slot ) {
171#ifndef QT_NO_SOUND
172 QObject::connect(snd->d, SIGNAL(stopped()), obj, slot );
173#endif
174}
175
149/*! Opens a wave sound file \a name for playing 176/*! Opens a wave sound file \a name for playing
150 * Resource is used for finding the file 177 * Resource is used for finding the file
151 **/ 178 **/
152Sound::Sound(const QString& name) 179Sound::Sound(const QString& name)
153{ 180{
154#ifndef QT_NO_SOUND 181#ifndef QT_NO_SOUND
@@ -165,12 +192,13 @@ Sound::~Sound()
165} 192}
166 193
167/*! Play the sound once */ 194/*! Play the sound once */
168void Sound::play() 195void Sound::play()
169{ 196{
170#ifndef QT_NO_SOUND 197#ifndef QT_NO_SOUND
198 d->killTimers();
171 d->playLoop(1); 199 d->playLoop(1);
172#endif 200#endif
173} 201}
174 202
175/*! Play the sound, repeatedly until stop() is called */ 203/*! Play the sound, repeatedly until stop() is called */
176void Sound::playLoop() 204void Sound::playLoop()
@@ -217,6 +245,9 @@ void Sound::soundAlarm()
217 ties together QSound and the available sound resources. 245 ties together QSound and the available sound resources.
218 246
219 To sound an audible system alarm, call the static method soundAlarm() 247 To sound an audible system alarm, call the static method soundAlarm()
220 248
221 \ingroup qtopiaemb 249 \ingroup qtopiaemb
222*/ 250*/
251
252
253#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 @@
19**********************************************************************/ 19**********************************************************************/
20#ifndef SOUND_H 20#ifndef SOUND_H
21#define SOUND_H 21#define SOUND_H
22 22
23class QString; 23class QString;
24class SoundData; 24class SoundData;
25class QObject;
25 26
26class Sound { 27class Sound {
28 /*INTERNAL*/ friend void register_qpe_sound_finished( Sound*, QObject *obj, const char* slot);
27public: 29public:
28 Sound(const QString& name); 30 Sound(const QString& name);
29 ~Sound(); 31 ~Sound();
30 32
31 void play(); 33 void play();
32 void playLoop(); 34 void playLoop();