mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2024-11-29 17:45:38 +00:00
Fixed help system being broken for MenuComponent. Still missing in a few places.
Added some "BACK" buttons to various GUIs.
This commit is contained in:
parent
5039b38d8d
commit
18b428f79a
|
@ -412,8 +412,8 @@ std::vector<HelpPrompt> ComponentGrid::getHelpPrompts()
|
||||||
if(e)
|
if(e)
|
||||||
prompts = e->component->getHelpPrompts();
|
prompts = e->component->getHelpPrompts();
|
||||||
|
|
||||||
bool canScrollVert = true;
|
bool canScrollVert = mGridSize.y() > 1;
|
||||||
bool canScrollHoriz = true;
|
bool canScrollHoriz = mGridSize.x() > 1;
|
||||||
for(auto it = prompts.begin(); it != prompts.end(); it++)
|
for(auto it = prompts.begin(); it != prompts.end(); it++)
|
||||||
{
|
{
|
||||||
if(it->first == "up/down/left/right")
|
if(it->first == "up/down/left/right")
|
||||||
|
|
|
@ -117,6 +117,8 @@ void ComponentList::onCursorChanged(const CursorState& state)
|
||||||
else if(mCameraOffset + mSize.y() > totalHeight)
|
else if(mCameraOffset + mSize.y() > totalHeight)
|
||||||
mCameraOffset = totalHeight - mSize.y();
|
mCameraOffset = totalHeight - mSize.y();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateHelpPrompts();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComponentList::render(const Eigen::Affine3f& parentTrans)
|
void ComponentList::render(const Eigen::Affine3f& parentTrans)
|
||||||
|
@ -238,3 +240,11 @@ void ComponentList::updateElementSize(const ComponentListRow& row)
|
||||||
(*it)->setSize(width, (*it)->getSize().y());
|
(*it)->setSize(width, (*it)->getSize().y());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<HelpPrompt> ComponentList::getHelpPrompts()
|
||||||
|
{
|
||||||
|
if(!size())
|
||||||
|
return std::vector<HelpPrompt>();
|
||||||
|
|
||||||
|
return mEntries.at(mCursor).data.elements.back().component->getHelpPrompts();
|
||||||
|
}
|
||||||
|
|
|
@ -50,6 +50,7 @@ public:
|
||||||
bool input(InputConfig* config, Input input) override;
|
bool input(InputConfig* config, Input input) override;
|
||||||
void update(int deltaTime) override;
|
void update(int deltaTime) override;
|
||||||
void render(const Eigen::Affine3f& parentTrans) override;
|
void render(const Eigen::Affine3f& parentTrans) override;
|
||||||
|
virtual std::vector<HelpPrompt> getHelpPrompts() override;
|
||||||
|
|
||||||
void onSizeChanged() override;
|
void onSizeChanged() override;
|
||||||
void onFocusGained() override;
|
void onFocusGained() override;
|
||||||
|
|
|
@ -77,3 +77,8 @@ void MenuComponent::updateGrid()
|
||||||
mButtonGrid.reset();
|
mButtonGrid.reset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<HelpPrompt> MenuComponent::getHelpPrompts()
|
||||||
|
{
|
||||||
|
return mGrid.getHelpPrompts();
|
||||||
|
}
|
||||||
|
|
|
@ -30,6 +30,8 @@ public:
|
||||||
inline void setCursorToList() { mGrid.setCursorTo(mList); }
|
inline void setCursorToList() { mGrid.setCursorTo(mList); }
|
||||||
inline void setCursorToButtons() { assert(mButtonGrid); mGrid.setCursorTo(mButtonGrid); }
|
inline void setCursorToButtons() { assert(mButtonGrid); mGrid.setCursorTo(mButtonGrid); }
|
||||||
|
|
||||||
|
virtual std::vector<HelpPrompt> getHelpPrompts() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void updateSize();
|
void updateSize();
|
||||||
void updateGrid();
|
void updateGrid();
|
||||||
|
|
|
@ -37,8 +37,8 @@ private:
|
||||||
OptionListComponent<T>* mParent;
|
OptionListComponent<T>* mParent;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
OptionListPopup(Window* window, OptionListComponent<T>* parent) : GuiComponent(window),
|
OptionListPopup(Window* window, OptionListComponent<T>* parent, const std::string& title) : GuiComponent(window),
|
||||||
mMenu(window, ""), mParent(parent)
|
mMenu(window, title.c_str()), mParent(parent)
|
||||||
{
|
{
|
||||||
auto font = Font::get(FONT_SIZE_MEDIUM);
|
auto font = Font::get(FONT_SIZE_MEDIUM);
|
||||||
ComponentListRow row;
|
ComponentListRow row;
|
||||||
|
@ -85,7 +85,10 @@ private:
|
||||||
mMenu.addRow(row, (!mParent->mMultiSelect && it->selected));
|
mMenu.addRow(row, (!mParent->mMultiSelect && it->selected));
|
||||||
}
|
}
|
||||||
|
|
||||||
mMenu.setPosition((Renderer::getScreenWidth() - mMenu.getSize().x()) / 2, (Renderer::getScreenHeight() - mMenu.getSize().y()) / 2);
|
if(mParent->mMultiSelect)
|
||||||
|
mMenu.addButton("BACK", "accept", [this] { delete this; });
|
||||||
|
|
||||||
|
mMenu.setPosition((Renderer::getScreenWidth() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f);
|
||||||
addChild(&mMenu);
|
addChild(&mMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,7 +105,7 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
OptionListComponent(Window* window, bool multiSelect = false) : GuiComponent(window), mMultiSelect(multiSelect),
|
OptionListComponent(Window* window, const std::string& name, bool multiSelect = false) : GuiComponent(window), mMultiSelect(multiSelect), mName(name),
|
||||||
mText(window), mLeftArrow(window), mRightArrow(window)
|
mText(window), mLeftArrow(window), mRightArrow(window)
|
||||||
{
|
{
|
||||||
auto font = Font::get(FONT_SIZE_MEDIUM);
|
auto font = Font::get(FONT_SIZE_MEDIUM);
|
||||||
|
@ -124,10 +127,10 @@ public:
|
||||||
addChild(&mRightArrow);
|
addChild(&mRightArrow);
|
||||||
}
|
}
|
||||||
|
|
||||||
// handles positioning/resizing of text and arrows
|
setSize(mLeftArrow.getSize().x() + mRightArrow.getSize().x(), (float)font->getHeight());
|
||||||
setSize(Renderer::getScreenWidth() * 0.2f, (float)font->getHeight());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// handles positioning/resizing of text and arrows
|
||||||
void onSizeChanged() override
|
void onSizeChanged() override
|
||||||
{
|
{
|
||||||
// size
|
// size
|
||||||
|
@ -239,7 +242,7 @@ private:
|
||||||
|
|
||||||
void open()
|
void open()
|
||||||
{
|
{
|
||||||
mWindow->pushGui(new OptionListPopup(mWindow, this));
|
mWindow->pushGui(new OptionListPopup(mWindow, this, mName));
|
||||||
}
|
}
|
||||||
|
|
||||||
void onSelectedChanged()
|
void onSelectedChanged()
|
||||||
|
@ -250,6 +253,10 @@ private:
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << getSelectedObjects().size() << " selected";
|
ss << getSelectedObjects().size() << " selected";
|
||||||
mText.setText(ss.str());
|
mText.setText(ss.str());
|
||||||
|
mText.setSize(0, mText.getSize().y());
|
||||||
|
setSize(mText.getSize().x() + mRightArrow.getSize().x() + 16, mText.getSize().y());
|
||||||
|
if(mParent) // hack since theres no "on child size changed" callback atm...
|
||||||
|
mParent->onSizeChanged();
|
||||||
}else{
|
}else{
|
||||||
// display currently selected + l/r cursors
|
// display currently selected + l/r cursors
|
||||||
for(auto it = mEntries.begin(); it != mEntries.end(); it++)
|
for(auto it = mEntries.begin(); it != mEntries.end(); it++)
|
||||||
|
@ -257,14 +264,29 @@ private:
|
||||||
if(it->selected)
|
if(it->selected)
|
||||||
{
|
{
|
||||||
mText.setText(it->name);
|
mText.setText(it->name);
|
||||||
|
mText.setSize(0, mText.getSize().y());
|
||||||
|
setSize(mText.getSize().x() + mLeftArrow.getSize().x() + mRightArrow.getSize().x() + 16, mText.getSize().y());
|
||||||
|
if(mParent) // hack since theres no "on child size changed" callback atm...
|
||||||
|
mParent->onSizeChanged();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<HelpPrompt> getHelpPrompts() override
|
||||||
|
{
|
||||||
|
std::vector<HelpPrompt> prompts;
|
||||||
|
if(!mMultiSelect)
|
||||||
|
prompts.push_back(HelpPrompt("left/right", "change"));
|
||||||
|
|
||||||
|
prompts.push_back(HelpPrompt("a", "change"));
|
||||||
|
return prompts;
|
||||||
|
}
|
||||||
|
|
||||||
bool mMultiSelect;
|
bool mMultiSelect;
|
||||||
|
|
||||||
|
std::string mName;
|
||||||
TextComponent mText;
|
TextComponent mText;
|
||||||
ImageComponent mLeftArrow;
|
ImageComponent mLeftArrow;
|
||||||
ImageComponent mRightArrow;
|
ImageComponent mRightArrow;
|
||||||
|
|
|
@ -60,7 +60,6 @@ public:
|
||||||
inline void setFont(const std::shared_ptr<Font>& font)
|
inline void setFont(const std::shared_ptr<Font>& font)
|
||||||
{
|
{
|
||||||
mFont = font;
|
mFont = font;
|
||||||
this->mTitleOverlayFont = Font::get(FONT_SIZE_LARGE, mFont->getPath());
|
|
||||||
|
|
||||||
for(auto it = mEntries.begin(); it != mEntries.end(); it++)
|
for(auto it = mEntries.begin(); it != mEntries.end(); it++)
|
||||||
it->data.textCache.reset();
|
it->data.textCache.reset();
|
||||||
|
|
|
@ -44,7 +44,7 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN
|
||||||
auto s = new GuiSettings(mWindow, "SCRAPER");
|
auto s = new GuiSettings(mWindow, "SCRAPER");
|
||||||
|
|
||||||
// scrape from
|
// scrape from
|
||||||
auto scraper_list = std::make_shared< OptionListComponent< std::shared_ptr<Scraper> > >(mWindow, false);
|
auto scraper_list = std::make_shared< OptionListComponent< std::shared_ptr<Scraper> > >(mWindow, "SCRAPE FROM", false);
|
||||||
std::vector< std::shared_ptr<Scraper> > scrapers;
|
std::vector< std::shared_ptr<Scraper> > scrapers;
|
||||||
scrapers.push_back(std::make_shared<GamesDBScraper>());
|
scrapers.push_back(std::make_shared<GamesDBScraper>());
|
||||||
scrapers.push_back(std::make_shared<TheArchiveScraper>());
|
scrapers.push_back(std::make_shared<TheArchiveScraper>());
|
||||||
|
@ -152,14 +152,14 @@ GuiMenu::GuiMenu(Window* window) : GuiComponent(window), mMenu(window, "MAIN MEN
|
||||||
{
|
{
|
||||||
row.elements.clear();
|
row.elements.clear();
|
||||||
row.makeAcceptInputHandler([window] {
|
row.makeAcceptInputHandler([window] {
|
||||||
window->pushGui(new GuiMsgBoxYesNo(window, "REALLY EXIT?",
|
window->pushGui(new GuiMsgBoxYesNo(window, "REALLY QUIT?",
|
||||||
[] {
|
[] {
|
||||||
SDL_Event ev;
|
SDL_Event ev;
|
||||||
ev.type = SDL_QUIT;
|
ev.type = SDL_QUIT;
|
||||||
SDL_PushEvent(&ev);
|
SDL_PushEvent(&ev);
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
row.addElement(std::make_shared<TextComponent>(window, "EXIT EMULATIONSTATION", Font::get(FONT_SIZE_MEDIUM), 0x770000FF), true);
|
row.addElement(std::make_shared<TextComponent>(window, "QUIT EMULATIONSTATION", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true);
|
||||||
s->addRow(row);
|
s->addRow(row);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -199,3 +199,11 @@ bool GuiMenu::input(InputConfig* config, Input input)
|
||||||
|
|
||||||
return GuiComponent::input(config, input);
|
return GuiComponent::input(config, input);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<HelpPrompt> GuiMenu::getHelpPrompts()
|
||||||
|
{
|
||||||
|
std::vector<HelpPrompt> prompts;
|
||||||
|
prompts.push_back(HelpPrompt("up/down", "move cursor"));
|
||||||
|
prompts.push_back(HelpPrompt("a", "accept"));
|
||||||
|
return prompts;
|
||||||
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ public:
|
||||||
GuiMenu(Window* window);
|
GuiMenu(Window* window);
|
||||||
|
|
||||||
bool input(InputConfig* config, Input input) override;
|
bool input(InputConfig* config, Input input) override;
|
||||||
|
std::vector<HelpPrompt> getHelpPrompts() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void addEntry(const char* name, unsigned int color, bool add_arrow, const std::function<void()>& func);
|
void addEntry(const char* name, unsigned int color, bool add_arrow, const std::function<void()>& func);
|
||||||
|
|
|
@ -12,7 +12,7 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window),
|
||||||
addChild(&mMenu);
|
addChild(&mMenu);
|
||||||
|
|
||||||
// add filters (with first one selected)
|
// add filters (with first one selected)
|
||||||
mFilters = std::make_shared< OptionListComponent<GameFilterFunc> >(mWindow, false);
|
mFilters = std::make_shared< OptionListComponent<GameFilterFunc> >(mWindow, "SCRAPE THESE GAMES", false);
|
||||||
mFilters->add("All Games",
|
mFilters->add("All Games",
|
||||||
[](SystemData*, FileData*) -> bool { return true; }, true);
|
[](SystemData*, FileData*) -> bool { return true; }, true);
|
||||||
mFilters->add("Only missing image",
|
mFilters->add("Only missing image",
|
||||||
|
@ -20,20 +20,16 @@ GuiScraperStart::GuiScraperStart(Window* window) : GuiComponent(window),
|
||||||
mMenu.addWithLabel("Filter", mFilters);
|
mMenu.addWithLabel("Filter", mFilters);
|
||||||
|
|
||||||
//add systems (all with a platformid specified selected)
|
//add systems (all with a platformid specified selected)
|
||||||
mSystems = std::make_shared< OptionListComponent<SystemData*> >(mWindow, true);
|
mSystems = std::make_shared< OptionListComponent<SystemData*> >(mWindow, "SCRAPE THESE SYSTEMS", true);
|
||||||
for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++)
|
for(auto it = SystemData::sSystemVector.begin(); it != SystemData::sSystemVector.end(); it++)
|
||||||
mSystems->add((*it)->getFullName(), *it, (*it)->getPlatformId() != PlatformIds::PLATFORM_UNKNOWN);
|
mSystems->add((*it)->getFullName(), *it, (*it)->getPlatformId() != PlatformIds::PLATFORM_UNKNOWN);
|
||||||
mMenu.addWithLabel("Systems", mSystems);
|
mMenu.addWithLabel("Systems", mSystems);
|
||||||
|
|
||||||
mAutoStyle = std::make_shared< OptionListComponent<int> >(mWindow, false);
|
mApproveResults = std::make_shared<SwitchComponent>(mWindow);
|
||||||
mAutoStyle->add("Never automatically accept result", 0, true);
|
mApproveResults->setState(true);
|
||||||
mAutoStyle->add("Always accept first result", 1, false);
|
mMenu.addWithLabel("User decides on conflicts", mApproveResults);
|
||||||
mMenu.addWithLabel("Auto style", mAutoStyle);
|
|
||||||
|
|
||||||
ComponentListRow row;
|
mMenu.addButton("START", "start scraping", std::bind(&GuiScraperStart::pressedStart, this));
|
||||||
row.addElement(std::make_shared<TextComponent>(mWindow, "GO GO GO", Font::get(FONT_SIZE_MEDIUM), 0x777777FF), true);
|
|
||||||
row.makeAcceptInputHandler(std::bind(&GuiScraperStart::pressedStart, this));
|
|
||||||
mMenu.addRow(row);
|
|
||||||
|
|
||||||
mMenu.setPosition((Renderer::getScreenWidth() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f);
|
mMenu.setPosition((Renderer::getScreenWidth() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f);
|
||||||
}
|
}
|
||||||
|
@ -58,7 +54,7 @@ void GuiScraperStart::start()
|
||||||
{
|
{
|
||||||
std::queue<ScraperSearchParams> searches = getSearches(mSystems->getSelectedObjects(), mFilters->getSelected());
|
std::queue<ScraperSearchParams> searches = getSearches(mSystems->getSelectedObjects(), mFilters->getSelected());
|
||||||
|
|
||||||
GuiScraperLog* gsl = new GuiScraperLog(mWindow, searches, mAutoStyle->getSelected() == 0);
|
GuiScraperLog* gsl = new GuiScraperLog(mWindow, searches, mApproveResults->getState());
|
||||||
mWindow->pushGui(gsl);
|
mWindow->pushGui(gsl);
|
||||||
gsl->start();
|
gsl->start();
|
||||||
delete this;
|
delete this;
|
||||||
|
|
|
@ -32,7 +32,7 @@ private:
|
||||||
|
|
||||||
std::shared_ptr< OptionListComponent<GameFilterFunc> > mFilters;
|
std::shared_ptr< OptionListComponent<GameFilterFunc> > mFilters;
|
||||||
std::shared_ptr< OptionListComponent<SystemData*> > mSystems;
|
std::shared_ptr< OptionListComponent<SystemData*> > mSystems;
|
||||||
std::shared_ptr< OptionListComponent<int> > mAutoStyle;
|
std::shared_ptr<SwitchComponent> mApproveResults;
|
||||||
|
|
||||||
MenuComponent mMenu;
|
MenuComponent mMenu;
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,6 +5,8 @@ GuiSettings::GuiSettings(Window* window, const char* title) : GuiComponent(windo
|
||||||
{
|
{
|
||||||
addChild(&mMenu);
|
addChild(&mMenu);
|
||||||
|
|
||||||
|
mMenu.addButton("BACK", "go back", [this] { delete this; });
|
||||||
|
|
||||||
setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight());
|
setSize((float)Renderer::getScreenWidth(), (float)Renderer::getScreenHeight());
|
||||||
mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f);
|
mMenu.setPosition((mSize.x() - mMenu.getSize().x()) / 2, Renderer::getScreenHeight() * 0.15f);
|
||||||
}
|
}
|
||||||
|
@ -38,5 +40,9 @@ bool GuiSettings::input(InputConfig* config, Input input)
|
||||||
|
|
||||||
std::vector<HelpPrompt> GuiSettings::getHelpPrompts()
|
std::vector<HelpPrompt> GuiSettings::getHelpPrompts()
|
||||||
{
|
{
|
||||||
return mMenu.getHelpPrompts();
|
std::vector<HelpPrompt> prompts = mMenu.getHelpPrompts();
|
||||||
|
|
||||||
|
prompts.push_back(HelpPrompt("b", "go back"));
|
||||||
|
|
||||||
|
return prompts;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue