Skip to content

Commit de9cae8

Browse files
committed
Fix some faulty behavior of charts
Remaining: Inconsistent behaviour of scatter chart for empty (no peak/elev. gain) ascents with no pinned ranges
1 parent b020d58 commit de9cae8

File tree

2 files changed

+81
-38
lines changed

2 files changed

+81
-38
lines changed

src/stats/chart.cpp

+56-22
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,15 @@ void YearBarChart::setup()
509509
}
510510

511511
/**
512-
* Removes all data from the chart.
512+
* Clears displayed data from the chart.
513+
*/
514+
void YearBarChart::clear()
515+
{
516+
barSet->remove(0, barSet->count());
517+
}
518+
519+
/**
520+
* Removes all data, resets pinned ranges and shows an empty chart.
513521
*/
514522
void YearBarChart::reset()
515523
{
@@ -537,7 +545,7 @@ void YearBarChart::reset()
537545
void YearBarChart::updateData(const QList<qreal>& newData, int newMinYear, int newMaxYear, qreal newMaxY, bool setPinnedRanges)
538546
{
539547
if (newData.isEmpty()) {
540-
reset();
548+
clear();
541549
return;
542550
}
543551
assert(newData.size() == newMaxYear - newMinYear + 1);
@@ -659,7 +667,24 @@ void TimeScatterChart::setup()
659667
}
660668

661669
/**
662-
* Removes all data from the chart.
670+
* Clears displayed data from the chart.
671+
*/
672+
void TimeScatterChart::clear()
673+
{
674+
for (const bool p : {false, true}) {
675+
xySeries[p].clear();
676+
}
677+
if (!usePinnedRanges) {
678+
resetAxis(xAxisDate);
679+
resetAxis(xAxisValue, false);
680+
xAxisDate->setVisible(false);
681+
xAxisValue->setVisible(true);
682+
resetAxis(yAxis, true);
683+
}
684+
}
685+
686+
/**
687+
* Removes all data, resets pinned ranges and shows an empty chart.
663688
*/
664689
void TimeScatterChart::reset()
665690
{
@@ -675,6 +700,7 @@ void TimeScatterChart::reset()
675700
}
676701
resetAxis(xAxisDate);
677702
resetAxis(xAxisValue, false);
703+
xAxisDate->setVisible(false);
678704
xAxisValue->setVisible(true);
679705
resetAxis(yAxis, true);
680706
}
@@ -700,7 +726,7 @@ void TimeScatterChart::updateData(const QList<DateScatterSeries*>& seriesData, Q
700726
}
701727
}
702728
if (noData && !usePinnedRanges) {
703-
reset();
729+
clear();
704730
return;
705731
}
706732
assert(newMinDate <= newMaxDate);
@@ -739,7 +765,7 @@ void TimeScatterChart::updateData(const QList<DateScatterSeries*>& seriesData, Q
739765
xySeries[p].clear();
740766
}
741767
for (const DateScatterSeries* const series : seriesData) {
742-
QScatterSeries* newQSeries[2] {
768+
QScatterSeries* newQSeries[2] = {
743769
createScatterSeries(series->name, series->markerSize, series->markerShape),
744770
createScatterSeries(series->name, series->markerSize, series->markerShape)
745771
};
@@ -870,7 +896,16 @@ void HistogramChart::setup()
870896
}
871897

872898
/**
873-
* Removes all data from the chart.
899+
* Clears displayed data from the chart.
900+
*/
901+
void HistogramChart::clear()
902+
{
903+
barSet->remove(0, barSet->count());
904+
if (!usePinnedRanges) resetAxis(yAxis, true);
905+
}
906+
907+
/**
908+
* Removes all data, resets pinned ranges and shows an empty chart.
874909
*/
875910
void HistogramChart::reset()
876911
{
@@ -914,13 +949,7 @@ void HistogramChart::updateData(QList<qreal> histogramData, qreal newMaxY, bool
914949
}
915950
}
916951
if (noData) {
917-
if (usePinnedRanges) {
918-
barSet->remove(0, barSet->count());
919-
hasData = true;
920-
updateView();
921-
} else {
922-
reset();
923-
}
952+
clear();
924953
return;
925954
}
926955
assert(newMaxY > 0);
@@ -1003,7 +1032,18 @@ void TopNChart::setup()
10031032
}
10041033

10051034
/**
1006-
* Removes all data from the chart.
1035+
* Clears displayed data from the chart.
1036+
*/
1037+
void TopNChart::clear()
1038+
{
1039+
barSet->remove(0, barSet->count());
1040+
xAxis->setCategories({ "" }); // Workaround for QTBUG-122408: Category names not actually cleared properly by clear()
1041+
xAxis->clear();
1042+
resetAxis(yAxis, true);
1043+
}
1044+
1045+
/**
1046+
* Removes all data, resets pinned ranges and shows an empty chart.
10071047
*/
10081048
void TopNChart::reset()
10091049
{
@@ -1012,7 +1052,7 @@ void TopNChart::reset()
10121052
xAxis->clear();
10131053
hasData = false;
10141054
for (const bool p : {false, true}) {
1015-
maxY [p] = 0;
1055+
maxY[p] = 0;
10161056
}
10171057
resetAxis(yAxis, true);
10181058
}
@@ -1032,13 +1072,7 @@ void TopNChart::updateData(QStringList labels, QList<qreal> values, bool setPinn
10321072
assert(labels.size() <= n);
10331073

10341074
if (values.isEmpty()) {
1035-
if (usePinnedRanges) {
1036-
barSet->remove(0, barSet->count());
1037-
hasData = true;
1038-
updateView();
1039-
} else {
1040-
reset();
1041-
}
1075+
clear();
10421076
return;
10431077
}
10441078

src/stats/chart.h

+25-16
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,12 @@ class Chart : public QObject
129129
virtual void setup() = 0;
130130

131131
/**
132-
* Removes all data from the chart.
132+
* Clears displayed data from the chart.
133+
*/
134+
virtual void clear() = 0;
135+
136+
/**
137+
* Removes all data, resets pinned ranges and shows an empty chart.
133138
*/
134139
virtual void reset() = 0;
135140

@@ -144,26 +149,26 @@ class Chart : public QObject
144149

145150
protected:
146151
// Setup helpers
147-
static QChart* createChart(const QString& title);
148-
static QValueAxis* createValueXAxis(QChart* chart, const QString& title = QString());
149-
static QDateTimeAxis* createDateXAxis(QChart* chart, const QString& title = QString());
150-
static QBarCategoryAxis* createBarCategoryXAxis(QChart* chart, const Qt::AlignmentFlag alignment = Qt::AlignBottom, const QStringList& categories = {});
151-
static QValueAxis* createValueYAxis(QChart* chart, const QString& title = QString(), const Qt::AlignmentFlag alignment = Qt::AlignLeft);
152-
static SizeResponsiveChartView* createChartView(QChart* chart, int minimumHeight = -1);
152+
static QChart* createChart (const QString& title);
153+
static QValueAxis* createValueXAxis (QChart* chart, const QString& title = QString());
154+
static QDateTimeAxis* createDateXAxis (QChart* chart, const QString& title = QString());
155+
static QBarCategoryAxis* createBarCategoryXAxis (QChart* chart, const Qt::AlignmentFlag alignment = Qt::AlignBottom, const QStringList& categories = {});
156+
static QValueAxis* createValueYAxis (QChart* chart, const QString& title = QString(), const Qt::AlignmentFlag alignment = Qt::AlignLeft);
157+
static SizeResponsiveChartView* createChartView (QChart* chart, int minimumHeight = -1);
153158

154-
static QBarSeries* createBarSeries(QChart* chart, QAbstractAxis* xAxis, QAbstractAxis* yAxis, bool showValueLabels = true);
155-
static QHorizontalBarSeries* createHorizontalBarSeries(QChart* chart, QAbstractAxis* xAxis, QAbstractAxis* yAxis, bool showValueLabels = true);
156-
static QBarSet* createBarSet(const QString& name, QAbstractBarSeries* series);
159+
static QBarSeries* createBarSeries (QChart* chart, QAbstractAxis* xAxis, QAbstractAxis* yAxis, bool showValueLabels = true);
160+
static QHorizontalBarSeries* createHorizontalBarSeries (QChart* chart, QAbstractAxis* xAxis, QAbstractAxis* yAxis, bool showValueLabels = true);
161+
static QBarSet* createBarSet (const QString& name, QAbstractBarSeries* series);
157162

158163
// Update helpers
159164
public:
160-
static QLineSeries* createLineSeries(const QString& name = QString());
161-
static QScatterSeries* createScatterSeries(const QString& name, int markerSize = -1, QScatterSeries::MarkerShape markerShape = QScatterSeries::MarkerShape(-1));
165+
static QLineSeries* createLineSeries (const QString& name = QString());
166+
static QScatterSeries* createScatterSeries (const QString& name, int markerSize = -1, QScatterSeries::MarkerShape markerShape = QScatterSeries::MarkerShape(-1));
162167
protected:
163-
static void adjustAxis(QValueAxis* axis, qreal minValue, qreal maxValue, int chartSize, qreal rangeBufferFactor = 0, bool isTimeAxis = false);
164-
static void adjustAxis(QDateTimeAxis* axis, QDate minValue, QDate maxValue, int chartSize);
165-
static void resetAxis(QValueAxis* axis, bool show0Tick);
166-
static void resetAxis(QDateTimeAxis* axis);
168+
static void adjustAxis (QValueAxis* axis, qreal minValue, qreal maxValue, int chartSize, qreal rangeBufferFactor = 0, bool isTimeAxis = false);
169+
static void adjustAxis (QDateTimeAxis* axis, QDate minValue, QDate maxValue, int chartSize);
170+
static void resetAxis (QValueAxis* axis, bool show0Tick);
171+
static void resetAxis (QDateTimeAxis* axis);
167172
};
168173

169174

@@ -200,6 +205,7 @@ class YearBarChart : public Chart
200205
virtual ~YearBarChart();
201206

202207
virtual void setup() override;
208+
virtual void clear() override;
203209
virtual void reset() override;
204210
void updateData(const QList<qreal>& newData, int newMinYear, int newMaxYear, qreal newMaxY, bool setPinnedRanges);
205211
virtual void updateView() override;
@@ -267,6 +273,7 @@ class TimeScatterChart : public Chart
267273
virtual ~TimeScatterChart();
268274

269275
virtual void setup() override;
276+
virtual void clear() override;
270277
virtual void reset() override;
271278
void updateData(const QList<DateScatterSeries*>& seriesData, QDate newMinDate, QDate newMaxDate, qreal newMaxY, bool setPinnedRanges);
272279
virtual void updateView() override;
@@ -310,6 +317,7 @@ class HistogramChart : public Chart
310317
virtual ~HistogramChart();
311318

312319
virtual void setup() override;
320+
virtual void clear() override;
313321
virtual void reset() override;
314322
int classifyValue(int value) const;
315323
void updateData(QList<qreal> histogramData, qreal newMaxY, bool setPinnedRanges);
@@ -349,6 +357,7 @@ class TopNChart : public Chart
349357
virtual ~TopNChart();
350358

351359
virtual void setup() override;
360+
virtual void clear() override;
352361
virtual void reset() override;
353362
void updateData(QStringList labels, QList<qreal> values, bool setPinnedRanges);
354363
virtual void updateView() override;

0 commit comments

Comments
 (0)