diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2021-01-05 12:11:46 +0100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2021-01-06 12:31:22 -0800 |
commit | 4ab9f1c6b06204285267e79b5ed993514e0213e2 (patch) | |
tree | 5e8e792ec76639b1493937d6401bb92d05dabb1c /stats/barseries.cpp | |
parent | 598058e21ebc93834b71cc1b66e881451a596ce6 (diff) | |
download | subsurface-4ab9f1c6b06204285267e79b5ed993514e0213e2.tar.gz |
statistics: replace QtCharts' axes
Replace by custom implementation, with the ultimate goal to
remove the QtCharts module. This doesn't yet display axis
titles or a grid.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'stats/barseries.cpp')
-rw-r--r-- | stats/barseries.cpp | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/stats/barseries.cpp b/stats/barseries.cpp index 2f7f9cca9..5727745a0 100644 --- a/stats/barseries.cpp +++ b/stats/barseries.cpp @@ -114,8 +114,7 @@ void BarSeries::BarLabel::highlight(bool highlight, int bin_nr, int binCount) item->setBrush(brush); } -void BarSeries::BarLabel::updatePosition(QtCharts::QChart *chart, QtCharts::QAbstractSeries *series, - bool horizontal, bool center, const QRectF &rect, +void BarSeries::BarLabel::updatePosition(bool horizontal, bool center, const QRectF &rect, int bin_nr, int binCount) { if (!horizontal) { @@ -191,7 +190,7 @@ BarSeries::Item::Item(QtCharts::QChart *chart, BarSeries *series, double lowerBo item.item->setZValue(ZValues::series); item.highlight(false, binCount); } - updatePosition(chart, series, horizontal, stacked, binCount); + updatePosition(series, horizontal, stacked, binCount); } void BarSeries::Item::highlight(int subitem, bool highlight, int binCount) @@ -214,7 +213,7 @@ void BarSeries::SubItem::highlight(bool highlight, int binCount) label->highlight(highlight, bin_nr, binCount); } -void BarSeries::Item::updatePosition(QtCharts::QChart *chart, BarSeries *series, bool horizontal, bool stacked, int binCount) +void BarSeries::Item::updatePosition(BarSeries *series, bool horizontal, bool stacked, int binCount) { if (subitems.empty()) return; @@ -233,28 +232,28 @@ void BarSeries::Item::updatePosition(QtCharts::QChart *chart, BarSeries *series, for (SubItem &item: subitems) { int idx = stacked ? 0 : item.bin_nr; double center = (idx + 0.5) * fullSubWidth + from; - item.updatePosition(chart, series, horizontal, stacked, center - subWidth / 2.0, center + subWidth / 2.0, binCount); + item.updatePosition(series, horizontal, stacked, center - subWidth / 2.0, center + subWidth / 2.0, binCount); } rect = subitems[0].item->rect(); for (auto it = std::next(subitems.begin()); it != subitems.end(); ++it) rect = rect.united(it->item->rect()); } -void BarSeries::SubItem::updatePosition(QtCharts::QChart *chart, BarSeries *series, bool horizontal, bool stacked, +void BarSeries::SubItem::updatePosition(BarSeries *series, bool horizontal, bool stacked, double from, double to, int binCount) { QPointF topLeft, bottomRight; if (horizontal) { - topLeft = chart->mapToPosition(QPointF(value_from, to), series); - bottomRight = chart->mapToPosition(QPointF(value_to, from), series); + topLeft = series->toScreen(QPointF(value_from, to)); + bottomRight = series->toScreen(QPointF(value_to, from)); } else { - topLeft = chart->mapToPosition(QPointF(from, value_to), series); - bottomRight = chart->mapToPosition(QPointF(to, value_from), series); + topLeft = series->toScreen(QPointF(from, value_to)); + bottomRight = series->toScreen(QPointF(to, value_from)); } QRectF rect(topLeft, bottomRight); item->setRect(rect); if (label) - label->updatePosition(chart, series, horizontal, stacked, rect, bin_nr, binCount); + label->updatePosition(horizontal, stacked, rect, bin_nr, binCount); } std::vector<BarSeries::SubItem> BarSeries::makeSubItems(const std::vector<std::pair<double, std::vector<QString>>> &values) const @@ -265,9 +264,9 @@ std::vector<BarSeries::SubItem> BarSeries::makeSubItems(const std::vector<std::p int bin_nr = 0; for (auto &[v, label]: values) { if (v > 0.0) { - res.push_back({ std::make_unique<QGraphicsRectItem>(chart()), {}, from, from + v, bin_nr }); + res.push_back({ std::make_unique<QGraphicsRectItem>(chart), {}, from, from + v, bin_nr }); if (!label.empty()) - res.back().label = std::make_unique<BarLabel>(chart(), label, bin_nr, binCount()); + res.back().label = std::make_unique<BarLabel>(chart, label, bin_nr, binCount()); } if (stacked) from += v; @@ -293,15 +292,14 @@ void BarSeries::add_item(double lowerBound, double upperBound, std::vector<SubIt // Don't add empty items, as that messes with the "find item under mouse" routine. if (subitems.empty()) return; - items.emplace_back(chart(), this, lowerBound, upperBound, std::move(subitems), binName, res, + items.emplace_back(chart, this, lowerBound, upperBound, std::move(subitems), binName, res, total, horizontal, stacked, binCount()); } void BarSeries::updatePositions() { - QtCharts::QChart *c = chart(); for (Item &item: items) - item.updatePosition(c, this, horizontal, stacked, binCount()); + item.updatePosition(this, horizontal, stacked, binCount()); } // Attention: this supposes that items are sorted by position and no bar is inside another bar! @@ -405,7 +403,7 @@ bool BarSeries::hover(QPointF pos) Item &item = items[highlighted.bar]; item.highlight(index.subitem, true, binCount()); if (!information) - information.reset(new InformationBox(chart())); + information.reset(new InformationBox(chart)); information->setText(makeInfo(item, highlighted.subitem), pos); } else { information.reset(); |