Replaced the legacy gamelist code with rudimentary support for GamelistBase and GamelistView.

This commit is contained in:
Leon Styhre 2022-01-18 20:42:50 +01:00
parent dfeddebc66
commit 51578903ff
25 changed files with 144 additions and 132 deletions

View file

@ -49,12 +49,6 @@ set(ES_HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/ScreenScraper.h ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/ScreenScraper.h
# Views # Views
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/BasicGamelistView.h
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/DetailedGamelistView.h
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/GridGamelistView.h
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/IGamelistView.h
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/ISimpleGamelistView.h
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/VideoGamelistView.h
${CMAKE_CURRENT_SOURCE_DIR}/src/views/GamelistBase.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GamelistBase.h
${CMAKE_CURRENT_SOURCE_DIR}/src/views/GamelistView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GamelistView.h
${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.h ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.h
@ -101,12 +95,6 @@ set(ES_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/ScreenScraper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scrapers/ScreenScraper.cpp
# Views # Views
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/BasicGamelistView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/DetailedGamelistView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/GridGamelistView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/IGamelistView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/ISimpleGamelistView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/views/gamelist/VideoGamelistView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/views/GamelistBase.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GamelistBase.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/views/GamelistView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/GamelistView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/views/SystemView.cpp

View file

@ -32,8 +32,8 @@
#include "utils/FileSystemUtil.h" #include "utils/FileSystemUtil.h"
#include "utils/StringUtil.h" #include "utils/StringUtil.h"
#include "utils/TimeUtil.h" #include "utils/TimeUtil.h"
#include "views/GamelistView.h"
#include "views/ViewController.h" #include "views/ViewController.h"
#include "views/gamelist/IGamelistView.h"
#include <fstream> #include <fstream>
#include <pugixml.hpp> #include <pugixml.hpp>
@ -449,9 +449,9 @@ void CollectionSystemsManager::updateCollectionSystem(FileData* file, Collection
auto nTime = Utils::Time::now(); auto nTime = Utils::Time::now();
if (nTime - Utils::Time::stringToTime(file->metadata.get("lastplayed")) < 2) { if (nTime - Utils::Time::stringToTime(file->metadata.get("lastplayed")) < 2) {
// Select the first row of the gamelist (the game just played). // Select the first row of the gamelist (the game just played).
IGamelistView* gameList = ViewController::getInstance() GamelistView* gameList = ViewController::getInstance()
->getGamelistView(getSystemToView(sysData.system)) ->getGamelistView(getSystemToView(sysData.system))
.get(); .get();
gameList->setCursor(gameList->getFirstEntry()); gameList->setCursor(gameList->getFirstEntry());
} }
} }
@ -1286,7 +1286,7 @@ void CollectionSystemsManager::addEnabledCollectionsToDisplayedSystems(
rootFolder->getSortTypeFromString(rootFolder->getSortTypeString()), rootFolder->getSortTypeFromString(rootFolder->getSortTypeString()),
Settings::getInstance()->getBool("FavFirstCustom")); Settings::getInstance()->getBool("FavFirstCustom"));
// Jump to the first row of the game list, assuming it's not empty. // Jump to the first row of the game list, assuming it's not empty.
IGamelistView* gameList = GamelistView* gameList =
ViewController::getInstance()->getGamelistView((it->second.system)).get(); ViewController::getInstance()->getGamelistView((it->second.system)).get();
if (!gameList->getCursor()->isPlaceHolder()) { if (!gameList->getCursor()->isPlaceHolder()) {
gameList->setCursor(gameList->getFirstEntry()); gameList->setCursor(gameList->getFirstEntry());

View file

@ -16,8 +16,8 @@
#include "resources/Font.h" #include "resources/Font.h"
#include "utils/FileSystemUtil.h" #include "utils/FileSystemUtil.h"
#include "utils/StringUtil.h" #include "utils/StringUtil.h"
#include "views/GamelistView.h"
#include "views/ViewController.h" #include "views/ViewController.h"
#include "views/gamelist/IGamelistView.h"
#include <random> #include <random>
#include <time.h> #include <time.h>
@ -211,7 +211,7 @@ void Screensaver::launchGame()
// Launching game // Launching game
ViewController::getInstance()->triggerGameLaunch(mCurrentGame); ViewController::getInstance()->triggerGameLaunch(mCurrentGame);
ViewController::getInstance()->goToGamelist(mCurrentGame->getSystem()); ViewController::getInstance()->goToGamelist(mCurrentGame->getSystem());
IGamelistView* view = GamelistView* view =
ViewController::getInstance()->getGamelistView(mCurrentGame->getSystem()).get(); ViewController::getInstance()->getGamelistView(mCurrentGame->getSystem()).get();
view->setCursor(mCurrentGame); view->setCursor(mCurrentGame);
ViewController::getInstance()->cancelViewTransitions(); ViewController::getInstance()->cancelViewTransitions();
@ -223,7 +223,7 @@ void Screensaver::goToGame()
if (mCurrentGame != nullptr) { if (mCurrentGame != nullptr) {
// Go to the game in the gamelist view, but don't launch it. // Go to the game in the gamelist view, but don't launch it.
ViewController::getInstance()->goToGamelist(mCurrentGame->getSystem()); ViewController::getInstance()->goToGamelist(mCurrentGame->getSystem());
IGamelistView* view = GamelistView* view =
ViewController::getInstance()->getGamelistView(mCurrentGame->getSystem()).get(); ViewController::getInstance()->getGamelistView(mCurrentGame->getSystem()).get();
view->setCursor(mCurrentGame); view->setCursor(mCurrentGame);
ViewController::getInstance()->cancelViewTransitions(); ViewController::getInstance()->cancelViewTransitions();

View file

@ -22,8 +22,8 @@
#include "resources/ResourceManager.h" #include "resources/ResourceManager.h"
#include "utils/FileSystemUtil.h" #include "utils/FileSystemUtil.h"
#include "utils/StringUtil.h" #include "utils/StringUtil.h"
#include "views/GamelistView.h"
#include "views/ViewController.h" #include "views/ViewController.h"
#include "views/gamelist/IGamelistView.h"
#include <fstream> #include <fstream>
#include <pugixml.hpp> #include <pugixml.hpp>
@ -1212,7 +1212,7 @@ void SystemData::sortSystem(bool reloadGamelist, bool jumpToFirstRow)
ViewController::getInstance()->reloadGamelistView(this, false); ViewController::getInstance()->reloadGamelistView(this, false);
if (jumpToFirstRow) { if (jumpToFirstRow) {
IGamelistView* gameList = ViewController::getInstance()->getGamelistView(this).get(); GamelistView* gameList {ViewController::getInstance()->getGamelistView(this).get()};
gameList->setCursor(gameList->getFirstEntry()); gameList->setCursor(gameList->getFirstEntry());
} }
} }

View file

@ -23,7 +23,6 @@
#include "guis/GuiGamelistFilter.h" #include "guis/GuiGamelistFilter.h"
#include "scrapers/Scraper.h" #include "scrapers/Scraper.h"
#include "views/ViewController.h" #include "views/ViewController.h"
#include "views/gamelist/IGamelistView.h"
GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system) GuiGamelistOptions::GuiGamelistOptions(Window* window, SystemData* system)
: GuiComponent {window} : GuiComponent {window}
@ -454,7 +453,7 @@ void GuiGamelistOptions::openMetaDataEd()
if (file->getType() == FOLDER) { if (file->getType() == FOLDER) {
mWindow->pushGui(new GuiMetaDataEd( mWindow->pushGui(new GuiMetaDataEd(
mWindow, &file->metadata, file->metadata.getMDD(FOLDER_METADATA), p, mWindow, &file->metadata, file->metadata.getMDD(FOLDER_METADATA), p,
std::bind(&IGamelistView::onFileChanged, std::bind(&GamelistView::onFileChanged,
ViewController::getInstance()->getGamelistView(file->getSystem()).get(), file, ViewController::getInstance()->getGamelistView(file->getSystem()).get(), file,
true), true),
clearGameBtnFunc, deleteGameBtnFunc)); clearGameBtnFunc, deleteGameBtnFunc));
@ -462,7 +461,7 @@ void GuiGamelistOptions::openMetaDataEd()
else { else {
mWindow->pushGui(new GuiMetaDataEd( mWindow->pushGui(new GuiMetaDataEd(
mWindow, &file->metadata, file->metadata.getMDD(GAME_METADATA), p, mWindow, &file->metadata, file->metadata.getMDD(GAME_METADATA), p,
std::bind(&IGamelistView::onFileChanged, std::bind(&GamelistView::onFileChanged,
ViewController::getInstance()->getGamelistView(file->getSystem()).get(), file, ViewController::getInstance()->getGamelistView(file->getSystem()).get(), file,
true), true),
clearGameBtnFunc, deleteGameBtnFunc)); clearGameBtnFunc, deleteGameBtnFunc));
@ -566,7 +565,7 @@ std::vector<HelpPrompt> GuiGamelistOptions::getHelpPrompts()
return prompts; return prompts;
} }
IGamelistView* GuiGamelistOptions::getGamelist() GamelistView* GuiGamelistOptions::getGamelist()
{ {
return ViewController::getInstance()->getGamelistView(mSystem).get(); return ViewController::getInstance()->getGamelistView(mSystem).get();
} }

View file

@ -18,8 +18,8 @@
#include "components/MenuComponent.h" #include "components/MenuComponent.h"
#include "components/OptionListComponent.h" #include "components/OptionListComponent.h"
#include "utils/StringUtil.h" #include "utils/StringUtil.h"
#include "views/GamelistView.h"
class IGamelistView;
class SystemData; class SystemData;
class GuiGamelistOptions : public GuiComponent class GuiGamelistOptions : public GuiComponent
@ -50,7 +50,7 @@ private:
std::shared_ptr<SortList> mListSort; std::shared_ptr<SortList> mListSort;
SystemData* mSystem; SystemData* mSystem;
IGamelistView* getGamelist(); GamelistView* getGamelist();
bool mFoldersOnTop; bool mFoldersOnTop;
bool mFavoritesSorting; bool mFavoritesSorting;
bool mOnlyHasFolders; bool mOnlyHasFolders;

View file

@ -35,7 +35,6 @@
#include "guis/GuiTextEditPopup.h" #include "guis/GuiTextEditPopup.h"
#include "utils/PlatformUtil.h" #include "utils/PlatformUtil.h"
#include "views/ViewController.h" #include "views/ViewController.h"
#include "views/gamelist/IGamelistView.h"
#include <SDL2/SDL_events.h> #include <SDL2/SDL_events.h>
#include <algorithm> #include <algorithm>

View file

@ -18,8 +18,8 @@
#include "components/HelpComponent.h" #include "components/HelpComponent.h"
#include "guis/GuiTextEditKeyboardPopup.h" #include "guis/GuiTextEditKeyboardPopup.h"
#include "guis/GuiTextEditPopup.h" #include "guis/GuiTextEditPopup.h"
#include "views/GamelistView.h"
#include "views/ViewController.h" #include "views/ViewController.h"
#include "views/gamelist/IGamelistView.h"
GuiSettings::GuiSettings(Window* window, std::string title) GuiSettings::GuiSettings(Window* window, std::string title)
: GuiComponent(window) : GuiComponent(window)
@ -77,7 +77,7 @@ void GuiSettings::save()
(*it)->sortSystem(true); (*it)->sortSystem(true);
// Jump to the first row of the gamelist. // Jump to the first row of the gamelist.
IGamelistView* gameList = ViewController::getInstance()->getGamelistView((*it)).get(); GamelistView* gameList = ViewController::getInstance()->getGamelistView((*it)).get();
gameList->setCursor(gameList->getFirstEntry()); gameList->setCursor(gameList->getFirstEntry());
} }
} }

View file

@ -21,6 +21,15 @@ GamelistBase::GamelistBase(Window* window, FileData* root)
, mRandomGame {nullptr} , mRandomGame {nullptr}
, mLastUpdated(nullptr) , mLastUpdated(nullptr)
{ {
setSize(static_cast<float>(Renderer::getScreenWidth()),
static_cast<float>(Renderer::getScreenHeight()));
mList.setSize(mSize.x, mSize.y * 0.8f);
mList.setPosition(0.0f, mSize.y * 0.2f);
mList.setDefaultZIndex(20.0f);
addChild(&mList);
populateList(root->getChildrenListToDisplay(), root);
} }
GamelistBase::~GamelistBase() GamelistBase::~GamelistBase()
@ -381,12 +390,11 @@ bool GamelistBase::input(InputConfig* config, Input input)
// was unmarked. We couldn't do this earlier as we didn't have the list // was unmarked. We couldn't do this earlier as we didn't have the list
// sorted yet. // sorted yet.
if (removedLastFavorite) { if (removedLastFavorite) {
// TEMPORARY ViewController::getInstance()
// ViewController::getInstance() ->getGamelistView(entryToUpdate->getSystem())
// ->getGamelistView(entryToUpdate->getSystem()) ->setCursor(ViewController::getInstance()
// ->setCursor(ViewController::getInstance() ->getGamelistView(entryToUpdate->getSystem())
// ->getGamelistView(entryToUpdate->getSystem()) ->getFirstEntry());
// ->getFirstEntry());
} }
return true; return true;
} }
@ -400,27 +408,25 @@ bool GamelistBase::input(InputConfig* config, Input input)
// As the toggling of the game destroyed this object, we need to get the view // As the toggling of the game destroyed this object, we need to get the view
// from ViewController instead of using the reference that existed before the // from ViewController instead of using the reference that existed before the
// destruction. Otherwise we get random crashes. // destruction. Otherwise we get random crashes.
// TEMPORARY GamelistView* view =
// IGamelistView* view = ViewController::getInstance()->getGamelistView(system).get();
// ViewController::getInstance()->getGamelistView(system).get();
// Jump to the first entry in the gamelist if the last favorite was unmarked. // Jump to the first entry in the gamelist if the last favorite was unmarked.
if (foldersOnTop && removedLastFavorite && if (foldersOnTop && removedLastFavorite &&
!entryToUpdate->getSystem()->isCustomCollection()) { !entryToUpdate->getSystem()->isCustomCollection()) {
// TEMPORARY ViewController::getInstance()
// ViewController::getInstance() ->getGamelistView(entryToUpdate->getSystem())
// ->getGamelistView(entryToUpdate->getSystem()) ->setCursor(ViewController::getInstance()
// ->setCursor(ViewController::getInstance() ->getGamelistView(entryToUpdate->getSystem())
// ->getGamelistView(entryToUpdate->getSystem()) ->getFirstGameEntry());
// ->getFirstGameEntry());
} }
else if (removedLastFavorite && else if (removedLastFavorite &&
!entryToUpdate->getSystem()->isCustomCollection()) { !entryToUpdate->getSystem()->isCustomCollection()) {
setCursor(getFirstEntry()); setCursor(getFirstEntry());
// view->setCursor(view->getFirstEntry()); view->setCursor(view->getFirstEntry());
} }
else if (selectLastEntry) { else if (selectLastEntry) {
setCursor(getLastEntry()); setCursor(getLastEntry());
// view->setCursor(view->getLastEntry()); view->setCursor(view->getLastEntry());
} }
// Display the indication icons which show what games are part of the // Display the indication icons which show what games are part of the
// custom collection currently being edited. This is done cheaply using // custom collection currently being edited. This is done cheaply using
@ -428,10 +434,9 @@ bool GamelistBase::input(InputConfig* config, Input input)
if (isEditing) { if (isEditing) {
for (auto it = SystemData::sSystemVector.begin(); for (auto it = SystemData::sSystemVector.begin();
it != SystemData::sSystemVector.end(); ++it) { it != SystemData::sSystemVector.end(); ++it) {
// TEMPORARY ViewController::getInstance()->getGamelistView((*it))->onFileChanged(
// ViewController::getInstance()->getGamelistView((*it))->onFileChanged( ViewController::getInstance()->getGamelistView((*it))->getCursor(),
// ViewController::getInstance()->getGamelistView((*it))->getCursor(), false);
// false);
} }
} }
return true; return true;
@ -443,7 +448,6 @@ bool GamelistBase::input(InputConfig* config, Input input)
} }
} }
// return IGamelistView::input(config, input);
// Select button opens GuiGamelistOptions. // Select button opens GuiGamelistOptions.
if (!UIModeController::getInstance()->isUIModeKid() && // Line break. if (!UIModeController::getInstance()->isUIModeKid() && // Line break.
config->isMappedTo("back", input) && input.value) { config->isMappedTo("back", input) && input.value) {
@ -458,9 +462,8 @@ bool GamelistBase::input(InputConfig* config, Input input)
config->getDeviceId() == DEVICE_KEYBOARD && config->getDeviceId() == DEVICE_KEYBOARD &&
(SDL_GetModState() & (KMOD_LCTRL | KMOD_RCTRL)) && input.id == SDLK_r && (SDL_GetModState() & (KMOD_LCTRL | KMOD_RCTRL)) && input.id == SDLK_r &&
input.value != 0) { input.value != 0) {
LOG(LogDebug) << "IGamelistView::input(): Reloading view"; LOG(LogDebug) << "GamelistView::input(): Reloading view";
// TEMPORARY ViewController::getInstance()->reloadGamelistView(this->mRoot->getSystem(), true);
// ViewController::getInstance()->reloadGamelistView(this, true);
return true; return true;
} }

View file

@ -37,31 +37,6 @@ public:
FileData* getLastEntry() { return mList.getLast(); } FileData* getLastEntry() { return mList.getLast(); }
FileData* getFirstGameEntry() { return mFirstGameEntry; } FileData* getFirstGameEntry() { return mFirstGameEntry; }
protected:
GamelistBase(Window* window, FileData* root);
~GamelistBase();
// Called when a FileData* is added, has its metadata changed, or is removed.
virtual void onFileChanged(FileData* file, bool reloadGamelist) = 0;
void populateList(const std::vector<FileData*>& files, FileData* firstEntry);
void addPlaceholder(FileData*);
void generateFirstLetterIndex(const std::vector<FileData*>& files);
void generateGamelistInfo(FileData* cursor, FileData* firstEntry);
void remove(FileData* game, bool deleteFile);
void removeMedia(FileData* game);
virtual void launch(FileData* game) = 0;
bool isListScrolling() override { return mList.isScrolling(); }
void stopListScrolling() override { mList.stopScrolling(); }
const std::vector<std::string>& getFirstLetterIndex() { return mFirstLetterIndex; }
std::string getQuickSystemSelectRightButton() { return "right"; }
std::string getQuickSystemSelectLeftButton() { return "left"; }
// These functions are used to retain the folder cursor history, for instance // These functions are used to retain the folder cursor history, for instance
// during a view reload. The calling function stores the history temporarily. // during a view reload. The calling function stores the history temporarily.
void copyCursorHistory(std::vector<FileData*>& cursorHistory) void copyCursorHistory(std::vector<FileData*>& cursorHistory)
@ -73,6 +48,33 @@ protected:
mCursorStackHistory = cursorHistory; mCursorStackHistory = cursorHistory;
} }
void addPlaceholder(FileData*);
void remove(FileData* game, bool deleteFile);
void removeMedia(FileData* game);
const std::vector<std::string>& getFirstLetterIndex() { return mFirstLetterIndex; }
protected:
GamelistBase(Window* window, FileData* root);
~GamelistBase();
// Called when a FileData* is added, has its metadata changed, or is removed.
virtual void onFileChanged(FileData* file, bool reloadGamelist) = 0;
void populateList(const std::vector<FileData*>& files, FileData* firstEntry);
void generateFirstLetterIndex(const std::vector<FileData*>& files);
void generateGamelistInfo(FileData* cursor, FileData* firstEntry);
virtual void launch(FileData* game) = 0;
bool isListScrolling() override { return mList.isScrolling(); }
void stopListScrolling() override { mList.stopScrolling(); }
std::string getQuickSystemSelectRightButton() { return "right"; }
std::string getQuickSystemSelectLeftButton() { return "left"; }
FileData* mRoot; FileData* mRoot;
TextListComponent<FileData*> mList; TextListComponent<FileData*> mList;

View file

@ -45,20 +45,41 @@ GamelistView::GamelistView(Window* window, FileData* root)
, mDescription {window} , mDescription {window}
, mGamelistInfo {window} , mGamelistInfo {window}
{ {
mHeaderText.setText("Logo Text", false);
mHeaderText.setSize(mSize.x, 0.0f);
mHeaderText.setPosition(0.0f, 0.0f);
mHeaderText.setHorizontalAlignment(ALIGN_CENTER);
mHeaderText.setDefaultZIndex(50.0f);
mHeaderText.setText(mRoot->getSystem()->getFullName()); mHeaderText.setText(mRoot->getSystem()->getFullName());
mHeaderImage.setResize(0.0f, mSize.y * 0.185f);
mHeaderImage.setOrigin(0.5f, 0.0f);
mHeaderImage.setPosition(mSize.x / 2.0f, 0.0f);
mHeaderImage.setDefaultZIndex(50.0f);
mBackground.setResize(mSize.x, mSize.y);
mBackground.setDefaultZIndex(0.0f);
addChild(&mHeaderText);
addChild(&mBackground);
} }
GamelistView::~GamelistView() GamelistView::~GamelistView()
{ {
// // Remove theme extras.
for (auto extra : mThemeExtras) {
removeChild(extra);
delete extra;
}
mThemeExtras.clear();
} }
void GamelistView::onFileChanged(FileData* file, bool reloadGamelist) void GamelistView::onFileChanged(FileData* file, bool reloadGamelist)
{ {
if (reloadGamelist) { if (reloadGamelist) {
// Might switch to a detailed view. // Might switch to a detailed view.
// TEMPORARY. ViewController::getInstance()->reloadGamelistView(this);
// ViewController::getInstance()->reloadGamelistView(this);
return; return;
} }

View file

@ -27,11 +27,8 @@
#include "guis/GuiMenu.h" #include "guis/GuiMenu.h"
#include "guis/GuiTextEditKeyboardPopup.h" #include "guis/GuiTextEditKeyboardPopup.h"
#include "guis/GuiTextEditPopup.h" #include "guis/GuiTextEditPopup.h"
#include "views/GamelistView.h"
#include "views/SystemView.h" #include "views/SystemView.h"
#include "views/gamelist/DetailedGamelistView.h"
#include "views/gamelist/GridGamelistView.h"
#include "views/gamelist/IGamelistView.h"
#include "views/gamelist/VideoGamelistView.h"
ViewController* ViewController::getInstance() ViewController* ViewController::getInstance()
{ {
@ -718,7 +715,7 @@ void ViewController::removeGamelistView(SystemData* system)
} }
} }
std::shared_ptr<IGamelistView> ViewController::getGamelistView(SystemData* system) std::shared_ptr<GamelistView> ViewController::getGamelistView(SystemData* system)
{ {
// If we have already created an entry for this system, then return that one. // If we have already created an entry for this system, then return that one.
auto exists = mGamelistViews.find(system); auto exists = mGamelistViews.find(system);
@ -727,14 +724,14 @@ std::shared_ptr<IGamelistView> ViewController::getGamelistView(SystemData* syste
system->getIndex()->setKidModeFilters(); system->getIndex()->setKidModeFilters();
// If there's no entry, then create it and return it. // If there's no entry, then create it and return it.
std::shared_ptr<IGamelistView> view; std::shared_ptr<GamelistView> view;
bool themeHasVideoView = system->getTheme()->hasView("video"); bool themeHasVideoView {system->getTheme()->hasView("video")};
// Decide which view style to use. // Decide which view style to use.
GamelistViewStyle selectedViewStyle = AUTOMATIC; GamelistViewStyle selectedViewStyle = AUTOMATIC;
std::string viewPreference = Settings::getInstance()->getString("GamelistViewStyle"); std::string viewPreference {Settings::getInstance()->getString("GamelistViewStyle")};
if (viewPreference.compare("basic") == 0) if (viewPreference.compare("basic") == 0)
selectedViewStyle = BASIC; selectedViewStyle = BASIC;
if (viewPreference.compare("detailed") == 0) if (viewPreference.compare("detailed") == 0)
@ -745,7 +742,7 @@ std::shared_ptr<IGamelistView> ViewController::getGamelistView(SystemData* syste
selectedViewStyle = VIDEO; selectedViewStyle = VIDEO;
if (selectedViewStyle == AUTOMATIC) { if (selectedViewStyle == AUTOMATIC) {
std::vector<FileData*> files = system->getRootFolder()->getFilesRecursive(GAME | FOLDER); std::vector<FileData*> files {system->getRootFolder()->getFilesRecursive(GAME | FOLDER)};
for (auto it = files.cbegin(); it != files.cend(); ++it) { for (auto it = files.cbegin(); it != files.cend(); ++it) {
if (themeHasVideoView && !(*it)->getVideoPath().empty()) { if (themeHasVideoView && !(*it)->getVideoPath().empty()) {
selectedViewStyle = VIDEO; selectedViewStyle = VIDEO;
@ -759,39 +756,42 @@ std::shared_ptr<IGamelistView> ViewController::getGamelistView(SystemData* syste
} }
// Create the view. // Create the view.
switch (selectedViewStyle) { /*
case VIDEO: { switch (selectedViewStyle) {
view = std::shared_ptr<IGamelistView>( case VIDEO: {
new VideoGamelistView(mWindow, system->getRootFolder())); view = std::shared_ptr<IGamelistView>(
mState.viewstyle = VIDEO; new VideoGamelistView(mWindow, system->getRootFolder()));
break; mState.viewstyle = VIDEO;
break;
}
case DETAILED: {
view = std::shared_ptr<IGamelistView>(
new DetailedGamelistView(mWindow, system->getRootFolder()));
mState.viewstyle = DETAILED;
break;
}
case GRID: {
view = std::shared_ptr<IGamelistView>(
new GridGamelistView(mWindow, system->getRootFolder()));
mState.viewstyle = GRID;
break;
}
case BASIC: {
}
default: {
view = std::shared_ptr<IGamelistView>(
new BasicGamelistView(mWindow, system->getRootFolder()));
mState.viewstyle = BASIC;
break;
}
} }
case DETAILED: { */
view = std::shared_ptr<IGamelistView>( view = std::shared_ptr<GamelistView>(new GamelistView(mWindow, system->getRootFolder()));
new DetailedGamelistView(mWindow, system->getRootFolder()));
mState.viewstyle = DETAILED;
break;
}
case GRID: {
view = std::shared_ptr<IGamelistView>(
new GridGamelistView(mWindow, system->getRootFolder()));
mState.viewstyle = GRID;
break;
}
case BASIC: {
}
default: {
view = std::shared_ptr<IGamelistView>(
new BasicGamelistView(mWindow, system->getRootFolder()));
mState.viewstyle = BASIC;
break;
}
}
view->setTheme(system->getTheme()); view->setTheme(system->getTheme());
std::vector<SystemData*>& sysVec = SystemData::sSystemVector; std::vector<SystemData*>& sysVec = SystemData::sSystemVector;
int id = static_cast<int>(std::find(sysVec.cbegin(), sysVec.cend(), system) - sysVec.cbegin()); int id {static_cast<int>(std::find(sysVec.cbegin(), sysVec.cend(), system) - sysVec.cbegin())};
view->setPosition(id * static_cast<float>(Renderer::getScreenWidth()), view->setPosition(id * static_cast<float>(Renderer::getScreenWidth()),
static_cast<float>(Renderer::getScreenHeight() * 2)); static_cast<float>(Renderer::getScreenHeight() * 2));
@ -967,13 +967,13 @@ void ViewController::preload()
NavigationSounds::getInstance().loadThemeNavigationSounds(nullptr); NavigationSounds::getInstance().loadThemeNavigationSounds(nullptr);
} }
void ViewController::reloadGamelistView(IGamelistView* view, bool reloadTheme) void ViewController::reloadGamelistView(GamelistView* view, bool reloadTheme)
{ {
for (auto it = mGamelistViews.cbegin(); it != mGamelistViews.cend(); ++it) { for (auto it = mGamelistViews.cbegin(); it != mGamelistViews.cend(); ++it) {
if (it->second.get() == view) { if (it->second.get() == view) {
bool isCurrent = (mCurrentView == it->second); bool isCurrent {(mCurrentView == it->second)};
SystemData* system = it->first; SystemData* system {it->first};
FileData* cursor = view->getCursor(); FileData* cursor {view->getCursor()};
// Retain the cursor history for the view. // Retain the cursor history for the view.
std::vector<FileData*> cursorHistoryTemp; std::vector<FileData*> cursorHistoryTemp;
@ -987,7 +987,7 @@ void ViewController::reloadGamelistView(IGamelistView* view, bool reloadTheme)
if (reloadTheme) if (reloadTheme)
system->loadTheme(); system->loadTheme();
system->getIndex()->setKidModeFilters(); system->getIndex()->setKidModeFilters();
std::shared_ptr<IGamelistView> newView = getGamelistView(system); std::shared_ptr<GamelistView> newView = getGamelistView(system);
// To counter having come from a placeholder. // To counter having come from a placeholder.
if (!cursor->isPlaceHolder()) { if (!cursor->isPlaceHolder()) {

View file

@ -21,7 +21,7 @@
#include <vector> #include <vector>
class IGamelistView; class GamelistView;
class SystemData; class SystemData;
class SystemView; class SystemView;
@ -43,7 +43,7 @@ public:
// If a basic view detected a metadata change, it can request to recreate // If a basic view detected a metadata change, it can request to recreate
// the current gamelist view (as it may change to be detailed). // the current gamelist view (as it may change to be detailed).
void reloadGamelistView(IGamelistView* gamelist, bool reloadTheme = false); void reloadGamelistView(GamelistView* gamelist, bool reloadTheme = false);
void reloadGamelistView(SystemData* system, bool reloadTheme = false) void reloadGamelistView(SystemData* system, bool reloadTheme = false)
{ {
reloadGamelistView(getGamelistView(system).get(), reloadTheme); reloadGamelistView(getGamelistView(system).get(), reloadTheme);
@ -110,10 +110,10 @@ public:
const State& getState() const { return mState; } const State& getState() const { return mState; }
virtual std::vector<HelpPrompt> getHelpPrompts() override; std::vector<HelpPrompt> getHelpPrompts() override;
virtual HelpStyle getHelpStyle() override; HelpStyle getHelpStyle() override;
std::shared_ptr<IGamelistView> getGamelistView(SystemData* system); std::shared_ptr<GamelistView> getGamelistView(SystemData* system);
std::shared_ptr<SystemView> getSystemListView(); std::shared_ptr<SystemView> getSystemListView();
void removeGamelistView(SystemData* system); void removeGamelistView(SystemData* system);
@ -158,7 +158,7 @@ private:
std::shared_ptr<GuiComponent> mCurrentView; std::shared_ptr<GuiComponent> mCurrentView;
std::shared_ptr<GuiComponent> mPreviousView; std::shared_ptr<GuiComponent> mPreviousView;
std::shared_ptr<GuiComponent> mSkipView; std::shared_ptr<GuiComponent> mSkipView;
std::map<SystemData*, std::shared_ptr<IGamelistView>> mGamelistViews; std::map<SystemData*, std::shared_ptr<GamelistView>> mGamelistViews;
std::shared_ptr<SystemView> mSystemListView; std::shared_ptr<SystemView> mSystemListView;
FileData* mGameToLaunch; FileData* mGameToLaunch;