diff --git a/Telegram/SourceFiles/statistics/chart_widget.cpp b/Telegram/SourceFiles/statistics/chart_widget.cpp index 823481e6b7..4e7534d9a3 100644 --- a/Telegram/SourceFiles/statistics/chart_widget.cpp +++ b/Telegram/SourceFiles/statistics/chart_widget.cpp @@ -1156,20 +1156,12 @@ void ChartWidget::setupDetails() { _chartArea->update(); return; } - const auto maxAbsoluteValue = [&] { - auto maxValue = ChartValue(0); - for (const auto &l : _chartData.lines) { - maxValue = std::max(l.maxValue, maxValue); - } - return maxValue; - }(); if (hasLocalZoom()) { _zoomEnabled = true; } _details.widget = base::make_unique_q( this, _chartData, - maxAbsoluteValue, _zoomEnabled); _details.widget->setClickedCallback([=] { const auto index = _details.widget->xIndex(); diff --git a/Telegram/SourceFiles/statistics/widgets/point_details_widget.cpp b/Telegram/SourceFiles/statistics/widgets/point_details_widget.cpp index f96c4ac3a5..dc0668e9aa 100644 --- a/Telegram/SourceFiles/statistics/widgets/point_details_widget.cpp +++ b/Telegram/SourceFiles/statistics/widgets/point_details_widget.cpp @@ -130,7 +130,6 @@ void PaintDetails( PointDetailsWidget::PointDetailsWidget( not_null parent, const Data::StatisticalChart &chartData, - float64 maxAbsoluteValue, bool zoomEnabled) : Ui::AbstractButton(parent) , _zoomEnabled(zoomEnabled) @@ -173,12 +172,44 @@ PointDetailsWidget::PointDetailsWidget( return 0; }(); - const auto calculatedWidth = [&]{ + const auto hasUsdLine = (_chartData.currencyRate != 0) + && (_chartData.currency != Data::StatisticalCurrency::None) + && (_chartData.lines.size() == 1); + + const auto maxValueTextWidth = [&] { + if (hasUsdLine) { + auto maxValueWidth = 0; + const auto multiplier = float64(Data::kEarnMultiplier); + for (const auto &value : _chartData.lines.front().y) { + const auto valueText = Ui::Text::String( + _textStyle, + QString::number(value / multiplier)); + const auto usdText = Ui::Text::String( + _textStyle, + Info::ChannelEarn::ToUsd(value, _chartData.currencyRate)); + const auto width = std::max( + usdText.maxWidth(), + valueText.maxWidth()); + if (width > maxValueWidth) { + maxValueWidth = width; + } + } + return maxValueWidth; + } + const auto maxAbsoluteValue = [&] { + auto maxValue = ChartValue(0); + for (const auto &l : _chartData.lines) { + maxValue = std::max(l.maxValue, maxValue); + } + return maxValue; + }(); const auto maxValueText = Ui::Text::String( _textStyle, Lang::FormatCountDecimal(maxAbsoluteValue)); - const auto maxValueTextWidth = maxValueText.maxWidth(); + return maxValueText.maxWidth(); + }(); + const auto calculatedWidth = [&]{ auto maxNameTextWidth = 0; for (const auto &dataLine : _chartData.lines) { const auto maxNameText = Ui::Text::String( @@ -187,6 +218,19 @@ PointDetailsWidget::PointDetailsWidget( maxNameTextWidth = std::max( maxNameText.maxWidth(), maxNameTextWidth); + if (hasUsdLine) { + const auto currency = Ui::Text::String( + _textStyle, + tr::lng_channel_earn_chart_overriden_detail_currency( + tr::now)); + const auto usd = Ui::Text::String( + _textStyle, + tr::lng_channel_earn_chart_overriden_detail_usd( + tr::now)); + maxNameTextWidth = std::max( + std::max(currency.maxWidth(), usd.maxWidth()), + maxNameTextWidth); + } } { const auto maxHeaderText = Ui::Text::String( diff --git a/Telegram/SourceFiles/statistics/widgets/point_details_widget.h b/Telegram/SourceFiles/statistics/widgets/point_details_widget.h index cdf6b3bd3a..7d6a39b907 100644 --- a/Telegram/SourceFiles/statistics/widgets/point_details_widget.h +++ b/Telegram/SourceFiles/statistics/widgets/point_details_widget.h @@ -27,7 +27,6 @@ public: PointDetailsWidget( not_null parent, const Data::StatisticalChart &chartData, - float64 maxAbsoluteValue, bool zoomEnabled); [[nodiscard]] int xIndex() const;