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