summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomi Korpipää <tomi.korpipaa@digia.com>2014-01-24 08:26:09 +0200
committerTomi Korpipää <tomi.korpipaa@digia.com>2014-01-24 08:27:55 +0200
commit8802cf50ef296ce8cc56a2ba97fa237237f62d15 (patch)
treefafd0f2fb8a99b13ccfb85128f547668c9240c31
parentf5a67847b72cf372f076657405769b024d5f6756 (diff)
Multiseries bars uniform scaling support added
Task-number: QTRD-2805 Change-Id: I7172662b2bed0a222ceb7560718450bcabd2879d Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
-rw-r--r--examples/bars/graphmodifier.cpp8
-rw-r--r--examples/qmlbars/qml/qmlbars/main.qml16
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc6
-rw-r--r--src/datavisualization/engine/bars3dcontroller.cpp18
-rw-r--r--src/datavisualization/engine/bars3dcontroller_p.h12
-rw-r--r--src/datavisualization/engine/bars3drenderer.cpp45
-rw-r--r--src/datavisualization/engine/bars3drenderer_p.h5
-rw-r--r--src/datavisualization/engine/q3dbars.cpp22
-rw-r--r--src/datavisualization/engine/q3dbars.h5
-rw-r--r--src/datavisualizationqml2/declarativebars.cpp13
-rw-r--r--src/datavisualizationqml2/declarativebars_p.h5
-rw-r--r--tests/barstest/chart.cpp5
-rw-r--r--tests/barstest/chart.h1
-rw-r--r--tests/barstest/main.cpp6
14 files changed, 135 insertions, 32 deletions
diff --git a/examples/bars/graphmodifier.cpp b/examples/bars/graphmodifier.cpp
index 1b84ae7b..4a50c77d 100644
--- a/examples/bars/graphmodifier.cpp
+++ b/examples/bars/graphmodifier.cpp
@@ -56,6 +56,7 @@ GraphModifier::GraphModifier(Q3DBars *bargraph)
m_graph->activeTheme()->setBackgroundEnabled(false);
m_graph->activeTheme()->setFont(QFont("Times New Roman", m_fontSize));
m_graph->activeTheme()->setLabelBackgroundEnabled(true);
+ m_graph->setMultiSeriesUniform(true);
//! [2]
m_months << "January" << "February" << "March" << "April" << "May" << "June" << "July" << "August" << "September" << "October" << "November" << "December";
@@ -266,11 +267,4 @@ void GraphModifier::setSmoothBars(int smooth)
void GraphModifier::setSeriesVisibility(int enabled)
{
m_secondarySeries->setVisible(bool(enabled));
- if (enabled) {
- m_graph->setBarThickness(2.0f);
- m_graph->setBarSpacing(QSizeF(1.0, 3.0));
- } else {
- m_graph->setBarThickness(1.0f);
- m_graph->setBarSpacing(QSizeF(1.0, 1.0));
- }
}
diff --git a/examples/qmlbars/qml/qmlbars/main.qml b/examples/qmlbars/qml/qmlbars/main.qml
index d5f7fd34..faa10c5f 100644
--- a/examples/qmlbars/qml/qmlbars/main.qml
+++ b/examples/qmlbars/qml/qmlbars/main.qml
@@ -76,7 +76,7 @@ Item {
anchors.bottom: mainview.bottom
Bars3D {
- id: testGraph
+ id: barGraph
width: dataView.width
height: dataView.height
shadowQuality: AbstractGraph3D.ShadowQualityMedium
@@ -189,7 +189,7 @@ Item {
clip: true
//! [1]
onClicked: {
- if (testGraph.rowAxis.max !== 6) {
+ if (barGraph.rowAxis.max !== 6) {
text = "Show 2010 - 2012"
modelProxy.autoRowCategories = true
secondaryProxy.autoRowCategories = true
@@ -213,11 +213,11 @@ Item {
text: "Hide Shadows"
clip: true
onClicked: {
- if (testGraph.shadowQuality == AbstractGraph3D.ShadowQualityNone) {
- testGraph.shadowQuality = AbstractGraph3D.ShadowQualityMedium;
+ if (barGraph.shadowQuality == AbstractGraph3D.ShadowQualityNone) {
+ barGraph.shadowQuality = AbstractGraph3D.ShadowQualityMedium;
text = "Hide Shadows"
} else {
- testGraph.shadowQuality = AbstractGraph3D.ShadowQualityNone;
+ barGraph.shadowQuality = AbstractGraph3D.ShadowQualityNone;
text = "Show Shadows"
}
}
@@ -233,17 +233,17 @@ Item {
onClicked: {
if (!secondarySeries.visible) {
text = "Show Both"
- testGraph.valueAxis = graphAxes.expenses
+ barGraph.valueAxis = graphAxes.expenses
barSeries.visible = false
secondarySeries.visible = true
} else if (!barSeries.visible){
barSeries.visible = true
text = "Show Income"
- testGraph.valueAxis = graphAxes.income
+ barGraph.valueAxis = graphAxes.income
} else {
secondarySeries.visible = false
text = "Show Expenses"
- testGraph.valueAxis = graphAxes.income
+ barGraph.valueAxis = graphAxes.income
}
}
//! [0]
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc
index d61b298a..ee11a9d9 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc
@@ -69,6 +69,12 @@
* This temporary axis is destroyed if another axis is explicitly set to same orientation.
*/
+/*!
+ * \qmlproperty bool Bars3D::multiSeriesUniform
+ * This property controls if bars are to be scaled with proportions set to a single series bar even
+ * if there are multiple series displayed. If set to \c {true}, \l{barSpacing}{bar spacing} will
+ * affect only X-axis correctly. It is preset to \c false by default.
+ */
/*!
* \qmlproperty real Bars3D::barThickness
diff --git a/src/datavisualization/engine/bars3dcontroller.cpp b/src/datavisualization/engine/bars3dcontroller.cpp
index 95fb36b9..2238fdee 100644
--- a/src/datavisualization/engine/bars3dcontroller.cpp
+++ b/src/datavisualization/engine/bars3dcontroller.cpp
@@ -83,6 +83,11 @@ void Bars3DController::synchDataToRenderer()
Abstract3DController::synchDataToRenderer();
// Notify changes to renderer
+ if (m_changeTracker.multiSeriesScalingChanged) {
+ m_renderer->updateMultiSeriesScaling(m_isMultiSeriesUniform);
+ m_changeTracker.multiSeriesScalingChanged = false;
+ }
+
if (m_changeTracker.barSpecsChanged) {
m_renderer->updateBarSpecs(m_barThicknessRatio, m_barSpacing, m_isBarSpecRelative);
m_changeTracker.barSpecsChanged = false;
@@ -378,6 +383,19 @@ void Bars3DController::handleAxisRangeChangedBySender(QObject *sender)
setSelectedBar(m_selectedBar, m_selectedBarSeries);
}
+void Bars3DController::setMultiSeriesScaling(bool uniform)
+{
+ m_isMultiSeriesUniform = uniform;
+
+ m_changeTracker.multiSeriesScalingChanged = true;
+ emitNeedRender();
+}
+
+bool Bars3DController::multiSeriesScaling() const
+{
+ return m_isMultiSeriesUniform;
+}
+
void Bars3DController::setBarSpecs(GLfloat thicknessRatio, const QSizeF &spacing, bool relative)
{
m_barThicknessRatio = thicknessRatio;
diff --git a/src/datavisualization/engine/bars3dcontroller_p.h b/src/datavisualization/engine/bars3dcontroller_p.h
index 191007b7..525f6564 100644
--- a/src/datavisualization/engine/bars3dcontroller_p.h
+++ b/src/datavisualization/engine/bars3dcontroller_p.h
@@ -38,12 +38,14 @@ class Bars3DRenderer;
class QBar3DSeries;
struct Bars3DChangeBitField {
- bool slicingActiveChanged : 1;
- bool barSpecsChanged : 1;
- bool selectedBarChanged : 1;
+ bool slicingActiveChanged : 1;
+ bool multiSeriesScalingChanged : 1;
+ bool barSpecsChanged : 1;
+ bool selectedBarChanged : 1;
Bars3DChangeBitField() :
slicingActiveChanged(true),
+ multiSeriesScalingChanged(true),
barSpecsChanged(true),
selectedBarChanged(true)
{
@@ -64,6 +66,7 @@ private:
QBar3DSeries *m_primarySeries; // Category axis labels are taken from the primary series
// Look'n'feel
+ bool m_isMultiSeriesUniform;
bool m_isBarSpecRelative;
GLfloat m_barThicknessRatio;
QSizeF m_barSpacing;
@@ -78,6 +81,9 @@ public:
virtual void initializeOpenGL();
virtual void synchDataToRenderer();
+ void setMultiSeriesScaling(bool uniform);
+ bool multiSeriesScaling() const;
+
// bar thickness, spacing between bars, and is spacing relative to thickness or absolute
// y -component sets the thickness/spacing of z -direction
// With relative 0.0f means side-to-side, 1.0f = one thickness in between
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp
index ada9f660..4140f01c 100644
--- a/src/datavisualization/engine/bars3drenderer.cpp
+++ b/src/datavisualization/engine/bars3drenderer.cpp
@@ -89,10 +89,12 @@ Bars3DRenderer::Bars3DRenderer(Bars3DController *controller)
m_selectedBarPos(Bars3DController::invalidSelectionPosition()),
m_selectedBarSeries(0),
m_noZeroInRange(false),
- m_seriesScale(0.0f),
+ m_seriesScaleX(0.0f),
+ m_seriesScaleZ(0.0f),
m_seriesStep(0.0f),
m_seriesStart(0.0f),
- m_clickedPosition(Bars3DController::invalidSelectionPosition())
+ m_clickedPosition(Bars3DController::invalidSelectionPosition()),
+ m_keepSeriesUniform(false)
{
initializeOpenGLFunctions();
initializeOpenGL();
@@ -160,11 +162,17 @@ void Bars3DRenderer::updateData()
if (m_renderingArrays.size() != seriesCount) {
m_renderingArrays.resize(seriesCount);
- m_seriesScale = 1.0f / float(seriesCount);
+ m_seriesScaleX = 1.0f / float(seriesCount);
m_seriesStep = 1.0f / float(seriesCount);
m_seriesStart = -((float(seriesCount) - 1.0f) / 2.0f) * m_seriesStep;
}
+
+ if (m_keepSeriesUniform)
+ m_seriesScaleZ = m_seriesScaleX;
+ else
+ m_seriesScaleZ = 1.0f;
+
if (m_cachedRowCount != newRows || m_cachedColumnCount != newColumns) {
// Force update for selection related items
m_sliceCache = 0;
@@ -427,11 +435,11 @@ void Bars3DRenderer::drawSlicedScene()
}
// Draw bars
- QVector3D modelMatrixScaler(m_scaleX, 0.0f, m_scaleZ);
- if (rowMode)
- modelMatrixScaler.setX(m_scaleX * m_seriesScale);
- else
- modelMatrixScaler.setZ(m_scaleZ * m_seriesScale);
+ QVector3D modelMatrixScaler(m_scaleX * m_seriesScaleX, 0.0f, m_scaleZ * m_seriesScaleZ);
+ if (!rowMode) {
+ modelMatrixScaler.setX(m_scaleZ * m_seriesScaleZ);
+ modelMatrixScaler.setZ(m_scaleX * m_seriesScaleX);
+ }
// Set common bar shader bindings
m_barShader->bind();
@@ -809,7 +817,8 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
depthProjectionViewMatrix = depthProjectionMatrix * depthViewMatrix;
// Draw bars to depth buffer
- QVector3D shadowScaler(m_scaleX * m_seriesScale * 0.9f, 0.0f, m_scaleZ * 0.9f);
+ QVector3D shadowScaler(m_scaleX * m_seriesScaleX * 0.9f, 0.0f,
+ m_scaleZ * m_seriesScaleZ * 0.9f);
float seriesPos = m_seriesStart;
for (int series = 0; series < seriesCount; series++) {
ObjectHelper *barObj = m_visibleSeriesList.at(series).object();
@@ -926,9 +935,9 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
modelMatrix.translate((colPos - m_rowWidth) / m_scaleFactor,
item.height(),
(m_columnDepth - rowPos) / m_scaleFactor);
- modelMatrix.scale(QVector3D(m_scaleX * m_seriesScale,
+ modelMatrix.scale(QVector3D(m_scaleX * m_seriesScaleX,
item.height(),
- m_scaleZ));
+ m_scaleZ * m_seriesScaleZ));
MVPMatrix = projectionViewMatrix * modelMatrix;
@@ -1049,7 +1058,7 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
QVector3D baseColor;
QVector3D barColor;
- QVector3D modelScaler(m_scaleX * m_seriesScale, 0.0f, m_scaleZ);
+ QVector3D modelScaler(m_scaleX * m_seriesScaleX, 0.0f, m_scaleZ * m_seriesScaleZ);
bool somethingSelected = (m_visualSelectedBarPos != Bars3DController::invalidSelectionPosition());
float seriesPos = m_seriesStart;
for (int series = 0; series < seriesCount; series++) {
@@ -1837,6 +1846,18 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
m_selectionDirty = false;
}
+void Bars3DRenderer::updateMultiSeriesScaling(bool uniform)
+{
+ m_keepSeriesUniform = uniform;
+
+ // Recalculate scale factors
+ m_seriesScaleX = 1.0f / float(m_visibleSeriesList.size());
+ if (m_keepSeriesUniform)
+ m_seriesScaleZ = m_seriesScaleX;
+ else
+ m_seriesScaleZ = 1.0f;
+}
+
void Bars3DRenderer::updateBarSpecs(GLfloat thicknessRatio, const QSizeF &spacing, bool relative)
{
// Convert ratio to QSizeF, as we need it in that format for autoscaling calculations
diff --git a/src/datavisualization/engine/bars3drenderer_p.h b/src/datavisualization/engine/bars3drenderer_p.h
index 353ead44..04e2a1ac 100644
--- a/src/datavisualization/engine/bars3drenderer_p.h
+++ b/src/datavisualization/engine/bars3drenderer_p.h
@@ -102,10 +102,12 @@ private:
BarRenderItem m_dummyBarRenderItem;
QVector<BarRenderItemArray> m_renderingArrays;
bool m_noZeroInRange;
- float m_seriesScale;
+ float m_seriesScaleX;
+ float m_seriesScaleZ;
float m_seriesStep;
float m_seriesStart;
QPoint m_clickedPosition;
+ bool m_keepSeriesUniform;
public:
explicit Bars3DRenderer(Bars3DController *controller);
@@ -119,6 +121,7 @@ protected:
virtual void initializeOpenGL();
public slots:
+ void updateMultiSeriesScaling(bool uniform);
void updateBarSpecs(GLfloat thicknessRatio = 1.0f,
const QSizeF &spacing = QSizeF(1.0, 1.0),
bool relative = true);
diff --git a/src/datavisualization/engine/q3dbars.cpp b/src/datavisualization/engine/q3dbars.cpp
index 3cc4de0d..1d86f8f0 100644
--- a/src/datavisualization/engine/q3dbars.cpp
+++ b/src/datavisualization/engine/q3dbars.cpp
@@ -183,6 +183,26 @@ QList<QBar3DSeries *> Q3DBars::seriesList()
}
/*!
+ * \property Q3DBars::multiSeriesUniform
+ *
+ * This property controls if bars are to be scaled with proportions set to a single series bar even
+ * if there are multiple series displayed. If set to \c {true}, \l{barSpacing}{bar spacing} will
+ * affect only X-axis correctly. It is preset to \c false by default.
+ */
+void Q3DBars::setMultiSeriesUniform(bool uniform)
+{
+ if (uniform != isMultiSeriesUniform()) {
+ dptr()->m_shared->setMultiSeriesScaling(uniform);
+ emit multiSeriesUniformChanged(uniform);
+ }
+}
+
+bool Q3DBars::isMultiSeriesUniform() const
+{
+ return dptrc()->m_shared->multiSeriesScaling();
+}
+
+/*!
* \property Q3DBars::barThickness
*
* Bar thickness ratio between X and Z dimensions. 1.0 means bars are as wide as they are deep, 0.5
@@ -208,7 +228,7 @@ float Q3DBars::barThickness()
* Bar spacing, which is the empty space between bars, in X and Z dimensions. It is preset to
* \c {(1.0, 1.0)} by default. Spacing is affected by barSpacingRelative -property.
*
- * \sa barSpacingRelative
+ * \sa barSpacingRelative, multiSeriesUniform
*/
void Q3DBars::setBarSpacing(QSizeF spacing)
{
diff --git a/src/datavisualization/engine/q3dbars.h b/src/datavisualization/engine/q3dbars.h
index bf973c11..636c5720 100644
--- a/src/datavisualization/engine/q3dbars.h
+++ b/src/datavisualization/engine/q3dbars.h
@@ -34,6 +34,7 @@ class QBar3DSeries;
class QT_DATAVISUALIZATION_EXPORT Q3DBars : public QAbstract3DGraph
{
Q_OBJECT
+ Q_PROPERTY(bool multiSeriesUniform READ isMultiSeriesUniform WRITE setMultiSeriesUniform NOTIFY multiSeriesUniformChanged)
Q_PROPERTY(float barThickness READ barThickness WRITE setBarThickness NOTIFY barThicknessChanged)
Q_PROPERTY(QSizeF barSpacing READ barSpacing WRITE setBarSpacing NOTIFY barSpacingChanged)
Q_PROPERTY(bool barSpacingRelative READ isBarSpacingRelative WRITE setBarSpacingRelative NOTIFY barSpacingRelativeChanged)
@@ -53,6 +54,9 @@ public:
void insertSeries(int index, QBar3DSeries *series);
QList<QBar3DSeries *> seriesList();
+ void setMultiSeriesUniform(bool uniform);
+ bool isMultiSeriesUniform() const;
+
void setBarThickness(float thicknessRatio);
float barThickness();
@@ -73,6 +77,7 @@ public:
QList<QAbstract3DAxis *> axes() const;
signals:
+ void multiSeriesUniformChanged(bool uniform);
void barThicknessChanged(float thicknessRatio);
void barSpacingChanged(QSizeF spacing);
void barSpacingRelativeChanged(bool relative);
diff --git a/src/datavisualizationqml2/declarativebars.cpp b/src/datavisualizationqml2/declarativebars.cpp
index 74d60138..b690a6b7 100644
--- a/src/datavisualizationqml2/declarativebars.cpp
+++ b/src/datavisualizationqml2/declarativebars.cpp
@@ -72,6 +72,19 @@ void DeclarativeBars::setColumnAxis(QCategory3DAxis *axis)
m_barsController->setAxisX(axis);
}
+void DeclarativeBars::setMultiSeriesUniform(bool uniform)
+{
+ if (uniform != isMultiSeriesUniform()) {
+ m_barsController->setMultiSeriesScaling(uniform);
+ emit multiSeriesUniformChanged(uniform);
+ }
+}
+
+bool DeclarativeBars::isMultiSeriesUniform() const
+{
+ return m_barsController->multiSeriesScaling();
+}
+
void DeclarativeBars::setBarThickness(float thicknessRatio)
{
if (thicknessRatio != barThickness()) {
diff --git a/src/datavisualizationqml2/declarativebars_p.h b/src/datavisualizationqml2/declarativebars_p.h
index 43b619f1..d4616eb3 100644
--- a/src/datavisualizationqml2/declarativebars_p.h
+++ b/src/datavisualizationqml2/declarativebars_p.h
@@ -51,6 +51,7 @@ class DeclarativeBars : public AbstractDeclarative
Q_PROPERTY(QCategory3DAxis *rowAxis READ rowAxis WRITE setRowAxis NOTIFY rowAxisChanged)
Q_PROPERTY(QValue3DAxis *valueAxis READ valueAxis WRITE setValueAxis NOTIFY valueAxisChanged)
Q_PROPERTY(QCategory3DAxis *columnAxis READ columnAxis WRITE setColumnAxis NOTIFY columnAxisChanged)
+ Q_PROPERTY(bool multiSeriesUniform READ isMultiSeriesUniform WRITE setMultiSeriesUniform NOTIFY multiSeriesUniformChanged)
Q_PROPERTY(float barThickness READ barThickness WRITE setBarThickness NOTIFY barThicknessChanged)
Q_PROPERTY(QSizeF barSpacing READ barSpacing WRITE setBarSpacing NOTIFY barSpacingChanged)
Q_PROPERTY(bool barSpacingRelative READ isBarSpacingRelative WRITE setBarSpacingRelative NOTIFY barSpacingRelativeChanged)
@@ -69,6 +70,9 @@ public:
QCategory3DAxis *columnAxis() const;
void setColumnAxis(QCategory3DAxis *axis);
+ void setMultiSeriesUniform(bool uniform);
+ bool isMultiSeriesUniform() const;
+
void setBarThickness(float thicknessRatio);
float barThickness() const;
@@ -98,6 +102,7 @@ signals:
void rowAxisChanged(QCategory3DAxis *axis);
void valueAxisChanged(QValue3DAxis *axis);
void columnAxisChanged(QCategory3DAxis *axis);
+ void multiSeriesUniformChanged(bool uniform);
void barThicknessChanged(float thicknessRatio);
void barSpacingChanged(QSizeF spacing);
void barSpacingRelativeChanged(bool relative);
diff --git a/tests/barstest/chart.cpp b/tests/barstest/chart.cpp
index abbf2a59..6b0345ad 100644
--- a/tests/barstest/chart.cpp
+++ b/tests/barstest/chart.cpp
@@ -1223,3 +1223,8 @@ void GraphModifier::setGradient()
m_graph->activeTheme()->setColorStyle(Q3DTheme::ColorStyleObjectGradient);
}
+
+void GraphModifier::toggleMultiseriesScaling()
+{
+ m_graph->setMultiSeriesUniform(!m_graph->isMultiSeriesUniform());
+}
diff --git a/tests/barstest/chart.h b/tests/barstest/chart.h
index 425af521..8e3271cc 100644
--- a/tests/barstest/chart.h
+++ b/tests/barstest/chart.h
@@ -88,6 +88,7 @@ public:
public slots:
void flipViews();
void setGradient();
+ void toggleMultiseriesScaling();
void changeShadowQuality(int quality);
void shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality shadowQuality);
void handleSelectionChange(const QPoint &position);
diff --git a/tests/barstest/main.cpp b/tests/barstest/main.cpp
index a0e1bfc3..52d79468 100644
--- a/tests/barstest/main.cpp
+++ b/tests/barstest/main.cpp
@@ -110,6 +110,9 @@ int main(int argc, char **argv)
QPushButton *labelButton = new QPushButton(widget);
labelButton->setText(QStringLiteral("Change label style"));
+ QPushButton *multiScaleButton = new QPushButton(widget);
+ multiScaleButton->setText(QStringLiteral("Change multiseries scaling"));
+
QPushButton *styleButton = new QPushButton(widget);
styleButton->setText(QStringLiteral("Change bar style"));
@@ -292,6 +295,7 @@ int main(int argc, char **argv)
vLayout->addWidget(showFiveSeriesButton, 0, Qt::AlignTop);
vLayout->addWidget(themeButton, 0, Qt::AlignTop);
vLayout->addWidget(labelButton, 0, Qt::AlignTop);
+ vLayout->addWidget(multiScaleButton, 0, Qt::AlignTop);
vLayout->addWidget(styleButton, 0, Qt::AlignTop);
vLayout->addWidget(cameraButton, 0, Qt::AlignTop);
vLayout->addWidget(selectionButton, 0, Qt::AlignTop);
@@ -367,6 +371,8 @@ int main(int argc, char **argv)
QObject::connect(fontSizeSlider, &QSlider::valueChanged, modifier,
&GraphModifier::changeFontSize);
+ QObject::connect(multiScaleButton, &QPushButton::clicked, modifier,
+ &GraphModifier::toggleMultiseriesScaling);
QObject::connect(styleButton, &QPushButton::clicked, modifier, &GraphModifier::changeStyle);
QObject::connect(cameraButton, &QPushButton::clicked, modifier,
&GraphModifier::changePresetCamera);