Added DateTimeComponent support to SystemView.

This commit is contained in:
Leon Styhre 2022-02-20 15:49:32 +01:00
parent 73e0e59b8c
commit e92af0548c
3 changed files with 59 additions and 2 deletions

View file

@ -457,6 +457,14 @@ void SystemView::populate()
elements.children.emplace_back(elements.textComponents.back().get());
}
}
else if (element.second.type == "datetime") {
elements.dateTimeComponents.emplace_back(
std::make_unique<DateTimeComponent>());
elements.dateTimeComponents.back()->setDefaultZIndex(40.0f);
elements.dateTimeComponents.back()->applyTheme(
theme, "system", element.first, ThemeFlags::ALL);
elements.children.emplace_back(elements.dateTimeComponents.back().get());
}
}
}
else {
@ -857,15 +865,19 @@ void SystemView::updateGameSelectors()
gameSelector = mSystemElements[cursor].gameSelectors.front().get();
LOG(LogWarning) << "SystemView::updateGameSelectors(): Multiple gameselector "
"elements defined but text element does not state which one to "
"use, so selecting first entry";
"use, selecting first entry";
}
else {
for (auto& selector : mSystemElements[cursor].gameSelectors) {
if (selector->getSelectorName() == textSelector)
gameSelector = selector.get();
}
if (gameSelector == nullptr)
if (gameSelector == nullptr) {
LOG(LogWarning)
<< "SystemView::updateGameSelectors(): Invalid gameselector \""
<< textSelector << "\" defined for text element, selecting first entry";
gameSelector = mSystemElements[cursor].gameSelectors.front().get();
}
}
}
else {
@ -904,6 +916,48 @@ void SystemView::updateGameSelectors()
text->setValue("");
}
}
for (auto& dateTime : mSystemElements[cursor].dateTimeComponents) {
if (dateTime->getThemeMetadata() == "")
continue;
GameSelectorComponent* gameSelector {nullptr};
if (multipleSelectors) {
const std::string& dateTimeSelector {dateTime->getThemeGameSelector()};
if (dateTimeSelector == "") {
gameSelector = mSystemElements[cursor].gameSelectors.front().get();
LOG(LogWarning) << "SystemView::updateGameSelectors(): Multiple gameselector "
"elements defined but datetime element does not state which one "
"to use, selecting first entry";
}
else {
for (auto& selector : mSystemElements[cursor].gameSelectors) {
if (selector->getSelectorName() == dateTimeSelector)
gameSelector = selector.get();
}
if (gameSelector == nullptr) {
LOG(LogWarning) << "SystemView::updateGameSelectors(): Invalid gameselector \""
<< dateTimeSelector
<< "\" defined for datetime 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()) {
const std::string metadata {dateTime->getThemeMetadata()};
if (metadata == "releasedate")
dateTime->setValue(games.front()->metadata.get("releasedate"));
if (metadata == "lastplayed")
dateTime->setValue(games.front()->metadata.get("lastplayed"));
}
else {
dateTime->setValue("19700101T000000");
}
}
}
void SystemView::legacyApplyTheme(const std::shared_ptr<ThemeData>& theme)

View file

@ -14,6 +14,7 @@
#include "Sound.h"
#include "SystemData.h"
#include "components/CarouselComponent.h"
#include "components/DateTimeComponent.h"
#include "components/GameSelectorComponent.h"
#include "components/LottieComponent.h"
#include "components/TextComponent.h"
@ -34,6 +35,7 @@ struct SystemViewElements {
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<LottieComponent>> lottieAnimComponents;

View file

@ -188,6 +188,7 @@ std::map<std::string, std::map<std::string, ThemeData::ElementPropertyType>>
{"rotation", FLOAT},
{"rotationOrigin", NORMALIZED_PAIR},
{"metadata", STRING},
{"gameselector", STRING},
{"fontPath", PATH},
{"fontSize", FLOAT},
{"horizontalAlignment", STRING},