File indexing completed on 2024-05-19 04:49:50

0001 /****************************************************************************************
0002  * Copyright (c) 2009 Nikolaj Hald Nielsen <nhn@kde.org>                                *
0003  *                                                                                      *
0004  * This program is free software; you can redistribute it and/or modify it under        *
0005  * the terms of the GNU General Public License as published by the Free Software        *
0006  * Foundation; either version 2 of the License, or (at your option) any later           *
0007  * version.                                                                             *
0008  *                                                                                      *
0009  * This program is distributed in the hope that it will be useful, but WITHOUT ANY      *
0010  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A      *
0011  * PARTICULAR PURPOSE. See the GNU General Pulic License for more details.              *
0012  *                                                                                      *
0013  * You should have received a copy of the GNU General Public License along with         *
0014  * this program.  If not, see <http://www.gnu.org/licenses/>.                           *
0015  ****************************************************************************************/
0016 
0017 #include "NavigatorConfigAction.h"
0018 
0019 #include "amarokconfig.h"
0020 #include "core/support/Debug.h"
0021 #include "playlist/PlaylistActions.h"
0022 
0023 #include <QMenu>
0024 #include <KLocalizedString>
0025 #include <QStandardPaths>
0026 
0027 NavigatorConfigAction::NavigatorConfigAction( QWidget * parent )
0028     : QAction( parent )
0029 {
0030 
0031     QMenu * navigatorMenu = new QMenu( nullptr );
0032     setMenu( navigatorMenu );
0033     setText( i18n( "Track Progression" ) );
0034 
0035     QActionGroup * navigatorActions = new QActionGroup( navigatorMenu );
0036     navigatorActions->setExclusive( true );
0037 
0038     m_standardNavigatorAction = navigatorActions->addAction( i18n( "Standard" ) );
0039     m_standardNavigatorAction->setIcon( QIcon::fromTheme( QStringLiteral("media-standard-track-progression-amarok") ) );
0040     m_standardNavigatorAction->setCheckable( true );
0041     //action->setIcon( true );
0042 
0043     m_onlyQueueNavigatorAction = navigatorActions->addAction( i18n( "Only Queue" ) );
0044     m_onlyQueueNavigatorAction->setIcon( QIcon::fromTheme( QStringLiteral("media-standard-track-progression-amarok") ) );
0045     m_onlyQueueNavigatorAction->setCheckable( true );
0046 
0047     QAction * action = new QAction( parent );
0048     action->setSeparator( true );
0049     navigatorActions->addAction( action );
0050 
0051     m_repeatTrackNavigatorAction = navigatorActions->addAction( i18n( "Repeat Track" ) );
0052     m_repeatTrackNavigatorAction->setIcon( QIcon::fromTheme( QStringLiteral("media-repeat-track-amarok") ) );
0053     m_repeatTrackNavigatorAction->setCheckable( true );
0054 
0055     m_repeatAlbumNavigatorAction = navigatorActions->addAction( i18n( "Repeat Album" ) );
0056     m_repeatAlbumNavigatorAction->setIcon( QIcon::fromTheme( QStringLiteral("media-repeat-album-amarok") ) );
0057     m_repeatAlbumNavigatorAction->setCheckable( true );
0058 
0059     m_repeatPlaylistNavigatorAction = navigatorActions->addAction( i18n( "Repeat Playlist" ) );
0060     m_repeatPlaylistNavigatorAction->setIcon( QIcon::fromTheme( QStringLiteral("media-repeat-playlist-amarok") ) );
0061     m_repeatPlaylistNavigatorAction->setCheckable( true );
0062 
0063     action = new QAction( parent );
0064     action->setSeparator( true );
0065     navigatorActions->addAction( action );
0066 
0067     m_randomTrackNavigatorAction = navigatorActions->addAction( i18n( "Random Tracks" ) );
0068     m_randomTrackNavigatorAction->setIcon( QIcon::fromTheme( QStringLiteral("media-random-tracks-amarok") ) );
0069     m_randomTrackNavigatorAction->setCheckable( true );
0070 
0071     m_randomAlbumNavigatorAction = navigatorActions->addAction( i18n( "Random Albums" ) );
0072     m_randomAlbumNavigatorAction->setIcon( QIcon::fromTheme( QStringLiteral("media-random-albums-amarok") ) );
0073     m_randomAlbumNavigatorAction->setCheckable( true );
0074 
0075     navigatorMenu->addActions( navigatorActions->actions() );
0076 
0077     QMenu * favorMenu = navigatorMenu->addMenu( i18n( "Favor" ) );
0078     QActionGroup * favorActions = new QActionGroup( favorMenu );
0079 
0080     m_favorNoneAction = favorActions->addAction( i18n( "None" ) );
0081     m_favorNoneAction->setCheckable( true );
0082 
0083     m_favorScoresAction = favorActions->addAction( i18n( "Higher Scores" ) );
0084     m_favorScoresAction->setCheckable( true );
0085 
0086     m_favorRatingsAction = favorActions->addAction( i18n( "Higher Ratings" ) );
0087     m_favorRatingsAction->setCheckable( true );
0088 
0089     m_favorLastPlayedAction = favorActions->addAction( i18n( "Not Recently Played" ) );
0090     m_favorLastPlayedAction->setCheckable( true );
0091 
0092     favorMenu->addActions( favorActions->actions() );
0093 
0094     //make sure the correct entry is selected from start:
0095     switch( AmarokConfig::trackProgression() )
0096     {
0097         case AmarokConfig::EnumTrackProgression::OnlyQueue:
0098             m_onlyQueueNavigatorAction->setChecked( true );
0099             setIcon( m_onlyQueueNavigatorAction->icon() );
0100             break;
0101 
0102         case AmarokConfig::EnumTrackProgression::RepeatTrack:
0103             m_repeatTrackNavigatorAction->setChecked( true );
0104             setIcon( m_repeatTrackNavigatorAction->icon() );
0105             break;
0106 
0107         case AmarokConfig::EnumTrackProgression::RepeatAlbum:
0108             m_repeatAlbumNavigatorAction->setChecked( true );
0109             setIcon( m_repeatAlbumNavigatorAction->icon() );
0110             break;
0111 
0112         case AmarokConfig::EnumTrackProgression::RepeatPlaylist:
0113             m_repeatPlaylistNavigatorAction->setChecked( true );
0114             setIcon( m_repeatPlaylistNavigatorAction->icon() );
0115             break;
0116 
0117         case AmarokConfig::EnumTrackProgression::RandomTrack:
0118             m_randomTrackNavigatorAction->setChecked( true );
0119             setIcon( m_randomTrackNavigatorAction->icon() );
0120             break;
0121 
0122         case AmarokConfig::EnumTrackProgression::RandomAlbum:
0123             m_randomAlbumNavigatorAction->setChecked( true );
0124             setIcon( m_randomAlbumNavigatorAction->icon() );
0125             break;
0126 
0127         case AmarokConfig::EnumTrackProgression::Normal:
0128         default:
0129             m_standardNavigatorAction->setChecked( true );
0130             setIcon( m_standardNavigatorAction->icon() );
0131             break;
0132     }
0133 
0134     switch( AmarokConfig::favorTracks() )
0135     {
0136         case AmarokConfig::EnumFavorTracks::HigherScores:
0137             m_favorScoresAction->setChecked( true );
0138             break;
0139 
0140         case AmarokConfig::EnumFavorTracks::HigherRatings:
0141             m_favorRatingsAction->setChecked( true );
0142             break;
0143 
0144         case AmarokConfig::EnumFavorTracks::LessRecentlyPlayed:
0145             m_favorLastPlayedAction->setChecked( true );
0146             break;
0147 
0148         case AmarokConfig::EnumFavorTracks::Off:
0149         default:
0150             m_favorNoneAction->setChecked( true );
0151             break;
0152     }
0153 
0154      connect( navigatorMenu, &QMenu::triggered, this, &NavigatorConfigAction::setActiveNavigator );
0155      connect( favorMenu, &QMenu::triggered, this, &NavigatorConfigAction::setFavored );
0156      connect( The::playlistActions(), &Playlist::Actions::navigatorChanged, this, &NavigatorConfigAction::navigatorChanged );
0157 }
0158 
0159 NavigatorConfigAction::~NavigatorConfigAction()
0160 {
0161     delete menu();
0162 }
0163 
0164 void NavigatorConfigAction::setActiveNavigator( QAction *navigatorAction )
0165 {
0166     DEBUG_BLOCK
0167     if( navigatorAction == m_standardNavigatorAction )
0168     {
0169         AmarokConfig::setTrackProgression( AmarokConfig::EnumTrackProgression::Normal );
0170         setIcon( m_standardNavigatorAction->icon() );
0171     }
0172     else if ( navigatorAction == m_onlyQueueNavigatorAction )
0173     {
0174         AmarokConfig::setTrackProgression( AmarokConfig::EnumTrackProgression::OnlyQueue );
0175         setIcon( m_onlyQueueNavigatorAction->icon() );
0176     }
0177     else if ( navigatorAction == m_repeatTrackNavigatorAction )
0178     {
0179         AmarokConfig::setTrackProgression( AmarokConfig::EnumTrackProgression::RepeatTrack );
0180         setIcon( m_repeatTrackNavigatorAction->icon() );
0181     }
0182     else if ( navigatorAction == m_repeatAlbumNavigatorAction )
0183     {
0184         AmarokConfig::setTrackProgression( AmarokConfig::EnumTrackProgression::RepeatAlbum );
0185         setIcon( m_repeatAlbumNavigatorAction->icon() );
0186     }
0187     else if ( navigatorAction == m_repeatPlaylistNavigatorAction )
0188     {
0189         AmarokConfig::setTrackProgression( AmarokConfig::EnumTrackProgression::RepeatPlaylist );
0190         setIcon( m_repeatPlaylistNavigatorAction->icon() );
0191     }
0192     else if ( navigatorAction == m_randomTrackNavigatorAction )
0193     {
0194         AmarokConfig::setTrackProgression( AmarokConfig::EnumTrackProgression::RandomTrack );
0195         setIcon( m_randomTrackNavigatorAction->icon() );
0196     }
0197     else if ( navigatorAction == m_randomAlbumNavigatorAction )
0198     {
0199         AmarokConfig::setTrackProgression( AmarokConfig::EnumTrackProgression::RandomAlbum );
0200         setIcon( m_randomAlbumNavigatorAction->icon() );
0201     }
0202 
0203     The::playlistActions()->playlistModeChanged();
0204 }
0205 
0206 void NavigatorConfigAction::setFavored( QAction *favorAction )
0207 {
0208     DEBUG_BLOCK
0209     if( favorAction == m_favorNoneAction )
0210     {
0211         AmarokConfig::setFavorTracks( AmarokConfig::EnumFavorTracks::Off );
0212     }
0213     else if( favorAction == m_favorScoresAction )
0214     {
0215         AmarokConfig::setFavorTracks( AmarokConfig::EnumFavorTracks::HigherScores );
0216     }
0217     else if( favorAction == m_favorRatingsAction )
0218     {
0219         AmarokConfig::setFavorTracks( AmarokConfig::EnumFavorTracks::HigherRatings );
0220     }
0221     else if( favorAction == m_favorLastPlayedAction )
0222     {
0223         AmarokConfig::setFavorTracks( AmarokConfig::EnumFavorTracks::LessRecentlyPlayed );
0224     }
0225 }
0226 
0227 void NavigatorConfigAction::navigatorChanged()
0228 {
0229     switch( AmarokConfig::trackProgression() )
0230     {
0231         case AmarokConfig::EnumTrackProgression::OnlyQueue:
0232             m_onlyQueueNavigatorAction->setChecked( true );
0233             setIcon( m_onlyQueueNavigatorAction->icon() );
0234             break;
0235 
0236         case AmarokConfig::EnumTrackProgression::RepeatTrack:
0237             m_repeatTrackNavigatorAction->setChecked( true );
0238             setIcon( m_repeatTrackNavigatorAction->icon() );
0239             break;
0240 
0241         case AmarokConfig::EnumTrackProgression::RepeatAlbum:
0242             m_repeatAlbumNavigatorAction->setChecked( true );
0243             setIcon( m_repeatAlbumNavigatorAction->icon() );
0244             break;
0245 
0246         case AmarokConfig::EnumTrackProgression::RepeatPlaylist:
0247             m_repeatPlaylistNavigatorAction->setChecked( true );
0248             setIcon( m_repeatPlaylistNavigatorAction->icon() );
0249             break;
0250 
0251         case AmarokConfig::EnumTrackProgression::RandomTrack:
0252             m_randomTrackNavigatorAction->setChecked( true );
0253             setIcon( m_randomTrackNavigatorAction->icon() );
0254             break;
0255 
0256         case AmarokConfig::EnumTrackProgression::RandomAlbum:
0257             m_randomAlbumNavigatorAction->setChecked( true );
0258             setIcon( m_randomAlbumNavigatorAction->icon() );
0259             break;
0260 
0261         case AmarokConfig::EnumTrackProgression::Normal:
0262         default:
0263             m_standardNavigatorAction->setChecked( true );
0264             setIcon( m_standardNavigatorAction->icon() );
0265             break;
0266     }
0267 }
0268