[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    extragear/multimedia/k3b
From:       Michal Malek <michalm () jabster ! pl>
Date:       2010-07-03 20:31:01
Message-ID: 20100703203101.1F52CAC8E7 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1145688 by mmalek:

* Various fixes of player behaviour
* Removed "Play/Pause" action, instad hiding/showing "Play"/"Pause" actions

 M  +5 -2      libk3bdevice/k3bmsf.cpp  
 M  +70 -104   src/projects/k3baudiotrackplayer.cpp  
 M  +2 -1      src/projects/k3baudiotrackplayer.h  
 M  +2 -1      src/projects/k3baudioview.cpp  
 M  +11 -12    src/projects/k3baudioviewimpl.cpp  


--- trunk/extragear/multimedia/k3b/libk3bdevice/k3bmsf.cpp #1145687:1145688
@@ -15,8 +15,9 @@
 #include "k3bmsf.h"
 #include <QtCore/QRegExp>
 #include <QtCore/QSharedData>
+#include <KDebug>
 
-#include <math.h>
+#include <cmath>
 
 class K3b::Msf::Private : public QSharedData
 {
@@ -300,7 +301,9 @@
 
 K3b::Msf K3b::Msf::fromAudioBytes( qint64 bytes )
 {
-    Q_ASSERT( bytes%2352 == 0 );
+    if( bytes % 2352 != 0 ) {
+        kWarning() << "bytes:" << bytes << "(not aligned to" << 2352 << ")!";
+    }
     return Msf( bytes/2352 );
 }
 
--- trunk/extragear/multimedia/k3b/src/projects/k3baudiotrackplayer.cpp #1145687:1145688
@@ -40,10 +40,9 @@
 {
 public:
     AudioTrackPlayerSeekAction( AudioTrackPlayer* player, QObject* parent );
-    ~AudioTrackPlayerSeekAction();
 
     void setValue( int value );
-    void setMaximum( int value );
+    void setCurrentTrack( const K3b::AudioTrack& track );
 
 protected:
     virtual QWidget* createWidget( QWidget* parent );
@@ -60,11 +59,6 @@
 }
 
 
-AudioTrackPlayerSeekAction::~AudioTrackPlayerSeekAction()
-{
-}
-
-
 void AudioTrackPlayerSeekAction::setValue( int value )
 {
     Q_FOREACH( QWidget* widget, createdWidgets() ) {
@@ -75,11 +69,16 @@
 }
 
 
-void AudioTrackPlayerSeekAction::setMaximum( int value )
+void AudioTrackPlayerSeekAction::setCurrentTrack( const K3b::AudioTrack& track )
 {
     Q_FOREACH( QWidget* widget, createdWidgets() ) {
         if( QSlider* slider = qobject_cast<QSlider*>( widget ) ) {
-            slider->setMaximum( value );
+            // we show the currently playing track as a tooltip on the slider
+            slider->setToolTip( i18n("Playing track %1: %2 - %3")
+                                .arg( track.trackNumber() )
+                                .arg( track.artist() )
+                                .arg( track.title()) );
+            slider->setMaximum( track.length().audioBytes() );
         }
     }
 }
@@ -89,6 +88,8 @@
 {
     QSlider* slider = new QSlider( container );
     slider->setRange( 0, 100 );
+    slider->setSingleStep( Msf::fromSeconds( 10 ).audioBytes() );
+    slider->setPageStep( Msf::fromSeconds( 30 ).audioBytes() );
     slider->setOrientation( Qt::Horizontal );
     connect( slider, SIGNAL(sliderMoved(int)), m_player, SLOT(slotSeek(int)) );
     return slider;
@@ -106,7 +107,6 @@
 
     KAction* actionPlay;
     KAction* actionPause;
-    KAction* actionPlayPause;
     KAction* actionStop;
     KAction* actionNext;
     KAction* actionPrevious;
@@ -132,54 +132,32 @@
 
     // create the actions
     // TODO: create shortcuts (is there a way to let the user change them?)
-    d->actionPlay = createAction( this, i18n("Play"),
-                                  "media-playback-start",
-                                  QKeySequence(),
-                                  this, SLOT(playPause()),
-                                  actionCollection,
-                                  "player_play" );
-    d->actionPause = createAction( this, i18n("Pause"),
-                                   "media-playback-pause",
-                                   QKeySequence(),
-                                   this, SLOT(playPause()),
-                                   actionCollection,
-                                   "player_pause" );
-    d->actionPlayPause = createAction( this, i18n("Play/Pause"),
-                                       "media-playback-start",
-                                       QKeySequence(),
-                                       this, SLOT(playPause()),
-                                       actionCollection,
-                                       "player_play_pause" );
-
-    d->actionStop = createAction( this, i18n("Stop"),
-                                  "media-playback-stop",
-                                  QKeySequence(),
-                                  this, SLOT(stop()),
-                                  actionCollection,
-                                  "player_stop" );
-    d->actionNext = createAction( this, i18n("Next"),
-                                  "media-skip-forward",
-                                  QKeySequence(),
-                                  this, SLOT(next()),
-                                  actionCollection,
-                                  "player_next" );
-    d->actionPrevious = createAction( this, i18n("Previous"),
-                                      "media-skip-backward",
-                                      QKeySequence(),
-                                      this, SLOT(previous()),
-                                      actionCollection,
-                                      "player_previous" );
-    d->actionSeek = new AudioTrackPlayerSeekAction( this, actionCollection );
-    if( actionCollection ) {
-        actionCollection->addAction( "player_seek", d->actionSeek );
-    }
-
+    d->actionPlay = new KAction( KIcon( "media-playback-start" ), i18n("Play"), this );
+    d->actionPlay->setToolTip( i18n("Play") );
+    d->actionPause = new KAction( KIcon( "media-playback-pause" ), i18n("Pause"), this );
+    d->actionPause->setVisible( false );
+    d->actionPause->setToolTip( i18n("Pause") );
+    d->actionStop = new KAction( KIcon( "media-playback-stop" ), i18n("Stop"), this );
     d->actionStop->setEnabled( false );
-    d->actionPause->setEnabled( false );
+    d->actionStop->setToolTip( i18n("Stop") );
+    d->actionNext = new KAction( KIcon( "media-skip-forward" ), i18n("Next"), this );
     d->actionNext->setEnabled( false );
+    d->actionNext->setToolTip( i18n("Next") );
+    d->actionPrevious = new KAction( KIcon( "media-skip-backward" ), i18n("Previous"), this );
     d->actionPrevious->setEnabled( false );
+    d->actionPrevious->setToolTip( i18n("Previous") );
+    d->actionSeek = new AudioTrackPlayerSeekAction( this, actionCollection );
     d->actionSeek->setEnabled( false );
 
+    if( actionCollection ) {
+        actionCollection->addAction( "player_play", d->actionPlay );
+        actionCollection->addAction( "player_pause", d->actionPause );
+        actionCollection->addAction( "player_stop", d->actionStop );
+        actionCollection->addAction( "player_next", d->actionNext );
+        actionCollection->addAction( "player_previous", d->actionPrevious );
+        actionCollection->addAction( "player_seek", d->actionSeek );
+    }
+
     connect( d->doc, SIGNAL(changed()),
              this, SLOT(slotDocChanged()) );
     connect( d->doc, SIGNAL(trackChanged(K3b::AudioTrack*)),
@@ -192,13 +170,16 @@
              this, SLOT(slotStateChanged(QAudio::State)) );
     connect( d->audioDocReader, SIGNAL(currentTrackChanged(K3b::AudioTrack)),
              this, SLOT(slotCurrentTrackChanged(K3b::AudioTrack)) );
-
-    // tooltips
-    d->actionPlay->setToolTip( i18n("Play") );
-    d->actionStop->setToolTip( i18n("Stop") );
-    d->actionPause->setToolTip( i18n("Pause") );
-    d->actionNext->setToolTip( i18n("Next") );
-    d->actionPrevious->setToolTip( i18n("Previous") );
+    connect( d->actionPlay, SIGNAL(triggered(bool)),
+             this, SLOT(play()) );
+    connect( d->actionPause, SIGNAL(triggered(bool)),
+             this, SLOT(pause()) );
+    connect( d->actionStop, SIGNAL(triggered(bool)),
+             this, SLOT(stop()) );
+    connect( d->actionNext, SIGNAL(triggered(bool)),
+             this, SLOT(next()) );
+    connect( d->actionPrevious, SIGNAL(triggered(bool)),
+             this, SLOT(previous()) );
 }
 
 
@@ -219,51 +200,32 @@
 void AudioTrackPlayer::playTrack( const K3b::AudioTrack& track )
 {
     d->audioDocReader->setCurrentTrack( track );
+    play();
 }
 
 
-void AudioTrackPlayer::playPause()
+void AudioTrackPlayer::play()
 {
-    if( d->audioOutput->state() == QAudio::StoppedState ) {
-        d->actionPlayPause->setIcon( KIcon( "media-playback-start" ) );
-        d->actionPause->setEnabled( true );
-        d->actionPlay->setEnabled( false );
-        d->actionStop->setEnabled( true );
-        d->actionSeek->setEnabled( true );
+    if( d->audioOutput->state() == QAudio::StoppedState ||
+        d->audioOutput->state() == QAudio::IdleState ) {
         d->audioDocReader->open();
         d->audioOutput->start( d->audioDocReader );
     }
     else if( d->audioOutput->state() == QAudio::SuspendedState ) {
-        d->actionPlayPause->setIcon( KIcon( "media-playback-pause" ) );
-        d->actionPause->setEnabled( true );
-        d->actionPlay->setEnabled( false );
-        d->actionStop->setEnabled( true );
         d->audioOutput->resume();
     }
-    else {
-        d->actionPlayPause->setIcon( KIcon( "media-playback-start" ) );
-        d->actionPause->setEnabled( false );
-        d->actionPlay->setEnabled( true );
-        d->actionStop->setEnabled( true );
+}
+
+
+void AudioTrackPlayer::pause()
+{
         d->audioOutput->suspend();
     }
-}
 
 
 void AudioTrackPlayer::stop()
 {
-    d->actionStop->setEnabled( false );
-    d->actionPause->setEnabled( false );
-    d->actionPlay->setEnabled( true );
-    d->actionSeek->setEnabled( false );
-    d->actionNext->setEnabled( false );
-    d->actionPrevious->setEnabled( false );
     d->audioOutput->stop();
-    d->audioDocReader->close();
-
-    d->actionPlayPause->setIcon( KIcon( "media-playback-start" ) );
-
-    emit stopped();
 }
 
 
@@ -326,12 +288,7 @@
 
 void AudioTrackPlayer::slotCurrentTrackChanged( const K3b::AudioTrack& track )
 {
-    // we show the currently playing track as a tooltip on the slider
-    d->actionSeek->setToolTip( i18n("Playing track %1: %2 - %3")
-                                .arg(track.trackNumber())
-                                .arg(track.artist())
-                                .arg(track.title()) );
-    d->actionSeek->setMaximum( track.length().audioBytes() );
+    d->actionSeek->setCurrentTrack( track );
     d->actionNext->setEnabled( &track != d->doc->lastTrack() );
     d->actionPrevious->setEnabled( &track != d->doc->firstTrack() );
 
@@ -341,19 +298,28 @@
 
 void AudioTrackPlayer::slotStateChanged( QAudio::State state )
 {
-    switch( state )
-    {
-        case QAudio::ActiveState:
+    if( QAudio::ActiveState == state ) {
+        d->actionPause->setVisible( true );
+        d->actionPlay->setVisible( false );
+        d->actionStop->setEnabled( true );
+        d->actionSeek->setEnabled( true );
             emit started();
-            break;
-        case QAudio::SuspendedState:
+    }
+    else if( QAudio::SuspendedState == state ) {
+        d->actionPause->setVisible( false );
+        d->actionPlay->setVisible( true );
+        d->actionStop->setEnabled( true );
             emit paused();
-            break;
-        case QAudio::IdleState:
-        case QAudio::StoppedState:
-        default:
+    }
+    else /*if( QAudio::IdleState == state || QAudio::StoppedState == state )*/ {
+        d->actionStop->setEnabled( false );
+        d->actionPause->setVisible( false );
+        d->actionPlay->setVisible( true );
+        d->actionSeek->setEnabled( false );
+        d->actionNext->setEnabled( false );
+        d->actionPrevious->setEnabled( false );
+        d->audioDocReader->close();
             emit stopped();
-            break;
     }
 }
 
--- trunk/extragear/multimedia/k3b/src/projects/k3baudiotrackplayer.h #1145687:1145688
@@ -41,7 +41,8 @@
 
     public Q_SLOTS:
         void playTrack( const K3b::AudioTrack& track );
-        void playPause();
+        void play();
+        void pause();
         void stop();
         void next();
         void previous();
--- trunk/extragear/multimedia/k3b/src/projects/k3baudioview.cpp #1145687:1145688
@@ -57,7 +57,8 @@
 
     toolBox()->addSeparator();
     toolBox()->addAction( actionCollection()->action( "player_previous" ) );
-    toolBox()->addAction( actionCollection()->action( "player_play_pause" ) );
+    toolBox()->addAction( actionCollection()->action( "player_play" ) );
+    toolBox()->addAction( actionCollection()->action( "player_pause" ) );
     toolBox()->addAction( actionCollection()->action( "player_stop" ) );
     toolBox()->addAction( actionCollection()->action( "player_next" ) );
     toolBox()->addSeparator();
--- trunk/extragear/multimedia/k3b/src/projects/k3baudioviewimpl.cpp #1145687:1145688
@@ -125,12 +125,6 @@
     m_actionQueryMusicBrainzTrack->setEnabled( false );
     m_actionQueryMusicBrainzTrack->setVisible( false );
 #endif
-
-#ifdef __GNUC__
-#warning enable player once ported to Phonon
-#endif
-    m_actionPlayTrack->setEnabled( false );
-    m_actionPlayTrack->setVisible( false );
 }
 
 
@@ -315,6 +309,17 @@
 }
 
 
+void K3b::AudioViewImpl::slotPlayTrack()
+{
+    const QModelIndexList indexes = m_trackView->selectionModel()->selectedRows();
+	QList<AudioTrack*> tracks;
+    tracksForIndexes( tracks, indexes );
+
+    if( !tracks.empty() && tracks.first() != 0 )
+        m_player->playTrack( *tracks.first() );
+}
+
+
 void K3b::AudioViewImpl::slotQueryMusicBrainz()
 {
 #ifdef ENABLE_MUSICBRAINZ
@@ -364,12 +369,6 @@
 }
 
 
-void K3b::AudioViewImpl::slotPlayTrack()
-{
-    // Not implemented yet
-}
-
-
 void K3b::AudioViewImpl::slotSelectionChanged()
 {
     if( m_trackView->hasFocus() ) {
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic