Added ability to hide part of info on chart ruler when line is filtered.
This commit is contained in:
parent
0909e8bd08
commit
2479b56c3b
|
@ -1423,7 +1423,7 @@ void ChartWidget::setChartData(
|
||||||
|
|
||||||
_chartView = CreateChartView(type);
|
_chartView = CreateChartView(type);
|
||||||
_chartView->setLinesFilterController(_linesFilterController);
|
_chartView->setLinesFilterController(_linesFilterController);
|
||||||
_rulersView.setChartData(_chartData, type);
|
_rulersView.setChartData(_chartData, type, _linesFilterController);
|
||||||
|
|
||||||
setupDetails();
|
setupDetails();
|
||||||
setupFilterButtons();
|
setupFilterButtons();
|
||||||
|
|
|
@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "statistics/view/chart_rulers_view.h"
|
#include "statistics/view/chart_rulers_view.h"
|
||||||
|
|
||||||
#include "data/data_statistics_chart.h"
|
#include "data/data_statistics_chart.h"
|
||||||
|
#include "statistics/chart_lines_filter_controller.h"
|
||||||
#include "statistics/statistics_common.h"
|
#include "statistics/statistics_common.h"
|
||||||
#include "styles/style_basic.h"
|
#include "styles/style_basic.h"
|
||||||
#include "styles/style_statistics.h"
|
#include "styles/style_statistics.h"
|
||||||
|
@ -18,12 +19,16 @@ ChartRulersView::ChartRulersView() = default;
|
||||||
|
|
||||||
void ChartRulersView::setChartData(
|
void ChartRulersView::setChartData(
|
||||||
const Data::StatisticalChart &chartData,
|
const Data::StatisticalChart &chartData,
|
||||||
ChartViewType type) {
|
ChartViewType type,
|
||||||
|
std::shared_ptr<LinesFilterController> linesFilter) {
|
||||||
_rulers.clear();
|
_rulers.clear();
|
||||||
_isDouble = (type == ChartViewType::DoubleLinear);
|
_isDouble = (type == ChartViewType::DoubleLinear);
|
||||||
if (_isDouble && (chartData.lines.size() == 2)) {
|
if (_isDouble && (chartData.lines.size() == 2)) {
|
||||||
|
_linesFilter = std::move(linesFilter);
|
||||||
_leftPen = QPen(chartData.lines.front().color);
|
_leftPen = QPen(chartData.lines.front().color);
|
||||||
_rightPen = QPen(chartData.lines.back().color);
|
_rightPen = QPen(chartData.lines.back().color);
|
||||||
|
_leftLineId = chartData.lines.front().id;
|
||||||
|
_rightLineId = chartData.lines.back().id;
|
||||||
|
|
||||||
const auto firstMax = chartData.lines.front().maxValue;
|
const auto firstMax = chartData.lines.front().maxValue;
|
||||||
const auto secondMax = chartData.lines.back().maxValue;
|
const auto secondMax = chartData.lines.back().maxValue;
|
||||||
|
@ -62,10 +67,17 @@ void ChartRulersView::paintCaptionsToRulers(
|
||||||
p.setFont(st::statisticsDetailsBottomCaptionStyle.font);
|
p.setFont(st::statisticsDetailsBottomCaptionStyle.font);
|
||||||
const auto alpha = p.opacity();
|
const auto alpha = p.opacity();
|
||||||
for (auto &ruler : _rulers) {
|
for (auto &ruler : _rulers) {
|
||||||
p.setOpacity(alpha * ruler.alpha);
|
const auto rulerAlpha = alpha * ruler.alpha;
|
||||||
|
p.setOpacity(rulerAlpha);
|
||||||
for (const auto &line : ruler.lines) {
|
for (const auto &line : ruler.lines) {
|
||||||
const auto y = offset + r.height() * line.relativeValue;
|
const auto y = offset + r.height() * line.relativeValue;
|
||||||
p.setPen(_isDouble ? _leftPen : st::windowSubTextFg);
|
const auto hasLinesFilter = _isDouble && _linesFilter;
|
||||||
|
if (hasLinesFilter) {
|
||||||
|
p.setPen(_leftPen);
|
||||||
|
p.setOpacity(rulerAlpha * _linesFilter->alpha(_leftLineId));
|
||||||
|
} else {
|
||||||
|
p.setPen(st::windowSubTextFg);
|
||||||
|
}
|
||||||
p.drawText(
|
p.drawText(
|
||||||
0,
|
0,
|
||||||
y,
|
y,
|
||||||
|
@ -74,7 +86,8 @@ void ChartRulersView::paintCaptionsToRulers(
|
||||||
: _isLeftLineScaled
|
: _isLeftLineScaled
|
||||||
? line.scaledLineCaption
|
? line.scaledLineCaption
|
||||||
: line.caption);
|
: line.caption);
|
||||||
if (_isDouble) {
|
if (hasLinesFilter) {
|
||||||
|
p.setOpacity(rulerAlpha * _linesFilter->alpha(_rightLineId));
|
||||||
p.setPen(_rightPen);
|
p.setPen(_rightPen);
|
||||||
p.drawText(
|
p.drawText(
|
||||||
r.width() - line.rightCaptionWidth,
|
r.width() - line.rightCaptionWidth,
|
||||||
|
|
|
@ -17,6 +17,7 @@ namespace Statistic {
|
||||||
|
|
||||||
enum class ChartViewType;
|
enum class ChartViewType;
|
||||||
struct Limits;
|
struct Limits;
|
||||||
|
class LinesFilterController;
|
||||||
|
|
||||||
struct ChartRulersView final {
|
struct ChartRulersView final {
|
||||||
public:
|
public:
|
||||||
|
@ -24,7 +25,8 @@ public:
|
||||||
|
|
||||||
void setChartData(
|
void setChartData(
|
||||||
const Data::StatisticalChart &chartData,
|
const Data::StatisticalChart &chartData,
|
||||||
ChartViewType type);
|
ChartViewType type,
|
||||||
|
std::shared_ptr<LinesFilterController> linesFilter);
|
||||||
|
|
||||||
void paintRulers(QPainter &p, const QRect &r);
|
void paintRulers(QPainter &p, const QRect &r);
|
||||||
|
|
||||||
|
@ -38,9 +40,13 @@ private:
|
||||||
bool _isDouble = false;
|
bool _isDouble = false;
|
||||||
QPen _leftPen;
|
QPen _leftPen;
|
||||||
QPen _rightPen;
|
QPen _rightPen;
|
||||||
|
int _leftLineId = 0;
|
||||||
|
int _rightLineId = 0;
|
||||||
|
|
||||||
std::vector<ChartRulersData> _rulers;
|
std::vector<ChartRulersData> _rulers;
|
||||||
|
|
||||||
|
std::shared_ptr<LinesFilterController> _linesFilter;
|
||||||
|
|
||||||
float64 _scaledLineRatio = 0.;
|
float64 _scaledLineRatio = 0.;
|
||||||
bool _isLeftLineScaled = false;
|
bool _isLeftLineScaled = false;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue