mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
statistics: render title
Since we want to get rid of QtCharts, we have to render our own title. Simply keep around a QGraphicsSimpleTextItem and put in the center of the chart. Define the borders to the scene as constants. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
ccc95f938a
commit
90129aa26f
2 changed files with 36 additions and 2 deletions
|
@ -18,11 +18,14 @@
|
||||||
#include <QAbstractSeries>
|
#include <QAbstractSeries>
|
||||||
#include <QChart>
|
#include <QChart>
|
||||||
#include <QGraphicsSceneHoverEvent>
|
#include <QGraphicsSceneHoverEvent>
|
||||||
|
#include <QGraphicsSimpleTextItem>
|
||||||
#include <QLocale>
|
#include <QLocale>
|
||||||
|
|
||||||
// Constants that control the graph layouts
|
// Constants that control the graph layouts
|
||||||
static const QColor quartileMarkerColor(Qt::red);
|
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"));
|
static const QUrl urlStatsView = QUrl(QStringLiteral("qrc:/qml/statsview.qml"));
|
||||||
|
|
||||||
|
@ -77,6 +80,9 @@ StatsView::StatsView(QWidget *parent) : QQuickWidget(parent),
|
||||||
chart->setAcceptHoverEvents(true);
|
chart->setAcceptHoverEvents(true);
|
||||||
chart->legend()->setVisible(false);
|
chart->legend()->setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QFont font;
|
||||||
|
titleFont = QFont(font.family(), font.pointSize(), QFont::Light); // Make configurable
|
||||||
}
|
}
|
||||||
|
|
||||||
StatsView::~StatsView()
|
StatsView::~StatsView()
|
||||||
|
@ -95,6 +101,7 @@ void StatsView::plotAreaChanged(const QRectF &)
|
||||||
marker.updatePosition();
|
marker.updatePosition();
|
||||||
if (legend)
|
if (legend)
|
||||||
legend->resize();
|
legend->resize();
|
||||||
|
updateTitlePos();
|
||||||
}
|
}
|
||||||
|
|
||||||
void StatsView::replotIfVisible()
|
void StatsView::replotIfVisible()
|
||||||
|
@ -136,7 +143,21 @@ T *StatsView::createSeries(Args&&... args)
|
||||||
|
|
||||||
void StatsView::setTitle(const QString &s)
|
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>
|
template <typename T, class... Args>
|
||||||
|
@ -166,11 +187,18 @@ void StatsView::reset()
|
||||||
lineMarkers.clear();
|
lineMarkers.clear();
|
||||||
chart->removeAllSeries();
|
chart->removeAllSeries();
|
||||||
axes.clear();
|
axes.clear();
|
||||||
|
title.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void StatsView::plot(const StatsState &stateIn)
|
void StatsView::plot(const StatsState &stateIn)
|
||||||
{
|
{
|
||||||
state = stateIn;
|
state = stateIn;
|
||||||
|
plotChart();
|
||||||
|
plotAreaChanged(chart->plotArea());
|
||||||
|
}
|
||||||
|
|
||||||
|
void StatsView::plotChart()
|
||||||
|
{
|
||||||
if (!chart || !state.var1)
|
if (!chart || !state.var1)
|
||||||
return;
|
return;
|
||||||
reset();
|
reset();
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "statsstate.h"
|
#include "statsstate.h"
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <QFont>
|
||||||
#include <QQuickWidget>
|
#include <QQuickWidget>
|
||||||
|
|
||||||
struct dive;
|
struct dive;
|
||||||
|
@ -17,6 +18,7 @@ namespace QtCharts {
|
||||||
class QChart;
|
class QChart;
|
||||||
}
|
}
|
||||||
class QGraphicsLineItem;
|
class QGraphicsLineItem;
|
||||||
|
class QGraphicsSimpleTextItem;
|
||||||
class StatsSeries;
|
class StatsSeries;
|
||||||
class CategoryAxis;
|
class CategoryAxis;
|
||||||
class CountAxis;
|
class CountAxis;
|
||||||
|
@ -74,6 +76,8 @@ private:
|
||||||
const StatsVariable *categoryVariable, const StatsBinner *categoryBinner, const StatsVariable *valueVariable);
|
const StatsVariable *categoryVariable, const StatsBinner *categoryBinner, const StatsVariable *valueVariable);
|
||||||
void plotScatter(const std::vector<dive *> &dives, const StatsVariable *categoryVariable, const StatsVariable *valueVariable);
|
void plotScatter(const std::vector<dive *> &dives, const StatsVariable *categoryVariable, const StatsVariable *valueVariable);
|
||||||
void setTitle(const QString &);
|
void setTitle(const QString &);
|
||||||
|
void updateTitlePos(); // After resizing, set title to correct position
|
||||||
|
void plotChart();
|
||||||
|
|
||||||
template <typename T, class... Args>
|
template <typename T, class... Args>
|
||||||
T *createSeries(Args&&... args);
|
T *createSeries(Args&&... args);
|
||||||
|
@ -115,11 +119,13 @@ private:
|
||||||
|
|
||||||
StatsState state;
|
StatsState state;
|
||||||
QtCharts::QChart *chart;
|
QtCharts::QChart *chart;
|
||||||
|
QFont titleFont;
|
||||||
std::vector<std::unique_ptr<StatsAxis>> axes;
|
std::vector<std::unique_ptr<StatsAxis>> axes;
|
||||||
std::vector<std::unique_ptr<StatsSeries>> series;
|
std::vector<std::unique_ptr<StatsSeries>> series;
|
||||||
std::unique_ptr<Legend> legend;
|
std::unique_ptr<Legend> legend;
|
||||||
std::vector<QuartileMarker> quartileMarkers;
|
std::vector<QuartileMarker> quartileMarkers;
|
||||||
std::vector<LineMarker> lineMarkers;
|
std::vector<LineMarker> lineMarkers;
|
||||||
|
std::unique_ptr<QGraphicsSimpleTextItem> title;
|
||||||
StatsSeries *highlightedSeries;
|
StatsSeries *highlightedSeries;
|
||||||
|
|
||||||
// This is unfortunate: we can't derive from QChart, because the chart is allocated by QML.
|
// This is unfortunate: we can't derive from QChart, because the chart is allocated by QML.
|
||||||
|
|
Loading…
Add table
Reference in a new issue