text: #include "views/gamelist/ISimpleGameListView.h"
  
  #include "views/UIModeController.h"
  #include "views/ViewController.h"
  #include "CollectionSystemManager.h"
  #include "Settings.h"
  #include "Sound.h"
  #include "SystemData.h"
  
  ISimpleGameListView::ISimpleGameListView(Window* window, FolderData* 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)
  {
  	bool hideSystemView = Settings::getInstance()->getBool("HideSystemView");
  
  	if (input.value != 0)
  	{
  		if (config->isMappedTo("a", input))
  		{
  			FileData* cursor = getCursor();
  			FolderData* folder = NULL;
  
  			if (cursor->getType() == FOLDER)
  			{
  				folder = (FolderData*)cursor;
  
  				FileData* gameOfFolder = folder->findUniqueGameForFolder();
  				if (gameOfFolder != NULL)
  					cursor = gameOfFolder;
  			}
  
  			if (cursor->getType() == GAME)
  			{
  				Sound::getFromTheme(getTheme(), getName(), "launch")->play();
  				launch(cursor);
  			}
  			else
  			{
  				// it's a folder
  				if(folder->getChildren().size() > 0)
  				{
  					mCursorStack.push(cursor);
  					populateList(folder->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 if (!hideSystemView)
  			{
  				onFocusLost();
  				SystemData* systemToView = getCursor()->getSystem();
  				if (systemToView->isCollection())
  					systemToView = CollectionSystemManager::get()->getSystemToView(systemToView);
  
  				ViewController::get()->goToSystemView(systemToView);
  			}
  
  			return true;
  		}
  		else if (config->isMappedLike(getQuickSystemSelectRightButton(), input) || config->isMappedLike("rightshoulder", input))
  		{
  			if(Settings::getInstance()->getBool("QuickSystemSelect"))
  			{
  				onFocusLost();
  				ViewController::get()->goToNextGameList();
  				return true;
  			}
  		}
  		else if (config->isMappedLike(getQuickSystemSelectLeftButton(), input) || config->isMappedLike("leftshoulder", input))
  		{
  			if(Settings::getInstance()->getBool("QuickSystemSelect"))
  			{
  				onFocusLost();
  				ViewController::get()->goToPrevGameList();
  				return true;
  			}
  		}
  		else if (config->isMappedTo("x", input))
  		{
  			if (mRoot->getSystem()->isGameSystem())
  			{
  				// go to random system game
  				FileData* randomGame = getCursor()->getSystem()->getRandomGame();
  				if (randomGame)
  				{
  					setCursor(randomGame);
  				}
  				return true;
  			}
  		}
  		else if (config->isMappedTo("y", input) && !UIModeController::getInstance()->isUIModeKid())
  		{
  			if(mRoot->getSystem()->isGameSystem())
  			{
  				if(CollectionSystemManager::get()->toggleGameInCollection(getCursor()))
  				{
  					return true;
  				}
  			}
  		}
  	}
  
  	return IGameListView::input(config, input);
  }
  
  
  
  
  
  
  
  
  
  
  