mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2024-11-29 09:35:39 +00:00
Re-added the "jump to letter" functionality.
This commit is contained in:
parent
ded816905d
commit
4d4d4bc108
|
@ -9,6 +9,31 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui
|
||||||
{
|
{
|
||||||
addChild(&mMenu);
|
addChild(&mMenu);
|
||||||
|
|
||||||
|
// jump to letter
|
||||||
|
char curChar = getGamelist()->getCursor()->getName()[0];
|
||||||
|
mJumpToLetterList = std::make_shared<LetterList>(mWindow, "JUMP TO LETTER", false);
|
||||||
|
for(char c = 'A'; c <= 'Z'; c++)
|
||||||
|
{
|
||||||
|
mJumpToLetterList->add(std::string(1, c), c, c == curChar);
|
||||||
|
}
|
||||||
|
|
||||||
|
ComponentListRow row;
|
||||||
|
row.addElement(std::make_shared<TextComponent>(mWindow, "JUMP TO LETTER", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true);
|
||||||
|
row.addElement(mJumpToLetterList, false);
|
||||||
|
row.input_handler = [&](InputConfig* config, Input input) {
|
||||||
|
if(config->isMappedTo("a", input) && input.value)
|
||||||
|
{
|
||||||
|
jumpToLetter();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if(mJumpToLetterList->input(config, input))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
mMenu.addRow(row);
|
||||||
|
|
||||||
// sort list by
|
// sort list by
|
||||||
mListSort = std::make_shared<SortList>(mWindow, "SORT GAMES BY", false);
|
mListSort = std::make_shared<SortList>(mWindow, "SORT GAMES BY", false);
|
||||||
for(unsigned int i = 0; i < FileSorts::SortTypes.size(); i++)
|
for(unsigned int i = 0; i < FileSorts::SortTypes.size(); i++)
|
||||||
|
@ -20,7 +45,7 @@ GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) : Gui
|
||||||
mMenu.addWithLabel("SORT GAMES BY", mListSort);
|
mMenu.addWithLabel("SORT GAMES BY", mListSort);
|
||||||
|
|
||||||
// edit game metadata
|
// edit game metadata
|
||||||
ComponentListRow row;
|
row.elements.clear();
|
||||||
row.addElement(std::make_shared<TextComponent>(mWindow, "EDIT THIS GAME'S METADATA", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true);
|
row.addElement(std::make_shared<TextComponent>(mWindow, "EDIT THIS GAME'S METADATA", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true);
|
||||||
row.addElement(makeArrow(mWindow), false);
|
row.addElement(makeArrow(mWindow), false);
|
||||||
row.makeAcceptInputHandler(std::bind(&GuiGamelistOptions::openMetaDataEd, this));
|
row.makeAcceptInputHandler(std::bind(&GuiGamelistOptions::openMetaDataEd, this));
|
||||||
|
@ -57,6 +82,41 @@ void GuiGamelistOptions::openMetaDataEd()
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GuiGamelistOptions::jumpToLetter()
|
||||||
|
{
|
||||||
|
char letter = mJumpToLetterList->getSelected();
|
||||||
|
IGameListView* gamelist = getGamelist();
|
||||||
|
|
||||||
|
// this is a really shitty way to get a list of files
|
||||||
|
const std::vector<FileData*>& files = gamelist->getCursor()->getParent()->getChildren();
|
||||||
|
|
||||||
|
long min = 0;
|
||||||
|
long max = files.size() - 1;
|
||||||
|
long mid = 0;
|
||||||
|
|
||||||
|
while(max >= min)
|
||||||
|
{
|
||||||
|
mid = ((max - min) / 2) + min;
|
||||||
|
|
||||||
|
// game somehow has no first character to check
|
||||||
|
if(files.at(mid)->getName().empty())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
char checkLetter = toupper(files.at(mid)->getName()[0]);
|
||||||
|
|
||||||
|
if(checkLetter < letter)
|
||||||
|
min = mid + 1;
|
||||||
|
else if(checkLetter > letter)
|
||||||
|
max = mid - 1;
|
||||||
|
else
|
||||||
|
break; //exact match found
|
||||||
|
}
|
||||||
|
|
||||||
|
gamelist->setCursor(files.at(mid));
|
||||||
|
|
||||||
|
delete this;
|
||||||
|
}
|
||||||
|
|
||||||
bool GuiGamelistOptions::input(InputConfig* config, Input input)
|
bool GuiGamelistOptions::input(InputConfig* config, Input input)
|
||||||
{
|
{
|
||||||
if((config->isMappedTo("b", input) || config->isMappedTo("select", input)) && input.value)
|
if((config->isMappedTo("b", input) || config->isMappedTo("select", input)) && input.value)
|
||||||
|
|
|
@ -16,9 +16,13 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void openMetaDataEd();
|
void openMetaDataEd();
|
||||||
|
void jumpToLetter();
|
||||||
|
|
||||||
MenuComponent mMenu;
|
MenuComponent mMenu;
|
||||||
|
|
||||||
|
typedef OptionListComponent<char> LetterList;
|
||||||
|
std::shared_ptr<LetterList> mJumpToLetterList;
|
||||||
|
|
||||||
typedef OptionListComponent<const FileData::SortType*> SortList;
|
typedef OptionListComponent<const FileData::SortType*> SortList;
|
||||||
std::shared_ptr<SortList> mListSort;
|
std::shared_ptr<SortList> mListSort;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue