From 802fc1f39f1e4eb23c1ec9014381eb3208caa602 Mon Sep 17 00:00:00 2001 From: Stefan Derkits Date: Wed, 25 Apr 2012 21:26:00 +0200 Subject: [PATCH] First version of stop playback after this track also in systray context menu --- src/TomahawkTrayIcon.cpp | 27 +++++++++++++++++++++++++++ src/TomahawkTrayIcon.h | 5 +++++ src/libtomahawk/audio/AudioEngine.h | 4 +++- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/TomahawkTrayIcon.cpp b/src/TomahawkTrayIcon.cpp index 31df4e67d..d3a87268b 100644 --- a/src/TomahawkTrayIcon.cpp +++ b/src/TomahawkTrayIcon.cpp @@ -26,6 +26,7 @@ #include "audio/AudioEngine.h" #include "TomahawkApp.h" #include "TomahawkWindow.h" +#include "Query.h" #include "utils/Logger.h" #include @@ -35,6 +36,7 @@ TomahawkTrayIcon::TomahawkTrayIcon( QObject* parent ) : QSystemTrayIcon( parent ) , m_currentAnimationFrame( 0 ) , m_showWindowAction( 0 ) + , m_stopContinueAfterTrackAction( 0 ) { QIcon icon( RESPATH "icons/tomahawk-icon-128x128-grayscale.png" ); setIcon( icon ); @@ -43,15 +45,20 @@ TomahawkTrayIcon::TomahawkTrayIcon( QObject* parent ) m_contextMenu = new QMenu(); setContextMenu( m_contextMenu ); + + m_stopContinueAfterTrackAction = new QAction( tr( "&Stop Playback after this Track" ), this ); ActionCollection *ac = ActionCollection::instance(); m_contextMenu->addAction( ac->getAction( "playPause" ) ); m_contextMenu->addAction( ac->getAction( "stop" ) ); + m_contextMenu->addAction( m_stopContinueAfterTrackAction ); m_contextMenu->addSeparator(); m_contextMenu->addAction( ac->getAction( "previousTrack" ) ); m_contextMenu->addAction( ac->getAction( "nextTrack" ) ); m_contextMenu->addSeparator(); m_contextMenu->addAction( ActionCollection::instance()->getAction( "togglePrivacy" ) ); + + connect( m_stopContinueAfterTrackAction, SIGNAL( triggered(bool) ), this, SLOT( stopContinueAfterTrackActionTriggered() ) ); #ifdef Q_WS_MAC // On mac you can close the windows while leaving the app open. We then need a way to show the main window again @@ -71,6 +78,7 @@ TomahawkTrayIcon::TomahawkTrayIcon( QObject* parent ) connect( AudioEngine::instance(), SIGNAL( resumed() ), this, SLOT( enablePause() ) ); connect( AudioEngine::instance(), SIGNAL( stopped() ), this, SLOT( enablePlay() ) ); connect( AudioEngine::instance(), SIGNAL( paused() ), this, SLOT( enablePlay() ) ); + connect( AudioEngine::instance(), SIGNAL( stopContinueAfterTrack() ) , this, SLOT( stopContinueAfterTrackStatusChanged() ) ); connect( &m_animationTimer, SIGNAL( timeout() ), SLOT( onAnimationTimer() ) ); connect( this, SIGNAL( activated( QSystemTrayIcon::ActivationReason ) ), SLOT( onActivated( QSystemTrayIcon::ActivationReason ) ) ); @@ -227,6 +235,25 @@ TomahawkTrayIcon::enablePause() } +void +TomahawkTrayIcon::stopContinueAfterTrackStatusChanged() +{ + if ( AudioEngine::instance()->currentTrack()->toQuery()->equals( AudioEngine::instance()->stopAfterTrack() ) ) + m_stopContinueAfterTrackAction->setText( tr( "&Continue Playback after this Track" ) ); + else + m_stopContinueAfterTrackAction->setText( tr( "&Stop Playback after this Track" ) ); +} + + +void TomahawkTrayIcon::stopContinueAfterTrackActionTriggered() +{ + if ( !AudioEngine::instance()->currentTrack()->toQuery()->equals( AudioEngine::instance()->stopAfterTrack() ) ) + AudioEngine::instance()->setStopAfterTrack( AudioEngine::instance()->currentTrack()->toQuery() ); + else + AudioEngine::instance()->setStopAfterTrack( Tomahawk::query_ptr() ); +} + + bool TomahawkTrayIcon::event( QEvent* e ) { diff --git a/src/TomahawkTrayIcon.h b/src/TomahawkTrayIcon.h index ecd4d8e24..66d9f313b 100644 --- a/src/TomahawkTrayIcon.h +++ b/src/TomahawkTrayIcon.h @@ -46,6 +46,10 @@ private slots: void enablePlay(); void enablePause(); + + void stopContinueAfterTrackStatusChanged(); + + void stopContinueAfterTrackActionTriggered(); void menuAboutToShow(); private: @@ -61,6 +65,7 @@ private: QMenu* m_contextMenu; QAction* m_showWindowAction; + QAction* m_stopContinueAfterTrackAction; }; #endif // TOMAHAWK_TRAYICON_H diff --git a/src/libtomahawk/audio/AudioEngine.h b/src/libtomahawk/audio/AudioEngine.h index 5abdc207a..4187306f0 100644 --- a/src/libtomahawk/audio/AudioEngine.h +++ b/src/libtomahawk/audio/AudioEngine.h @@ -96,7 +96,7 @@ public slots: void setPlaylist( Tomahawk::playlistinterface_ptr playlist ); void setQueue( Tomahawk::playlistinterface_ptr queue ) { m_queue = queue; } - void setStopAfterTrack( const Tomahawk::query_ptr& query ) { m_stopAfterTrack = query; } + void setStopAfterTrack( const Tomahawk::query_ptr& query ) { m_stopAfterTrack = query; emit stopContinueAfterTrack(); } signals: void loading( const Tomahawk::result_ptr& track ); @@ -105,6 +105,8 @@ signals: void stopped(); void paused(); void resumed(); + + void stopContinueAfterTrack(); void seeked( qint64 ms );