From fcc6aaed91a1911f6f89ae8ba0e3ed511f6eaf08 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 27 Jul 2023 07:05:33 +0300 Subject: [PATCH] Added mouse click support to point details widget. --- Telegram/SourceFiles/statistics/chart_widget.cpp | 3 ++- .../SourceFiles/statistics/point_details_widget.cpp | 12 ++++++++++-- .../SourceFiles/statistics/point_details_widget.h | 8 +++++--- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Telegram/SourceFiles/statistics/chart_widget.cpp b/Telegram/SourceFiles/statistics/chart_widget.cpp index de6314361..99de6a696 100644 --- a/Telegram/SourceFiles/statistics/chart_widget.cpp +++ b/Telegram/SourceFiles/statistics/chart_widget.cpp @@ -1125,7 +1125,8 @@ void ChartWidget::setupDetails() { _details.widget = base::make_unique_q( this, _chartData, - maxAbsoluteValue); + maxAbsoluteValue, + false); _details.widget->shownValue( ) | rpl::start_with_next([=](bool shown) { diff --git a/Telegram/SourceFiles/statistics/point_details_widget.cpp b/Telegram/SourceFiles/statistics/point_details_widget.cpp index 8e985688b..0b412de86 100644 --- a/Telegram/SourceFiles/statistics/point_details_widget.cpp +++ b/Telegram/SourceFiles/statistics/point_details_widget.cpp @@ -33,8 +33,10 @@ namespace { PointDetailsWidget::PointDetailsWidget( not_null parent, const Data::StatisticalChart &chartData, - float64 maxAbsoluteValue) -: Ui::RpWidget(parent) + float64 maxAbsoluteValue, + bool zoomEnabled) +: Ui::AbstractButton(parent) +, _zoomEnabled(zoomEnabled) , _chartData(chartData) , _textStyle(st::statisticsDetailsPopupStyle) , _headerStyle(st::semiboldTextStyle) @@ -118,6 +120,7 @@ void PointDetailsWidget::setXIndex(int xIndex) { _lines.clear(); _lines.reserve(_chartData.lines.size()); + auto hasPositiveValues = false; for (const auto &dataLine : _chartData.lines) { auto textLine = Line(); textLine.id = dataLine.id; @@ -125,9 +128,14 @@ void PointDetailsWidget::setXIndex(int xIndex) { textLine.value.setText( _textStyle, QString("%L1").arg(dataLine.y[xIndex])); + hasPositiveValues |= (dataLine.y[xIndex] > 0); textLine.valueColor = QColor(dataLine.color); _lines.push_back(std::move(textLine)); } + const auto clickable = _zoomEnabled && hasPositiveValues; + setAttribute( + Qt::WA_TransparentForMouseEvents, + !clickable); } void PointDetailsWidget::setAlpha(float64 alpha) { diff --git a/Telegram/SourceFiles/statistics/point_details_widget.h b/Telegram/SourceFiles/statistics/point_details_widget.h index 136ea7e57..fc27008ea 100644 --- a/Telegram/SourceFiles/statistics/point_details_widget.h +++ b/Telegram/SourceFiles/statistics/point_details_widget.h @@ -8,16 +8,17 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #pragma once #include "data/data_statistics.h" -#include "ui/rp_widget.h" +#include "ui/abstract_button.h" namespace Statistic { -class PointDetailsWidget : public Ui::RpWidget { +class PointDetailsWidget : public Ui::AbstractButton { public: PointDetailsWidget( not_null parent, const Data::StatisticalChart &chartData, - float64 maxAbsoluteValue); + float64 maxAbsoluteValue, + bool zoomEnabled); [[nodiscard]] int xIndex() const; void setXIndex(int xIndex); @@ -28,6 +29,7 @@ protected: void paintEvent(QPaintEvent *e) override; private: + const bool _zoomEnabled; const Data::StatisticalChart &_chartData; const style::TextStyle &_textStyle; const style::TextStyle &_headerStyle;