From 031d937ec75ca48ff1794bdf8ae94da8f482d43f Mon Sep 17 00:00:00 2001 From: Pieter Hulshoff Date: Tue, 21 Jan 2020 22:50:48 +0100 Subject: [PATCH] Added nextCyclePlaylist and prevCyclePlaylist keys. --- RetroFE/Source/Control/UserInput.cpp | 2 ++ RetroFE/Source/Control/UserInput.h | 2 ++ RetroFE/Source/Graphics/Page.cpp | 40 +++++++++++++++++++++++++++- RetroFE/Source/Graphics/Page.h | 3 ++- RetroFE/Source/RetroFE.cpp | 17 ++++++++++-- 5 files changed, 60 insertions(+), 4 deletions(-) diff --git a/RetroFE/Source/Control/UserInput.cpp b/RetroFE/Source/Control/UserInput.cpp index 98f5496..5ab1917 100644 --- a/RetroFE/Source/Control/UserInput.cpp +++ b/RetroFE/Source/Control/UserInput.cpp @@ -63,6 +63,8 @@ bool UserInput::initialize() MapKey("nextPlaylist", KeyCodeNextPlaylist, false); MapKey("prevPlaylist", KeyCodePrevPlaylist, false); MapKey("cyclePlaylist", KeyCodeCyclePlaylist, false); + MapKey("nextCyclePlaylist", KeyCodeNextCyclePlaylist, false); + MapKey("prevCyclePlaylist", KeyCodePrevCyclePlaylist, false); MapKey("addPlaylist", KeyCodeAddPlaylist, false); MapKey("removePlaylist", KeyCodeRemovePlaylist, false); MapKey("random", KeyCodeRandom, false); diff --git a/RetroFE/Source/Control/UserInput.h b/RetroFE/Source/Control/UserInput.h index 9cc1dd2..f1bee33 100644 --- a/RetroFE/Source/Control/UserInput.h +++ b/RetroFE/Source/Control/UserInput.h @@ -47,6 +47,8 @@ public: KeyCodeNextPlaylist, KeyCodePrevPlaylist, KeyCodeCyclePlaylist, + KeyCodeNextCyclePlaylist, + KeyCodePrevCyclePlaylist, KeyCodeRandom, KeyCodeMenu, KeyCodeAddPlaylist, diff --git a/RetroFE/Source/Graphics/Page.cpp b/RetroFE/Source/Graphics/Page.cpp index 46742d9..55e9a59 100644 --- a/RetroFE/Source/Graphics/Page.cpp +++ b/RetroFE/Source/Graphics/Page.cpp @@ -1193,7 +1193,7 @@ void Page::selectPlaylist(std::string playlist) } -void Page::cyclePlaylist(std::vector list) +void Page::nextCyclePlaylist(std::vector list) { // Empty list @@ -1231,6 +1231,44 @@ void Page::cyclePlaylist(std::vector list) } +void Page::prevCyclePlaylist(std::vector list) +{ + + // Empty list + if (list.size() == 0) + return; + + // Find the current playlist in the list + std::vector::iterator it = list.begin(); + while (*it != getPlaylistName() && it != list.end()) + ++it; + + // If current playlist not found, switch to the last found cycle playlist in the playlist list + if (it == list.end()) + { + for (std::vector::iterator it2 = list.end(); it2 != list.begin(); --it2) + { + selectPlaylist( *it2 ); + if (*it2 == getPlaylistName()) + break; + } + } + // Current playlist found; switch to the previous found playlist in the list + else + { + for(;;) + { + --it; + if (it == list.begin()) it = list.end(); // wrap + selectPlaylist( *it ); + if (*it == getPlaylistName()) + break; + } + } + +} + + void Page::update(float dt) { for(MenuVector_T::iterator it = menus_.begin(); it != menus_.end(); it++) diff --git a/RetroFE/Source/Graphics/Page.h b/RetroFE/Source/Graphics/Page.h index d38e32b..72d1afc 100644 --- a/RetroFE/Source/Graphics/Page.h +++ b/RetroFE/Source/Graphics/Page.h @@ -57,7 +57,8 @@ public: void nextPlaylist(); void prevPlaylist(); void selectPlaylist(std::string playlist); - void cyclePlaylist(std::vector list); + void nextCyclePlaylist(std::vector list); + void prevCyclePlaylist(std::vector list); void pushMenu(ScrollingList *s, int index = -1); bool isMenusFull(); void setLoadSound(Sound *chunk); diff --git a/RetroFE/Source/RetroFE.cpp b/RetroFE/Source/RetroFE.cpp index 271e87b..e4b8794 100644 --- a/RetroFE/Source/RetroFE.cpp +++ b/RetroFE/Source/RetroFE.cpp @@ -1346,6 +1346,8 @@ RetroFE::RETROFE_STATE RetroFE::processUserInput( Page *page ) !input_.keystate(UserInput::KeyCodeNextPlaylist) && !input_.keystate(UserInput::KeyCodePrevPlaylist) && !input_.keystate(UserInput::KeyCodeCyclePlaylist) && + !input_.keystate(UserInput::KeyCodeNextCyclePlaylist) && + !input_.keystate(UserInput::KeyCodePrevCyclePlaylist) && !input_.keystate(UserInput::KeyCodeAddPlaylist) && !input_.keystate(UserInput::KeyCodeRemovePlaylist) && !input_.keystate(UserInput::KeyCodeRandom) && @@ -1413,14 +1415,25 @@ RetroFE::RETROFE_STATE RetroFE::processUserInput( Page *page ) page->prevPlaylist( ); state = RETROFE_PLAYLIST_REQUEST; } - if ( input_.keystate(UserInput::KeyCodeCyclePlaylist) ) + if ( input_.keystate(UserInput::KeyCodeCyclePlaylist) || + input_.keystate(UserInput::KeyCodeNextCyclePlaylist) ) { attract_.reset( ); std::string cycleString; config_.getProperty( "cyclePlaylist", cycleString ); std::vector cycleVector; Utils::listToVector( cycleString, cycleVector, ',' ); - page->cyclePlaylist( cycleVector ); + page->nextCyclePlaylist( cycleVector ); + state = RETROFE_PLAYLIST_REQUEST; + } + if ( input_.keystate(UserInput::KeyCodePrevCyclePlaylist) ) + { + attract_.reset( ); + std::string cycleString; + config_.getProperty( "cyclePlaylist", cycleString ); + std::vector cycleVector; + Utils::listToVector( cycleString, cycleVector, ',' ); + page->prevCyclePlaylist( cycleVector ); state = RETROFE_PLAYLIST_REQUEST; } if ( input_.newKeyPressed(UserInput::KeyCodeRemovePlaylist) )