summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/q3dbars.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualization/engine/q3dbars.cpp')
-rw-r--r--src/datavisualization/engine/q3dbars.cpp283
1 files changed, 114 insertions, 169 deletions
diff --git a/src/datavisualization/engine/q3dbars.cpp b/src/datavisualization/engine/q3dbars.cpp
index d4e97519..787033ad 100644
--- a/src/datavisualization/engine/q3dbars.cpp
+++ b/src/datavisualization/engine/q3dbars.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2013 Digia Plc
+** Copyright (C) 2014 Digia Plc
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
@@ -19,15 +19,12 @@
#include "q3dbars.h"
#include "q3dbars_p.h"
#include "bars3dcontroller_p.h"
-#include "q3dvalueaxis.h"
-#include "q3dcategoryaxis.h"
+#include "qvalue3daxis.h"
+#include "qcategory3daxis.h"
#include "q3dcamera.h"
#include "qbar3dseries_p.h"
-#include <QMouseEvent>
-
-
-QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+QT_BEGIN_NAMESPACE_DATAVISUALIZATION
/*!
* \class Q3DBars
@@ -96,24 +93,17 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
*/
/*!
- * Constructs a new 3D bar graph with optional \a parent window.
+ * Constructs a new 3D bar graph with optional \a parent window
+ * and surface \a format.
*/
-Q3DBars::Q3DBars(QWindow *parent)
- : Q3DWindow(new Q3DBarsPrivate(this), parent)
+Q3DBars::Q3DBars(const QSurfaceFormat *format, QWindow *parent)
+ : QAbstract3DGraph(new Q3DBarsPrivate(this), format, parent)
{
dptr()->m_shared = new Bars3DController(geometry());
d_ptr->setVisualController(dptr()->m_shared);
dptr()->m_shared->initializeOpenGL();
- QObject::connect(dptr()->m_shared, &Abstract3DController::selectionModeChanged, this,
- &Q3DBars::selectionModeChanged);
- QObject::connect(dptr()->m_shared, &Abstract3DController::shadowQualityChanged, this,
- &Q3DBars::shadowQualityChanged);
- QObject::connect(dptr()->m_shared, &Abstract3DController::themeChanged, this,
- &Q3DBars::themeChanged);
- QObject::connect(dptr()->m_shared, &Abstract3DController::needRender, d_ptr.data(),
- &Q3DWindowPrivate::renderLater);
- QObject::connect(dptr()->m_shared, &Abstract3DController::shadowQualityChanged, dptr(),
- &Q3DBarsPrivate::handleShadowQualityUpdate);
+ QObject::connect(dptr()->m_shared, &Bars3DController::primarySeriesChanged,
+ this, &Q3DBars::primarySeriesChanged);
}
/*!
@@ -124,12 +114,37 @@ Q3DBars::~Q3DBars()
}
/*!
+ * \property Q3DBars::primarySeries
+ *
+ * Specifies the \a series that is the primary series of the graph. The primary series
+ * is used to determine the row and column axis labels when the labels are not explicitly
+ * set to the axes.
+ * If the specified \a series is not already added to the graph, setting it as the
+ * primary series will also implicitly add it to the graph.
+ * If the primary series itself is removed from the graph, this property
+ * resets to default.
+ * If \a series is null, this property resets to default.
+ * Defaults to the first added series or zero if no series are added to the graph.
+ */
+void Q3DBars::setPrimarySeries(QBar3DSeries *series)
+{
+ dptr()->m_shared->setPrimarySeries(series);
+}
+
+QBar3DSeries *Q3DBars::primarySeries() const
+{
+ return dptrc()->m_shared->primarySeries();
+}
+
+/*!
* Adds the \a series to the graph. A graph can contain multiple series, but only one set of axes,
* so the rows and columns of all series must match for the visualized data to be meaningful.
* If the graph has multiple visible series, only the first one added will
* generate the row or column labels on the axes in cases where the labels are not explicitly set
* to the axes. If the newly added series has specified a selected bar, it will be highlighted and
* any existing selection will be cleared. Only one added series can have an active selection.
+ *
+ * /sa seriesList()
*/
void Q3DBars::addSeries(QBar3DSeries *series)
{
@@ -145,70 +160,46 @@ void Q3DBars::removeSeries(QBar3DSeries *series)
}
/*!
- * \return list of series added to this graph.
- */
-QList<QBar3DSeries *> Q3DBars::seriesList()
-{
- return dptr()->m_shared->barSeriesList();
-}
-
-/*!
- * \internal
- */
-void Q3DBars::mouseDoubleClickEvent(QMouseEvent *event)
-{
- dptr()->m_shared->mouseDoubleClickEvent(event);
-}
-
-/*!
- * \internal
- */
-void Q3DBars::touchEvent(QTouchEvent *event)
-{
- dptr()->m_shared->touchEvent(event);
-}
-
-/*!
- * \internal
- */
-void Q3DBars::mousePressEvent(QMouseEvent *event)
-{
- dptr()->m_shared->mousePressEvent(event, event->pos());
-}
-
-/*!
- * \internal
+ * Inserts the \a series into the position \a index in the series list.
+ * If the \a series has already been added to the list, it is moved to the
+ * new \a index.
+ * \note When moving a series to a new \a index that is after its old index,
+ * the new position in list is calculated as if the series was still in its old
+ * index, so the final index is actually the \a index decremented by one.
+ *
+ * \sa addSeries(), seriesList()
*/
-void Q3DBars::mouseReleaseEvent(QMouseEvent *event)
+void Q3DBars::insertSeries(int index, QBar3DSeries *series)
{
- dptr()->m_shared->mouseReleaseEvent(event, event->pos());
+ dptr()->m_shared->insertSeries(index, series);
}
/*!
- * \internal
+ * \return list of series added to this graph.
*/
-void Q3DBars::mouseMoveEvent(QMouseEvent *event)
+QList<QBar3DSeries *> Q3DBars::seriesList() const
{
- dptr()->m_shared->mouseMoveEvent(event, event->pos());
+ return dptrc()->m_shared->barSeriesList();
}
/*!
- * \internal
+ * \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::wheelEvent(QWheelEvent *event)
+void Q3DBars::setMultiSeriesUniform(bool uniform)
{
- dptr()->m_shared->wheelEvent(event);
-}
-
-
-Q3DBarsPrivate *Q3DBars::dptr()
-{
- return static_cast<Q3DBarsPrivate *>(d_ptr.data());
+ if (uniform != isMultiSeriesUniform()) {
+ dptr()->m_shared->setMultiSeriesScaling(uniform);
+ emit multiSeriesUniformChanged(uniform);
+ }
}
-const Q3DBarsPrivate *Q3DBars::dptrc() const
+bool Q3DBars::isMultiSeriesUniform() const
{
- return static_cast<const Q3DBarsPrivate *>(d_ptr.data());
+ return dptrc()->m_shared->multiSeriesScaling();
}
/*!
@@ -220,14 +211,15 @@ const Q3DBarsPrivate *Q3DBars::dptrc() const
void Q3DBars::setBarThickness(float thicknessRatio)
{
if (thicknessRatio != barThickness()) {
- dptr()->m_shared->setBarSpecs(GLfloat(thicknessRatio), barSpacing(), isBarSpacingRelative());
+ dptr()->m_shared->setBarSpecs(GLfloat(thicknessRatio), barSpacing(),
+ isBarSpacingRelative());
emit barThicknessChanged(thicknessRatio);
}
}
-float Q3DBars::barThickness()
+float Q3DBars::barThickness() const
{
- return dptr()->m_shared->barThickness();
+ return dptrc()->m_shared->barThickness();
}
/*!
@@ -236,9 +228,9 @@ 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)
+void Q3DBars::setBarSpacing(const QSizeF &spacing)
{
if (spacing != barSpacing()) {
dptr()->m_shared->setBarSpecs(GLfloat(barThickness()), spacing, isBarSpacingRelative());
@@ -246,9 +238,9 @@ void Q3DBars::setBarSpacing(QSizeF spacing)
}
}
-QSizeF Q3DBars::barSpacing()
+QSizeF Q3DBars::barSpacing() const
{
- return dptr()->m_shared->barSpacing();
+ return dptrc()->m_shared->barSpacing();
}
/*!
@@ -266,76 +258,15 @@ void Q3DBars::setBarSpacingRelative(bool relative)
}
}
-bool Q3DBars::isBarSpacingRelative()
-{
- return dptr()->m_shared->isBarSpecRelative();
-}
-
-/*!
- * \property Q3DBars::theme
- *
- * A \a theme to be used for the graph. Ownership of the \a theme is transferred. Previous theme
- * is deleted when a new one is set. Properties of the \a theme can be modified even after setting
- * it, and the modifications take effect immediately.
- */
-void Q3DBars::setTheme(Q3DTheme *theme)
-{
- dptr()->m_shared->setTheme(theme);
-}
-
-Q3DTheme *Q3DBars::theme() const
+bool Q3DBars::isBarSpacingRelative() const
{
- return dptrc()->m_shared->theme();
+ return dptrc()->m_shared->isBarSpecRelative();
}
/*!
- * \property Q3DBars::selectionMode
+ * \property Q3DBars::rowAxis
*
- * Sets bar selection \a mode to a combination of \c QDataVis::SelectionFlags. It is preset to
- * \c QDataVis::SelectionItem by default.
- */
-void Q3DBars::setSelectionMode(QDataVis::SelectionFlags mode)
-{
- dptr()->m_shared->setSelectionMode(mode);
-}
-
-QDataVis::SelectionFlags Q3DBars::selectionMode() const
-{
- return dptrc()->m_shared->selectionMode();
-}
-
-/*!
- * \property Q3DBars::scene
- *
- * This property contains the read only Q3DScene that can be used to access e.g. camera object.
- */
-Q3DScene *Q3DBars::scene() const
-{
- return dptrc()->m_shared->scene();
-}
-
-/*!
- * \property Q3DBars::shadowQuality
- *
- * Sets shadow \a quality to one of \c QDataVis::ShadowQuality. It is preset to
- * \c QDataVis::ShadowQualityMedium by default.
- *
- * \note If setting QDataVis::ShadowQuality of a certain level fails, a level is lowered
- * until it is successful and shadowQualityChanged signal is emitted for each time the change is
- * done.
- */
-void Q3DBars::setShadowQuality(QDataVis::ShadowQuality quality)
-{
- dptr()->m_shared->setShadowQuality(quality);
-}
-
-QDataVis::ShadowQuality Q3DBars::shadowQuality() const
-{
- return dptrc()->m_shared->shadowQuality();
-}
-
-/*!
- * Sets a user-defined row \a axis. Implicitly calls addAxis() to transfer ownership of
+ * The active row \a axis. Implicitly calls addAxis() to transfer ownership of
* the \a axis to this graph.
*
* If the \a axis is null, a temporary default axis with no labels is created.
@@ -343,21 +274,20 @@ QDataVis::ShadowQuality Q3DBars::shadowQuality() const
*
* \sa addAxis(), releaseAxis()
*/
-void Q3DBars::setRowAxis(Q3DCategoryAxis *axis)
+void Q3DBars::setRowAxis(QCategory3DAxis *axis)
{
dptr()->m_shared->setAxisZ(axis);
}
-/*!
- * \return category axis for rows.
- */
-Q3DCategoryAxis *Q3DBars::rowAxis() const
+QCategory3DAxis *Q3DBars::rowAxis() const
{
- return static_cast<Q3DCategoryAxis *>(dptrc()->m_shared->axisZ());
+ return static_cast<QCategory3DAxis *>(dptrc()->m_shared->axisZ());
}
/*!
- * Sets a user-defined column \a axis. Implicitly calls addAxis() to transfer ownership of
+ * \property Q3DBars::columnAxis
+ *
+ * The active column \a axis. Implicitly calls addAxis() to transfer ownership of
* the \a axis to this graph.
*
* If the \a axis is null, a temporary default axis with no labels is created.
@@ -365,21 +295,20 @@ Q3DCategoryAxis *Q3DBars::rowAxis() const
*
* \sa addAxis(), releaseAxis()
*/
-void Q3DBars::setColumnAxis(Q3DCategoryAxis *axis)
+void Q3DBars::setColumnAxis(QCategory3DAxis *axis)
{
dptr()->m_shared->setAxisX(axis);
}
-/*!
- * \return category axis for columns.
- */
-Q3DCategoryAxis *Q3DBars::columnAxis() const
+QCategory3DAxis *Q3DBars::columnAxis() const
{
- return static_cast<Q3DCategoryAxis *>(dptrc()->m_shared->axisX());
+ return static_cast<QCategory3DAxis *>(dptrc()->m_shared->axisX());
}
/*!
- * Sets a user-defined value \a axis (the Y-axis). Implicitly calls addAxis() to transfer ownership
+ * \property Q3DBars::valueAxis
+ *
+ * The active value \a axis (the Y-axis). Implicitly calls addAxis() to transfer ownership
* of the \a axis to this graph.
*
* If the \a axis is null, a temporary default axis with no labels and automatically adjusting
@@ -388,17 +317,14 @@ Q3DCategoryAxis *Q3DBars::columnAxis() const
*
* \sa addAxis(), releaseAxis()
*/
-void Q3DBars::setValueAxis(Q3DValueAxis *axis)
+void Q3DBars::setValueAxis(QValue3DAxis *axis)
{
dptr()->m_shared->setAxisY(axis);
}
-/*!
- * \return used value axis (Y-axis).
- */
-Q3DValueAxis *Q3DBars::valueAxis() const
+QValue3DAxis *Q3DBars::valueAxis() const
{
- return static_cast<Q3DValueAxis *>(dptrc()->m_shared->axisY());
+ return static_cast<QValue3DAxis *>(dptrc()->m_shared->axisY());
}
/*!
@@ -408,7 +334,7 @@ Q3DValueAxis *Q3DBars::valueAxis() const
*
* \sa releaseAxis(), setValueAxis(), setRowAxis(), setColumnAxis()
*/
-void Q3DBars::addAxis(Q3DAbstractAxis *axis)
+void Q3DBars::addAxis(QAbstract3DAxis *axis)
{
dptr()->m_shared->addAxis(axis);
}
@@ -421,7 +347,7 @@ void Q3DBars::addAxis(Q3DAbstractAxis *axis)
*
* \sa addAxis(), setValueAxis(), setRowAxis(), setColumnAxis()
*/
-void Q3DBars::releaseAxis(Q3DAbstractAxis *axis)
+void Q3DBars::releaseAxis(QAbstract3DAxis *axis)
{
dptr()->m_shared->releaseAxis(axis);
}
@@ -431,24 +357,43 @@ void Q3DBars::releaseAxis(Q3DAbstractAxis *axis)
*
* \sa addAxis()
*/
-QList<Q3DAbstractAxis *> Q3DBars::axes() const
+QList<QAbstract3DAxis *> Q3DBars::axes() const
{
return dptrc()->m_shared->axes();
}
+Q3DBarsPrivate *Q3DBars::dptr()
+{
+ return static_cast<Q3DBarsPrivate *>(d_ptr.data());
+}
+
+const Q3DBarsPrivate *Q3DBars::dptrc() const
+{
+ return static_cast<const Q3DBarsPrivate *>(d_ptr.data());
+}
+
Q3DBarsPrivate::Q3DBarsPrivate(Q3DBars *q)
- : Q3DWindowPrivate(q)
+ : QAbstract3DGraphPrivate(q)
{
}
Q3DBarsPrivate::~Q3DBarsPrivate()
{
- delete m_shared;
}
-void Q3DBarsPrivate::handleShadowQualityUpdate(QDataVis::ShadowQuality quality)
+void Q3DBarsPrivate::handleAxisXChanged(QAbstract3DAxis *axis)
+{
+ emit qptr()->columnAxisChanged(static_cast<QCategory3DAxis *>(axis));
+}
+
+void Q3DBarsPrivate::handleAxisYChanged(QAbstract3DAxis *axis)
+{
+ emit qptr()->valueAxisChanged(static_cast<QValue3DAxis *>(axis));
+}
+
+void Q3DBarsPrivate::handleAxisZChanged(QAbstract3DAxis *axis)
{
- emit qptr()->shadowQualityChanged(quality);
+ emit qptr()->rowAxisChanged(static_cast<QCategory3DAxis *>(axis));
}
Q3DBars *Q3DBarsPrivate::qptr()
@@ -456,4 +401,4 @@ Q3DBars *Q3DBarsPrivate::qptr()
return static_cast<Q3DBars *>(q_ptr);
}
-QT_DATAVISUALIZATION_END_NAMESPACE
+QT_END_NAMESPACE_DATAVISUALIZATION