diff options
-rw-r--r-- | stats/statsview.cpp | 32 | ||||
-rw-r--r-- | stats/statsview.h | 6 |
2 files changed, 36 insertions, 2 deletions
diff --git a/stats/statsview.cpp b/stats/statsview.cpp index 11dbe4f1e..6709407e1 100644 --- a/stats/statsview.cpp +++ b/stats/statsview.cpp @@ -18,11 +18,14 @@ #include <QAbstractSeries> #include <QChart> #include <QGraphicsSceneHoverEvent> +#include <QGraphicsSimpleTextItem> #include <QLocale> // Constants that control the graph layouts static const QColor quartileMarkerColor(Qt::red); -static const double quartileMarkerSize = 15; +static const double quartileMarkerSize = 15.0; +static const double sceneBorder = 5.0; // Border between scene edges and statitistics view +static const double titleBorder = 2.0; // Border between title and chart static const QUrl urlStatsView = QUrl(QStringLiteral("qrc:/qml/statsview.qml")); @@ -77,6 +80,9 @@ StatsView::StatsView(QWidget *parent) : QQuickWidget(parent), chart->setAcceptHoverEvents(true); chart->legend()->setVisible(false); } + + QFont font; + titleFont = QFont(font.family(), font.pointSize(), QFont::Light); // Make configurable } StatsView::~StatsView() @@ -95,6 +101,7 @@ void StatsView::plotAreaChanged(const QRectF &) marker.updatePosition(); if (legend) legend->resize(); + updateTitlePos(); } void StatsView::replotIfVisible() @@ -136,7 +143,21 @@ T *StatsView::createSeries(Args&&... args) void StatsView::setTitle(const QString &s) { - chart->setTitle(s); + if (s.isEmpty()) { + title.reset(); + return; + } + title = std::make_unique<QGraphicsSimpleTextItem>(s, chart); + title->setFont(titleFont); +} + +void StatsView::updateTitlePos() +{ + if (!title) + return; + QRectF rect = chart->plotArea(); + title->setPos((rect.width() - title->boundingRect().width()) / 2.0, + sceneBorder); } template <typename T, class... Args> @@ -166,11 +187,18 @@ void StatsView::reset() lineMarkers.clear(); chart->removeAllSeries(); axes.clear(); + title.reset(); } void StatsView::plot(const StatsState &stateIn) { state = stateIn; + plotChart(); + plotAreaChanged(chart->plotArea()); +} + +void StatsView::plotChart() +{ if (!chart || !state.var1) return; reset(); diff --git a/stats/statsview.h b/stats/statsview.h index 1ef88b96c..fac61a55b 100644 --- a/stats/statsview.h +++ b/stats/statsview.h @@ -4,6 +4,7 @@ #include "statsstate.h" #include <memory> +#include <QFont> #include <QQuickWidget> struct dive; @@ -17,6 +18,7 @@ namespace QtCharts { class QChart; } class QGraphicsLineItem; +class QGraphicsSimpleTextItem; class StatsSeries; class CategoryAxis; class CountAxis; @@ -74,6 +76,8 @@ private: const StatsVariable *categoryVariable, const StatsBinner *categoryBinner, const StatsVariable *valueVariable); void plotScatter(const std::vector<dive *> &dives, const StatsVariable *categoryVariable, const StatsVariable *valueVariable); void setTitle(const QString &); + void updateTitlePos(); // After resizing, set title to correct position + void plotChart(); template <typename T, class... Args> T *createSeries(Args&&... args); @@ -115,11 +119,13 @@ private: StatsState state; QtCharts::QChart *chart; + QFont titleFont; std::vector<std::unique_ptr<StatsAxis>> axes; std::vector<std::unique_ptr<StatsSeries>> series; std::unique_ptr<Legend> legend; std::vector<QuartileMarker> quartileMarkers; std::vector<LineMarker> lineMarkers; + std::unique_ptr<QGraphicsSimpleTextItem> title; StatsSeries *highlightedSeries; // This is unfortunate: we can't derive from QChart, because the chart is allocated by QML. |