From 6f6f3882571d78f7a385f1129109370dbaded346 Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Fri, 18 Mar 2022 22:16:53 +0100 Subject: [PATCH] Added RatingComponent support to the system view. --- es-app/src/views/SystemView.cpp | 72 ++++++++++++++++++++++++++++++--- es-app/src/views/SystemView.h | 8 ++-- es-core/src/ThemeData.cpp | 1 + 3 files changed, 72 insertions(+), 9 deletions(-) diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 25036aba0..4c29629bc 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -487,8 +487,17 @@ void SystemView::populate() elements.dateTimeComponents.back()->setDefaultZIndex(40.0f); elements.dateTimeComponents.back()->applyTheme( theme, "system", element.first, ThemeFlags::ALL); + elements.dateTimeComponents.back()->setVisible(false); elements.children.emplace_back(elements.dateTimeComponents.back().get()); } + else if (element.second.type == "rating") { + elements.ratingComponents.emplace_back(std::make_unique()); + elements.ratingComponents.back()->setDefaultZIndex(45.0f); + elements.ratingComponents.back()->applyTheme(theme, "system", element.first, + ThemeFlags::ALL); + elements.ratingComponents.back()->setVisible(false); + elements.children.emplace_back(elements.ratingComponents.back().get()); + } } } else { @@ -631,8 +640,10 @@ void SystemView::updateGameSelectors() } else { for (auto& selector : mSystemElements[cursor].gameSelectors) { - if (selector->getSelectorName() == imageSelector) + if (selector->getSelectorName() == imageSelector) { gameSelector = selector.get(); + break; + } } if (gameSelector == nullptr) { LOG(LogWarning) @@ -745,8 +756,10 @@ void SystemView::updateGameSelectors() } else { for (auto& selector : mSystemElements[cursor].gameSelectors) { - if (selector->getSelectorName() == videoSelector) + if (selector->getSelectorName() == videoSelector) { gameSelector = selector.get(); + break; + } } if (gameSelector == nullptr) { LOG(LogWarning) @@ -781,8 +794,10 @@ void SystemView::updateGameSelectors() } else { for (auto& selector : mSystemElements[cursor].gameSelectors) { - if (selector->getSelectorName() == imageSelector) + if (selector->getSelectorName() == imageSelector) { gameSelector = selector.get(); + break; + } } if (gameSelector == nullptr) { LOG(LogWarning) @@ -894,8 +909,10 @@ void SystemView::updateGameSelectors() } else { for (auto& selector : mSystemElements[cursor].gameSelectors) { - if (selector->getSelectorName() == textSelector) + if (selector->getSelectorName() == textSelector) { gameSelector = selector.get(); + break; + } } if (gameSelector == nullptr) { LOG(LogWarning) @@ -956,8 +973,10 @@ void SystemView::updateGameSelectors() } else { for (auto& selector : mSystemElements[cursor].gameSelectors) { - if (selector->getSelectorName() == dateTimeSelector) + if (selector->getSelectorName() == dateTimeSelector) { gameSelector = selector.get(); + break; + } } if (gameSelector == nullptr) { LOG(LogWarning) << "SystemView::updateGameSelectors(): Invalid gameselector \"" @@ -973,6 +992,7 @@ void SystemView::updateGameSelectors() gameSelector->refreshGames(); std::vector games {gameSelector->getGames()}; if (!games.empty()) { + dateTime->setVisible(true); const std::string metadata {dateTime->getThemeMetadata()}; if (metadata == "releasedate") dateTime->setValue(games.front()->metadata.get("releasedate")); @@ -980,7 +1000,47 @@ void SystemView::updateGameSelectors() dateTime->setValue(games.front()->metadata.get("lastplayed")); } else { - dateTime->setValue("19700101T000000"); + dateTime->setVisible(false); + } + } + + for (auto& rating : mSystemElements[cursor].ratingComponents) { + GameSelectorComponent* gameSelector {nullptr}; + if (multipleSelectors) { + const std::string& ratingSelector {rating->getThemeGameSelector()}; + if (ratingSelector == "") { + gameSelector = mSystemElements[cursor].gameSelectors.front().get(); + LOG(LogWarning) + << "SystemView::updateGameSelectors(): Multiple gameselector " + "elements defined but rating element does not state which one to " + "use, selecting first entry"; + } + else { + for (auto& selector : mSystemElements[cursor].gameSelectors) { + if (selector->getSelectorName() == ratingSelector) { + gameSelector = selector.get(); + break; + } + } + if (gameSelector == nullptr) { + LOG(LogWarning) + << "SystemView::updateGameSelectors(): Invalid gameselector \"" + << ratingSelector << "\" defined for rating element, selecting first entry"; + gameSelector = mSystemElements[cursor].gameSelectors.front().get(); + } + } + } + else { + gameSelector = mSystemElements[cursor].gameSelectors.front().get(); + } + gameSelector->refreshGames(); + std::vector games {gameSelector->getGames()}; + if (!games.empty()) { + rating->setVisible(true); + rating->setValue(games.front()->metadata.get("rating")); + } + else { + rating->setVisible(false); } } } diff --git a/es-app/src/views/SystemView.h b/es-app/src/views/SystemView.h index a42e860e9..143f06b20 100644 --- a/es-app/src/views/SystemView.h +++ b/es-app/src/views/SystemView.h @@ -18,6 +18,7 @@ #include "components/GIFAnimComponent.h" #include "components/GameSelectorComponent.h" #include "components/LottieAnimComponent.h" +#include "components/RatingComponent.h" #include "components/TextComponent.h" #include "components/TextListComponent.h" #include "components/VideoFFmpegComponent.h" @@ -35,13 +36,14 @@ struct SystemViewElements { std::vector legacyExtras; std::vector children; - std::vector> gameCountComponents; - std::vector> textComponents; - std::vector> dateTimeComponents; std::vector> imageComponents; std::vector> videoComponents; std::vector> lottieAnimComponents; std::vector> GIFAnimComponents; + std::vector> gameCountComponents; + std::vector> textComponents; + std::vector> dateTimeComponents; + std::vector> ratingComponents; }; class SystemView : public GuiComponent diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 258ce3c3e..95ec529ae 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -229,6 +229,7 @@ std::map> {"origin", NORMALIZED_PAIR}, {"rotation", FLOAT}, {"rotationOrigin", NORMALIZED_PAIR}, + {"gameselector", STRING}, {"color", COLOR}, {"filledPath", PATH}, {"unfilledPath", PATH},