From b24be50afe6317f4c6cc526ff577a5b604238011 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 27 Jul 2023 06:12:05 +0300 Subject: [PATCH] Improved format of timestamp in point details widget. --- .../statistics/point_details_widget.cpp | 28 +++++++++++++++++-- .../statistics/point_details_widget.h | 2 ++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/Telegram/SourceFiles/statistics/point_details_widget.cpp b/Telegram/SourceFiles/statistics/point_details_widget.cpp index 9824ca293..8e985688b 100644 --- a/Telegram/SourceFiles/statistics/point_details_widget.cpp +++ b/Telegram/SourceFiles/statistics/point_details_widget.cpp @@ -14,6 +14,21 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_statistics.h" namespace Statistic { +namespace { + +[[nodiscard]] QString FormatTimestamp( + float64 timestamp, + const QString &longFormat, + const QString &shortFormat) { + const auto dateTime = QDateTime::fromSecsSinceEpoch(timestamp / 1000); + if (dateTime.toUTC().time().hour() || dateTime.toUTC().time().minute()) { + return QLocale().toString(dateTime, longFormat); + } else { + return QLocale().toString(dateTime.date(), shortFormat); + } +} + +} // namespace PointDetailsWidget::PointDetailsWidget( not_null parent, @@ -22,7 +37,9 @@ PointDetailsWidget::PointDetailsWidget( : Ui::RpWidget(parent) , _chartData(chartData) , _textStyle(st::statisticsDetailsPopupStyle) -, _headerStyle(st::semiboldTextStyle) { +, _headerStyle(st::semiboldTextStyle) +, _longFormat(u"ddd, MMM d hh:mm"_q) +, _shortFormat(u"ddd, MMM d"_q) { const auto calculatedWidth = [&]{ const auto maxValueText = Ui::Text::String( _textStyle, @@ -41,7 +58,10 @@ PointDetailsWidget::PointDetailsWidget( { const auto maxHeaderText = Ui::Text::String( _headerStyle, - _chartData.getDayString(0)); + FormatTimestamp( + _chartData.x.front(), + _longFormat, + _shortFormat)); maxNameTextWidth = std::max( maxHeaderText.maxWidth() + st::statisticsDetailsPopupPadding.left(), @@ -92,7 +112,9 @@ void PointDetailsWidget::setXIndex(int xIndex) { if (xIndex < 0) { return; } - _header.setText(_headerStyle, _chartData.getDayString(xIndex)); + _header.setText( + _headerStyle, + FormatTimestamp(_chartData.x[xIndex], _longFormat, _shortFormat)); _lines.clear(); _lines.reserve(_chartData.lines.size()); diff --git a/Telegram/SourceFiles/statistics/point_details_widget.h b/Telegram/SourceFiles/statistics/point_details_widget.h index 2ab2873fd..136ea7e57 100644 --- a/Telegram/SourceFiles/statistics/point_details_widget.h +++ b/Telegram/SourceFiles/statistics/point_details_widget.h @@ -31,6 +31,8 @@ private: const Data::StatisticalChart &_chartData; const style::TextStyle &_textStyle; const style::TextStyle &_headerStyle; + const QString _longFormat; + const QString _shortFormat; Ui::Text::String _header; [[nodiscard]] int lineYAt(int index) const;