[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