From f326d9223ad0914c7ffc53f6399c769b4c42ed06 Mon Sep 17 00:00:00 2001 From: Pieter Hulshoff Date: Mon, 15 Apr 2019 13:54:08 +0200 Subject: [PATCH] Added prevLetterSubToCurrent option to allow previous letter/sub collection button to go the start of the current letter/sub rather than start of the previous one. --- .../Graphics/Component/ScrollingList.cpp | 62 ++++++++++++------- 1 file changed, 40 insertions(+), 22 deletions(-) diff --git a/RetroFE/Source/Graphics/Component/ScrollingList.cpp b/RetroFE/Source/Graphics/Component/ScrollingList.cpp index d0125db..c8842f9 100644 --- a/RetroFE/Source/Graphics/Component/ScrollingList.cpp +++ b/RetroFE/Source/Graphics/Component/ScrollingList.cpp @@ -297,6 +297,7 @@ void ScrollingList::letterChange( bool increment ) if ( !items_ || items_->size( ) == 0 ) return; + Item *startItem = items_->at( (itemIndex_+selectedOffsetIndex_ ) % items_->size( ) ); std::string startname = items_->at( (itemIndex_+selectedOffsetIndex_ ) % items_->size( ) )->lowercaseFullTitle( ); for ( unsigned int i = 0; i < items_->size( ); ++i ) @@ -324,24 +325,32 @@ void ScrollingList::letterChange( bool increment ) if ( !increment ) // For decrement, find the first game of the new letter { - startname = items_->at( (itemIndex_+selectedOffsetIndex_ ) % items_->size( ) )->lowercaseFullTitle( ); - - for ( unsigned int i = 0; i < items_->size( ); ++i ) + bool prevLetterSubToCurrent = false; + config_.getProperty( "prevLetterSubToCurrent", prevLetterSubToCurrent ); + if ( !prevLetterSubToCurrent || items_->at( (itemIndex_+1+selectedOffsetIndex_ ) % items_->size( ) ) == startItem ) { - unsigned int index = loopDecrement( itemIndex_, i, items_->size( ) ); + startname = items_->at( (itemIndex_+selectedOffsetIndex_ ) % items_->size( ) )->lowercaseFullTitle( ); - std::string endname = items_->at( (index+selectedOffsetIndex_ ) % items_->size( ) )->lowercaseFullTitle( ); - - // check if we are changing characters from a-z, or changing from alpha character to non-alpha character - if ((isalpha(startname[0] ) ^ isalpha(endname[0] ) ) || - (isalpha(startname[0] ) && isalpha(endname[0] ) && startname[0] != endname[0] ) ) + for ( unsigned int i = 0; i < items_->size( ); ++i ) { - itemIndex_ = loopIncrement( index,1,items_->size( ) ); - break; + unsigned int index = loopDecrement( itemIndex_, i, items_->size( ) ); + + std::string endname = items_->at( (index+selectedOffsetIndex_ ) % items_->size( ) )->lowercaseFullTitle( ); + + // check if we are changing characters from a-z, or changing from alpha character to non-alpha character + if ((isalpha(startname[0] ) ^ isalpha(endname[0] ) ) || + (isalpha(startname[0] ) && isalpha(endname[0] ) && startname[0] != endname[0] ) ) + { + itemIndex_ = loopIncrement( index,1,items_->size( ) ); + break; + } } } + else + { + itemIndex_ = loopIncrement( itemIndex_,1,items_->size( ) ); + } } - } @@ -362,6 +371,7 @@ void ScrollingList::subChange( bool increment ) if ( !items_ || items_->size( ) == 0 ) return; + Item *startItem = items_->at( (itemIndex_+selectedOffsetIndex_ ) % items_->size( ) ); std::string startname = items_->at( (itemIndex_+selectedOffsetIndex_ ) % items_->size( ) )->collectionInfo->lowercaseName( ); for ( unsigned int i = 0; i < items_->size( ); ++i ) @@ -387,22 +397,30 @@ void ScrollingList::subChange( bool increment ) if ( !increment ) // For decrement, find the first game of the new sub { - startname = items_->at( (itemIndex_+selectedOffsetIndex_ ) % items_->size( ) )->collectionInfo->lowercaseName( ); - - for ( unsigned int i = 0; i < items_->size( ); ++i ) + bool prevLetterSubToCurrent = false; + config_.getProperty( "prevLetterSubToCurrent", prevLetterSubToCurrent ); + if ( !prevLetterSubToCurrent || items_->at( (itemIndex_+1+selectedOffsetIndex_ ) % items_->size( ) ) == startItem ) { - unsigned int index = loopDecrement( itemIndex_, i, items_->size( ) ); + startname = items_->at( (itemIndex_+selectedOffsetIndex_ ) % items_->size( ) )->collectionInfo->lowercaseName( ); - std::string endname = items_->at( (index+selectedOffsetIndex_ ) % items_->size( ) )->collectionInfo->lowercaseName( ); - - if (startname != endname) + for ( unsigned int i = 0; i < items_->size( ); ++i ) { - itemIndex_ = loopIncrement( index,1,items_->size( ) ); - break; + unsigned int index = loopDecrement( itemIndex_, i, items_->size( ) ); + + std::string endname = items_->at( (index+selectedOffsetIndex_ ) % items_->size( ) )->collectionInfo->lowercaseName( ); + + if (startname != endname) + { + itemIndex_ = loopIncrement( index,1,items_->size( ) ); + break; + } } } + else + { + itemIndex_ = loopIncrement( itemIndex_,1,items_->size( ) ); + } } - }