From 6bf0d17aa21d8dffac0ffe8b076d715bca72dafa Mon Sep 17 00:00:00 2001 From: Alexei Kotov Date: Thu, 16 May 2024 23:12:32 +0300 Subject: [PATCH] Improve Time Played formatting (#7971) --- CHANGELOG.md | 1 + apps/openmw/mwgui/savegamedialog.cpp | 43 ++++++++++++++-------------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ffa4a7261..5a9ef09d84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -234,6 +234,7 @@ Feature #7936: Scalable icons in Qt applications Feature #7953: Allow to change SVG icons colors depending on color scheme Feature #7964: Add Lua read access to MW Dialogue records + Feature #7971: Make save's Time Played value display hours instead of days Task #5896: Do not use deprecated MyGUI properties Task #6085: Replace boost::filesystem with std::filesystem Task #6149: Dehardcode Lua API_REVISION diff --git a/apps/openmw/mwgui/savegamedialog.cpp b/apps/openmw/mwgui/savegamedialog.cpp index 8330c23f2f..a5f869c4da 100644 --- a/apps/openmw/mwgui/savegamedialog.cpp +++ b/apps/openmw/mwgui/savegamedialog.cpp @@ -13,18 +13,14 @@ #include #include - -#include - -#include - -#include - +#include #include #include +#include +#include #include - -#include +#include +#include #include "../mwbase/environment.hpp" #include "../mwbase/statemanager.hpp" @@ -367,18 +363,23 @@ namespace MWGui std::string formatTimeplayed(const double timeInSeconds) { - int timePlayed = (int)floor(timeInSeconds); - int days = timePlayed / 60 / 60 / 24; - int hours = (timePlayed / 60 / 60) % 24; - int minutes = (timePlayed / 60) % 60; - int seconds = timePlayed % 60; - - std::stringstream stream; - stream << std::setfill('0') << std::setw(2) << days << ":"; - stream << std::setfill('0') << std::setw(2) << hours << ":"; - stream << std::setfill('0') << std::setw(2) << minutes << ":"; - stream << std::setfill('0') << std::setw(2) << seconds; - return stream.str(); + auto l10n = MWBase::Environment::get().getL10nManager()->getContext("Interface"); + int duration = static_cast(timeInSeconds); + if (duration <= 0) + return l10n->formatMessage("DurationSecond", { "seconds" }, { 0 }); + + std::string result; + int hours = duration / 3600; + int minutes = (duration / 60) % 60; + int seconds = duration % 60; + if (hours) + result += l10n->formatMessage("DurationHour", { "hours" }, { hours }); + if (minutes) + result += l10n->formatMessage("DurationMinute", { "minutes" }, { minutes }); + if (seconds) + result += l10n->formatMessage("DurationSecond", { "seconds" }, { seconds }); + + return result; } void SaveGameDialog::onSlotSelected(MyGUI::ListBox* sender, size_t pos)