Added RatingComponent support to the system view.

This commit is contained in:
Leon Styhre 2022-03-18 22:16:53 +01:00
parent 44fe2f8fe7
commit 6f6f388257
3 changed files with 72 additions and 9 deletions

View file

@ -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<RatingComponent>());
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<FileData*> 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<FileData*> games {gameSelector->getGames()};
if (!games.empty()) {
rating->setVisible(true);
rating->setValue(games.front()->metadata.get("rating"));
}
else {
rating->setVisible(false);
}
}
}

View file

@ -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<GuiComponent*> legacyExtras;
std::vector<GuiComponent*> children;
std::vector<std::unique_ptr<TextComponent>> gameCountComponents;
std::vector<std::unique_ptr<TextComponent>> textComponents;
std::vector<std::unique_ptr<DateTimeComponent>> dateTimeComponents;
std::vector<std::unique_ptr<ImageComponent>> imageComponents;
std::vector<std::unique_ptr<VideoFFmpegComponent>> videoComponents;
std::vector<std::unique_ptr<LottieAnimComponent>> lottieAnimComponents;
std::vector<std::unique_ptr<GIFAnimComponent>> GIFAnimComponents;
std::vector<std::unique_ptr<TextComponent>> gameCountComponents;
std::vector<std::unique_ptr<TextComponent>> textComponents;
std::vector<std::unique_ptr<DateTimeComponent>> dateTimeComponents;
std::vector<std::unique_ptr<RatingComponent>> ratingComponents;
};
class SystemView : public GuiComponent

View file

@ -229,6 +229,7 @@ std::map<std::string, std::map<std::string, ThemeData::ElementPropertyType>>
{"origin", NORMALIZED_PAIR},
{"rotation", FLOAT},
{"rotationOrigin", NORMALIZED_PAIR},
{"gameselector", STRING},
{"color", COLOR},
{"filledPath", PATH},
{"unfilledPath", PATH},