diff --git a/Telegram/SourceFiles/data/data_statistics.h b/Telegram/SourceFiles/data/data_statistics.h index dd2337590..1f26bd891 100644 --- a/Telegram/SourceFiles/data/data_statistics.h +++ b/Telegram/SourceFiles/data/data_statistics.h @@ -62,7 +62,7 @@ struct StatisticalChart { QString name; int maxValue = 0; int minValue = std::numeric_limits::max(); - int colorKey = 0; + QString colorKey; QColor color; QColor colorDark; }; diff --git a/Telegram/SourceFiles/statistics/chart_widget.cpp b/Telegram/SourceFiles/statistics/chart_widget.cpp index 3971bbc2f..8857e8e4c 100644 --- a/Telegram/SourceFiles/statistics/chart_widget.cpp +++ b/Telegram/SourceFiles/statistics/chart_widget.cpp @@ -40,6 +40,32 @@ inline float64 InterpolationRatio(float64 from, float64 to, float64 result) { return (result - from) / (to - from); }; +void FillLineColorsByKey(Data::StatisticalChart &chartData) { + for (auto &line : chartData.lines) { + if (line.colorKey == u"BLUE"_q) { + line.color = st::statisticsChartLineBlue->c; + } else if (line.colorKey == u"GREEN"_q) { + line.color = st::statisticsChartLineGreen->c; + } else if (line.colorKey == u"RED"_q) { + line.color = st::statisticsChartLineRed->c; + } else if (line.colorKey == u"GOLDEN"_q) { + line.color = st::statisticsChartLineGolden->c; + } else if (line.colorKey == u"LIGHTBLUE"_q) { + line.color = st::statisticsChartLineLightblue->c; + } else if (line.colorKey == u"LIGHTGREEN"_q) { + line.color = st::statisticsChartLineLightgreen->c; + } else if (line.colorKey == u"ORANGE"_q) { + line.color = st::statisticsChartLineOrange->c; + } else if (line.colorKey == u"INDIGO"_q) { + line.color = st::statisticsChartLineIndigo->c; + } else if (line.colorKey == u"PURPLE"_q) { + line.color = st::statisticsChartLinePurple->c; + } else if (line.colorKey == u"CYAN"_q) { + line.color = st::statisticsChartLineCyan->c; + } + } +} + [[nodiscard]] QString HeaderRightInfo( const Data::StatisticalChart &chartData, const Limits &limits) { @@ -816,6 +842,12 @@ ChartWidget::ChartWidget(not_null parent) _footer->update(); } }) { + style::PaletteChanged( + ) | rpl::start_with_next([=] { + if (_chartData) { + FillLineColorsByKey(_chartData); + } + }, lifetime()); setupChartArea(); setupFooter(); } @@ -1366,6 +1398,7 @@ void ChartWidget::setChartData( Data::StatisticalChart chartData, ChartViewType type) { _chartData = std::move(chartData); + FillLineColorsByKey(_chartData); _chartView = CreateChartView(type); _chartView->setLinesFilterController(_linesFilterController); diff --git a/Telegram/SourceFiles/statistics/statistics_data_deserialize.cpp b/Telegram/SourceFiles/statistics/statistics_data_deserialize.cpp index a1c90e435..c85709dec 100644 --- a/Telegram/SourceFiles/statistics/statistics_data_deserialize.cpp +++ b/Telegram/SourceFiles/statistics/statistics_data_deserialize.cpp @@ -80,7 +80,7 @@ Data::StatisticalChart StatisticalChartFromJSON(const QByteArray &json) { const auto match = QRegularExpression(colorPattern).match( colorIt->toString()); if (match.hasMatch()) { - // const auto colorKey = match.captured(1); + line.colorKey = match.captured(1); line.color = QColor(match.captured(2)); } }