mirror of
https://github.com/FunKey-Project/RetroFE.git
synced 2026-01-01 11:38:52 +01:00
Support for alphabetical scrolling
This commit is contained in:
parent
7bd25cb079
commit
24db185788
@ -50,6 +50,8 @@ bool UserInput::Initialize()
|
||||
|
||||
retVal = MapKey("pageDown", KeyCodePageDown) && retVal;
|
||||
retVal = MapKey("pageUp", KeyCodePageUp) && retVal;
|
||||
retVal = MapKey("letterDown", KeyCodeLetterDown) && retVal;
|
||||
retVal = MapKey("letterUp", KeyCodeLetterUp) && retVal;
|
||||
retVal = MapKey("select", KeyCodeSelect) && retVal;
|
||||
retVal = MapKey("back", KeyCodeBack) && retVal;
|
||||
retVal = MapKey("quit", KeyCodeQuit) && retVal;
|
||||
|
||||
@ -34,6 +34,8 @@ public:
|
||||
KeyCodeBack,
|
||||
KeyCodePageDown,
|
||||
KeyCodePageUp,
|
||||
KeyCodeLetterDown,
|
||||
KeyCodeLetterUp,
|
||||
KeyCodeAdminMode,
|
||||
KeyCodeHideItem,
|
||||
KeyCodeQuit
|
||||
|
||||
@ -29,6 +29,7 @@
|
||||
#include "Text.h"
|
||||
#include "../../Database/Configuration.h" // todo: decouple the GUI from the data
|
||||
#include "../../Collection/Item.h"
|
||||
#include "../../Utility/Utils.h"
|
||||
#include "../../Utility/Log.h"
|
||||
#include "../../SDL.h"
|
||||
#include "../ViewInfo.h"
|
||||
@ -377,10 +378,72 @@ void ScrollingList::PageDown()
|
||||
}
|
||||
|
||||
AllocateSpritePoints();
|
||||
//todo: may want to handle this properly
|
||||
// CurrentScrollState = ScrollStatePageChange;
|
||||
}
|
||||
|
||||
|
||||
void ScrollingList::LetterUp()
|
||||
{
|
||||
NotifyAllRequested = true;
|
||||
DeallocateSpritePoints();
|
||||
|
||||
if(SpriteList && ScrollPoints)
|
||||
{
|
||||
|
||||
|
||||
unsigned int i = 0;
|
||||
|
||||
// Select the previous item in the list in case we are at the top of all the items
|
||||
// for the currently selected letter.
|
||||
CircularDecrement(FirstSpriteIndex, SpriteList);
|
||||
std::string startname = GetSelectedCollectionItemSprite()->GetCollectionItem()->GetLCFullTitle();
|
||||
++i;
|
||||
|
||||
bool done = false;
|
||||
|
||||
// traverse up through the list until we find the first item that starts with a different letter
|
||||
while(!done && i < SpriteList->size())
|
||||
{
|
||||
CircularDecrement(FirstSpriteIndex, SpriteList);
|
||||
std::string endname = GetSelectedCollectionItemSprite()->GetCollectionItem()->GetLCFullTitle();
|
||||
++i;
|
||||
done = (startname[0] != endname[0]);
|
||||
|
||||
if(done)
|
||||
{
|
||||
// our searching went too far, rewind to the first item in the list that matches the starting letter
|
||||
CircularIncrement(FirstSpriteIndex, SpriteList);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AllocateSpritePoints();
|
||||
}
|
||||
|
||||
void ScrollingList::LetterDown()
|
||||
{
|
||||
NotifyAllRequested = true;
|
||||
DeallocateSpritePoints();
|
||||
|
||||
if(SpriteList && ScrollPoints)
|
||||
{
|
||||
|
||||
std::string startname = GetSelectedCollectionItemSprite()->GetCollectionItem()->GetLCFullTitle();
|
||||
std::string endname = startname;
|
||||
|
||||
unsigned int i = 0;
|
||||
|
||||
while(startname[0] == endname[0] && i < SpriteList->size())
|
||||
{
|
||||
CircularIncrement(FirstSpriteIndex, SpriteList);
|
||||
endname = GetSelectedCollectionItemSprite()->GetCollectionItem()->GetLCFullTitle();
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
AllocateSpritePoints();
|
||||
}
|
||||
|
||||
|
||||
void ScrollingList::FreeGraphicsMemory()
|
||||
{
|
||||
Component::FreeGraphicsMemory();
|
||||
|
||||
@ -65,6 +65,8 @@ public:
|
||||
bool IsHorizontalScroll();
|
||||
void PageUp();
|
||||
void PageDown();
|
||||
void LetterUp();
|
||||
void LetterDown();
|
||||
bool IsIdle();
|
||||
void SetSelectedIndex(int selectedIndex);
|
||||
ComponentItemBinding *GetSelectedCollectionItemSprite();
|
||||
|
||||
@ -378,6 +378,22 @@ void Page::PageScroll(ScrollDirection direction)
|
||||
}
|
||||
}
|
||||
|
||||
void Page::LetterScroll(ScrollDirection direction)
|
||||
{
|
||||
if(ActiveMenu)
|
||||
{
|
||||
if(direction == ScrollDirectionForward)
|
||||
{
|
||||
ActiveMenu->LetterDown();
|
||||
}
|
||||
if(direction == ScrollDirectionBack)
|
||||
{
|
||||
ActiveMenu->LetterUp();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool Page::PushCollection(CollectionInfo *collection)
|
||||
{
|
||||
Collections.push_back(collection);
|
||||
|
||||
@ -54,6 +54,7 @@ public:
|
||||
void SetSelectSound(Sound *chunk);
|
||||
bool AddComponent(Component *c);
|
||||
void PageScroll(ScrollDirection direction);
|
||||
void LetterScroll(ScrollDirection direction);
|
||||
void Start();
|
||||
void StartComponents();
|
||||
void Stop();
|
||||
|
||||
@ -430,6 +430,15 @@ RetroFE::RETROFE_STATE RetroFE::ProcessUserInput(Page *page)
|
||||
{
|
||||
page->PageScroll(Page::ScrollDirectionForward);
|
||||
}
|
||||
if (Input.GetKeyState(UserInput::KeyCodeLetterUp))
|
||||
{
|
||||
page->LetterScroll(Page::ScrollDirectionBack);
|
||||
}
|
||||
if (Input.GetKeyState(UserInput::KeyCodeLetterDown))
|
||||
{
|
||||
page->LetterScroll(Page::ScrollDirectionForward);
|
||||
}
|
||||
|
||||
if (Input.GetKeyState(UserInput::KeyCodeAdminMode))
|
||||
{
|
||||
//todo: add admin mode support
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user