[Marble-commits] KDE/kdeedu/marble/src/plugins/render/routing
Dennis Nienhüser
earthwings at gentoo.org
Tue Feb 15 21:12:10 CET 2011
SVN commit 1220936 by nienhueser:
Audible announcements of start and destination as well.
M +49 -5 AudioOutput.cpp
M +4 -0 AudioOutput.h
M +6 -0 RoutingPlugin.cpp
--- trunk/KDE/kdeedu/marble/src/plugins/render/routing/AudioOutput.cpp #1220935:1220936
@@ -47,7 +47,7 @@
void audioOutputFinished();
- void setupAudio( qreal distance, RoutingInstruction::TurnType turnType );
+ void setupAudio();
QString distanceAudioFile( qreal distance );
@@ -56,6 +56,10 @@
QString audioFile( const QString &name );
void reset();
+
+ void enqueue( qreal distance, RoutingInstruction::TurnType turnType );
+
+ void enqueue( const QString &file );
};
AudioOutputPrivate::AudioOutputPrivate( AudioOutput* parent ) :
@@ -114,15 +118,23 @@
}
}
-
-void AudioOutputPrivate::setupAudio( qreal distance, RoutingInstruction::TurnType turnType )
+void AudioOutputPrivate::setupAudio()
{
if ( !m_output ) {
m_output = new Phonon::MediaObject( q );
Phonon::AudioOutput *audioOutput = new Phonon::AudioOutput( Phonon::VideoCategory, q );
Phonon::createPath( m_output, audioOutput );
+
+ q->connect( m_output, SIGNAL( finished() ), q, SLOT( audioOutputFinished() ) );
}
+}
+void AudioOutputPrivate::enqueue( qreal distance, RoutingInstruction::TurnType turnType )
+{
+ if ( !m_output ) {
+ return;
+ }
+
QString distanceAudio = distanceAudioFile( distance );
QString turnTypeAudio = turnTypeAudioFile( turnType );
if ( turnTypeAudio.isEmpty() ) {
@@ -136,9 +148,14 @@
m_output->enqueue( distanceAudio );
m_output->enqueue( audioFile( "Meters" ) );
}
+}
- q->connect( m_output, SIGNAL( finished() ), q, SLOT( audioOutputFinished() ) );
+void AudioOutputPrivate::enqueue( const QString &file )
+{
+ if ( m_output ) {
+ m_output->enqueue( audioFile( file ) );
}
+}
void AudioOutputPrivate::reset()
{
@@ -174,7 +191,8 @@
if ( ( d->m_lastDistance == 0 || d->m_lastDistance > 850 ) && distance <= 850 ) {
if ( !d->m_output || d->m_output->currentSource().fileName().isEmpty() ) {
- d->setupAudio( distance, turnType );
+ d->setupAudio();
+ d->enqueue( distance, turnType );
if ( d->m_output ) {
d->m_output->play();
}
@@ -240,6 +258,32 @@
}
}
+void AudioOutput::announceStart()
+{
+ if ( d->m_muted || d->m_soundEnabled ) {
+ return;
}
+ d->setupAudio();
+ d->enqueue( "Depart" );
+ if ( d->m_output ) {
+ d->m_output->play();
+ }
+}
+
+void AudioOutput::announceDestination()
+{
+ if ( d->m_muted ) {
+ return;
+ }
+
+ d->setupAudio();
+ d->enqueue( d->m_soundEnabled ? "KDE-Sys-App-Positive" : "Arrive" );
+ if ( d->m_output ) {
+ d->m_output->play();
+ }
+}
+
+}
+
#include "AudioOutput.moc"
--- trunk/KDE/kdeedu/marble/src/plugins/render/routing/AudioOutput.h #1220935:1220936
@@ -43,6 +43,10 @@
*/
void update( int index, qreal distance, RoutingInstruction::TurnType turnType );
+ void announceStart();
+
+ void announceDestination();
+
/** Toggle muting (neither sound nor voice output) */
void setMuted( bool muted );
--- trunk/KDE/kdeedu/marble/src/plugins/render/routing/RoutingPlugin.cpp #1220935:1220936
@@ -259,6 +259,11 @@
}
m_marbleWidget->model()->routingManager()->setGuidanceModeEnabled( enabled );
+
+ if ( enabled ) {
+ m_audio->announceStart();
+ }
+
forceRepaint();
}
@@ -312,6 +317,7 @@
m_widget.instructionLabel->setText( indicatorText.arg( instructionDistance * METER2KM, 0, 'f', 1 ).arg( " km " ) );
}
} else {
+ m_audio->announceDestination();
QString content = "Arrived at destination. <a href=\"#reverse\">Calculate the way back.</a>";
m_widget.instructionLabel->setText( richText( "%1", fontSize ).arg( content ) );
}
More information about the Marble-commits
mailing list