Code cleanup of various GUIs.

This commit is contained in:
Leon Styhre 2022-09-03 12:44:49 +02:00
parent ce50c1121b
commit 2a83f616e6
16 changed files with 849 additions and 854 deletions

View file

@ -109,9 +109,9 @@ GuiAlternativeEmulators::GuiAlternativeEmulators()
// es_systems.xml. // es_systems.xml.
if (!mHasSystems) { if (!mHasSystems) {
ComponentListRow row; ComponentListRow row;
std::shared_ptr<TextComponent> systemText = std::make_shared<TextComponent>( std::shared_ptr<TextComponent> systemText {std::make_shared<TextComponent>(
ViewController::EXCLAMATION_CHAR + " NO ALTERNATIVE EMULATORS DEFINED", ViewController::EXCLAMATION_CHAR + " NO ALTERNATIVE EMULATORS DEFINED",
Font::get(FONT_SIZE_MEDIUM), 0x777777FF, ALIGN_CENTER); Font::get(FONT_SIZE_MEDIUM), 0x777777FF, ALIGN_CENTER)};
row.addElement(systemText, true); row.addElement(systemText, true);
mMenu.addRow(row); mMenu.addRow(row);
} }
@ -142,7 +142,7 @@ void GuiAlternativeEmulators::selectorWindow(SystemData* system)
{ {
auto s = new GuiSettings(system->getFullName()); auto s = new GuiSettings(system->getFullName());
std::string selectedLabel = system->getAlternativeEmulator(); std::string selectedLabel {system->getAlternativeEmulator()};
std::string label; std::string label;
for (auto entry : system->getSystemEnvData()->mLaunchCommands) { for (auto entry : system->getSystemEnvData()->mLaunchCommands) {
@ -253,7 +253,7 @@ bool GuiAlternativeEmulators::input(InputConfig* config, Input input)
std::vector<HelpPrompt> GuiAlternativeEmulators::getHelpPrompts() std::vector<HelpPrompt> GuiAlternativeEmulators::getHelpPrompts()
{ {
std::vector<HelpPrompt> prompts = mMenu.getHelpPrompts(); std::vector<HelpPrompt> prompts {mMenu.getHelpPrompts()};
prompts.push_back(HelpPrompt("b", "back")); prompts.push_back(HelpPrompt("b", "back"));
if (mHasSystems) if (mHasSystems)
prompts.push_back(HelpPrompt("a", "select")); prompts.push_back(HelpPrompt("a", "select"));

View file

@ -44,7 +44,7 @@ GuiCollectionSystemsOptions::GuiCollectionSystemsOptions(std::string title)
} }
// Automatic collections. // Automatic collections.
collection_systems_auto = std::make_shared<OptionListComponent<std::string>>( mCollectionSystemsAuto = std::make_shared<OptionListComponent<std::string>>(
getHelpStyle(), "SELECT COLLECTIONS", true); getHelpStyle(), "SELECT COLLECTIONS", true);
std::map<std::string, CollectionSystemData, StringComparator> autoSystems { std::map<std::string, CollectionSystemData, StringComparator> autoSystems {
CollectionSystemsManager::getInstance()->getAutoCollectionSystems()}; CollectionSystemsManager::getInstance()->getAutoCollectionSystems()};
@ -52,13 +52,13 @@ GuiCollectionSystemsOptions::GuiCollectionSystemsOptions(std::string title)
for (std::map<std::string, CollectionSystemData, StringComparator>::const_iterator it = for (std::map<std::string, CollectionSystemData, StringComparator>::const_iterator it =
autoSystems.cbegin(); autoSystems.cbegin();
it != autoSystems.cend(); ++it) it != autoSystems.cend(); ++it)
collection_systems_auto->add(it->second.decl.fullName, it->second.decl.name, mCollectionSystemsAuto->add(it->second.decl.fullName, it->second.decl.name,
it->second.isEnabled); it->second.isEnabled);
addWithLabel("AUTOMATIC GAME COLLECTIONS", collection_systems_auto); addWithLabel("AUTOMATIC GAME COLLECTIONS", mCollectionSystemsAuto);
addSaveFunc([this, autoSystems] { addSaveFunc([this, autoSystems] {
std::string autoSystemsSelected {Utils::String::vectorToDelimitedString( std::string autoSystemsSelected {Utils::String::vectorToDelimitedString(
collection_systems_auto->getSelectedObjects(), ",", true)}; mCollectionSystemsAuto->getSelectedObjects(), ",", true)};
std::string autoSystemsConfig = Settings::getInstance()->getString("CollectionSystemsAuto"); std::string autoSystemsConfig {Settings::getInstance()->getString("CollectionSystemsAuto")};
if (autoSystemsSelected != autoSystemsConfig) { if (autoSystemsSelected != autoSystemsConfig) {
if (CollectionSystemsManager::getInstance()->isEditing()) if (CollectionSystemsManager::getInstance()->isEditing())
CollectionSystemsManager::getInstance()->exitEditMode(); CollectionSystemsManager::getInstance()->exitEditMode();
@ -93,7 +93,7 @@ GuiCollectionSystemsOptions::GuiCollectionSystemsOptions(std::string title)
}); });
// Custom collections. // Custom collections.
collection_systems_custom = std::make_shared<OptionListComponent<std::string>>( mCollectionSystemsCustom = std::make_shared<OptionListComponent<std::string>>(
getHelpStyle(), "SELECT COLLECTIONS", true); getHelpStyle(), "SELECT COLLECTIONS", true);
std::map<std::string, CollectionSystemData, StringComparator> customSystems { std::map<std::string, CollectionSystemData, StringComparator> customSystems {
CollectionSystemsManager::getInstance()->getCustomCollectionSystems()}; CollectionSystemsManager::getInstance()->getCustomCollectionSystems()};
@ -101,14 +101,14 @@ GuiCollectionSystemsOptions::GuiCollectionSystemsOptions(std::string title)
for (std::map<std::string, CollectionSystemData, StringComparator>::const_iterator it = for (std::map<std::string, CollectionSystemData, StringComparator>::const_iterator it =
customSystems.cbegin(); customSystems.cbegin();
it != customSystems.cend(); ++it) it != customSystems.cend(); ++it)
collection_systems_custom->add(it->second.decl.fullName, it->second.decl.name, mCollectionSystemsCustom->add(it->second.decl.fullName, it->second.decl.name,
it->second.isEnabled); it->second.isEnabled);
addWithLabel("CUSTOM GAME COLLECTIONS", collection_systems_custom); addWithLabel("CUSTOM GAME COLLECTIONS", mCollectionSystemsCustom);
addSaveFunc([this, customSystems] { addSaveFunc([this, customSystems] {
if (!mDeletedCustomCollection) { if (!mDeletedCustomCollection) {
std::string customSystemsSelected {Utils::String::vectorToDelimitedString( std::string customSystemsSelected {Utils::String::vectorToDelimitedString(
collection_systems_custom->getSelectedObjects(), ",", true)}; mCollectionSystemsCustom->getSelectedObjects(), ",", true)};
std::string customSystemsConfig { std::string customSystemsConfig {
Settings::getInstance()->getString("CollectionSystemsCustom")}; Settings::getInstance()->getString("CollectionSystemsCustom")};
if (customSystemsSelected != customSystemsConfig) { if (customSystemsSelected != customSystemsConfig) {
@ -150,10 +150,10 @@ GuiCollectionSystemsOptions::GuiCollectionSystemsOptions(std::string title)
// If there are no custom collections, then gray out this menu entry. // If there are no custom collections, then gray out this menu entry.
if (customSystems.empty()) { if (customSystems.empty()) {
collection_systems_custom->setEnabled(false); mCollectionSystemsCustom->setEnabled(false);
collection_systems_custom->setOpacity(DISABLED_OPACITY); mCollectionSystemsCustom->setOpacity(DISABLED_OPACITY);
collection_systems_custom->getParent() mCollectionSystemsCustom->getParent()
->getChild(collection_systems_custom->getChildIndex() - 1) ->getChild(mCollectionSystemsCustom->getChildIndex() - 1)
->setOpacity(DISABLED_OPACITY); ->setOpacity(DISABLED_OPACITY);
} }
@ -261,7 +261,7 @@ GuiCollectionSystemsOptions::GuiCollectionSystemsOptions(std::string title)
CollectionSystemsManager::getInstance()->exitEditMode(); CollectionSystemsManager::getInstance()->exitEditMode();
mDeletedCustomCollection = true; mDeletedCustomCollection = true;
std::vector<std::string> selectedCustomCollections { std::vector<std::string> selectedCustomCollections {
collection_systems_custom->getSelectedObjects()}; mCollectionSystemsCustom->getSelectedObjects()};
std::string collectionsConfigEntry; std::string collectionsConfigEntry;
// Create the configuration file entry. If the collection to be // Create the configuration file entry. If the collection to be
// deleted was activated, then exclude it. // deleted was activated, then exclude it.
@ -387,7 +387,7 @@ void GuiCollectionSystemsOptions::createCustomCollection(std::string inName)
CollectionSystemsManager::getInstance()->addNewCustomCollection(collectionName)}; CollectionSystemsManager::getInstance()->addNewCustomCollection(collectionName)};
CollectionSystemsManager::getInstance()->saveCustomCollection(newCollection); CollectionSystemsManager::getInstance()->saveCustomCollection(newCollection);
collection_systems_custom->add(collectionName, collectionName, true); mCollectionSystemsCustom->add(collectionName, collectionName, true);
mAddedCustomCollection = true; mAddedCustomCollection = true;
setNeedsGoToStart(); setNeedsGoToStart();

View file

@ -22,8 +22,8 @@ public:
private: private:
void createCustomCollection(std::string inName); void createCustomCollection(std::string inName);
std::shared_ptr<OptionListComponent<std::string>> collection_systems_auto; std::shared_ptr<OptionListComponent<std::string>> mCollectionSystemsAuto;
std::shared_ptr<OptionListComponent<std::string>> collection_systems_custom; std::shared_ptr<OptionListComponent<std::string>> mCollectionSystemsCustom;
bool mAddedCustomCollection; bool mAddedCustomCollection;
bool mDeletedCustomCollection; bool mDeletedCustomCollection;

View file

@ -69,8 +69,8 @@ void GuiGamelistFilter::initializeMenu()
std::shared_ptr<OptionListComponent<std::string>>>::const_iterator it = std::shared_ptr<OptionListComponent<std::string>>>::const_iterator it =
mFilterOptions.cbegin(); mFilterOptions.cbegin();
it != mFilterOptions.cend(); ++it) { it != mFilterOptions.cend(); ++it) {
std::shared_ptr<OptionListComponent<std::string>> optionList = it->second; std::shared_ptr<OptionListComponent<std::string>> optionList {it->second};
std::vector<std::string> filters = optionList->getSelectedObjects(); std::vector<std::string> filters {optionList->getSelectedObjects()};
mInitialFilters.push_back(filters); mInitialFilters.push_back(filters);
} }
} }
@ -82,7 +82,7 @@ void GuiGamelistFilter::resetAllFilters()
std::shared_ptr<OptionListComponent<std::string>>>::const_iterator it = std::shared_ptr<OptionListComponent<std::string>>>::const_iterator it =
mFilterOptions.cbegin(); mFilterOptions.cbegin();
it != mFilterOptions.cend(); ++it) { it != mFilterOptions.cend(); ++it) {
std::shared_ptr<OptionListComponent<std::string>> optionList = it->second; std::shared_ptr<OptionListComponent<std::string>> optionList {it->second};
optionList->selectNone(); optionList->selectNone();
} }
@ -142,20 +142,20 @@ void GuiGamelistFilter::addFiltersToMenu()
mMenu.addRow(row); mMenu.addRow(row);
std::vector<FilterDataDecl> decls = mFilterIndex->getFilterDataDecls(); std::vector<FilterDataDecl> decls {mFilterIndex->getFilterDataDecls()};
for (std::vector<FilterDataDecl>::const_iterator it = decls.cbegin(); // Line break. for (std::vector<FilterDataDecl>::const_iterator it = decls.cbegin(); // Line break.
it != decls.cend(); ++it) { it != decls.cend(); ++it) {
FilterIndexType type = (*it).type; // Type of filter. FilterIndexType type {(*it).type}; // Type of filter.
// Don't include the alternative emulators if the corresponding setting has been disabled. // Don't include the alternative emulators if the corresponding setting has been disabled.
if (type == ALTEMULATOR_FILTER && if (type == ALTEMULATOR_FILTER &&
!Settings::getInstance()->getBool("AlternativeEmulatorPerGame")) !Settings::getInstance()->getBool("AlternativeEmulatorPerGame"))
continue; continue;
std::map<std::string, int>* allKeys = (*it).allIndexKeys; std::map<std::string, int>* allKeys {(*it).allIndexKeys};
bool exclusiveSelect = false; bool exclusiveSelect {false};
if (type == FAVORITES_FILTER || type == KIDGAME_FILTER || type == COMPLETED_FILTER || if (type == FAVORITES_FILTER || type == KIDGAME_FILTER || type == COMPLETED_FILTER ||
type == BROKEN_FILTER) type == BROKEN_FILTER)
@ -169,7 +169,7 @@ void GuiGamelistFilter::addFiltersToMenu()
continue; continue;
} }
std::string menuLabel = (*it).menuLabel; // Text to show in menu. std::string menuLabel {(*it).menuLabel}; // Text to show in menu.
std::shared_ptr<OptionListComponent<std::string>> optionList; std::shared_ptr<OptionListComponent<std::string>> optionList;
// For bool values, make the selection exclusive so that both True and False can't be // For bool values, make the selection exclusive so that both True and False can't be
@ -191,8 +191,8 @@ void GuiGamelistFilter::addFiltersToMenu()
if (type == CONTROLLER_FILTER) { if (type == CONTROLLER_FILTER) {
for (auto it : *allKeys) { for (auto it : *allKeys) {
std::string displayName = std::string displayName {
BadgeComponent::getDisplayName(Utils::String::toLower(it.first)); BadgeComponent::getDisplayName(Utils::String::toLower(it.first))};
if (displayName == "unknown") if (displayName == "unknown")
displayName = it.first; displayName = it.first;
optionList->add(displayName, it.first, optionList->add(displayName, it.first,
@ -219,13 +219,13 @@ void GuiGamelistFilter::applyFilters()
if (mInitialTextFilter != mTextFilterField->getValue()) if (mInitialTextFilter != mTextFilterField->getValue())
mFiltersChanged = true; mFiltersChanged = true;
std::vector<FilterDataDecl> decls = mFilterIndex->getFilterDataDecls(); std::vector<FilterDataDecl> decls {mFilterIndex->getFilterDataDecls()};
for (std::map<FilterIndexType, for (std::map<FilterIndexType,
std::shared_ptr<OptionListComponent<std::string>>>::const_iterator it = std::shared_ptr<OptionListComponent<std::string>>>::const_iterator it =
mFilterOptions.cbegin(); mFilterOptions.cbegin();
it != mFilterOptions.cend(); ++it) { it != mFilterOptions.cend(); ++it) {
std::shared_ptr<OptionListComponent<std::string>> optionList = it->second; std::shared_ptr<OptionListComponent<std::string>> optionList {it->second};
std::vector<std::string> filters = optionList->getSelectedObjects(); std::vector<std::string> filters {optionList->getSelectedObjects()};
auto iteratorDistance = std::distance(mFilterOptions.cbegin(), it); auto iteratorDistance = std::distance(mFilterOptions.cbegin(), it);
if (mInitialFilters[iteratorDistance] != filters) if (mInitialFilters[iteratorDistance] != filters)
mFiltersChanged = true; mFiltersChanged = true;
@ -238,7 +238,7 @@ void GuiGamelistFilter::applyFilters()
bool GuiGamelistFilter::input(InputConfig* config, Input input) bool GuiGamelistFilter::input(InputConfig* config, Input input)
{ {
bool consumed = GuiComponent::input(config, input); bool consumed {GuiComponent::input(config, input)};
if (consumed) if (consumed)
return true; return true;
@ -250,7 +250,7 @@ bool GuiGamelistFilter::input(InputConfig* config, Input input)
std::vector<HelpPrompt> GuiGamelistFilter::getHelpPrompts() std::vector<HelpPrompt> GuiGamelistFilter::getHelpPrompts()
{ {
std::vector<HelpPrompt> prompts = mMenu.getHelpPrompts(); std::vector<HelpPrompt> prompts {mMenu.getHelpPrompts()};
prompts.push_back(HelpPrompt("b", "back")); prompts.push_back(HelpPrompt("b", "back"));
prompts.push_back(HelpPrompt("a", "select")); prompts.push_back(HelpPrompt("a", "select"));
return prompts; return prompts;

View file

@ -86,7 +86,7 @@ GuiGamelistOptions::GuiGamelistOptions(SystemData* system)
} }
else { else {
// Check if the currently selected game is a favorite. // Check if the currently selected game is a favorite.
bool isFavorite = false; bool isFavorite {false};
if (mFirstLetterIndex.size() == 1 && if (mFirstLetterIndex.size() == 1 &&
mFirstLetterIndex.front() == ViewController::FAVORITE_CHAR) mFirstLetterIndex.front() == ViewController::FAVORITE_CHAR)
isFavorite = true; isFavorite = true;
@ -128,14 +128,14 @@ GuiGamelistOptions::GuiGamelistOptions(SystemData* system)
else else
root = mSystem->getRootFolder(); root = mSystem->getRootFolder();
std::string sortType = root->getSortTypeString(); std::string sortType {root->getSortTypeString()};
unsigned int numSortTypes = static_cast<unsigned int>(FileSorts::SortTypes.size()); unsigned int numSortTypes = static_cast<unsigned int>(FileSorts::SortTypes.size());
// If it's not a collection, then hide the System sort options. // If it's not a collection, then hide the System sort options.
if (!root->getSystem()->isCollection()) if (!root->getSystem()->isCollection())
numSortTypes -= 2; numSortTypes -= 2;
for (unsigned int i = 0; i < numSortTypes; ++i) { for (unsigned int i = 0; i < numSortTypes; ++i) {
const FileData::SortType& sort = FileSorts::SortTypes.at(i); const FileData::SortType& sort {FileSorts::SortTypes.at(i)};
if (sort.description == sortType) if (sort.description == sortType)
mListSort->add(sort.description, &sort, true); mListSort->add(sort.description, &sort, true);
else else
@ -391,7 +391,7 @@ void GuiGamelistOptions::openMetaDataEd()
{ {
// Open metadata editor. // Open metadata editor.
// Get the FileData that holds the original metadata. // Get the FileData that holds the original metadata.
FileData* file = getGamelist()->getCursor()->getSourceFileData(); FileData* file {getGamelist()->getCursor()->getSourceFileData()};
ScraperSearchParams p; ScraperSearchParams p;
p.game = file; p.game = file;
p.system = file->getSystem(); p.system = file->getSystem();
@ -541,8 +541,8 @@ void GuiGamelistOptions::jumpToFirstRow()
{ {
if (mFoldersOnTop && mJumpToLetterList->getSelected() == ViewController::FAVORITE_CHAR) { if (mFoldersOnTop && mJumpToLetterList->getSelected() == ViewController::FAVORITE_CHAR) {
// Get the gamelist. // Get the gamelist.
const std::vector<FileData*>& files = const std::vector<FileData*>& files {
getGamelist()->getCursor()->getParent()->getChildrenListToDisplay(); getGamelist()->getCursor()->getParent()->getChildrenListToDisplay()};
// Select the first game that is not a folder, unless it's a folder-only list in // Select the first game that is not a folder, unless it's a folder-only list in
// which case the first line overall is selected. // which case the first line overall is selected.
for (auto it = files.cbegin(); it != files.cend(); ++it) { for (auto it = files.cbegin(); it != files.cend(); ++it) {

View file

@ -45,8 +45,8 @@ void GuiLaunchScreen::displayLaunchScreen(FileData* game)
} }
mScaleUp = 0.5f; mScaleUp = 0.5f;
const float titleFontSize = 0.060f; const float titleFontSize {0.060f};
const float gameNameFontSize = 0.073f; const float gameNameFontSize {0.073f};
// Spacer row. // Spacer row.
mGrid->setEntry(std::make_shared<GuiComponent>(), glm::ivec2 {1, 0}, false, false, mGrid->setEntry(std::make_shared<GuiComponent>(), glm::ivec2 {1, 0}, false, false,
@ -145,7 +145,7 @@ void GuiLaunchScreen::displayLaunchScreen(FileData* game)
mGrid->setSize(mSize); mGrid->setSize(mSize);
float totalRowHeight = 0.0f; float totalRowHeight {0.0f};
// Hack to adjust the window height to the row boundary. // Hack to adjust the window height to the row boundary.
for (int i = 0; i < 7; ++i) for (int i = 0; i < 7; ++i)

View file

@ -16,65 +16,64 @@ GuiMediaViewerOptions::GuiMediaViewerOptions(const std::string& title)
: GuiSettings {title} : GuiSettings {title}
{ {
// Keep videos running when viewing images. // Keep videos running when viewing images.
auto keep_video_running = std::make_shared<SwitchComponent>(); auto keepVideoRunning = std::make_shared<SwitchComponent>();
keep_video_running->setState(Settings::getInstance()->getBool("MediaViewerKeepVideoRunning")); keepVideoRunning->setState(Settings::getInstance()->getBool("MediaViewerKeepVideoRunning"));
addWithLabel("KEEP VIDEOS RUNNING WHEN VIEWING IMAGES", keep_video_running); addWithLabel("KEEP VIDEOS RUNNING WHEN VIEWING IMAGES", keepVideoRunning);
addSaveFunc([keep_video_running, this] { addSaveFunc([keepVideoRunning, this] {
if (keep_video_running->getState() != if (keepVideoRunning->getState() !=
Settings::getInstance()->getBool("MediaViewerKeepVideoRunning")) { Settings::getInstance()->getBool("MediaViewerKeepVideoRunning")) {
Settings::getInstance()->setBool("MediaViewerKeepVideoRunning", Settings::getInstance()->setBool("MediaViewerKeepVideoRunning",
keep_video_running->getState()); keepVideoRunning->getState());
setNeedsSaving(); setNeedsSaving();
} }
}); });
// Stretch videos to screen resolution. // Stretch videos to screen resolution.
auto stretch_videos = std::make_shared<SwitchComponent>(); auto stretchVideos = std::make_shared<SwitchComponent>();
stretch_videos->setState(Settings::getInstance()->getBool("MediaViewerStretchVideos")); stretchVideos->setState(Settings::getInstance()->getBool("MediaViewerStretchVideos"));
addWithLabel("STRETCH VIDEOS TO SCREEN RESOLUTION", stretch_videos); addWithLabel("STRETCH VIDEOS TO SCREEN RESOLUTION", stretchVideos);
addSaveFunc([stretch_videos, this] { addSaveFunc([stretchVideos, this] {
if (stretch_videos->getState() != if (stretchVideos->getState() !=
Settings::getInstance()->getBool("MediaViewerStretchVideos")) { Settings::getInstance()->getBool("MediaViewerStretchVideos")) {
Settings::getInstance()->setBool("MediaViewerStretchVideos", Settings::getInstance()->setBool("MediaViewerStretchVideos", stretchVideos->getState());
stretch_videos->getState());
setNeedsSaving(); setNeedsSaving();
} }
}); });
// Render scanlines for videos using a shader. // Render scanlines for videos using a shader.
auto video_scanlines = std::make_shared<SwitchComponent>(); auto videoScanlines = std::make_shared<SwitchComponent>();
video_scanlines->setState(Settings::getInstance()->getBool("MediaViewerVideoScanlines")); videoScanlines->setState(Settings::getInstance()->getBool("MediaViewerVideoScanlines"));
addWithLabel("RENDER SCANLINES FOR VIDEOS", video_scanlines); addWithLabel("RENDER SCANLINES FOR VIDEOS", videoScanlines);
addSaveFunc([video_scanlines, this] { addSaveFunc([videoScanlines, this] {
if (video_scanlines->getState() != if (videoScanlines->getState() !=
Settings::getInstance()->getBool("MediaViewerVideoScanlines")) { Settings::getInstance()->getBool("MediaViewerVideoScanlines")) {
Settings::getInstance()->setBool("MediaViewerVideoScanlines", Settings::getInstance()->setBool("MediaViewerVideoScanlines",
video_scanlines->getState()); videoScanlines->getState());
setNeedsSaving(); setNeedsSaving();
} }
}); });
// Render blur for videos using a shader. // Render blur for videos using a shader.
auto video_blur = std::make_shared<SwitchComponent>(); auto videoBlur = std::make_shared<SwitchComponent>();
video_blur->setState(Settings::getInstance()->getBool("MediaViewerVideoBlur")); videoBlur->setState(Settings::getInstance()->getBool("MediaViewerVideoBlur"));
addWithLabel("RENDER BLUR FOR VIDEOS", video_blur); addWithLabel("RENDER BLUR FOR VIDEOS", videoBlur);
addSaveFunc([video_blur, this] { addSaveFunc([videoBlur, this] {
if (video_blur->getState() != Settings::getInstance()->getBool("MediaViewerVideoBlur")) { if (videoBlur->getState() != Settings::getInstance()->getBool("MediaViewerVideoBlur")) {
Settings::getInstance()->setBool("MediaViewerVideoBlur", video_blur->getState()); Settings::getInstance()->setBool("MediaViewerVideoBlur", videoBlur->getState());
setNeedsSaving(); setNeedsSaving();
} }
}); });
// Render scanlines for screenshots and title screens using a shader. // Render scanlines for screenshots and title screens using a shader.
auto screenshot_scanlines = std::make_shared<SwitchComponent>(); auto screenshotScanlines = std::make_shared<SwitchComponent>();
screenshot_scanlines->setState( screenshotScanlines->setState(
Settings::getInstance()->getBool("MediaViewerScreenshotScanlines")); Settings::getInstance()->getBool("MediaViewerScreenshotScanlines"));
addWithLabel("RENDER SCANLINES FOR SCREENSHOTS AND TITLES", screenshot_scanlines); addWithLabel("RENDER SCANLINES FOR SCREENSHOTS AND TITLES", screenshotScanlines);
addSaveFunc([screenshot_scanlines, this] { addSaveFunc([screenshotScanlines, this] {
if (screenshot_scanlines->getState() != if (screenshotScanlines->getState() !=
Settings::getInstance()->getBool("MediaViewerScreenshotScanlines")) { Settings::getInstance()->getBool("MediaViewerScreenshotScanlines")) {
Settings::getInstance()->setBool("MediaViewerScreenshotScanlines", Settings::getInstance()->setBool("MediaViewerScreenshotScanlines",
screenshot_scanlines->getState()); screenshotScanlines->getState());
setNeedsSaving(); setNeedsSaving();
} }
}); });

File diff suppressed because it is too large Load diff

View file

@ -687,11 +687,11 @@ GuiMetaDataEd::GuiMetaDataEd(MetaDataList* md,
mGrid.setEntry(mButtons, glm::ivec2 {0, 5}, true, false, glm::ivec2 {2, 1}); mGrid.setEntry(mButtons, glm::ivec2 {0, 5}, true, false, glm::ivec2 {2, 1});
// Resize + center. // Resize + center.
float width = std::min(Renderer::getScreenHeight() * 1.05f, Renderer::getScreenWidth() * 0.90f); float width {std::min(Renderer::getScreenHeight() * 1.05f, Renderer::getScreenWidth() * 0.90f)};
// Set height explicitly to ten rows for the component list. // Set height explicitly to ten rows for the component list.
float height = mList->getRowHeight(0) * 10.0f + mTitle->getSize().y + mSubtitle->getSize().y + float height {mList->getRowHeight(0) * 10.0f + mTitle->getSize().y + mSubtitle->getSize().y +
mButtons->getSize().y; mButtons->getSize().y};
setSize(width, height); setSize(width, height);
} }
@ -848,9 +848,9 @@ void GuiMetaDataEd::save()
void GuiMetaDataEd::fetch() void GuiMetaDataEd::fetch()
{ {
GuiScraperSingle* scr = new GuiScraperSingle( GuiScraperSingle* scr {new GuiScraperSingle(
mScraperParams, std::bind(&GuiMetaDataEd::fetchDone, this, std::placeholders::_1), mScraperParams, std::bind(&GuiMetaDataEd::fetchDone, this, std::placeholders::_1),
mSavedMediaAndAborted); mSavedMediaAndAborted)};
mWindow->pushGui(scr); mWindow->pushGui(scr);
} }
@ -994,7 +994,7 @@ bool GuiMetaDataEd::input(InputConfig* config, Input input)
std::vector<HelpPrompt> GuiMetaDataEd::getHelpPrompts() std::vector<HelpPrompt> GuiMetaDataEd::getHelpPrompts()
{ {
std::vector<HelpPrompt> prompts = mGrid.getHelpPrompts(); std::vector<HelpPrompt> prompts {mGrid.getHelpPrompts()};
prompts.push_back(HelpPrompt("y", "scrape")); prompts.push_back(HelpPrompt("y", "scrape"));
prompts.push_back(HelpPrompt("b", "back")); prompts.push_back(HelpPrompt("b", "back"));
return prompts; return prompts;

View file

@ -254,7 +254,7 @@ void GuiOfflineGenerator::update(int deltaTime)
} }
} }
else { else {
std::string errorMessage = mResultMessage + " (" + mGameName + ")"; std::string errorMessage {mResultMessage + " (" + mGameName + ")"};
mLastErrorVal->setText(errorMessage); mLastErrorVal->setText(errorMessage);
LOG(LogInfo) << "GuiOfflineGenerator: " << errorMessage; LOG(LogInfo) << "GuiOfflineGenerator: " << errorMessage;
++mGamesFailed; ++mGamesFailed;
@ -323,6 +323,6 @@ void GuiOfflineGenerator::update(int deltaTime)
std::vector<HelpPrompt> GuiOfflineGenerator::getHelpPrompts() std::vector<HelpPrompt> GuiOfflineGenerator::getHelpPrompts()
{ {
std::vector<HelpPrompt> prompts = mGrid.getHelpPrompts(); std::vector<HelpPrompt> prompts {mGrid.getHelpPrompts()};
return prompts; return prompts;
} }

View file

@ -151,7 +151,7 @@ GuiScraperMenu::~GuiScraperMenu()
{ {
// Save the scrape flags to the system settings so that they are // Save the scrape flags to the system settings so that they are
// remembered throughout the program session. // remembered throughout the program session.
std::vector<SystemData*> sys = mSystems->getSelectedObjects(); std::vector<SystemData*> sys {mSystems->getSelectedObjects()};
for (auto it = SystemData::sSystemVector.cbegin(); // Line break. for (auto it = SystemData::sSystemVector.cbegin(); // Line break.
it != SystemData::sSystemVector.cend(); ++it) { it != SystemData::sSystemVector.cend(); ++it) {
(*it)->setScrapeFlag(false); (*it)->setScrapeFlag(false);
@ -167,49 +167,49 @@ void GuiScraperMenu::openAccountOptions()
auto s = new GuiSettings("ACCOUNT SETTINGS"); auto s = new GuiSettings("ACCOUNT SETTINGS");
// ScreenScraper username. // ScreenScraper username.
auto scraper_username_screenscraper = auto scraperUsernameScreenScraper =
std::make_shared<TextComponent>("", Font::get(FONT_SIZE_MEDIUM), 0x777777FF, ALIGN_RIGHT); std::make_shared<TextComponent>("", Font::get(FONT_SIZE_MEDIUM), 0x777777FF, ALIGN_RIGHT);
s->addEditableTextComponent("SCREENSCRAPER USERNAME", scraper_username_screenscraper, s->addEditableTextComponent("SCREENSCRAPER USERNAME", scraperUsernameScreenScraper,
Settings::getInstance()->getString("ScraperUsernameScreenScraper")); Settings::getInstance()->getString("ScraperUsernameScreenScraper"));
s->addSaveFunc([scraper_username_screenscraper, s] { s->addSaveFunc([scraperUsernameScreenScraper, s] {
if (scraper_username_screenscraper->getValue() != if (scraperUsernameScreenScraper->getValue() !=
Settings::getInstance()->getString("ScraperUsernameScreenScraper")) { Settings::getInstance()->getString("ScraperUsernameScreenScraper")) {
Settings::getInstance()->setString("ScraperUsernameScreenScraper", Settings::getInstance()->setString("ScraperUsernameScreenScraper",
scraper_username_screenscraper->getValue()); scraperUsernameScreenScraper->getValue());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// ScreenScraper password. // ScreenScraper password.
auto scraper_password_screenscraper = auto scraperPasswordScreenScraper =
std::make_shared<TextComponent>("", Font::get(FONT_SIZE_MEDIUM), 0x777777FF, ALIGN_RIGHT); std::make_shared<TextComponent>("", Font::get(FONT_SIZE_MEDIUM), 0x777777FF, ALIGN_RIGHT);
std::string passwordMasked; std::string passwordMasked;
if (Settings::getInstance()->getString("ScraperPasswordScreenScraper") != "") { if (Settings::getInstance()->getString("ScraperPasswordScreenScraper") != "") {
passwordMasked = "********"; passwordMasked = "********";
scraper_password_screenscraper->setHiddenValue( scraperPasswordScreenScraper->setHiddenValue(
Settings::getInstance()->getString("ScraperPasswordScreenScraper")); Settings::getInstance()->getString("ScraperPasswordScreenScraper"));
} }
s->addEditableTextComponent("SCREENSCRAPER PASSWORD", scraper_password_screenscraper, s->addEditableTextComponent("SCREENSCRAPER PASSWORD", scraperPasswordScreenScraper,
passwordMasked, "", true); passwordMasked, "", true);
s->addSaveFunc([scraper_password_screenscraper, s] { s->addSaveFunc([scraperPasswordScreenScraper, s] {
if (scraper_password_screenscraper->getHiddenValue() != if (scraperPasswordScreenScraper->getHiddenValue() !=
Settings::getInstance()->getString("ScraperPasswordScreenScraper")) { Settings::getInstance()->getString("ScraperPasswordScreenScraper")) {
Settings::getInstance()->setString("ScraperPasswordScreenScraper", Settings::getInstance()->setString("ScraperPasswordScreenScraper",
scraper_password_screenscraper->getHiddenValue()); scraperPasswordScreenScraper->getHiddenValue());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Whether to use the ScreenScraper account when scraping. // Whether to use the ScreenScraper account when scraping.
auto scraper_use_account_screenscraper = std::make_shared<SwitchComponent>(); auto scraperUseAccountScreenScraper = std::make_shared<SwitchComponent>();
scraper_use_account_screenscraper->setState( scraperUseAccountScreenScraper->setState(
Settings::getInstance()->getBool("ScraperUseAccountScreenScraper")); Settings::getInstance()->getBool("ScraperUseAccountScreenScraper"));
s->addWithLabel("USE THIS ACCOUNT FOR SCREENSCRAPER", scraper_use_account_screenscraper); s->addWithLabel("USE THIS ACCOUNT FOR SCREENSCRAPER", scraperUseAccountScreenScraper);
s->addSaveFunc([scraper_use_account_screenscraper, s] { s->addSaveFunc([scraperUseAccountScreenScraper, s] {
if (scraper_use_account_screenscraper->getState() != if (scraperUseAccountScreenScraper->getState() !=
Settings::getInstance()->getBool("ScraperUseAccountScreenScraper")) { Settings::getInstance()->getBool("ScraperUseAccountScreenScraper")) {
Settings::getInstance()->setBool("ScraperUseAccountScreenScraper", Settings::getInstance()->setBool("ScraperUseAccountScreenScraper",
scraper_use_account_screenscraper->getState()); scraperUseAccountScreenScraper->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
@ -222,33 +222,33 @@ void GuiScraperMenu::openContentOptions()
auto s = new GuiSettings("CONTENT SETTINGS"); auto s = new GuiSettings("CONTENT SETTINGS");
// Scrape game names. // Scrape game names.
auto scrape_game_names = std::make_shared<SwitchComponent>(); auto scrapeGameNames = std::make_shared<SwitchComponent>();
scrape_game_names->setState(Settings::getInstance()->getBool("ScrapeGameNames")); scrapeGameNames->setState(Settings::getInstance()->getBool("ScrapeGameNames"));
s->addWithLabel("GAME NAMES", scrape_game_names); s->addWithLabel("GAME NAMES", scrapeGameNames);
s->addSaveFunc([scrape_game_names, s] { s->addSaveFunc([scrapeGameNames, s] {
if (scrape_game_names->getState() != Settings::getInstance()->getBool("ScrapeGameNames")) { if (scrapeGameNames->getState() != Settings::getInstance()->getBool("ScrapeGameNames")) {
Settings::getInstance()->setBool("ScrapeGameNames", scrape_game_names->getState()); Settings::getInstance()->setBool("ScrapeGameNames", scrapeGameNames->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Scrape ratings. // Scrape ratings.
auto scrape_ratings = std::make_shared<SwitchComponent>(); auto scrapeRatings = std::make_shared<SwitchComponent>();
scrape_ratings->setState(Settings::getInstance()->getBool("ScrapeRatings")); scrapeRatings->setState(Settings::getInstance()->getBool("ScrapeRatings"));
s->addWithLabel("RATINGS", scrape_ratings); s->addWithLabel("RATINGS", scrapeRatings);
s->addSaveFunc([scrape_ratings, s] { s->addSaveFunc([scrapeRatings, s] {
if (scrape_ratings->getState() != Settings::getInstance()->getBool("ScrapeRatings")) { if (scrapeRatings->getState() != Settings::getInstance()->getBool("ScrapeRatings")) {
Settings::getInstance()->setBool("ScrapeRatings", scrape_ratings->getState()); Settings::getInstance()->setBool("ScrapeRatings", scrapeRatings->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Ratings are not supported by TheGamesDB, so gray out the option if this scraper is selected. // Ratings are not supported by TheGamesDB, so gray out the option if this scraper is selected.
if (Settings::getInstance()->getString("Scraper") == "thegamesdb") { if (Settings::getInstance()->getString("Scraper") == "thegamesdb") {
scrape_ratings->setEnabled(false); scrapeRatings->setEnabled(false);
scrape_ratings->setOpacity(DISABLED_OPACITY); scrapeRatings->setOpacity(DISABLED_OPACITY);
scrape_ratings->getParent() scrapeRatings->getParent()
->getChild(scrape_ratings->getChildIndex() - 1) ->getChild(scrapeRatings->getChildIndex() - 1)
->setOpacity(DISABLED_OPACITY); ->setOpacity(DISABLED_OPACITY);
} }
@ -275,44 +275,44 @@ void GuiScraperMenu::openContentOptions()
} }
// Scrape other metadata. // Scrape other metadata.
auto scrape_metadata = std::make_shared<SwitchComponent>(); auto scrapeMetadata = std::make_shared<SwitchComponent>();
scrape_metadata->setState(Settings::getInstance()->getBool("ScrapeMetadata")); scrapeMetadata->setState(Settings::getInstance()->getBool("ScrapeMetadata"));
s->addWithLabel("OTHER METADATA", scrape_metadata); s->addWithLabel("OTHER METADATA", scrapeMetadata);
s->addSaveFunc([scrape_metadata, s] { s->addSaveFunc([scrapeMetadata, s] {
if (scrape_metadata->getState() != Settings::getInstance()->getBool("ScrapeMetadata")) { if (scrapeMetadata->getState() != Settings::getInstance()->getBool("ScrapeMetadata")) {
Settings::getInstance()->setBool("ScrapeMetadata", scrape_metadata->getState()); Settings::getInstance()->setBool("ScrapeMetadata", scrapeMetadata->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Scrape videos. // Scrape videos.
auto scrape_videos = std::make_shared<SwitchComponent>(); auto scrapeVideos = std::make_shared<SwitchComponent>();
scrape_videos->setState(Settings::getInstance()->getBool("ScrapeVideos")); scrapeVideos->setState(Settings::getInstance()->getBool("ScrapeVideos"));
s->addWithLabel("VIDEOS", scrape_videos); s->addWithLabel("VIDEOS", scrapeVideos);
s->addSaveFunc([scrape_videos, s] { s->addSaveFunc([scrapeVideos, s] {
if (scrape_videos->getState() != Settings::getInstance()->getBool("ScrapeVideos")) { if (scrapeVideos->getState() != Settings::getInstance()->getBool("ScrapeVideos")) {
Settings::getInstance()->setBool("ScrapeVideos", scrape_videos->getState()); Settings::getInstance()->setBool("ScrapeVideos", scrapeVideos->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Videos are not supported by TheGamesDB, so gray out the option if this scraper is selected. // Videos are not supported by TheGamesDB, so gray out the option if this scraper is selected.
if (Settings::getInstance()->getString("Scraper") == "thegamesdb") { if (Settings::getInstance()->getString("Scraper") == "thegamesdb") {
scrape_videos->setEnabled(false); scrapeVideos->setEnabled(false);
scrape_videos->setOpacity(DISABLED_OPACITY); scrapeVideos->setOpacity(DISABLED_OPACITY);
scrape_videos->getParent() scrapeVideos->getParent()
->getChild(scrape_videos->getChildIndex() - 1) ->getChild(scrapeVideos->getChildIndex() - 1)
->setOpacity(DISABLED_OPACITY); ->setOpacity(DISABLED_OPACITY);
} }
// Scrape screenshots images. // Scrape screenshots images.
auto scrape_screenshots = std::make_shared<SwitchComponent>(); auto scrapeScreenshots = std::make_shared<SwitchComponent>();
scrape_screenshots->setState(Settings::getInstance()->getBool("ScrapeScreenshots")); scrapeScreenshots->setState(Settings::getInstance()->getBool("ScrapeScreenshots"));
s->addWithLabel("SCREENSHOT IMAGES", scrape_screenshots); s->addWithLabel("SCREENSHOT IMAGES", scrapeScreenshots);
s->addSaveFunc([scrape_screenshots, s] { s->addSaveFunc([scrapeScreenshots, s] {
if (scrape_screenshots->getState() != if (scrapeScreenshots->getState() !=
Settings::getInstance()->getBool("ScrapeScreenshots")) { Settings::getInstance()->getBool("ScrapeScreenshots")) {
Settings::getInstance()->setBool("ScrapeScreenshots", scrape_screenshots->getState()); Settings::getInstance()->setBool("ScrapeScreenshots", scrapeScreenshots->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
@ -330,12 +330,12 @@ void GuiScraperMenu::openContentOptions()
}); });
// Scrape box cover images. // Scrape box cover images.
auto scrape_covers = std::make_shared<SwitchComponent>(); auto scrapeCovers = std::make_shared<SwitchComponent>();
scrape_covers->setState(Settings::getInstance()->getBool("ScrapeCovers")); scrapeCovers->setState(Settings::getInstance()->getBool("ScrapeCovers"));
s->addWithLabel("BOX COVER IMAGES", scrape_covers); s->addWithLabel("BOX COVER IMAGES", scrapeCovers);
s->addSaveFunc([scrape_covers, s] { s->addSaveFunc([scrapeCovers, s] {
if (scrape_covers->getState() != Settings::getInstance()->getBool("ScrapeCovers")) { if (scrapeCovers->getState() != Settings::getInstance()->getBool("ScrapeCovers")) {
Settings::getInstance()->setBool("ScrapeCovers", scrape_covers->getState()); Settings::getInstance()->setBool("ScrapeCovers", scrapeCovers->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
@ -352,23 +352,23 @@ void GuiScraperMenu::openContentOptions()
}); });
// Scrape marquee images. // Scrape marquee images.
auto scrape_marquees = std::make_shared<SwitchComponent>(); auto scrapeMarquees = std::make_shared<SwitchComponent>();
scrape_marquees->setState(Settings::getInstance()->getBool("ScrapeMarquees")); scrapeMarquees->setState(Settings::getInstance()->getBool("ScrapeMarquees"));
s->addWithLabel("MARQUEE (WHEEL) IMAGES", scrape_marquees); s->addWithLabel("MARQUEE (WHEEL) IMAGES", scrapeMarquees);
s->addSaveFunc([scrape_marquees, s] { s->addSaveFunc([scrapeMarquees, s] {
if (scrape_marquees->getState() != Settings::getInstance()->getBool("ScrapeMarquees")) { if (scrapeMarquees->getState() != Settings::getInstance()->getBool("ScrapeMarquees")) {
Settings::getInstance()->setBool("ScrapeMarquees", scrape_marquees->getState()); Settings::getInstance()->setBool("ScrapeMarquees", scrapeMarquees->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Scrape 3D box images. // Scrape 3D box images.
auto scrape_3dboxes = std::make_shared<SwitchComponent>(); auto scrape3dBoxes = std::make_shared<SwitchComponent>();
scrape_3dboxes->setState(Settings::getInstance()->getBool("Scrape3DBoxes")); scrape3dBoxes->setState(Settings::getInstance()->getBool("Scrape3DBoxes"));
s->addWithLabel("3D BOX IMAGES", scrape_3dboxes); s->addWithLabel("3D BOX IMAGES", scrape3dBoxes);
s->addSaveFunc([scrape_3dboxes, s] { s->addSaveFunc([scrape3dBoxes, s] {
if (scrape_3dboxes->getState() != Settings::getInstance()->getBool("Scrape3DBoxes")) { if (scrape3dBoxes->getState() != Settings::getInstance()->getBool("Scrape3DBoxes")) {
Settings::getInstance()->setBool("Scrape3DBoxes", scrape_3dboxes->getState()); Settings::getInstance()->setBool("Scrape3DBoxes", scrape3dBoxes->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
@ -376,10 +376,10 @@ void GuiScraperMenu::openContentOptions()
// 3D box images are not supported by TheGamesDB, so gray out the option if this scraper // 3D box images are not supported by TheGamesDB, so gray out the option if this scraper
// is selected. // is selected.
if (Settings::getInstance()->getString("Scraper") == "thegamesdb") { if (Settings::getInstance()->getString("Scraper") == "thegamesdb") {
scrape_3dboxes->setEnabled(false); scrape3dBoxes->setEnabled(false);
scrape_3dboxes->setOpacity(DISABLED_OPACITY); scrape3dBoxes->setOpacity(DISABLED_OPACITY);
scrape_3dboxes->getParent() scrape3dBoxes->getParent()
->getChild(scrape_3dboxes->getChildIndex() - 1) ->getChild(scrape3dBoxes->getChildIndex() - 1)
->setOpacity(DISABLED_OPACITY); ->setOpacity(DISABLED_OPACITY);
} }
@ -425,42 +425,42 @@ void GuiScraperMenu::openMiximageOptions()
auto s = new GuiSettings("MIXIMAGE SETTINGS"); auto s = new GuiSettings("MIXIMAGE SETTINGS");
// Miximage resolution. // Miximage resolution.
auto miximage_resolution = std::make_shared<OptionListComponent<std::string>>( auto miximageResolution = std::make_shared<OptionListComponent<std::string>>(
getHelpStyle(), "MIXIMAGE RESOLUTION", false); getHelpStyle(), "MIXIMAGE RESOLUTION", false);
std::string selectedResolution = Settings::getInstance()->getString("MiximageResolution"); std::string selectedResolution {Settings::getInstance()->getString("MiximageResolution")};
miximage_resolution->add("1280x960", "1280x960", selectedResolution == "1280x960"); miximageResolution->add("1280x960", "1280x960", selectedResolution == "1280x960");
miximage_resolution->add("1920x1440", "1920x1440", selectedResolution == "1920x1440"); miximageResolution->add("1920x1440", "1920x1440", selectedResolution == "1920x1440");
miximage_resolution->add("640x480", "640x480", selectedResolution == "640x480"); miximageResolution->add("640x480", "640x480", selectedResolution == "640x480");
// If there are no objects returned, then there must be a manually modified entry in the // If there are no objects returned, then there must be a manually modified entry in the
// configuration file. Simply set the resolution to "1280x960" in this case. // configuration file. Simply set the resolution to "1280x960" in this case.
if (miximage_resolution->getSelectedObjects().size() == 0) if (miximageResolution->getSelectedObjects().size() == 0)
miximage_resolution->selectEntry(0); miximageResolution->selectEntry(0);
s->addWithLabel("MIXIMAGE RESOLUTION", miximage_resolution); s->addWithLabel("MIXIMAGE RESOLUTION", miximageResolution);
s->addSaveFunc([miximage_resolution, s] { s->addSaveFunc([miximageResolution, s] {
if (miximage_resolution->getSelected() != if (miximageResolution->getSelected() !=
Settings::getInstance()->getString("MiximageResolution")) { Settings::getInstance()->getString("MiximageResolution")) {
Settings::getInstance()->setString("MiximageResolution", Settings::getInstance()->setString("MiximageResolution",
miximage_resolution->getSelected()); miximageResolution->getSelected());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Screenshot scaling method. // Screenshot scaling method.
auto miximage_scaling = std::make_shared<OptionListComponent<std::string>>( auto miximageScaling = std::make_shared<OptionListComponent<std::string>>(
getHelpStyle(), "SCREENSHOT SCALING", false); getHelpStyle(), "SCREENSHOT SCALING", false);
std::string selectedScaling = Settings::getInstance()->getString("MiximageScreenshotScaling"); std::string selectedScaling {Settings::getInstance()->getString("MiximageScreenshotScaling")};
miximage_scaling->add("sharp", "sharp", selectedScaling == "sharp"); miximageScaling->add("sharp", "sharp", selectedScaling == "sharp");
miximage_scaling->add("smooth", "smooth", selectedScaling == "smooth"); miximageScaling->add("smooth", "smooth", selectedScaling == "smooth");
// If there are no objects returned, then there must be a manually modified entry in the // If there are no objects returned, then there must be a manually modified entry in the
// configuration file. Simply set the scaling method to "sharp" in this case. // configuration file. Simply set the scaling method to "sharp" in this case.
if (miximage_scaling->getSelectedObjects().size() == 0) if (miximageScaling->getSelectedObjects().size() == 0)
miximage_scaling->selectEntry(0); miximageScaling->selectEntry(0);
s->addWithLabel("SCREENSHOT SCALING METHOD", miximage_scaling); s->addWithLabel("SCREENSHOT SCALING METHOD", miximageScaling);
s->addSaveFunc([miximage_scaling, s] { s->addSaveFunc([miximageScaling, s] {
if (miximage_scaling->getSelected() != if (miximageScaling->getSelected() !=
Settings::getInstance()->getString("MiximageScreenshotScaling")) { Settings::getInstance()->getString("MiximageScreenshotScaling")) {
Settings::getInstance()->setString("MiximageScreenshotScaling", Settings::getInstance()->setString("MiximageScreenshotScaling",
miximage_scaling->getSelected()); miximageScaling->getSelected());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
@ -468,7 +468,7 @@ void GuiScraperMenu::openMiximageOptions()
// Box/cover size. // Box/cover size.
auto miximageBoxSize = auto miximageBoxSize =
std::make_shared<OptionListComponent<std::string>>(getHelpStyle(), "BOX SIZE", false); std::make_shared<OptionListComponent<std::string>>(getHelpStyle(), "BOX SIZE", false);
std::string selectedBoxSize = Settings::getInstance()->getString("MiximageBoxSize"); std::string selectedBoxSize {Settings::getInstance()->getString("MiximageBoxSize")};
miximageBoxSize->add("small", "small", selectedBoxSize == "small"); miximageBoxSize->add("small", "small", selectedBoxSize == "small");
miximageBoxSize->add("medium", "medium", selectedBoxSize == "medium"); miximageBoxSize->add("medium", "medium", selectedBoxSize == "medium");
miximageBoxSize->add("large", "large", selectedBoxSize == "large"); miximageBoxSize->add("large", "large", selectedBoxSize == "large");
@ -488,8 +488,8 @@ void GuiScraperMenu::openMiximageOptions()
// Physical media size. // Physical media size.
auto miximagePhysicalMediaSize = std::make_shared<OptionListComponent<std::string>>( auto miximagePhysicalMediaSize = std::make_shared<OptionListComponent<std::string>>(
getHelpStyle(), "PHYSICAL MEDIA SIZE", false); getHelpStyle(), "PHYSICAL MEDIA SIZE", false);
std::string selectedPhysicalMediaSize = std::string selectedPhysicalMediaSize {
Settings::getInstance()->getString("MiximagePhysicalMediaSize"); Settings::getInstance()->getString("MiximagePhysicalMediaSize")};
miximagePhysicalMediaSize->add("small", "small", selectedPhysicalMediaSize == "small"); miximagePhysicalMediaSize->add("small", "small", selectedPhysicalMediaSize == "small");
miximagePhysicalMediaSize->add("medium", "medium", selectedPhysicalMediaSize == "medium"); miximagePhysicalMediaSize->add("medium", "medium", selectedPhysicalMediaSize == "medium");
miximagePhysicalMediaSize->add("large", "large", selectedPhysicalMediaSize == "large"); miximagePhysicalMediaSize->add("large", "large", selectedPhysicalMediaSize == "large");
@ -508,50 +508,52 @@ void GuiScraperMenu::openMiximageOptions()
}); });
// Whether to generate miximages when scraping. // Whether to generate miximages when scraping.
auto miximage_generate = std::make_shared<SwitchComponent>(); auto miximageGenerate = std::make_shared<SwitchComponent>();
miximage_generate->setState(Settings::getInstance()->getBool("MiximageGenerate")); miximageGenerate->setState(Settings::getInstance()->getBool("MiximageGenerate"));
s->addWithLabel("GENERATE MIXIMAGES WHEN SCRAPING", miximage_generate); s->addWithLabel("GENERATE MIXIMAGES WHEN SCRAPING", miximageGenerate);
s->addSaveFunc([miximage_generate, s] { s->addSaveFunc([miximageGenerate, s] {
if (miximage_generate->getState() != Settings::getInstance()->getBool("MiximageGenerate")) { if (miximageGenerate->getState() != Settings::getInstance()->getBool("MiximageGenerate")) {
Settings::getInstance()->setBool("MiximageGenerate", miximage_generate->getState()); Settings::getInstance()->setBool("MiximageGenerate", miximageGenerate->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Whether to overwrite miximages (both for the scraper and offline generator). // Whether to overwrite miximages (both for the scraper and offline generator).
auto miximage_overwrite = std::make_shared<SwitchComponent>(); auto miximageOverwrite = std::make_shared<SwitchComponent>();
miximage_overwrite->setState(Settings::getInstance()->getBool("MiximageOverwrite")); miximageOverwrite->setState(Settings::getInstance()->getBool("MiximageOverwrite"));
s->addWithLabel("OVERWRITE MIXIMAGES (SCRAPER/OFFLINE GENERATOR)", miximage_overwrite); s->addWithLabel("OVERWRITE MIXIMAGES (SCRAPER/OFFLINE GENERATOR)", miximageOverwrite);
s->addSaveFunc([miximage_overwrite, s] { s->addSaveFunc([miximageOverwrite, s] {
if (miximage_overwrite->getState() != if (miximageOverwrite->getState() !=
Settings::getInstance()->getBool("MiximageOverwrite")) { Settings::getInstance()->getBool("MiximageOverwrite")) {
Settings::getInstance()->setBool("MiximageOverwrite", miximage_overwrite->getState()); Settings::getInstance()->setBool("MiximageOverwrite", miximageOverwrite->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Whether to remove letterboxes from the screenshots. // Whether to remove letterboxes from the screenshots.
auto remove_letterboxes = std::make_shared<SwitchComponent>(); auto miximageRemoveLetterboxes = std::make_shared<SwitchComponent>();
remove_letterboxes->setState(Settings::getInstance()->getBool("MiximageRemoveLetterboxes")); miximageRemoveLetterboxes->setState(
s->addWithLabel("REMOVE LETTERBOXES FROM SCREENSHOTS", remove_letterboxes); Settings::getInstance()->getBool("MiximageRemoveLetterboxes"));
s->addSaveFunc([remove_letterboxes, s] { s->addWithLabel("REMOVE LETTERBOXES FROM SCREENSHOTS", miximageRemoveLetterboxes);
if (remove_letterboxes->getState() != s->addSaveFunc([miximageRemoveLetterboxes, s] {
if (miximageRemoveLetterboxes->getState() !=
Settings::getInstance()->getBool("MiximageRemoveLetterboxes")) { Settings::getInstance()->getBool("MiximageRemoveLetterboxes")) {
Settings::getInstance()->setBool("MiximageRemoveLetterboxes", Settings::getInstance()->setBool("MiximageRemoveLetterboxes",
remove_letterboxes->getState()); miximageRemoveLetterboxes->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Whether to remove pillarboxes from the screenshots. // Whether to remove pillarboxes from the screenshots.
auto remove_pillarboxes = std::make_shared<SwitchComponent>(); auto miximageRemovePillarboxes = std::make_shared<SwitchComponent>();
remove_pillarboxes->setState(Settings::getInstance()->getBool("MiximageRemovePillarboxes")); miximageRemovePillarboxes->setState(
s->addWithLabel("REMOVE PILLARBOXES FROM SCREENSHOTS", remove_pillarboxes); Settings::getInstance()->getBool("MiximageRemovePillarboxes"));
s->addSaveFunc([remove_pillarboxes, s] { s->addWithLabel("REMOVE PILLARBOXES FROM SCREENSHOTS", miximageRemovePillarboxes);
if (remove_pillarboxes->getState() != s->addSaveFunc([miximageRemovePillarboxes, s] {
if (miximageRemovePillarboxes->getState() !=
Settings::getInstance()->getBool("MiximageRemovePillarboxes")) { Settings::getInstance()->getBool("MiximageRemovePillarboxes")) {
Settings::getInstance()->setBool("MiximageRemovePillarboxes", Settings::getInstance()->setBool("MiximageRemovePillarboxes",
remove_pillarboxes->getState()); miximageRemovePillarboxes->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
@ -571,67 +573,68 @@ void GuiScraperMenu::openMiximageOptions()
}); });
// Whether to include marquee images. // Whether to include marquee images.
auto miximage_marquee = std::make_shared<SwitchComponent>(); auto miximageIncludeMarquee = std::make_shared<SwitchComponent>();
miximage_marquee->setState(Settings::getInstance()->getBool("MiximageIncludeMarquee")); miximageIncludeMarquee->setState(Settings::getInstance()->getBool("MiximageIncludeMarquee"));
s->addWithLabel("INCLUDE MARQUEE IMAGE", miximage_marquee); s->addWithLabel("INCLUDE MARQUEE IMAGE", miximageIncludeMarquee);
s->addSaveFunc([miximage_marquee, s] { s->addSaveFunc([miximageIncludeMarquee, s] {
if (miximage_marquee->getState() != if (miximageIncludeMarquee->getState() !=
Settings::getInstance()->getBool("MiximageIncludeMarquee")) { Settings::getInstance()->getBool("MiximageIncludeMarquee")) {
Settings::getInstance()->setBool("MiximageIncludeMarquee", Settings::getInstance()->setBool("MiximageIncludeMarquee",
miximage_marquee->getState()); miximageIncludeMarquee->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Whether to include box images. // Whether to include box images.
auto miximage_box = std::make_shared<SwitchComponent>(); auto miximageIncludeBox = std::make_shared<SwitchComponent>();
miximage_box->setState(Settings::getInstance()->getBool("MiximageIncludeBox")); miximageIncludeBox->setState(Settings::getInstance()->getBool("MiximageIncludeBox"));
s->addWithLabel("INCLUDE BOX IMAGE", miximage_box); s->addWithLabel("INCLUDE BOX IMAGE", miximageIncludeBox);
s->addSaveFunc([miximage_box, s] { s->addSaveFunc([miximageIncludeBox, s] {
if (miximage_box->getState() != Settings::getInstance()->getBool("MiximageIncludeBox")) { if (miximageIncludeBox->getState() !=
Settings::getInstance()->setBool("MiximageIncludeBox", miximage_box->getState()); Settings::getInstance()->getBool("MiximageIncludeBox")) {
Settings::getInstance()->setBool("MiximageIncludeBox", miximageIncludeBox->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Whether to use cover image if there is no 3D box image. // Whether to use cover image if there is no 3D box image.
auto miximage_cover_fallback = std::make_shared<SwitchComponent>(); auto miximageCoverFallback = std::make_shared<SwitchComponent>();
miximage_cover_fallback->setState(Settings::getInstance()->getBool("MiximageCoverFallback")); miximageCoverFallback->setState(Settings::getInstance()->getBool("MiximageCoverFallback"));
s->addWithLabel("USE COVER IMAGE IF 3D BOX IS MISSING", miximage_cover_fallback); s->addWithLabel("USE COVER IMAGE IF 3D BOX IS MISSING", miximageCoverFallback);
s->addSaveFunc([miximage_cover_fallback, s] { s->addSaveFunc([miximageCoverFallback, s] {
if (miximage_cover_fallback->getState() != if (miximageCoverFallback->getState() !=
Settings::getInstance()->getBool("MiximageCoverFallback")) { Settings::getInstance()->getBool("MiximageCoverFallback")) {
Settings::getInstance()->setBool("MiximageCoverFallback", Settings::getInstance()->setBool("MiximageCoverFallback",
miximage_cover_fallback->getState()); miximageCoverFallback->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Whether to include physical media images. // Whether to include physical media images.
auto miximagePhysicalMedia = std::make_shared<SwitchComponent>(); auto miximageIncludePhysicalMedia = std::make_shared<SwitchComponent>();
miximagePhysicalMedia->setState( miximageIncludePhysicalMedia->setState(
Settings::getInstance()->getBool("MiximageIncludePhysicalMedia")); Settings::getInstance()->getBool("MiximageIncludePhysicalMedia"));
s->addWithLabel("INCLUDE PHYSICAL MEDIA IMAGE", miximagePhysicalMedia); s->addWithLabel("INCLUDE PHYSICAL MEDIA IMAGE", miximageIncludePhysicalMedia);
s->addSaveFunc([miximagePhysicalMedia, s] { s->addSaveFunc([miximageIncludePhysicalMedia, s] {
if (miximagePhysicalMedia->getState() != if (miximageIncludePhysicalMedia->getState() !=
Settings::getInstance()->getBool("MiximageIncludePhysicalMedia")) { Settings::getInstance()->getBool("MiximageIncludePhysicalMedia")) {
Settings::getInstance()->setBool("MiximageIncludePhysicalMedia", Settings::getInstance()->setBool("MiximageIncludePhysicalMedia",
miximagePhysicalMedia->getState()); miximageIncludePhysicalMedia->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Miximage offline generator. // Miximage offline generator.
ComponentListRow offline_generator_row; ComponentListRow offlineGeneratorRow;
offline_generator_row.elements.clear(); offlineGeneratorRow.elements.clear();
offline_generator_row.addElement(std::make_shared<TextComponent>("OFFLINE GENERATOR", offlineGeneratorRow.addElement(std::make_shared<TextComponent>("OFFLINE GENERATOR",
Font::get(FONT_SIZE_MEDIUM), Font::get(FONT_SIZE_MEDIUM),
0x777777FF), 0x777777FF),
true); true);
offline_generator_row.addElement(makeArrow(), false); offlineGeneratorRow.addElement(makeArrow(), false);
offline_generator_row.makeAcceptInputHandler( offlineGeneratorRow.makeAcceptInputHandler(
std::bind(&GuiScraperMenu::openOfflineGenerator, this, s)); std::bind(&GuiScraperMenu::openOfflineGenerator, this, s));
s->addRow(offline_generator_row); s->addRow(offlineGeneratorRow);
mWindow->pushGui(s); mWindow->pushGui(s);
} }
@ -655,10 +658,10 @@ void GuiScraperMenu::openOfflineGenerator(GuiSettings* settings)
// Build the queue of games to process. // Build the queue of games to process.
std::queue<FileData*> gameQueue; std::queue<FileData*> gameQueue;
std::vector<SystemData*> systems = mSystems->getSelectedObjects(); std::vector<SystemData*> systems {mSystems->getSelectedObjects()};
for (auto sys = systems.cbegin(); sys != systems.cend(); ++sys) { for (auto sys = systems.cbegin(); sys != systems.cend(); ++sys) {
std::vector<FileData*> games = (*sys)->getRootFolder()->getChildrenRecursive(); std::vector<FileData*> games {(*sys)->getRootFolder()->getChildrenRecursive()};
// Sort the games by "filename, ascending". // Sort the games by "filename, ascending".
std::stable_sort(games.begin(), games.end(), FileSorts::SortTypes.at(0).comparisonFunction); std::stable_sort(games.begin(), games.end(), FileSorts::SortTypes.at(0).comparisonFunction);
@ -675,71 +678,71 @@ void GuiScraperMenu::openOtherOptions()
auto s = new GuiSettings("OTHER SETTINGS"); auto s = new GuiSettings("OTHER SETTINGS");
// Scraper region. // Scraper region.
auto scraper_region = auto scraperRegion =
std::make_shared<OptionListComponent<std::string>>(getHelpStyle(), "REGION", false); std::make_shared<OptionListComponent<std::string>>(getHelpStyle(), "REGION", false);
std::string selectedScraperRegion = Settings::getInstance()->getString("ScraperRegion"); std::string selectedScraperRegion {Settings::getInstance()->getString("ScraperRegion")};
// clang-format off // clang-format off
scraper_region->add("Europe", "eu", selectedScraperRegion == "eu"); scraperRegion->add("Europe", "eu", selectedScraperRegion == "eu");
scraper_region->add("Japan", "jp", selectedScraperRegion == "jp"); scraperRegion->add("Japan", "jp", selectedScraperRegion == "jp");
scraper_region->add("USA", "us", selectedScraperRegion == "us"); scraperRegion->add("USA", "us", selectedScraperRegion == "us");
scraper_region->add("World", "wor", selectedScraperRegion == "wor"); scraperRegion->add("World", "wor", selectedScraperRegion == "wor");
// clang-format on // clang-format on
// If there are no objects returned, then there must be a manually modified entry in the // If there are no objects returned, then there must be a manually modified entry in the
// configuration file. Simply set the region to "Europe" in this case. // configuration file. Simply set the region to "Europe" in this case.
if (scraper_region->getSelectedObjects().size() == 0) if (scraperRegion->getSelectedObjects().size() == 0)
scraper_region->selectEntry(0); scraperRegion->selectEntry(0);
s->addWithLabel("REGION", scraper_region); s->addWithLabel("REGION", scraperRegion);
s->addSaveFunc([scraper_region, s] { s->addSaveFunc([scraperRegion, s] {
if (scraper_region->getSelected() != Settings::getInstance()->getString("ScraperRegion")) { if (scraperRegion->getSelected() != Settings::getInstance()->getString("ScraperRegion")) {
Settings::getInstance()->setString("ScraperRegion", scraper_region->getSelected()); Settings::getInstance()->setString("ScraperRegion", scraperRegion->getSelected());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Regions are not supported by TheGamesDB, so gray out the option if this scraper is selected. // Regions are not supported by TheGamesDB, so gray out the option if this scraper is selected.
if (Settings::getInstance()->getString("Scraper") == "thegamesdb") { if (Settings::getInstance()->getString("Scraper") == "thegamesdb") {
scraper_region->setEnabled(false); scraperRegion->setEnabled(false);
scraper_region->setOpacity(DISABLED_OPACITY); scraperRegion->setOpacity(DISABLED_OPACITY);
scraper_region->getParent() scraperRegion->getParent()
->getChild(scraper_region->getChildIndex() - 1) ->getChild(scraperRegion->getChildIndex() - 1)
->setOpacity(DISABLED_OPACITY); ->setOpacity(DISABLED_OPACITY);
} }
// Scraper language. // Scraper language.
auto scraper_language = std::make_shared<OptionListComponent<std::string>>( auto scraperLanguage = std::make_shared<OptionListComponent<std::string>>(
getHelpStyle(), "PREFERRED LANGUAGE", false); getHelpStyle(), "PREFERRED LANGUAGE", false);
std::string selectedScraperLanguage = Settings::getInstance()->getString("ScraperLanguage"); std::string selectedScraperLanguage {Settings::getInstance()->getString("ScraperLanguage")};
// clang-format off // clang-format off
scraper_language->add("English", "en", selectedScraperLanguage == "en"); scraperLanguage->add("English", "en", selectedScraperLanguage == "en");
scraper_language->add("Español", "es", selectedScraperLanguage == "es"); scraperLanguage->add("Español", "es", selectedScraperLanguage == "es");
scraper_language->add("Português", "pt", selectedScraperLanguage == "pt"); scraperLanguage->add("Português", "pt", selectedScraperLanguage == "pt");
scraper_language->add("Français", "fr", selectedScraperLanguage == "fr"); scraperLanguage->add("Français", "fr", selectedScraperLanguage == "fr");
scraper_language->add("Deutsch", "de", selectedScraperLanguage == "de"); scraperLanguage->add("Deutsch", "de", selectedScraperLanguage == "de");
scraper_language->add("Italiano", "it", selectedScraperLanguage == "it"); scraperLanguage->add("Italiano", "it", selectedScraperLanguage == "it");
scraper_language->add("Nederlands", "nl", selectedScraperLanguage == "nl"); scraperLanguage->add("Nederlands", "nl", selectedScraperLanguage == "nl");
scraper_language->add("日本語", "ja", selectedScraperLanguage == "ja"); scraperLanguage->add("日本語", "ja", selectedScraperLanguage == "ja");
scraper_language->add("简体中文", "zh", selectedScraperLanguage == "zh"); scraperLanguage->add("简体中文", "zh", selectedScraperLanguage == "zh");
scraper_language->add("한국어", "ko", selectedScraperLanguage == "ko"); scraperLanguage->add("한국어", "ko", selectedScraperLanguage == "ko");
scraper_language->add("Русский", "ru", selectedScraperLanguage == "ru"); scraperLanguage->add("Русский", "ru", selectedScraperLanguage == "ru");
scraper_language->add("Dansk", "da", selectedScraperLanguage == "da"); scraperLanguage->add("Dansk", "da", selectedScraperLanguage == "da");
scraper_language->add("Suomi", "fi", selectedScraperLanguage == "fi"); scraperLanguage->add("Suomi", "fi", selectedScraperLanguage == "fi");
scraper_language->add("Svenska", "sv", selectedScraperLanguage == "sv"); scraperLanguage->add("Svenska", "sv", selectedScraperLanguage == "sv");
scraper_language->add("Magyar", "hu", selectedScraperLanguage == "hu"); scraperLanguage->add("Magyar", "hu", selectedScraperLanguage == "hu");
scraper_language->add("Norsk", "no", selectedScraperLanguage == "no"); scraperLanguage->add("Norsk", "no", selectedScraperLanguage == "no");
scraper_language->add("Polski", "pl", selectedScraperLanguage == "pl"); scraperLanguage->add("Polski", "pl", selectedScraperLanguage == "pl");
scraper_language->add("Čeština", "cz", selectedScraperLanguage == "cz"); scraperLanguage->add("Čeština", "cz", selectedScraperLanguage == "cz");
scraper_language->add("Slovenčina", "sk", selectedScraperLanguage == "sk"); scraperLanguage->add("Slovenčina", "sk", selectedScraperLanguage == "sk");
scraper_language->add("Türkçe", "tr", selectedScraperLanguage == "tr"); scraperLanguage->add("Türkçe", "tr", selectedScraperLanguage == "tr");
// clang-format on // clang-format on
// If there are no objects returned, then there must be a manually modified entry in the // If there are no objects returned, then there must be a manually modified entry in the
// configuration file. Simply set the language to "English" in this case. // configuration file. Simply set the language to "English" in this case.
if (scraper_language->getSelectedObjects().size() == 0) if (scraperLanguage->getSelectedObjects().size() == 0)
scraper_language->selectEntry(0); scraperLanguage->selectEntry(0);
s->addWithLabel("PREFERRED LANGUAGE", scraper_language); s->addWithLabel("PREFERRED LANGUAGE", scraperLanguage);
s->addSaveFunc([scraper_language, s] { s->addSaveFunc([scraperLanguage, s] {
if (scraper_language->getSelected() != if (scraperLanguage->getSelected() !=
Settings::getInstance()->getString("ScraperLanguage")) { Settings::getInstance()->getString("ScraperLanguage")) {
Settings::getInstance()->setString("ScraperLanguage", scraper_language->getSelected()); Settings::getInstance()->setString("ScraperLanguage", scraperLanguage->getSelected());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
@ -747,135 +750,135 @@ void GuiScraperMenu::openOtherOptions()
// Languages are not supported by TheGamesDB, so gray out the option if this scraper is // Languages are not supported by TheGamesDB, so gray out the option if this scraper is
// selected. // selected.
if (Settings::getInstance()->getString("Scraper") == "thegamesdb") { if (Settings::getInstance()->getString("Scraper") == "thegamesdb") {
scraper_language->setEnabled(false); scraperLanguage->setEnabled(false);
scraper_language->setOpacity(DISABLED_OPACITY); scraperLanguage->setOpacity(DISABLED_OPACITY);
scraper_language->getParent() scraperLanguage->getParent()
->getChild(scraper_language->getChildIndex() - 1) ->getChild(scraperLanguage->getChildIndex() - 1)
->setOpacity(DISABLED_OPACITY); ->setOpacity(DISABLED_OPACITY);
} }
// Overwrite files and data. // Overwrite files and data.
auto scraper_overwrite_data = std::make_shared<SwitchComponent>(); auto scraperOverwriteData = std::make_shared<SwitchComponent>();
scraper_overwrite_data->setState(Settings::getInstance()->getBool("ScraperOverwriteData")); scraperOverwriteData->setState(Settings::getInstance()->getBool("ScraperOverwriteData"));
s->addWithLabel("OVERWRITE FILES AND DATA", scraper_overwrite_data); s->addWithLabel("OVERWRITE FILES AND DATA", scraperOverwriteData);
s->addSaveFunc([scraper_overwrite_data, s] { s->addSaveFunc([scraperOverwriteData, s] {
if (scraper_overwrite_data->getState() != if (scraperOverwriteData->getState() !=
Settings::getInstance()->getBool("ScraperOverwriteData")) { Settings::getInstance()->getBool("ScraperOverwriteData")) {
Settings::getInstance()->setBool("ScraperOverwriteData", Settings::getInstance()->setBool("ScraperOverwriteData",
scraper_overwrite_data->getState()); scraperOverwriteData->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Halt scraping on invalid media files. // Halt scraping on invalid media files.
auto scraper_halt_on_invalid_media = std::make_shared<SwitchComponent>(); auto scraperHaltOnInvalidMedia = std::make_shared<SwitchComponent>();
scraper_halt_on_invalid_media->setState( scraperHaltOnInvalidMedia->setState(
Settings::getInstance()->getBool("ScraperHaltOnInvalidMedia")); Settings::getInstance()->getBool("ScraperHaltOnInvalidMedia"));
s->addWithLabel("HALT ON INVALID MEDIA FILES", scraper_halt_on_invalid_media); s->addWithLabel("HALT ON INVALID MEDIA FILES", scraperHaltOnInvalidMedia);
s->addSaveFunc([scraper_halt_on_invalid_media, s] { s->addSaveFunc([scraperHaltOnInvalidMedia, s] {
if (scraper_halt_on_invalid_media->getState() != if (scraperHaltOnInvalidMedia->getState() !=
Settings::getInstance()->getBool("ScraperHaltOnInvalidMedia")) { Settings::getInstance()->getBool("ScraperHaltOnInvalidMedia")) {
Settings::getInstance()->setBool("ScraperHaltOnInvalidMedia", Settings::getInstance()->setBool("ScraperHaltOnInvalidMedia",
scraper_halt_on_invalid_media->getState()); scraperHaltOnInvalidMedia->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Search using metadata names. // Search using metadata names.
auto scraper_search_metadata_name = std::make_shared<SwitchComponent>(); auto scraperSearchMetadataName = std::make_shared<SwitchComponent>();
scraper_search_metadata_name->setState( scraperSearchMetadataName->setState(
Settings::getInstance()->getBool("ScraperSearchMetadataName")); Settings::getInstance()->getBool("ScraperSearchMetadataName"));
s->addWithLabel("SEARCH USING METADATA NAMES", scraper_search_metadata_name); s->addWithLabel("SEARCH USING METADATA NAMES", scraperSearchMetadataName);
s->addSaveFunc([scraper_search_metadata_name, s] { s->addSaveFunc([scraperSearchMetadataName, s] {
if (scraper_search_metadata_name->getState() != if (scraperSearchMetadataName->getState() !=
Settings::getInstance()->getBool("ScraperSearchMetadataName")) { Settings::getInstance()->getBool("ScraperSearchMetadataName")) {
Settings::getInstance()->setBool("ScraperSearchMetadataName", Settings::getInstance()->setBool("ScraperSearchMetadataName",
scraper_search_metadata_name->getState()); scraperSearchMetadataName->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Include actual folders when scraping. // Include actual folders when scraping.
auto scraper_include_folders = std::make_shared<SwitchComponent>(); auto scraperIncludeFolders = std::make_shared<SwitchComponent>();
scraper_include_folders->setState(Settings::getInstance()->getBool("ScraperIncludeFolders")); scraperIncludeFolders->setState(Settings::getInstance()->getBool("ScraperIncludeFolders"));
s->addWithLabel("SCRAPE ACTUAL FOLDERS", scraper_include_folders); s->addWithLabel("SCRAPE ACTUAL FOLDERS", scraperIncludeFolders);
s->addSaveFunc([scraper_include_folders, s] { s->addSaveFunc([scraperIncludeFolders, s] {
if (scraper_include_folders->getState() != if (scraperIncludeFolders->getState() !=
Settings::getInstance()->getBool("ScraperIncludeFolders")) { Settings::getInstance()->getBool("ScraperIncludeFolders")) {
Settings::getInstance()->setBool("ScraperIncludeFolders", Settings::getInstance()->setBool("ScraperIncludeFolders",
scraper_include_folders->getState()); scraperIncludeFolders->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Interactive scraping. // Interactive scraping.
auto scraper_interactive = std::make_shared<SwitchComponent>(); auto scraperInteractive = std::make_shared<SwitchComponent>();
scraper_interactive->setState(Settings::getInstance()->getBool("ScraperInteractive")); scraperInteractive->setState(Settings::getInstance()->getBool("ScraperInteractive"));
s->addWithLabel("INTERACTIVE MODE", scraper_interactive); s->addWithLabel("INTERACTIVE MODE", scraperInteractive);
s->addSaveFunc([scraper_interactive, s] { s->addSaveFunc([scraperInteractive, s] {
if (scraper_interactive->getState() != if (scraperInteractive->getState() !=
Settings::getInstance()->getBool("ScraperInteractive")) { Settings::getInstance()->getBool("ScraperInteractive")) {
Settings::getInstance()->setBool("ScraperInteractive", scraper_interactive->getState()); Settings::getInstance()->setBool("ScraperInteractive", scraperInteractive->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Semi-automatic scraping. // Semi-automatic scraping.
auto scraper_semiautomatic = std::make_shared<SwitchComponent>(); auto scraperSemiautomatic = std::make_shared<SwitchComponent>();
scraper_semiautomatic->setState(Settings::getInstance()->getBool("ScraperSemiautomatic")); scraperSemiautomatic->setState(Settings::getInstance()->getBool("ScraperSemiautomatic"));
s->addWithLabel("AUTO-ACCEPT SINGLE GAME MATCHES", scraper_semiautomatic); s->addWithLabel("AUTO-ACCEPT SINGLE GAME MATCHES", scraperSemiautomatic);
s->addSaveFunc([scraper_semiautomatic, s] { s->addSaveFunc([scraperSemiautomatic, s] {
if (scraper_semiautomatic->getState() != if (scraperSemiautomatic->getState() !=
Settings::getInstance()->getBool("ScraperSemiautomatic")) { Settings::getInstance()->getBool("ScraperSemiautomatic")) {
Settings::getInstance()->setBool("ScraperSemiautomatic", Settings::getInstance()->setBool("ScraperSemiautomatic",
scraper_semiautomatic->getState()); scraperSemiautomatic->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// If interactive mode is set to off, then gray out this option. // If interactive mode is set to off, then gray out this option.
if (!Settings::getInstance()->getBool("ScraperInteractive")) { if (!Settings::getInstance()->getBool("ScraperInteractive")) {
scraper_semiautomatic->setEnabled(false); scraperSemiautomatic->setEnabled(false);
scraper_semiautomatic->setOpacity(DISABLED_OPACITY); scraperSemiautomatic->setOpacity(DISABLED_OPACITY);
scraper_semiautomatic->getParent() scraperSemiautomatic->getParent()
->getChild(scraper_semiautomatic->getChildIndex() - 1) ->getChild(scraperSemiautomatic->getChildIndex() - 1)
->setOpacity(DISABLED_OPACITY); ->setOpacity(DISABLED_OPACITY);
} }
// Respect the per-file multi-scraper exclusion flag. // Respect the per-file multi-scraper exclusion flag.
auto scraper_respect_exclusions = std::make_shared<SwitchComponent>(); auto scraperRespectExclusions = std::make_shared<SwitchComponent>();
scraper_respect_exclusions->setState( scraperRespectExclusions->setState(
Settings::getInstance()->getBool("ScraperRespectExclusions")); Settings::getInstance()->getBool("ScraperRespectExclusions"));
s->addWithLabel("RESPECT PER-FILE SCRAPER EXCLUSIONS", scraper_respect_exclusions); s->addWithLabel("RESPECT PER-FILE SCRAPER EXCLUSIONS", scraperRespectExclusions);
s->addSaveFunc([scraper_respect_exclusions, s] { s->addSaveFunc([scraperRespectExclusions, s] {
if (scraper_respect_exclusions->getState() != if (scraperRespectExclusions->getState() !=
Settings::getInstance()->getBool("ScraperRespectExclusions")) { Settings::getInstance()->getBool("ScraperRespectExclusions")) {
Settings::getInstance()->setBool("ScraperRespectExclusions", Settings::getInstance()->setBool("ScraperRespectExclusions",
scraper_respect_exclusions->getState()); scraperRespectExclusions->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Exclude files recursively for excluded folders. // Exclude files recursively for excluded folders.
auto scraper_exclude_recursively = std::make_shared<SwitchComponent>(); auto scraperExcludeRecursively = std::make_shared<SwitchComponent>();
scraper_exclude_recursively->setState( scraperExcludeRecursively->setState(
Settings::getInstance()->getBool("ScraperExcludeRecursively")); Settings::getInstance()->getBool("ScraperExcludeRecursively"));
s->addWithLabel("EXCLUDE FOLDERS RECURSIVELY", scraper_exclude_recursively); s->addWithLabel("EXCLUDE FOLDERS RECURSIVELY", scraperExcludeRecursively);
s->addSaveFunc([scraper_exclude_recursively, s] { s->addSaveFunc([scraperExcludeRecursively, s] {
if (scraper_exclude_recursively->getState() != if (scraperExcludeRecursively->getState() !=
Settings::getInstance()->getBool("ScraperExcludeRecursively")) { Settings::getInstance()->getBool("ScraperExcludeRecursively")) {
Settings::getInstance()->setBool("ScraperExcludeRecursively", Settings::getInstance()->setBool("ScraperExcludeRecursively",
scraper_exclude_recursively->getState()); scraperExcludeRecursively->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// If respecting excluded files is set to off, then gray out this option. // If respecting excluded files is set to off, then gray out this option.
if (!Settings::getInstance()->getBool("ScraperRespectExclusions")) { if (!Settings::getInstance()->getBool("ScraperRespectExclusions")) {
scraper_exclude_recursively->setEnabled(false); scraperExcludeRecursively->setEnabled(false);
scraper_exclude_recursively->setOpacity(DISABLED_OPACITY); scraperExcludeRecursively->setOpacity(DISABLED_OPACITY);
scraper_exclude_recursively->getParent() scraperExcludeRecursively->getParent()
->getChild(scraper_exclude_recursively->getChildIndex() - 1) ->getChild(scraperExcludeRecursively->getChildIndex() - 1)
->setOpacity(DISABLED_OPACITY); ->setOpacity(DISABLED_OPACITY);
} }
@ -916,15 +919,15 @@ void GuiScraperMenu::openOtherOptions()
} }
// Retry search on peer verification errors (TLS/certificate issues). // Retry search on peer verification errors (TLS/certificate issues).
auto retry_peer_verification = std::make_shared<SwitchComponent>(); auto scraperRetryPeerVerification = std::make_shared<SwitchComponent>();
retry_peer_verification->setState( scraperRetryPeerVerification->setState(
Settings::getInstance()->getBool("ScraperRetryPeerVerification")); Settings::getInstance()->getBool("ScraperRetryPeerVerification"));
s->addWithLabel("AUTO-RETRY ON PEER VERIFICATION ERRORS", retry_peer_verification); s->addWithLabel("AUTO-RETRY ON PEER VERIFICATION ERRORS", scraperRetryPeerVerification);
s->addSaveFunc([retry_peer_verification, s] { s->addSaveFunc([scraperRetryPeerVerification, s] {
if (retry_peer_verification->getState() != if (scraperRetryPeerVerification->getState() !=
Settings::getInstance()->getBool("ScraperRetryPeerVerification")) { Settings::getInstance()->getBool("ScraperRetryPeerVerification")) {
Settings::getInstance()->setBool("ScraperRetryPeerVerification", Settings::getInstance()->setBool("ScraperRetryPeerVerification",
retry_peer_verification->getState()); scraperRetryPeerVerification->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
@ -932,50 +935,50 @@ void GuiScraperMenu::openOtherOptions()
// The TLS/certificate issue is not present for TheGamesDB, so gray out the option if this // The TLS/certificate issue is not present for TheGamesDB, so gray out the option if this
// scraper is selected. // scraper is selected.
if (Settings::getInstance()->getString("Scraper") == "thegamesdb") { if (Settings::getInstance()->getString("Scraper") == "thegamesdb") {
retry_peer_verification->setEnabled(false); scraperRetryPeerVerification->setEnabled(false);
retry_peer_verification->setOpacity(DISABLED_OPACITY); scraperRetryPeerVerification->setOpacity(DISABLED_OPACITY);
retry_peer_verification->getParent() scraperRetryPeerVerification->getParent()
->getChild(retry_peer_verification->getChildIndex() - 1) ->getChild(scraperRetryPeerVerification->getChildIndex() - 1)
->setOpacity(DISABLED_OPACITY); ->setOpacity(DISABLED_OPACITY);
} }
// Switch callbacks. // Switch callbacks.
auto interactiveToggleFunc = [scraper_semiautomatic]() { auto interactiveToggleFunc = [scraperSemiautomatic]() {
if (scraper_semiautomatic->getEnabled()) { if (scraperSemiautomatic->getEnabled()) {
scraper_semiautomatic->setEnabled(false); scraperSemiautomatic->setEnabled(false);
scraper_semiautomatic->setOpacity(DISABLED_OPACITY); scraperSemiautomatic->setOpacity(DISABLED_OPACITY);
scraper_semiautomatic->getParent() scraperSemiautomatic->getParent()
->getChild(scraper_semiautomatic->getChildIndex() - 1) ->getChild(scraperSemiautomatic->getChildIndex() - 1)
->setOpacity(DISABLED_OPACITY); ->setOpacity(DISABLED_OPACITY);
} }
else { else {
scraper_semiautomatic->setEnabled(true); scraperSemiautomatic->setEnabled(true);
scraper_semiautomatic->setOpacity(1.0f); scraperSemiautomatic->setOpacity(1.0f);
scraper_semiautomatic->getParent() scraperSemiautomatic->getParent()
->getChild(scraper_semiautomatic->getChildIndex() - 1) ->getChild(scraperSemiautomatic->getChildIndex() - 1)
->setOpacity(1.0f); ->setOpacity(1.0f);
} }
}; };
auto excludeRecursivelyToggleFunc = [scraper_exclude_recursively]() { auto excludeRecursivelyToggleFunc = [scraperExcludeRecursively]() {
if (scraper_exclude_recursively->getEnabled()) { if (scraperExcludeRecursively->getEnabled()) {
scraper_exclude_recursively->setEnabled(false); scraperExcludeRecursively->setEnabled(false);
scraper_exclude_recursively->setOpacity(DISABLED_OPACITY); scraperExcludeRecursively->setOpacity(DISABLED_OPACITY);
scraper_exclude_recursively->getParent() scraperExcludeRecursively->getParent()
->getChild(scraper_exclude_recursively->getChildIndex() - 1) ->getChild(scraperExcludeRecursively->getChildIndex() - 1)
->setOpacity(DISABLED_OPACITY); ->setOpacity(DISABLED_OPACITY);
} }
else { else {
scraper_exclude_recursively->setEnabled(true); scraperExcludeRecursively->setEnabled(true);
scraper_exclude_recursively->setOpacity(1.0f); scraperExcludeRecursively->setOpacity(1.0f);
scraper_exclude_recursively->getParent() scraperExcludeRecursively->getParent()
->getChild(scraper_exclude_recursively->getChildIndex() - 1) ->getChild(scraperExcludeRecursively->getChildIndex() - 1)
->setOpacity(1.0f); ->setOpacity(1.0f);
} }
}; };
scraper_interactive->setCallback(interactiveToggleFunc); scraperInteractive->setCallback(interactiveToggleFunc);
scraper_respect_exclusions->setCallback(excludeRecursivelyToggleFunc); scraperRespectExclusions->setCallback(excludeRecursivelyToggleFunc);
mWindow->pushGui(s); mWindow->pushGui(s);
} }
@ -987,7 +990,7 @@ void GuiScraperMenu::pressedStart()
if (mScraper->getSelected() != Settings::getInstance()->getString("Scraper")) if (mScraper->getSelected() != Settings::getInstance()->getString("Scraper"))
mMenu.save(); mMenu.save();
std::vector<SystemData*> sys = mSystems->getSelectedObjects(); std::vector<SystemData*> sys {mSystems->getSelectedObjects()};
for (auto it = sys.cbegin(); it != sys.cend(); ++it) { for (auto it = sys.cbegin(); it != sys.cend(); ++it) {
if ((*it)->getPlatformIds().empty()) { if ((*it)->getPlatformIds().empty()) {
std::string warningString; std::string warningString;
@ -1019,8 +1022,8 @@ void GuiScraperMenu::start()
return; return;
} }
bool contentToScrape = false; bool contentToScrape {false};
std::string scraperService = Settings::getInstance()->getString("Scraper"); std::string scraperService {Settings::getInstance()->getString("Scraper")};
// Check if there is actually any type of content selected for scraping. // Check if there is actually any type of content selected for scraping.
do { do {
@ -1096,8 +1099,8 @@ void GuiScraperMenu::start()
new GuiMsgBox(getHelpStyle(), "ALL GAMES WERE FILTERED, NOTHING TO SCRAPE")); new GuiMsgBox(getHelpStyle(), "ALL GAMES WERE FILTERED, NOTHING TO SCRAPE"));
} }
else { else {
GuiScraperMulti* gsm = GuiScraperMulti* gsm {
new GuiScraperMulti(searches, Settings::getInstance()->getBool("ScraperInteractive")); new GuiScraperMulti(searches, Settings::getInstance()->getBool("ScraperInteractive"))};
mWindow->pushGui(gsm); mWindow->pushGui(gsm);
mMenu.setCursorToList(); mMenu.setCursorToList();
mMenu.setCursorToFirstListEntry(); mMenu.setCursorToFirstListEntry();
@ -1109,10 +1112,10 @@ std::queue<ScraperSearchParams> GuiScraperMenu::getSearches(std::vector<SystemDa
{ {
std::queue<ScraperSearchParams> queue; std::queue<ScraperSearchParams> queue;
for (auto sys = systems.cbegin(); sys != systems.cend(); ++sys) { for (auto sys = systems.cbegin(); sys != systems.cend(); ++sys) {
std::vector<FileData*> games = (*sys)->getRootFolder()->getScrapeFilesRecursive( std::vector<FileData*> games {(*sys)->getRootFolder()->getScrapeFilesRecursive(
Settings::getInstance()->getBool("ScraperIncludeFolders"), Settings::getInstance()->getBool("ScraperIncludeFolders"),
Settings::getInstance()->getBool("ScraperExcludeRecursively"), Settings::getInstance()->getBool("ScraperExcludeRecursively"),
Settings::getInstance()->getBool("ScraperRespectExclusions")); Settings::getInstance()->getBool("ScraperRespectExclusions"))};
for (auto game = games.cbegin(); game != games.cend(); ++game) { for (auto game = games.cbegin(); game != games.cend(); ++game) {
if (selector((*sys), (*game))) { if (selector((*sys), (*game))) {
ScraperSearchParams search; ScraperSearchParams search;
@ -1131,7 +1134,7 @@ void GuiScraperMenu::addEntry(const std::string& name,
bool add_arrow, bool add_arrow,
const std::function<void()>& func) const std::function<void()>& func)
{ {
std::shared_ptr<Font> font = Font::get(FONT_SIZE_MEDIUM); std::shared_ptr<Font> font {Font::get(FONT_SIZE_MEDIUM)};
// Populate the list. // Populate the list.
ComponentListRow row; ComponentListRow row;
@ -1164,7 +1167,7 @@ bool GuiScraperMenu::input(InputConfig* config, Input input)
std::vector<HelpPrompt> GuiScraperMenu::getHelpPrompts() std::vector<HelpPrompt> GuiScraperMenu::getHelpPrompts()
{ {
std::vector<HelpPrompt> prompts = mMenu.getHelpPrompts(); std::vector<HelpPrompt> prompts {mMenu.getHelpPrompts()};
prompts.push_back(HelpPrompt("b", "back")); prompts.push_back(HelpPrompt("b", "back"));
prompts.push_back(HelpPrompt("y", "start")); prompts.push_back(HelpPrompt("y", "start"));
return prompts; return prompts;

View file

@ -147,13 +147,13 @@ GuiScraperMulti::GuiScraperMulti(const std::queue<ScraperSearchParams>& searches
// Limit the width of the GUI on ultrawide monitors. The 1.778 aspect ratio value is // Limit the width of the GUI on ultrawide monitors. The 1.778 aspect ratio value is
// the 16:9 reference. // the 16:9 reference.
float aspectValue = 1.778f / Renderer::getScreenAspectRatio(); float aspectValue {1.778f / Renderer::getScreenAspectRatio()};
float width = glm::clamp(0.95f * aspectValue, 0.70f, 0.95f) * Renderer::getScreenWidth(); float width {glm::clamp(0.95f * aspectValue, 0.70f, 0.95f) * Renderer::getScreenWidth()};
float height = (mTitle->getFont()->getLetterHeight() + Renderer::getScreenHeight() * 0.0637f) + float height {(mTitle->getFont()->getLetterHeight() + Renderer::getScreenHeight() * 0.0637f) +
mSystem->getFont()->getLetterHeight() + mSystem->getFont()->getLetterHeight() +
mSubtitle->getFont()->getHeight() * 1.75f + mButtonGrid->getSize().y + mSubtitle->getFont()->getHeight() * 1.75f + mButtonGrid->getSize().y +
Font::get(FONT_SIZE_MEDIUM)->getHeight() * 7.0f; Font::get(FONT_SIZE_MEDIUM)->getHeight() * 7.0f};
// TODO: Temporary hack, see below. // TODO: Temporary hack, see below.
height -= 7.0f * Renderer::getScreenHeightModifier(); height -= 7.0f * Renderer::getScreenHeightModifier();
@ -308,6 +308,6 @@ void GuiScraperMulti::finish()
std::vector<HelpPrompt> GuiScraperMulti::getHelpPrompts() std::vector<HelpPrompt> GuiScraperMulti::getHelpPrompts()
{ {
std::vector<HelpPrompt> prompts = mGrid.getHelpPrompts(); std::vector<HelpPrompt> prompts {mGrid.getHelpPrompts()};
return prompts; return prompts;
} }

View file

@ -80,8 +80,8 @@ GuiScraperSearch::GuiScraperSearch(SearchType type, unsigned int scrapeCount)
// Metadata. // Metadata.
auto font = Font::get(FONT_SIZE_SMALL); // Placeholder, gets replaced in onSizeChanged(). auto font = Font::get(FONT_SIZE_SMALL); // Placeholder, gets replaced in onSizeChanged().
const unsigned int mdColor = 0x777777FF; const unsigned int mdColor {0x777777FF};
const unsigned int mdLblColor = 0x666666FF; const unsigned int mdLblColor {0x666666FF};
mMD_Rating = std::make_shared<RatingComponent>(); mMD_Rating = std::make_shared<RatingComponent>();
mMD_ReleaseDate = std::make_shared<DateTimeEditComponent>(); mMD_ReleaseDate = std::make_shared<DateTimeEditComponent>();
mMD_ReleaseDate->setColor(mdColor); mMD_ReleaseDate->setColor(mdColor);
@ -118,7 +118,7 @@ GuiScraperSearch::GuiScraperSearch(SearchType type, unsigned int scrapeCount)
mMD_Grid = mMD_Grid =
std::make_shared<ComponentGrid>(glm::ivec2 {2, static_cast<int>(mMD_Pairs.size() * 2 - 1)}); std::make_shared<ComponentGrid>(glm::ivec2 {2, static_cast<int>(mMD_Pairs.size() * 2 - 1)});
unsigned int i = 0; unsigned int i {0};
for (auto it = mMD_Pairs.cbegin(); it != mMD_Pairs.cend(); ++it) { for (auto it = mMD_Pairs.cbegin(); it != mMD_Pairs.cend(); ++it) {
mMD_Grid->setEntry(it->first, glm::ivec2 {0, i}, false, true); mMD_Grid->setEntry(it->first, glm::ivec2 {0, i}, false, true);
mMD_Grid->setEntry(it->second, glm::ivec2 {1, i}, false, it->resize); mMD_Grid->setEntry(it->second, glm::ivec2 {1, i}, false, it->resize);
@ -202,7 +202,7 @@ void GuiScraperSearch::onSizeChanged()
else else
mGrid.setRowHeightPerc(1, 0.505f); mGrid.setRowHeightPerc(1, 0.505f);
const float thumbnailCellScale = 0.93f; const float thumbnailCellScale {0.93f};
// Limit thumbnail size using setMaxHeight - we do this instead of letting mGrid // Limit thumbnail size using setMaxHeight - we do this instead of letting mGrid
// call setSize because it maintains the aspect ratio. // call setSize because it maintains the aspect ratio.
@ -236,12 +236,12 @@ void GuiScraperSearch::resizeMetadata()
{ {
mMD_Grid->setSize(mGrid.getColWidth(2), mGrid.getRowHeight(1)); mMD_Grid->setSize(mGrid.getColWidth(2), mGrid.getRowHeight(1));
if (mMD_Grid->getSize().y > mMD_Pairs.size()) { if (mMD_Grid->getSize().y > mMD_Pairs.size()) {
const int fontHeight = static_cast<int>(mMD_Grid->getSize().y / mMD_Pairs.size() * 0.8f); const int fontHeight {static_cast<int>(mMD_Grid->getSize().y / mMD_Pairs.size() * 0.8f)};
auto fontLbl = Font::get(fontHeight, FONT_PATH_REGULAR); auto fontLbl = Font::get(fontHeight, FONT_PATH_REGULAR);
auto fontComp = Font::get(fontHeight, FONT_PATH_LIGHT); auto fontComp = Font::get(fontHeight, FONT_PATH_LIGHT);
// Update label fonts. // Update label fonts.
float maxLblWidth = 0; float maxLblWidth {0.0f};
for (auto it = mMD_Pairs.cbegin(); it != mMD_Pairs.cend(); ++it) { for (auto it = mMD_Pairs.cbegin(); it != mMD_Pairs.cend(); ++it) {
it->first->setFont(fontLbl); it->first->setFont(fontLbl);
it->first->setSize(0, 0); it->first->setSize(0, 0);
@ -364,7 +364,7 @@ void GuiScraperSearch::onSearchDone(std::vector<ScraperSearchResult>& results)
mResultList->setLoopRows(true); mResultList->setLoopRows(true);
auto font = Font::get(FONT_SIZE_MEDIUM); auto font = Font::get(FONT_SIZE_MEDIUM);
unsigned int color = 0x777777FF; unsigned int color {0x777777FF};
if (results.empty()) { if (results.empty()) {
// Check if the scraper used is still valid. // Check if the scraper used is still valid.
if (!isValidConfiguredScraper()) { if (!isValidConfiguredScraper()) {
@ -393,7 +393,7 @@ void GuiScraperSearch::onSearchDone(std::vector<ScraperSearchResult>& results)
// If the platform IDs returned by the scraper do not match the platform IDs of the // If the platform IDs returned by the scraper do not match the platform IDs of the
// scraped game, then add the additional platform information to the end of the game // scraped game, then add the additional platform information to the end of the game
// name (within square brackets). // name (within square brackets).
std::string gameName = results.at(i).mdl.get("name"); std::string gameName {results.at(i).mdl.get("name")};
std::string otherPlatforms; std::string otherPlatforms;
// As the platform names are found via reverse lookup there could be multiple entries. // As the platform names are found via reverse lookup there could be multiple entries.
@ -530,20 +530,20 @@ void GuiScraperSearch::updateInfoPane()
i = 0; i = 0;
if (i != -1 && static_cast<int>(mScraperResults.size()) > i) { if (i != -1 && static_cast<int>(mScraperResults.size()) > i) {
ScraperSearchResult& res = mScraperResults.at(i); ScraperSearchResult& res {mScraperResults.at(i)};
mResultName->setText(Utils::String::toUpper(res.mdl.get("name"))); mResultName->setText(Utils::String::toUpper(res.mdl.get("name")));
mResultDesc->setText(Utils::String::toUpper(res.mdl.get("desc"))); mResultDesc->setText(Utils::String::toUpper(res.mdl.get("desc")));
mDescContainer->reset(); mDescContainer->reset();
mResultThumbnail->setImage(""); mResultThumbnail->setImage("");
const std::string& thumb = res.screenshotUrl.empty() ? res.coverUrl : res.screenshotUrl; const std::string& thumb {res.screenshotUrl.empty() ? res.coverUrl : res.screenshotUrl};
mScraperResults[i].thumbnailImageUrl = thumb; mScraperResults[i].thumbnailImageUrl = thumb;
// Cache the thumbnail image in mScraperResults so that we don't need to download // Cache the thumbnail image in mScraperResults so that we don't need to download
// it every time the list is scrolled back and forth. // it every time the list is scrolled back and forth.
if (mScraperResults[i].thumbnailImageData.size() > 0) { if (mScraperResults[i].thumbnailImageData.size() > 0) {
std::string content = mScraperResults[i].thumbnailImageData; std::string content {mScraperResults[i].thumbnailImageData};
mResultThumbnail->setImage(content.data(), content.length()); mResultThumbnail->setImage(content.data(), content.length());
mGrid.onSizeChanged(); // A hack to fix the thumbnail position since its size changed. mGrid.onSizeChanged(); // A hack to fix the thumbnail position since its size changed.
} }
@ -606,7 +606,7 @@ bool GuiScraperSearch::input(InputConfig* config, Input input)
// Check whether we should allow a refine of the game name. // Check whether we should allow a refine of the game name.
if (!mAcceptedResult && config->isMappedTo("y", input) && input.value != 0) { if (!mAcceptedResult && config->isMappedTo("y", input) && input.value != 0) {
bool allowRefine = false; bool allowRefine {false};
// Previously refined. // Previously refined.
if (mRefinedSearch) if (mRefinedSearch)
@ -824,7 +824,7 @@ void GuiScraperSearch::updateThumbnail()
mScraperResults[mResultList->getCursorId()].thumbnailDownloadStatus = COMPLETED; mScraperResults[mResultList->getCursorId()].thumbnailDownloadStatus = COMPLETED;
} }
// Activate the thumbnail in the GUI. // Activate the thumbnail in the GUI.
std::string content = mScraperResults[mResultList->getCursorId()].thumbnailImageData; std::string content {mScraperResults[mResultList->getCursorId()].thumbnailImageData};
if (content.size() > 0) { if (content.size() > 0) {
mResultThumbnail->setImage(content.data(), content.length()); mResultThumbnail->setImage(content.data(), content.length());
mGrid.onSizeChanged(); // A hack to fix the thumbnail position since its size changed. mGrid.onSizeChanged(); // A hack to fix the thumbnail position since its size changed.
@ -920,9 +920,9 @@ bool GuiScraperSearch::saveMetadata(const ScraperSearchResult& result,
MetaDataList& metadata, MetaDataList& metadata,
FileData* scrapedGame) FileData* scrapedGame)
{ {
bool metadataUpdated = false; bool metadataUpdated {false};
bool hasDefaultName = false; bool hasDefaultName {false};
std::vector<MetaDataDecl> mMetaDataDecl = metadata.getMDD(); std::vector<MetaDataDecl> mMetaDataDecl {metadata.getMDD()};
std::string defaultName; std::string defaultName;
// Get the default name, which is either the MAME name or the name of the physical file // Get the default name, which is either the MAME name or the name of the physical file
@ -942,7 +942,7 @@ bool GuiScraperSearch::saveMetadata(const ScraperSearchResult& result,
if (!mMetaDataDecl.at(i).shouldScrape) if (!mMetaDataDecl.at(i).shouldScrape)
continue; continue;
const std::string& key = mMetaDataDecl.at(i).key; const std::string& key {mMetaDataDecl.at(i).key};
// Skip element if the setting to not scrape metadata has been set, // Skip element if the setting to not scrape metadata has been set,
// unless its type is rating, controller or name. // unless its type is rating, controller or name.

View file

@ -153,7 +153,7 @@ void GuiScraperSingle::onSizeChanged()
mBackground.fitTo(mSize, glm::vec3 {}, glm::vec2 {-32.0f, -32.0f}); mBackground.fitTo(mSize, glm::vec3 {}, glm::vec2 {-32.0f, -32.0f});
// Add some extra margins to the game name. // Add some extra margins to the game name.
const float newSizeX = mSize.x * 0.96f; const float newSizeX {mSize.x * 0.96f};
mGameName->setSize(newSizeX, mGameName->getSize().y); mGameName->setSize(newSizeX, mGameName->getSize().y);
mGameName->setPosition((mSize.x - newSizeX) / 2.0f, 0.0f); mGameName->setPosition((mSize.x - newSizeX) / 2.0f, 0.0f);
} }
@ -185,7 +185,7 @@ void GuiScraperSingle::update(int deltaTime)
std::vector<HelpPrompt> GuiScraperSingle::getHelpPrompts() std::vector<HelpPrompt> GuiScraperSingle::getHelpPrompts()
{ {
std::vector<HelpPrompt> prompts = mGrid.getHelpPrompts(); std::vector<HelpPrompt> prompts {mGrid.getHelpPrompts()};
prompts.push_back(HelpPrompt("b", "back (cancel)")); prompts.push_back(HelpPrompt("b", "back (cancel)"));
return prompts; return prompts;

View file

@ -20,22 +20,22 @@ GuiScreensaverOptions::GuiScreensaverOptions(const std::string& title)
: GuiSettings {title} : GuiSettings {title}
{ {
// Screensaver timer. // Screensaver timer.
auto screensaver_timer = std::make_shared<SliderComponent>(0.0f, 30.0f, 1.0f, "m"); auto screensaverTimer = std::make_shared<SliderComponent>(0.0f, 30.0f, 1.0f, "m");
screensaver_timer->setValue( screensaverTimer->setValue(
static_cast<float>(Settings::getInstance()->getInt("ScreensaverTimer") / (1000 * 60))); static_cast<float>(Settings::getInstance()->getInt("ScreensaverTimer") / (1000 * 60)));
addWithLabel("START SCREENSAVER AFTER (MINUTES)", screensaver_timer); addWithLabel("START SCREENSAVER AFTER (MINUTES)", screensaverTimer);
addSaveFunc([screensaver_timer, this] { addSaveFunc([screensaverTimer, this] {
if (static_cast<int>(std::round(screensaver_timer->getValue()) * (1000 * 60)) != if (static_cast<int>(std::round(screensaverTimer->getValue()) * (1000 * 60)) !=
Settings::getInstance()->getInt("ScreensaverTimer")) { Settings::getInstance()->getInt("ScreensaverTimer")) {
Settings::getInstance()->setInt( Settings::getInstance()->setInt(
"ScreensaverTimer", "ScreensaverTimer",
static_cast<int>(std::round(screensaver_timer->getValue()) * (1000 * 60))); static_cast<int>(std::round(screensaverTimer->getValue()) * (1000 * 60)));
setNeedsSaving(); setNeedsSaving();
} }
}); });
// Screensaver type. // Screensaver type.
auto screensaver_type = std::make_shared<OptionListComponent<std::string>>( auto screensaverType = std::make_shared<OptionListComponent<std::string>>(
getHelpStyle(), "SCREENSAVER TYPE", false); getHelpStyle(), "SCREENSAVER TYPE", false);
std::vector<std::string> screensavers; std::vector<std::string> screensavers;
screensavers.push_back("dim"); screensavers.push_back("dim");
@ -43,13 +43,13 @@ GuiScreensaverOptions::GuiScreensaverOptions(const std::string& title)
screensavers.push_back("slideshow"); screensavers.push_back("slideshow");
screensavers.push_back("video"); screensavers.push_back("video");
for (auto it = screensavers.cbegin(); it != screensavers.cend(); ++it) for (auto it = screensavers.cbegin(); it != screensavers.cend(); ++it)
screensaver_type->add(*it, *it, screensaverType->add(*it, *it,
Settings::getInstance()->getString("ScreensaverType") == *it); Settings::getInstance()->getString("ScreensaverType") == *it);
addWithLabel("SCREENSAVER TYPE", screensaver_type); addWithLabel("SCREENSAVER TYPE", screensaverType);
addSaveFunc([screensaver_type, this] { addSaveFunc([screensaverType, this] {
if (screensaver_type->getSelected() != if (screensaverType->getSelected() !=
Settings::getInstance()->getString("ScreensaverType")) { Settings::getInstance()->getString("ScreensaverType")) {
if (screensaver_type->getSelected() == "video") { if (screensaverType->getSelected() == "video") {
// If before it wasn't risky but now there's a risk of problems, show warning. // If before it wasn't risky but now there's a risk of problems, show warning.
mWindow->pushGui(new GuiMsgBox( mWindow->pushGui(new GuiMsgBox(
getHelpStyle(), getHelpStyle(),
@ -59,20 +59,20 @@ GuiScreensaverOptions::GuiScreensaverOptions(const std::string& title)
"SCREENSAVER WILL DEFAULT TO 'DIM'", "SCREENSAVER WILL DEFAULT TO 'DIM'",
"OK", [] { return; }, "", nullptr, "", nullptr)); "OK", [] { return; }, "", nullptr, "", nullptr));
} }
Settings::getInstance()->setString("ScreensaverType", screensaver_type->getSelected()); Settings::getInstance()->setString("ScreensaverType", screensaverType->getSelected());
setNeedsSaving(); setNeedsSaving();
} }
}); });
// Whether to enable screensaver controls. // Whether to enable screensaver controls.
auto screensaver_controls = std::make_shared<SwitchComponent>(); auto screensaverControls = std::make_shared<SwitchComponent>();
screensaver_controls->setState(Settings::getInstance()->getBool("ScreensaverControls")); screensaverControls->setState(Settings::getInstance()->getBool("ScreensaverControls"));
addWithLabel("ENABLE SCREENSAVER CONTROLS", screensaver_controls); addWithLabel("ENABLE SCREENSAVER CONTROLS", screensaverControls);
addSaveFunc([screensaver_controls, this] { addSaveFunc([screensaverControls, this] {
if (screensaver_controls->getState() != if (screensaverControls->getState() !=
Settings::getInstance()->getBool("ScreensaverControls")) { Settings::getInstance()->getBool("ScreensaverControls")) {
Settings::getInstance()->setBool("ScreensaverControls", Settings::getInstance()->setBool("ScreensaverControls",
screensaver_controls->getState()); screensaverControls->getState());
setNeedsSaving(); setNeedsSaving();
} }
}); });
@ -105,104 +105,103 @@ void GuiScreensaverOptions::openSlideshowScreensaverOptions()
auto s = new GuiSettings("SLIDESHOW SCREENSAVER"); auto s = new GuiSettings("SLIDESHOW SCREENSAVER");
// Timer for swapping images (in seconds). // Timer for swapping images (in seconds).
auto screensaver_swap_image_timeout = auto screensaverSwapImageTimeout = std::make_shared<SliderComponent>(2.0f, 120.0f, 2.0f, "s");
std::make_shared<SliderComponent>(2.0f, 120.0f, 2.0f, "s"); screensaverSwapImageTimeout->setValue(static_cast<float>(
screensaver_swap_image_timeout->setValue(static_cast<float>(
Settings::getInstance()->getInt("ScreensaverSwapImageTimeout") / (1000))); Settings::getInstance()->getInt("ScreensaverSwapImageTimeout") / (1000)));
s->addWithLabel("SWAP IMAGES AFTER (SECONDS)", screensaver_swap_image_timeout); s->addWithLabel("SWAP IMAGES AFTER (SECONDS)", screensaverSwapImageTimeout);
s->addSaveFunc([screensaver_swap_image_timeout, s] { s->addSaveFunc([screensaverSwapImageTimeout, s] {
if (screensaver_swap_image_timeout->getValue() != if (screensaverSwapImageTimeout->getValue() !=
static_cast<float>(Settings::getInstance()->getInt("ScreensaverSwapImageTimeout") / static_cast<float>(Settings::getInstance()->getInt("ScreensaverSwapImageTimeout") /
(1000))) { (1000))) {
Settings::getInstance()->setInt( Settings::getInstance()->setInt(
"ScreensaverSwapImageTimeout", "ScreensaverSwapImageTimeout",
static_cast<int>(std::round(screensaver_swap_image_timeout->getValue()) * (1000))); static_cast<int>(std::round(screensaverSwapImageTimeout->getValue()) * (1000)));
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Stretch images to screen resolution. // Stretch images to screen resolution.
auto screensaver_stretch_images = std::make_shared<SwitchComponent>(); auto screensaverStretchImages = std::make_shared<SwitchComponent>();
screensaver_stretch_images->setState( screensaverStretchImages->setState(
Settings::getInstance()->getBool("ScreensaverStretchImages")); Settings::getInstance()->getBool("ScreensaverStretchImages"));
s->addWithLabel("STRETCH IMAGES TO SCREEN RESOLUTION", screensaver_stretch_images); s->addWithLabel("STRETCH IMAGES TO SCREEN RESOLUTION", screensaverStretchImages);
s->addSaveFunc([screensaver_stretch_images, s] { s->addSaveFunc([screensaverStretchImages, s] {
if (screensaver_stretch_images->getState() != if (screensaverStretchImages->getState() !=
Settings::getInstance()->getBool("ScreensaverStretchImages")) { Settings::getInstance()->getBool("ScreensaverStretchImages")) {
Settings::getInstance()->setBool("ScreensaverStretchImages", Settings::getInstance()->setBool("ScreensaverStretchImages",
screensaver_stretch_images->getState()); screensaverStretchImages->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Show game info overlay for slideshow screensaver. // Show game info overlay for slideshow screensaver.
auto screensaver_slideshow_game_info = std::make_shared<SwitchComponent>(); auto screensaverSlideshowGameInfo = std::make_shared<SwitchComponent>();
screensaver_slideshow_game_info->setState( screensaverSlideshowGameInfo->setState(
Settings::getInstance()->getBool("ScreensaverSlideshowGameInfo")); Settings::getInstance()->getBool("ScreensaverSlideshowGameInfo"));
s->addWithLabel("DISPLAY GAME INFO OVERLAY", screensaver_slideshow_game_info); s->addWithLabel("DISPLAY GAME INFO OVERLAY", screensaverSlideshowGameInfo);
s->addSaveFunc([screensaver_slideshow_game_info, s] { s->addSaveFunc([screensaverSlideshowGameInfo, s] {
if (screensaver_slideshow_game_info->getState() != if (screensaverSlideshowGameInfo->getState() !=
Settings::getInstance()->getBool("ScreensaverSlideshowGameInfo")) { Settings::getInstance()->getBool("ScreensaverSlideshowGameInfo")) {
Settings::getInstance()->setBool("ScreensaverSlideshowGameInfo", Settings::getInstance()->setBool("ScreensaverSlideshowGameInfo",
screensaver_slideshow_game_info->getState()); screensaverSlideshowGameInfo->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Render scanlines using a shader. // Render scanlines using a shader.
auto screensaver_slideshow_scanlines = std::make_shared<SwitchComponent>(); auto screensaverSlideshowScanlines = std::make_shared<SwitchComponent>();
screensaver_slideshow_scanlines->setState( screensaverSlideshowScanlines->setState(
Settings::getInstance()->getBool("ScreensaverSlideshowScanlines")); Settings::getInstance()->getBool("ScreensaverSlideshowScanlines"));
s->addWithLabel("RENDER SCANLINES", screensaver_slideshow_scanlines); s->addWithLabel("RENDER SCANLINES", screensaverSlideshowScanlines);
s->addSaveFunc([screensaver_slideshow_scanlines, s] { s->addSaveFunc([screensaverSlideshowScanlines, s] {
if (screensaver_slideshow_scanlines->getState() != if (screensaverSlideshowScanlines->getState() !=
Settings::getInstance()->getBool("ScreensaverSlideshowScanlines")) { Settings::getInstance()->getBool("ScreensaverSlideshowScanlines")) {
Settings::getInstance()->setBool("ScreensaverSlideshowScanlines", Settings::getInstance()->setBool("ScreensaverSlideshowScanlines",
screensaver_slideshow_scanlines->getState()); screensaverSlideshowScanlines->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Whether to use custom images. // Whether to use custom images.
auto screensaver_slideshow_custom_images = std::make_shared<SwitchComponent>(); auto screensaverSlideshowCustomImages = std::make_shared<SwitchComponent>();
screensaver_slideshow_custom_images->setState( screensaverSlideshowCustomImages->setState(
Settings::getInstance()->getBool("ScreensaverSlideshowCustomImages")); Settings::getInstance()->getBool("ScreensaverSlideshowCustomImages"));
s->addWithLabel("USE CUSTOM IMAGES", screensaver_slideshow_custom_images); s->addWithLabel("USE CUSTOM IMAGES", screensaverSlideshowCustomImages);
s->addSaveFunc([screensaver_slideshow_custom_images, s] { s->addSaveFunc([screensaverSlideshowCustomImages, s] {
if (screensaver_slideshow_custom_images->getState() != if (screensaverSlideshowCustomImages->getState() !=
Settings::getInstance()->getBool("ScreensaverSlideshowCustomImages")) { Settings::getInstance()->getBool("ScreensaverSlideshowCustomImages")) {
Settings::getInstance()->setBool("ScreensaverSlideshowCustomImages", Settings::getInstance()->setBool("ScreensaverSlideshowCustomImages",
screensaver_slideshow_custom_images->getState()); screensaverSlideshowCustomImages->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Whether to recurse the custom image directory. // Whether to recurse the custom image directory.
auto screensaver_slideshow_recurse = std::make_shared<SwitchComponent>(); auto screensaverSlideshowRecurse = std::make_shared<SwitchComponent>();
screensaver_slideshow_recurse->setState( screensaverSlideshowRecurse->setState(
Settings::getInstance()->getBool("ScreensaverSlideshowRecurse")); Settings::getInstance()->getBool("ScreensaverSlideshowRecurse"));
s->addWithLabel("CUSTOM IMAGE DIRECTORY RECURSIVE SEARCH", screensaver_slideshow_recurse); s->addWithLabel("CUSTOM IMAGE DIRECTORY RECURSIVE SEARCH", screensaverSlideshowRecurse);
s->addSaveFunc([screensaver_slideshow_recurse, s] { s->addSaveFunc([screensaverSlideshowRecurse, s] {
if (screensaver_slideshow_recurse->getState() != if (screensaverSlideshowRecurse->getState() !=
Settings::getInstance()->getBool("ScreensaverSlideshowRecurse")) { Settings::getInstance()->getBool("ScreensaverSlideshowRecurse")) {
Settings::getInstance()->setBool("ScreensaverSlideshowRecurse", Settings::getInstance()->setBool("ScreensaverSlideshowRecurse",
screensaver_slideshow_recurse->getState()); screensaverSlideshowRecurse->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Custom image directory. // Custom image directory.
auto screensaver_slideshow_image_dir = auto screensaverSlideshowImageDir =
std::make_shared<TextComponent>("", Font::get(FONT_SIZE_SMALL), 0x777777FF, ALIGN_RIGHT); std::make_shared<TextComponent>("", Font::get(FONT_SIZE_SMALL), 0x777777FF, ALIGN_RIGHT);
s->addEditableTextComponent( s->addEditableTextComponent(
"CUSTOM IMAGE DIRECTORY", screensaver_slideshow_image_dir, "CUSTOM IMAGE DIRECTORY", screensaverSlideshowImageDir,
Settings::getInstance()->getString("ScreensaverSlideshowImageDir"), Settings::getInstance()->getString("ScreensaverSlideshowImageDir"),
Settings::getInstance()->getDefaultString("ScreensaverSlideshowImageDir")); Settings::getInstance()->getDefaultString("ScreensaverSlideshowImageDir"));
s->addSaveFunc([screensaver_slideshow_image_dir, s] { s->addSaveFunc([screensaverSlideshowImageDir, s] {
if (screensaver_slideshow_image_dir->getValue() != if (screensaverSlideshowImageDir->getValue() !=
Settings::getInstance()->getString("ScreensaverSlideshowImageDir")) { Settings::getInstance()->getString("ScreensaverSlideshowImageDir")) {
Settings::getInstance()->setString("ScreensaverSlideshowImageDir", Settings::getInstance()->setString("ScreensaverSlideshowImageDir",
screensaver_slideshow_image_dir->getValue()); screensaverSlideshowImageDir->getValue());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
@ -216,73 +215,72 @@ void GuiScreensaverOptions::openVideoScreensaverOptions()
auto s = new GuiSettings("VIDEO SCREENSAVER"); auto s = new GuiSettings("VIDEO SCREENSAVER");
// Timer for swapping videos (in seconds). // Timer for swapping videos (in seconds).
auto screensaver_swap_video_timeout = auto screensaverSwapVideoTimeout = std::make_shared<SliderComponent>(0.0f, 120.0f, 2.0f, "s");
std::make_shared<SliderComponent>(0.0f, 120.0f, 2.0f, "s"); screensaverSwapVideoTimeout->setValue(static_cast<float>(
screensaver_swap_video_timeout->setValue(static_cast<float>(
Settings::getInstance()->getInt("ScreensaverSwapVideoTimeout") / (1000))); Settings::getInstance()->getInt("ScreensaverSwapVideoTimeout") / (1000)));
s->addWithLabel("SWAP VIDEOS AFTER (SECONDS)", screensaver_swap_video_timeout); s->addWithLabel("SWAP VIDEOS AFTER (SECONDS)", screensaverSwapVideoTimeout);
s->addSaveFunc([screensaver_swap_video_timeout, s] { s->addSaveFunc([screensaverSwapVideoTimeout, s] {
if (screensaver_swap_video_timeout->getValue() != if (screensaverSwapVideoTimeout->getValue() !=
static_cast<float>(Settings::getInstance()->getInt("ScreensaverSwapVideoTimeout") / static_cast<float>(Settings::getInstance()->getInt("ScreensaverSwapVideoTimeout") /
(1000))) { (1000))) {
Settings::getInstance()->setInt( Settings::getInstance()->setInt(
"ScreensaverSwapVideoTimeout", "ScreensaverSwapVideoTimeout",
static_cast<int>(std::round(screensaver_swap_video_timeout->getValue()) * (1000))); static_cast<int>(std::round(screensaverSwapVideoTimeout->getValue()) * (1000)));
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Stretch videos to screen resolution. // Stretch videos to screen resolution.
auto screensaver_stretch_videos = std::make_shared<SwitchComponent>(); auto screensaverStretchVideos = std::make_shared<SwitchComponent>();
screensaver_stretch_videos->setState( screensaverStretchVideos->setState(
Settings::getInstance()->getBool("ScreensaverStretchVideos")); Settings::getInstance()->getBool("ScreensaverStretchVideos"));
s->addWithLabel("STRETCH VIDEOS TO SCREEN RESOLUTION", screensaver_stretch_videos); s->addWithLabel("STRETCH VIDEOS TO SCREEN RESOLUTION", screensaverStretchVideos);
s->addSaveFunc([screensaver_stretch_videos, s] { s->addSaveFunc([screensaverStretchVideos, s] {
if (screensaver_stretch_videos->getState() != if (screensaverStretchVideos->getState() !=
Settings::getInstance()->getBool("ScreensaverStretchVideos")) { Settings::getInstance()->getBool("ScreensaverStretchVideos")) {
Settings::getInstance()->setBool("ScreensaverStretchVideos", Settings::getInstance()->setBool("ScreensaverStretchVideos",
screensaver_stretch_videos->getState()); screensaverStretchVideos->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Show game info overlay for video screensaver. // Show game info overlay for video screensaver.
auto screensaver_video_game_info = std::make_shared<SwitchComponent>(); auto screensaverVideoGameInfo = std::make_shared<SwitchComponent>();
screensaver_video_game_info->setState( screensaverVideoGameInfo->setState(
Settings::getInstance()->getBool("ScreensaverVideoGameInfo")); Settings::getInstance()->getBool("ScreensaverVideoGameInfo"));
s->addWithLabel("DISPLAY GAME INFO OVERLAY", screensaver_video_game_info); s->addWithLabel("DISPLAY GAME INFO OVERLAY", screensaverVideoGameInfo);
s->addSaveFunc([screensaver_video_game_info, s] { s->addSaveFunc([screensaverVideoGameInfo, s] {
if (screensaver_video_game_info->getState() != if (screensaverVideoGameInfo->getState() !=
Settings::getInstance()->getBool("ScreensaverVideoGameInfo")) { Settings::getInstance()->getBool("ScreensaverVideoGameInfo")) {
Settings::getInstance()->setBool("ScreensaverVideoGameInfo", Settings::getInstance()->setBool("ScreensaverVideoGameInfo",
screensaver_video_game_info->getState()); screensaverVideoGameInfo->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Render scanlines using a shader. // Render scanlines using a shader.
auto screensaver_video_scanlines = std::make_shared<SwitchComponent>(); auto screensaverVideoScanlines = std::make_shared<SwitchComponent>();
screensaver_video_scanlines->setState( screensaverVideoScanlines->setState(
Settings::getInstance()->getBool("ScreensaverVideoScanlines")); Settings::getInstance()->getBool("ScreensaverVideoScanlines"));
s->addWithLabel("RENDER SCANLINES", screensaver_video_scanlines); s->addWithLabel("RENDER SCANLINES", screensaverVideoScanlines);
s->addSaveFunc([screensaver_video_scanlines, s] { s->addSaveFunc([screensaverVideoScanlines, s] {
if (screensaver_video_scanlines->getState() != if (screensaverVideoScanlines->getState() !=
Settings::getInstance()->getBool("ScreensaverVideoScanlines")) { Settings::getInstance()->getBool("ScreensaverVideoScanlines")) {
Settings::getInstance()->setBool("ScreensaverVideoScanlines", Settings::getInstance()->setBool("ScreensaverVideoScanlines",
screensaver_video_scanlines->getState()); screensaverVideoScanlines->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });
// Render blur using a shader. // Render blur using a shader.
auto screensaver_video_blur = std::make_shared<SwitchComponent>(); auto screensaverVideoBlur = std::make_shared<SwitchComponent>();
screensaver_video_blur->setState(Settings::getInstance()->getBool("ScreensaverVideoBlur")); screensaverVideoBlur->setState(Settings::getInstance()->getBool("ScreensaverVideoBlur"));
s->addWithLabel("RENDER BLUR", screensaver_video_blur); s->addWithLabel("RENDER BLUR", screensaverVideoBlur);
s->addSaveFunc([screensaver_video_blur, s] { s->addSaveFunc([screensaverVideoBlur, s] {
if (screensaver_video_blur->getState() != if (screensaverVideoBlur->getState() !=
Settings::getInstance()->getBool("ScreensaverVideoBlur")) { Settings::getInstance()->getBool("ScreensaverVideoBlur")) {
Settings::getInstance()->setBool("ScreensaverVideoBlur", Settings::getInstance()->setBool("ScreensaverVideoBlur",
screensaver_video_blur->getState()); screensaverVideoBlur->getState());
s->setNeedsSaving(); s->setNeedsSaving();
} }
}); });

View file

@ -76,7 +76,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.
GamelistView* gameList = ViewController::getInstance()->getGamelistView((*it)).get(); GamelistView* gameList {ViewController::getInstance()->getGamelistView((*it)).get()};
gameList->setCursor(gameList->getFirstEntry()); gameList->setCursor(gameList->getFirstEntry());
} }
} }
@ -102,7 +102,7 @@ void GuiSettings::save()
ViewController::getInstance()->goToSystem(mGoToSystem, false); ViewController::getInstance()->goToSystem(mGoToSystem, false);
if (mNeedsGoToGroupedCollections) { if (mNeedsGoToGroupedCollections) {
bool groupedSystemExists = false; bool groupedSystemExists {false};
for (SystemData* system : SystemData::sSystemVector) { for (SystemData* system : SystemData::sSystemVector) {
if (system->getThemeFolder() == "custom-collections") { if (system->getThemeFolder() == "custom-collections") {
ViewController::getInstance()->goToSystem(system, false); ViewController::getInstance()->goToSystem(system, false);
@ -234,7 +234,7 @@ bool GuiSettings::input(InputConfig* config, Input input)
std::vector<HelpPrompt> GuiSettings::getHelpPrompts() std::vector<HelpPrompt> GuiSettings::getHelpPrompts()
{ {
std::vector<HelpPrompt> prompts = mMenu.getHelpPrompts(); std::vector<HelpPrompt> prompts {mMenu.getHelpPrompts()};
prompts.push_back(HelpPrompt("b", "back")); prompts.push_back(HelpPrompt("b", "back"));
return prompts; return prompts;
} }