Improve Time Played formatting (#7971)

esm4-texture
Alexei Kotov 8 months ago
parent 4a3dbb5a80
commit 6bf0d17aa2

@ -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

@ -13,18 +13,14 @@
#include <osgDB/ReadFile>
#include <components/debug/debuglog.hpp>
#include <components/myguiplatform/myguitexture.hpp>
#include <components/misc/strings/lower.hpp>
#include <components/settings/values.hpp>
#include <components/esm3/loadclas.hpp>
#include <components/files/conversion.hpp>
#include <components/files/memorystream.hpp>
#include <components/l10n/manager.hpp>
#include <components/misc/strings/lower.hpp>
#include <components/misc/timeconvert.hpp>
#include <components/esm3/loadclas.hpp>
#include <components/myguiplatform/myguitexture.hpp>
#include <components/settings/values.hpp>
#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<int>(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)

Loading…
Cancel
Save