ES-DE/es-app/src/views/gamelist/ISimpleGameListView.cpp
2017-08-19 09:25:52 -04:00

170 lines
4 KiB
C++

#include "views/gamelist/ISimpleGameListView.h"
#include "ThemeData.h"
#include "Window.h"
#include "views/ViewController.h"
#include "Sound.h"
#include "Log.h"
#include "Settings.h"
#include "CollectionSystemManager.h"
ISimpleGameListView::ISimpleGameListView(Window* window, FileData* root) : IGameListView(window, root),
mHeaderText(window), mHeaderImage(window), mBackground(window)
{
mHeaderText.setText("Logo Text");
mHeaderText.setSize(mSize.x(), 0);
mHeaderText.setPosition(0, 0);
mHeaderText.setHorizontalAlignment(ALIGN_CENTER);
mHeaderText.setDefaultZIndex(50);
mHeaderImage.setResize(0, mSize.y() * 0.185f);
mHeaderImage.setOrigin(0.5f, 0.0f);
mHeaderImage.setPosition(mSize.x() / 2, 0);
mHeaderImage.setDefaultZIndex(50);
mBackground.setResize(mSize.x(), mSize.y());
mBackground.setDefaultZIndex(0);
addChild(&mHeaderText);
addChild(&mBackground);
}
void ISimpleGameListView::onThemeChanged(const std::shared_ptr<ThemeData>& theme)
{
using namespace ThemeFlags;
mBackground.applyTheme(theme, getName(), "background", ALL);
mHeaderImage.applyTheme(theme, getName(), "logo", ALL);
mHeaderText.applyTheme(theme, getName(), "logoText", ALL);
// Remove old theme extras
for (auto extra : mThemeExtras)
{
removeChild(extra);
delete extra;
}
mThemeExtras.clear();
// Add new theme extras
mThemeExtras = ThemeData::makeExtras(theme, getName(), mWindow);
for (auto extra : mThemeExtras)
{
addChild(extra);
}
if(mHeaderImage.hasImage())
{
removeChild(&mHeaderText);
addChild(&mHeaderImage);
}else{
addChild(&mHeaderText);
removeChild(&mHeaderImage);
}
}
void ISimpleGameListView::onFileChanged(FileData* file, FileChangeType change)
{
// we could be tricky here to be efficient;
// but this shouldn't happen very often so we'll just always repopulate
FileData* cursor = getCursor();
if (!cursor->isPlaceHolder()) {
populateList(cursor->getParent()->getChildrenListToDisplay());
setCursor(cursor);
}
else
{
populateList(mRoot->getChildrenListToDisplay());
setCursor(cursor);
}
}
bool ISimpleGameListView::input(InputConfig* config, Input input)
{
if(input.value != 0)
{
if(config->isMappedTo("a", input))
{
FileData* cursor = getCursor();
if(cursor->getType() == GAME)
{
Sound::getFromTheme(getTheme(), getName(), "launch")->play();
launch(cursor);
}else{
// it's a folder
if(cursor->getChildren().size() > 0)
{
mCursorStack.push(cursor);
populateList(cursor->getChildrenListToDisplay());
FileData* cursor = getCursor();
setCursor(cursor);
}
}
return true;
}else if(config->isMappedTo("b", input))
{
if(mCursorStack.size())
{
populateList(mCursorStack.top()->getParent()->getChildren());
setCursor(mCursorStack.top());
mCursorStack.pop();
Sound::getFromTheme(getTheme(), getName(), "back")->play();
}else{
onFocusLost();
SystemData* systemToView = getCursor()->getSystem();
if (systemToView->isCollection())
{
systemToView = CollectionSystemManager::get()->getSystemToView(systemToView);
}
ViewController::get()->goToSystemView(systemToView);
}
return true;
}else if(config->isMappedTo("right", input))
{
if(Settings::getInstance()->getBool("QuickSystemSelect"))
{
onFocusLost();
ViewController::get()->goToNextGameList();
return true;
}
}else if(config->isMappedTo("left", input))
{
if(Settings::getInstance()->getBool("QuickSystemSelect"))
{
onFocusLost();
ViewController::get()->goToPrevGameList();
return true;
}
}else if (config->isMappedTo("x", input))
{
// go to random system game
FileData* randomGame = getCursor()->getSystem()->getRandomGame();
if (randomGame)
{
setCursor(randomGame);
}
return true;
}else if (config->isMappedTo("y", input))
{
if(mRoot->getSystem()->isGameSystem())
{
if(CollectionSystemManager::get()->toggleGameInCollection(getCursor()))
{
return true;
}
}
}
}
return IGameListView::input(config, input);
}