summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/data
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-11-11 13:22:54 +0200
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-11-15 08:24:15 +0200
commit999ffa01d20f75a457da62d41c0fabfc32e5e1bb (patch)
treec5267f6831d5ff61444f85b2110f7150e20d3451 /src/datavisualization/data
parentbbb874d0591215164b2030db60dc9d6a95f4c8fe (diff)
Basic multiseries support
Task-number: QTRD-2548 Change-Id: Iba324c0e8be56f2b3f8f6c6a992883c134a51a9d Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com> Reviewed-by: Mika Salmela <mika.salmela@digia.com>
Diffstat (limited to 'src/datavisualization/data')
-rw-r--r--src/datavisualization/data/data.pri16
-rw-r--r--src/datavisualization/data/qabstract3dseries.cpp192
-rw-r--r--src/datavisualization/data/qabstract3dseries.h86
-rw-r--r--src/datavisualization/data/qabstract3dseries_p.h73
-rw-r--r--src/datavisualization/data/qabstractdataproxy.cpp47
-rw-r--r--src/datavisualization/data/qabstractdataproxy.h16
-rw-r--r--src/datavisualization/data/qabstractdataproxy_p.h11
-rw-r--r--src/datavisualization/data/qbar3dseries.cpp220
-rw-r--r--src/datavisualization/data/qbar3dseries.h58
-rw-r--r--src/datavisualization/data/qbar3dseries_p.h55
-rw-r--r--src/datavisualization/data/qbardataproxy.cpp25
-rw-r--r--src/datavisualization/data/qbardataproxy.h4
-rw-r--r--src/datavisualization/data/qbardataproxy_p.h2
-rw-r--r--src/datavisualization/data/qscatter3dseries.cpp204
-rw-r--r--src/datavisualization/data/qscatter3dseries.h58
-rw-r--r--src/datavisualization/data/qscatter3dseries_p.h55
-rw-r--r--src/datavisualization/data/qscatterdataproxy.cpp32
-rw-r--r--src/datavisualization/data/qscatterdataproxy.h4
-rw-r--r--src/datavisualization/data/qscatterdataproxy_p.h4
-rw-r--r--src/datavisualization/data/qsurface3dseries.cpp196
-rw-r--r--src/datavisualization/data/qsurface3dseries.h58
-rw-r--r--src/datavisualization/data/qsurface3dseries_p.h55
-rw-r--r--src/datavisualization/data/qsurfacedataproxy.cpp27
-rw-r--r--src/datavisualization/data/qsurfacedataproxy.h4
-rw-r--r--src/datavisualization/data/qsurfacedataproxy_p.h4
25 files changed, 1438 insertions, 68 deletions
diff --git a/src/datavisualization/data/data.pri b/src/datavisualization/data/data.pri
index 770d2bd1..66ad0e3b 100644
--- a/src/datavisualization/data/data.pri
+++ b/src/datavisualization/data/data.pri
@@ -36,7 +36,15 @@ HEADERS += \
$$PWD/qitemmodelsurfacedataproxy_p.h \
$$PWD/surfaceitemmodelhandler_p.h \
$$PWD/qsurfacedataitem.h \
- $$PWD/qsurfacedataitem_p.h
+ $$PWD/qsurfacedataitem_p.h \
+ $$PWD/qabstract3dseries.h \
+ $$PWD/qabstract3dseries_p.h \
+ $$PWD/qbar3dseries.h \
+ $$PWD/qbar3dseries_p.h \
+ $$PWD/qscatter3dseries.h \
+ $$PWD/qscatter3dseries_p.h \
+ $$PWD/qsurface3dseries.h \
+ $$PWD/qsurface3dseries_p.h
SOURCES += \
$$PWD/labelitem.cpp \
@@ -61,4 +69,8 @@ SOURCES += \
$$PWD/qitemmodelsurfacedatamapping.cpp \
$$PWD/qitemmodelsurfacedataproxy.cpp \
$$PWD/surfaceitemmodelhandler.cpp \
- $$PWD/qsurfacedataitem.cpp
+ $$PWD/qsurfacedataitem.cpp \
+ $$PWD/qabstract3dseries.cpp \
+ $$PWD/qbar3dseries.cpp \
+ $$PWD/qscatter3dseries.cpp \
+ $$PWD/qsurface3dseries.cpp
diff --git a/src/datavisualization/data/qabstract3dseries.cpp b/src/datavisualization/data/qabstract3dseries.cpp
new file mode 100644
index 00000000..52d3fda1
--- /dev/null
+++ b/src/datavisualization/data/qabstract3dseries.cpp
@@ -0,0 +1,192 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#include "qabstract3dseries.h"
+#include "qabstract3dseries_p.h"
+#include "qabstractdataproxy_p.h"
+#include "abstract3dcontroller_p.h"
+
+QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+
+/*!
+ * \class QAbstract3DSeries
+ * \inmodule QtDataVisualization
+ * \brief Base class for all QtDataVisualization data proxies.
+ * \since Qt Data Visualization 1.0
+ *
+ * You use the visualization type specific inherited classes instead of the base class.
+ * \sa QBar3DSeries, QScatter3DSeries, QSurface3DSeries, {Qt Data Visualization Data Handling}
+ */
+
+/*!
+ * \qmltype Abstract3DSeries
+ * \inqmlmodule QtDataVisualization
+ * \since QtDataVisualization 1.0
+ * \ingroup datavisualization_qml
+ * \instantiates QAbstract3DSeries
+ * \brief Base type for all QtDataVisualization data proxies.
+ *
+ * This type is uncreatable, but contains properties that are exposed via subtypes.
+ * \sa Bar3DSeries, Scatter3DSeries, Surface3DSeries, {Qt Data Visualization Data Handling}
+ */
+
+/*!
+ * \qmlproperty Abstract3DSeries.SeriesType Abstract3DSeries::type
+ * The type of the series.
+ */
+
+/*!
+ * \qmlproperty string Abstract3DSeries::itemLabelFormat
+ *
+ * Label format for data items in this series. This format is used for single item labels,
+ * for example, when an item is selected. How the format is interpreted depends on series type. See
+ * each series class documentation for more information.
+ */
+
+/*!
+ * \qmlproperty bool Abstract3DSeries::visible
+ * Sets the visibility of the series. If false, the series is not rendered.
+ */
+
+/*!
+ * \enum QAbstract3DSeries::SeriesType
+ *
+ * Type of the series.
+ *
+ * \value SeriesTypeNone
+ * No series type.
+ * \value SeriesTypeBar
+ * Series type for Q3DBars.
+ * \value SeriesTypeScatter
+ * Series type for Q3DScatter.
+ * \value SeriesTypeSurface
+ * Series type for Q3DSurface.
+ */
+
+/*!
+ * \internal
+ */
+QAbstract3DSeries::QAbstract3DSeries(QAbstract3DSeriesPrivate *d, QObject *parent) :
+ QObject(parent),
+ d_ptr(d)
+{
+}
+
+/*!
+ * Destroys QAbstract3DSeries.
+ */
+QAbstract3DSeries::~QAbstract3DSeries()
+{
+}
+
+/*!
+ * \property QAbstract3DSeries::type
+ *
+ * The type of the series.
+ */
+QAbstract3DSeries::SeriesType QAbstract3DSeries::type() const
+{
+ return d_ptr->m_type;
+}
+
+/*!
+ * \property QAbstract3DSeries::itemLabelFormat
+ *
+ * Sets label \a format for data items in this series. This format is used for single item labels,
+ * for example, when an item is selected. How the format is interpreted depends on series type. See
+ * each series class documentation for more information.
+ *
+ * \sa QBar3DSeries, Q3DScatterSeries, Q3DSurfaceSeries
+ */
+void QAbstract3DSeries::setItemLabelFormat(const QString &format)
+{
+ if (format != itemLabelFormat()) {
+ d_ptr->setItemLabelFormat(format);
+ emit itemLabelFormatChanged(format);
+ }
+}
+
+QString QAbstract3DSeries::itemLabelFormat() const
+{
+ return d_ptr->m_itemLabelFormat;
+}
+
+/*!
+ * \property QAbstract3DSeries::visible
+ *
+ * Sets the visibility of the series. If \a visible is false, the series is not rendered.
+ * Defaults to true.
+ */
+void QAbstract3DSeries::setVisible(bool visible)
+{
+ d_ptr->m_visible = visible;
+ emit visibilityChanged(visible);
+}
+
+bool QAbstract3DSeries::isVisible() const
+{
+ return d_ptr->m_visible;
+}
+
+// QAbstract3DSeriesPrivate
+
+QAbstract3DSeriesPrivate::QAbstract3DSeriesPrivate(QAbstract3DSeries *q, QAbstract3DSeries::SeriesType type)
+ : QObject(0),
+ q_ptr(q),
+ m_type(type),
+ m_dataProxy(0),
+ m_visible(true),
+ m_controller(0)
+{
+}
+
+QAbstract3DSeriesPrivate::~QAbstract3DSeriesPrivate()
+{
+}
+
+void QAbstract3DSeriesPrivate::setItemLabelFormat(const QString &format)
+{
+ m_itemLabelFormat = format;
+}
+
+QAbstractDataProxy *QAbstract3DSeriesPrivate::dataProxy() const
+{
+ return m_dataProxy;
+}
+
+void QAbstract3DSeriesPrivate::setDataProxy(QAbstractDataProxy *proxy)
+{
+ Q_ASSERT(proxy && proxy != m_dataProxy && !proxy->d_ptr->series());
+
+ delete m_dataProxy;
+ m_dataProxy = proxy;
+
+ proxy->d_ptr->setSeries(q_ptr); // also sets parent
+
+ if (m_controller)
+ connectControllerAndProxy(m_controller);
+}
+
+void QAbstract3DSeriesPrivate::setController(Abstract3DController *controller)
+{
+ connectControllerAndProxy(controller);
+ m_controller = controller;
+ q_ptr->setParent(controller);
+}
+
+QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qabstract3dseries.h b/src/datavisualization/data/qabstract3dseries.h
new file mode 100644
index 00000000..3f20a161
--- /dev/null
+++ b/src/datavisualization/data/qabstract3dseries.h
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#ifndef QABSTRACT3DSERIES_H
+#define QABSTRACT3DSERIES_H
+
+#include <QtDataVisualization/qdatavisualizationenums.h>
+#include <QObject>
+#include <QScopedPointer>
+
+QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+
+class QAbstract3DSeriesPrivate;
+
+class QT_DATAVISUALIZATION_EXPORT QAbstract3DSeries : public QObject
+{
+ Q_OBJECT
+ Q_ENUMS(SeriesType)
+ Q_PROPERTY(SeriesType type READ type)
+ Q_PROPERTY(QString itemLabelFormat READ itemLabelFormat WRITE setItemLabelFormat NOTIFY itemLabelFormatChanged)
+ Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibilityChanged)
+
+public:
+ enum SeriesType {
+ SeriesTypeNone = 0,
+ SeriesTypeBar = 1,
+ SeriesTypeScatter = 2,
+ SeriesTypeSurface = 4
+ };
+
+protected:
+ explicit QAbstract3DSeries(QAbstract3DSeriesPrivate *d, QObject *parent = 0);
+
+public:
+ virtual ~QAbstract3DSeries();
+
+ SeriesType type() const;
+
+ void setItemLabelFormat(const QString &format);
+ QString itemLabelFormat() const;
+
+ void setVisible(bool visible);
+ bool isVisible() const;
+
+signals:
+ void itemLabelFormatChanged(QString format);
+ void visibilityChanged(bool visible);
+
+protected:
+ QScopedPointer<QAbstract3DSeriesPrivate> d_ptr;
+
+// QDataVis::ColorStyle m_colorStyle;
+// QColor m_objectColor;
+// QLinearGradient m_objectGradient;
+// QColor m_singleHighlightColor;
+// QLinearGradient m_singleHighlightGradient;
+// QColor m_multiHighlightColor;
+// QLinearGradient m_multiHighlightGradient;
+
+private:
+ Q_DISABLE_COPY(QAbstract3DSeries)
+
+ friend class Abstract3DController;
+ friend class Bars3DController;
+ friend class Surface3DController;
+ friend class Scatter3DController;
+};
+
+QT_DATAVISUALIZATION_END_NAMESPACE
+
+#endif
diff --git a/src/datavisualization/data/qabstract3dseries_p.h b/src/datavisualization/data/qabstract3dseries_p.h
new file mode 100644
index 00000000..478fe6bb
--- /dev/null
+++ b/src/datavisualization/data/qabstract3dseries_p.h
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the QtDataVisualization API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+
+#include "datavisualizationglobal_p.h"
+#include "qabstract3dseries.h"
+#include <QString>
+
+#ifndef QABSTRACT3DSERIES_P_H
+#define QABSTRACT3DSERIES_P_H
+
+QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+
+class QAbstractDataProxy;
+class Abstract3DController;
+
+class QAbstract3DSeriesPrivate : public QObject
+{
+ Q_OBJECT
+public:
+ QAbstract3DSeriesPrivate(QAbstract3DSeries *q, QAbstract3DSeries::SeriesType type);
+ virtual ~QAbstract3DSeriesPrivate();
+
+ void setItemLabelFormat(const QString &format);
+
+ QAbstractDataProxy *dataProxy() const;
+ virtual void setDataProxy(QAbstractDataProxy *proxy);
+ virtual void setController(Abstract3DController *controller);
+ virtual void connectControllerAndProxy(Abstract3DController *newController) = 0;
+
+protected:
+ QAbstract3DSeries *q_ptr;
+ QAbstract3DSeries::SeriesType m_type;
+ QString m_itemLabelFormat;
+ QAbstractDataProxy *m_dataProxy;
+ bool m_visible;
+ Abstract3DController *m_controller;
+
+private:
+ friend class QAbstract3DSeries;
+ friend class Abstract3DController;
+ friend class Bars3DController;
+ friend class Surface3DController;
+ friend class Scatter3DController;
+};
+
+QT_DATAVISUALIZATION_END_NAMESPACE
+
+#endif // QAbstract3DSeries_P_H
diff --git a/src/datavisualization/data/qabstractdataproxy.cpp b/src/datavisualization/data/qabstractdataproxy.cpp
index b44f365e..fa0934c3 100644
--- a/src/datavisualization/data/qabstractdataproxy.cpp
+++ b/src/datavisualization/data/qabstractdataproxy.cpp
@@ -18,6 +18,7 @@
#include "qabstractdataproxy.h"
#include "qabstractdataproxy_p.h"
+#include "qabstract3dseries_p.h"
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
@@ -49,14 +50,6 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
*/
/*!
- * \qmlproperty string AbstractDataProxy::itemLabelFormat
- *
- * Label format for data items in this proxy. This format is used for single item labels,
- * for example, when an item is selected. How the format is interpreted depends on proxy type. See
- * each proxy class documentation for more information.
- */
-
-/*!
* \enum QAbstractDataProxy::DataType
*
* Data type of the proxy.
@@ -97,44 +90,13 @@ QAbstractDataProxy::DataType QAbstractDataProxy::type() const
return d_ptr->m_type;
}
-/*!
- * \property QAbstractDataProxy::itemLabelFormat
- *
- * Sets label \a format for data items in this proxy. This format is used for single item labels,
- * for example, when an item is selected. How the format is interpreted depends on proxy type. See
- * each proxy class documentation for more information.
- *
- * \sa QBarDataProxy, QScatterDataProxy, QSurfaceDataProxy
- */
-void QAbstractDataProxy::setItemLabelFormat(const QString &format)
-{
- if (format != itemLabelFormat()) {
- d_ptr->setItemLabelFormat(format);
- emit itemLabelFormatChanged(format);
- }
-}
-
-/*!
- * \return label format for data items in this proxy.
- */
-QString QAbstractDataProxy::itemLabelFormat() const
-{
- return d_ptr->m_itemLabelFormat;
-}
-
-/*!
- * \fn void QAbstractDataProxy::itemLabelFormatChanged(QString format)
- *
- * Emitted when label format changes.
- */
-
// QAbstractDataProxyPrivate
QAbstractDataProxyPrivate::QAbstractDataProxyPrivate(QAbstractDataProxy *q, QAbstractDataProxy::DataType type)
: QObject(0),
q_ptr(q),
m_type(type),
- m_isDefaultProxy(false)
+ m_series(0)
{
}
@@ -142,9 +104,10 @@ QAbstractDataProxyPrivate::~QAbstractDataProxyPrivate()
{
}
-void QAbstractDataProxyPrivate::setItemLabelFormat(const QString &format)
+void QAbstractDataProxyPrivate::setSeries(QAbstract3DSeries *series)
{
- m_itemLabelFormat = format;
+ setParent(series);
+ m_series = series;
}
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qabstractdataproxy.h b/src/datavisualization/data/qabstractdataproxy.h
index d7793824..b493052f 100644
--- a/src/datavisualization/data/qabstractdataproxy.h
+++ b/src/datavisualization/data/qabstractdataproxy.h
@@ -32,7 +32,6 @@ class QT_DATAVISUALIZATION_EXPORT QAbstractDataProxy : public QObject
Q_OBJECT
Q_ENUMS(DataType)
Q_PROPERTY(DataType type READ type)
- Q_PROPERTY(QString itemLabelFormat READ itemLabelFormat WRITE setItemLabelFormat NOTIFY itemLabelFormatChanged)
public:
enum DataType {
@@ -50,22 +49,17 @@ public:
DataType type() const;
- void setItemLabelFormat(const QString &format);
- QString itemLabelFormat() const;
-
-signals:
- void itemLabelFormatChanged(QString format);
-
protected:
QScopedPointer<QAbstractDataProxyPrivate> d_ptr;
private:
Q_DISABLE_COPY(QAbstractDataProxy)
- friend class Abstract3DController;
- friend class Bars3DController;
- friend class Scatter3DController;
- friend class Surface3DController;
+ friend class QAbstract3DSeriesPrivate;
+// friend class Abstract3DController;
+// friend class Bars3DController;
+// friend class Scatter3DController;
+// friend class Surface3DController;
};
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qabstractdataproxy_p.h b/src/datavisualization/data/qabstractdataproxy_p.h
index 4aa1b678..90504ccb 100644
--- a/src/datavisualization/data/qabstractdataproxy_p.h
+++ b/src/datavisualization/data/qabstractdataproxy_p.h
@@ -35,6 +35,8 @@
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+class QAbstract3DSeries;
+
class QAbstractDataProxyPrivate : public QObject
{
Q_OBJECT
@@ -42,16 +44,13 @@ public:
QAbstractDataProxyPrivate(QAbstractDataProxy *q, QAbstractDataProxy::DataType type);
virtual ~QAbstractDataProxyPrivate();
- void setItemLabelFormat(const QString &format);
-
- inline bool isDefaultProxy() { return m_isDefaultProxy; }
- inline void setDefaultProxy(bool isDefault) { m_isDefaultProxy = isDefault; }
+ inline QAbstract3DSeries *series() { return m_series; }
+ virtual void setSeries(QAbstract3DSeries *series);
protected:
QAbstractDataProxy *q_ptr;
QAbstractDataProxy::DataType m_type;
- QString m_itemLabelFormat;
- bool m_isDefaultProxy;
+ QAbstract3DSeries *m_series;
private:
friend class QAbstractDataProxy;
diff --git a/src/datavisualization/data/qbar3dseries.cpp b/src/datavisualization/data/qbar3dseries.cpp
new file mode 100644
index 00000000..c04f8ca2
--- /dev/null
+++ b/src/datavisualization/data/qbar3dseries.cpp
@@ -0,0 +1,220 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#include "qbar3dseries_p.h"
+#include "bars3dcontroller_p.h"
+
+QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+
+/*!
+ * \class QBar3DSeries
+ * \inmodule QtDataVisualization
+ * \brief Base series class for Q3DBars.
+ * \since Qt Data Visualization 1.0
+ *
+ * QBar3DSeries manages the series specific visual elements, as well as series data
+ * (via data proxy).
+ *
+ * If no data proxy is set explicitly for the series, QBar3DSeries creates a default
+ * proxy. If any other proxy is set as active data proxy later, the default proxy and all data
+ * added to it are destroyed.
+ *
+ * QBar3DSeries optionally keeps track of row and column labels, which Q3DCategoryAxis can utilize
+ * to show axis labels. The row and column labels are stored in separate array from the data and
+ * row manipulation methods provide an alternate versions that don't affect the row labels.
+ * This enables the option of having row labels that relate to the position of the data in the
+ * array rather than the data itself.
+ *
+ * QBar3DSeries supports the following format tags for QAbstract3DSeries::setItemLabelFormat():
+ * \table
+ * \row
+ * \li @rowTitle \li Title from row axis
+ * \row
+ * \li @colTitle \li Title from column axis
+ * \row
+ * \li @valueTitle \li Title from value axis
+ * \row
+ * \li @rowIdx \li Visible row index
+ * \row
+ * \li @colIdx \li Visible Column index
+ * \row
+ * \li @rowLabel \li Label from row axis
+ * \row
+ * \li @colLabel \li Label from column axis
+ * \row
+ * \li @valueLabel \li Item value formatted using the same format the value axis attached to the graph uses,
+ * see \l{Q3DValueAxis::setLabelFormat()} for more information.
+ * \row
+ * \li %<format spec> \li Item value in specified format.
+ * \endtable
+ *
+ * For example:
+ * \snippet doc_src_qtdatavisualization.cpp 1
+ *
+ * \sa {Qt Data Visualization Data Handling}
+ */
+
+/*!
+ * \qmltype Bar3DSeries
+ * \inqmlmodule QtDataVisualization
+ * \since QtDataVisualization 1.0
+ * \ingroup datavisualization_qml
+ * \instantiates QBar3DSeries
+ * \inherits Abstract3DSeries
+ * \brief Base series type for Bars3D.
+ *
+ * This type manages the series specific visual elements, as well as series data
+ * (via data proxy).
+ *
+ * For more complete description, see QBar3DSeries.
+ *
+ * \sa {Qt Data Visualization Data Handling}
+ */
+
+
+/*!
+ * Constructs QBar3DSeries with the given \a parent.
+ */
+QBar3DSeries::QBar3DSeries(QObject *parent) :
+ QAbstract3DSeries(new QBar3DSeriesPrivate(this), parent)
+{
+ // Default proxy
+ dptr()->setDataProxy(new QBarDataProxy);
+}
+
+QBar3DSeries::QBar3DSeries(QBarDataProxy *dataProxy, QObject *parent) :
+ QAbstract3DSeries(new QBar3DSeriesPrivate(this), parent)
+{
+ dptr()->setDataProxy(dataProxy);
+}
+
+/*!
+ * \internal
+ */
+QBar3DSeries::QBar3DSeries(QBar3DSeriesPrivate *d, QObject *parent) :
+ QAbstract3DSeries(d, parent)
+{
+}
+
+/*!
+ * Destroys QBar3DSeries.
+ */
+QBar3DSeries::~QBar3DSeries()
+{
+}
+
+/*!
+ * \property QBar3DSeries::dataProxy
+ *
+ * This property holds the active data \a proxy. The series assumes ownership of any proxy set to
+ * it and deletes any previously set proxy when a new one is added. The \a proxy cannot be null or
+ * set to another series.
+ */
+void QBar3DSeries::setDataProxy(QBarDataProxy *proxy)
+{
+ d_ptr->setDataProxy(proxy);
+}
+
+QBarDataProxy *QBar3DSeries::dataProxy() const
+{
+ return static_cast<QBarDataProxy *>(d_ptr->dataProxy());
+}
+
+/*!
+ * \internal
+ */
+QBar3DSeriesPrivate *QBar3DSeries::dptr()
+{
+ return static_cast<QBar3DSeriesPrivate *>(d_ptr.data());
+}
+
+/*!
+ * \internal
+ */
+const QBar3DSeriesPrivate *QBar3DSeries::dptrc() const
+{
+ return static_cast<const QBar3DSeriesPrivate *>(d_ptr.data());
+}
+
+// QBar3DSeriesPrivate
+
+QBar3DSeriesPrivate::QBar3DSeriesPrivate(QBar3DSeries *q)
+ : QAbstract3DSeriesPrivate(q, QAbstract3DSeries::SeriesTypeBar)
+{
+ m_itemLabelFormat = QStringLiteral("@valueTitle: @valueLabel");
+}
+
+QBar3DSeriesPrivate::~QBar3DSeriesPrivate()
+{
+}
+
+QBar3DSeries *QBar3DSeriesPrivate::qptr()
+{
+ return static_cast<QBar3DSeries *>(q_ptr);
+}
+
+void QBar3DSeriesPrivate::setDataProxy(QAbstractDataProxy *proxy)
+{
+ Q_ASSERT(proxy->type() == QAbstractDataProxy::DataTypeBar);
+
+ QAbstract3DSeriesPrivate::setDataProxy(proxy);
+
+ emit qptr()->dataProxyChanged(static_cast<QBarDataProxy *>(proxy));
+}
+
+void QBar3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *newController)
+{
+ QBarDataProxy *barDataProxy = static_cast<QBarDataProxy *>(m_dataProxy);
+
+ if (m_controller && barDataProxy) {
+ //Disconnect old controller/old proxy
+ QObject::disconnect(barDataProxy, 0, m_controller, 0);
+ QObject::disconnect(q_ptr, 0, m_controller, 0);
+ }
+
+ if (newController && barDataProxy) {
+ Bars3DController *controller = static_cast<Bars3DController *>(newController);
+
+ QObject::connect(barDataProxy, &QBarDataProxy::arrayReset, controller,
+ &Bars3DController::handleArrayReset);
+ QObject::connect(barDataProxy, &QBarDataProxy::rowsAdded, controller,
+ &Bars3DController::handleRowsAdded);
+ QObject::connect(barDataProxy, &QBarDataProxy::rowsChanged, controller,
+ &Bars3DController::handleRowsChanged);
+ QObject::connect(barDataProxy, &QBarDataProxy::rowsRemoved, controller,
+ &Bars3DController::handleRowsRemoved);
+ QObject::connect(barDataProxy, &QBarDataProxy::rowsInserted, controller,
+ &Bars3DController::handleRowsInserted);
+ QObject::connect(barDataProxy, &QBarDataProxy::itemChanged, controller,
+ &Bars3DController::handleItemChanged);
+ QObject::connect(barDataProxy, &QBarDataProxy::rowLabelsChanged, controller,
+ &Bars3DController::handleDataRowLabelsChanged);
+ QObject::connect(barDataProxy, &QBarDataProxy::columnLabelsChanged, controller,
+ &Bars3DController::handleDataColumnLabelsChanged);
+
+ QObject::connect(q_ptr, &QAbstract3DSeries::visibilityChanged, controller,
+ &Abstract3DController::handleSeriesVisibilityChanged);
+
+ // Always clear selection on proxy change
+ // TODO: setSelectedBar(noSelectionPoint());
+
+ newController->handleSeriesVisibilityChanged(m_visible);
+ }
+}
+
+QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qbar3dseries.h b/src/datavisualization/data/qbar3dseries.h
new file mode 100644
index 00000000..ebb37838
--- /dev/null
+++ b/src/datavisualization/data/qbar3dseries.h
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#ifndef QBAR3DSERIES_H
+#define QBAR3DSERIES_H
+
+#include <QtDataVisualization/qabstract3dseries.h>
+#include <QtDataVisualization/qbardataproxy.h>
+
+QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+
+class QBar3DSeriesPrivate;
+
+class QT_DATAVISUALIZATION_EXPORT QBar3DSeries : public QAbstract3DSeries
+{
+ Q_OBJECT
+ Q_PROPERTY(QBarDataProxy *dataProxy READ dataProxy WRITE setDataProxy NOTIFY dataProxyChanged)
+
+public:
+ explicit QBar3DSeries(QObject *parent = 0);
+ explicit QBar3DSeries(QBarDataProxy *dataProxy, QObject *parent = 0);
+ virtual ~QBar3DSeries();
+
+ void setDataProxy(QBarDataProxy *proxy);
+ QBarDataProxy *dataProxy() const;
+
+signals:
+ void dataProxyChanged(QBarDataProxy *proxy);
+
+protected:
+ explicit QBar3DSeries(QBar3DSeriesPrivate *d, QObject *parent = 0);
+ QBar3DSeriesPrivate *dptr();
+ const QBar3DSeriesPrivate *dptrc() const;
+
+private:
+ Q_DISABLE_COPY(QBar3DSeries)
+
+ friend class Bars3DController;
+};
+
+QT_DATAVISUALIZATION_END_NAMESPACE
+
+#endif
diff --git a/src/datavisualization/data/qbar3dseries_p.h b/src/datavisualization/data/qbar3dseries_p.h
new file mode 100644
index 00000000..3ed95a69
--- /dev/null
+++ b/src/datavisualization/data/qbar3dseries_p.h
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the QtDataVisualization API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+
+#ifndef QBAR3DSERIES_P_H
+#define QBAR3DSERIES_P_H
+
+#include "qbar3dseries.h"
+#include "qabstract3dseries_p.h"
+
+QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+
+class QBar3DSeriesPrivate : public QAbstract3DSeriesPrivate
+{
+ Q_OBJECT
+public:
+ QBar3DSeriesPrivate(QBar3DSeries *q);
+ virtual ~QBar3DSeriesPrivate();
+
+ virtual void setDataProxy(QAbstractDataProxy *proxy);
+ virtual void connectControllerAndProxy(Abstract3DController *newController);
+private:
+ QBar3DSeries *qptr();
+
+private:
+ friend class QBar3DSeries;
+};
+
+QT_DATAVISUALIZATION_END_NAMESPACE
+
+#endif
diff --git a/src/datavisualization/data/qbardataproxy.cpp b/src/datavisualization/data/qbardataproxy.cpp
index 13517b4b..26c3a36a 100644
--- a/src/datavisualization/data/qbardataproxy.cpp
+++ b/src/datavisualization/data/qbardataproxy.cpp
@@ -18,6 +18,7 @@
#include "qbardataproxy.h"
#include "qbardataproxy_p.h"
+#include "qbar3dseries_p.h"
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
@@ -110,6 +111,12 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
*/
/*!
+ * \qmlproperty Bar3DSeries BarDataProxy::series
+ *
+ * The series this proxy is attached to.
+ */
+
+/*!
* Constructs QBarDataProxy with the given \a parent.
*/
QBarDataProxy::QBarDataProxy(QObject *parent) :
@@ -133,6 +140,16 @@ QBarDataProxy::~QBarDataProxy()
}
/*!
+ * \property QBarDataProxy::series
+ *
+ * The series this proxy is attached to.
+ */
+QBar3DSeries *QBarDataProxy::series()
+{
+ return static_cast<QBar3DSeries *>(d_ptr->series());
+}
+
+/*!
* Clears the existing array and row and column labels.
*/
void QBarDataProxy::resetArray()
@@ -482,7 +499,6 @@ QBarDataProxyPrivate::QBarDataProxyPrivate(QBarDataProxy *q)
: QAbstractDataProxyPrivate(q, QAbstractDataProxy::DataTypeBar),
m_dataArray(new QBarDataArray)
{
- m_itemLabelFormat = QStringLiteral("@valueTitle: @valueLabel");
}
QBarDataProxyPrivate::~QBarDataProxyPrivate()
@@ -704,4 +720,11 @@ QPair<GLfloat, GLfloat> QBarDataProxyPrivate::limitValues(int startRow, int endR
return limits;
}
+void QBarDataProxyPrivate::setSeries(QAbstract3DSeries *series)
+{
+ QAbstractDataProxyPrivate::setSeries(series);
+ QBar3DSeries *barSeries = static_cast<QBar3DSeries *>(series);
+ emit qptr()->seriesChanged(barSeries);
+}
+
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qbardataproxy.h b/src/datavisualization/data/qbardataproxy.h
index 758700df..e97e6a85 100644
--- a/src/datavisualization/data/qbardataproxy.h
+++ b/src/datavisualization/data/qbardataproxy.h
@@ -30,6 +30,7 @@ typedef QVector<QBarDataItem> QBarDataRow;
typedef QList<QBarDataRow *> QBarDataArray;
class QBarDataProxyPrivate;
+class QBar3DSeries;
class QT_DATAVISUALIZATION_EXPORT QBarDataProxy : public QAbstractDataProxy
{
@@ -38,6 +39,7 @@ class QT_DATAVISUALIZATION_EXPORT QBarDataProxy : public QAbstractDataProxy
Q_PROPERTY(int rowCount READ rowCount)
Q_PROPERTY(QStringList rowLabels READ rowLabels WRITE setRowLabels NOTIFY rowLabelsChanged)
Q_PROPERTY(QStringList columnLabels READ columnLabels WRITE setColumnLabels NOTIFY columnLabelsChanged)
+ Q_PROPERTY(QBar3DSeries *series READ series NOTIFY seriesChanged)
public:
explicit QBarDataProxy(QObject *parent = 0);
virtual ~QBarDataProxy();
@@ -51,6 +53,7 @@ public:
* individual bar requires allocating additional data object for the bar.
*/
+ QBar3DSeries *series();
int rowCount() const;
QStringList rowLabels() const;
@@ -113,6 +116,7 @@ signals:
void rowLabelsChanged();
void columnLabelsChanged();
+ void seriesChanged(QBar3DSeries *series);
protected:
explicit QBarDataProxy(QBarDataProxyPrivate *d, QObject *parent = 0);
diff --git a/src/datavisualization/data/qbardataproxy_p.h b/src/datavisualization/data/qbardataproxy_p.h
index 4d51bd5b..84726a02 100644
--- a/src/datavisualization/data/qbardataproxy_p.h
+++ b/src/datavisualization/data/qbardataproxy_p.h
@@ -56,6 +56,8 @@ public:
QPair<GLfloat, GLfloat> limitValues(int startRow, int startColumn, int rowCount,
int columnCount) const;
+ virtual void setSeries(QAbstract3DSeries *series);
+
private:
QBarDataProxy *qptr();
void clearRow(int rowIndex);
diff --git a/src/datavisualization/data/qscatter3dseries.cpp b/src/datavisualization/data/qscatter3dseries.cpp
new file mode 100644
index 00000000..2fe61cff
--- /dev/null
+++ b/src/datavisualization/data/qscatter3dseries.cpp
@@ -0,0 +1,204 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#include "qscatter3dseries_p.h"
+#include "scatter3dcontroller_p.h"
+
+QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+
+/*!
+ * \class QScatter3DSeries
+ * \inmodule QtDataVisualization
+ * \brief Base series class for Q3DScatter.
+ * \since Qt Data Visualization 1.0
+ *
+ * QScatter3DSeries manages the series specific visual elements, as well as series data
+ * (via data proxy).
+ *
+ * If no data proxy is set explicitly for the series, QScatter3DSeries creates a default
+ * proxy. If any other proxy is set as active data proxy later, the default proxy and all data
+ * added to it are destroyed.
+ *
+ * QScatter3DSeries supports the following format tags for QAbstract3DSeries::setItemLabelFormat():
+ * \table
+ * \row
+ * \li @xTitle \li Title from X axis
+ * \row
+ * \li @yTitle \li Title from Y axis
+ * \row
+ * \li @zTitle \li Title from Z axis
+ * \row
+ * \li @xLabel \li Item value formatted using the same format the X axis attached to the graph uses,
+ * see \l{Q3DValueAxis::setLabelFormat()} for more information.
+ * \row
+ * \li @yLabel \li Item value formatted using the same format the Y axis attached to the graph uses,
+ * see \l{Q3DValueAxis::setLabelFormat()} for more information.
+ * \row
+ * \li @zLabel \li Item value formatted using the same format the Z axis attached to the graph uses,
+ * see \l{Q3DValueAxis::setLabelFormat()} for more information.
+ * \endtable
+ *
+ * For example:
+ * \snippet doc_src_qtdatavisualization.cpp 1
+ *
+ * \sa {Qt Data Visualization Data Handling}
+ */
+
+/*!
+ * \qmltype Scatter3DSeries
+ * \inqmlmodule QtDataVisualization
+ * \since QtDataVisualization 1.0
+ * \ingroup datavisualization_qml
+ * \instantiates QScatter3DSeries
+ * \inherits Abstract3DSeries
+ * \brief Base series type for Scatter3D.
+ *
+ * This type manages the series specific visual elements, as well as series data
+ * (via data proxy).
+ *
+ * For more complete description, see QScatter3DSeries.
+ *
+ * \sa {Qt Data Visualization Data Handling}
+ */
+
+
+/*!
+ * Constructs QScatter3DSeries with the given \a parent.
+ */
+QScatter3DSeries::QScatter3DSeries(QObject *parent) :
+ QAbstract3DSeries(new QScatter3DSeriesPrivate(this), parent)
+{
+ // Default proxy
+ dptr()->setDataProxy(new QScatterDataProxy);
+}
+
+QScatter3DSeries::QScatter3DSeries(QScatterDataProxy *dataProxy, QObject *parent) :
+ QAbstract3DSeries(new QScatter3DSeriesPrivate(this), parent)
+{
+ dptr()->setDataProxy(dataProxy);
+}
+
+/*!
+ * \internal
+ */
+QScatter3DSeries::QScatter3DSeries(QScatter3DSeriesPrivate *d, QObject *parent) :
+ QAbstract3DSeries(d, parent)
+{
+}
+
+/*!
+ * Destroys QScatter3DSeries.
+ */
+QScatter3DSeries::~QScatter3DSeries()
+{
+}
+
+/*!
+ * \property QScatter3DSeries::dataProxy
+ *
+ * This property holds the active data \a proxy. The series assumes ownership of any proxy set to
+ * it and deletes any previously set proxy when a new one is added. The \a proxy cannot be null or
+ * set to another series.
+ */
+void QScatter3DSeries::setDataProxy(QScatterDataProxy *proxy)
+{
+ d_ptr->setDataProxy(proxy);
+}
+
+QScatterDataProxy *QScatter3DSeries::dataProxy() const
+{
+ return static_cast<QScatterDataProxy *>(d_ptr->dataProxy());
+}
+
+/*!
+ * \internal
+ */
+QScatter3DSeriesPrivate *QScatter3DSeries::dptr()
+{
+ return static_cast<QScatter3DSeriesPrivate *>(d_ptr.data());
+}
+
+/*!
+ * \internal
+ */
+const QScatter3DSeriesPrivate *QScatter3DSeries::dptrc() const
+{
+ return static_cast<const QScatter3DSeriesPrivate *>(d_ptr.data());
+}
+
+// QScatter3DSeriesPrivate
+
+QScatter3DSeriesPrivate::QScatter3DSeriesPrivate(QScatter3DSeries *q)
+ : QAbstract3DSeriesPrivate(q, QAbstract3DSeries::SeriesTypeScatter)
+{
+ m_itemLabelFormat = QStringLiteral("@valueTitle: @valueLabel");
+}
+
+QScatter3DSeriesPrivate::~QScatter3DSeriesPrivate()
+{
+}
+
+QScatter3DSeries *QScatter3DSeriesPrivate::qptr()
+{
+ return static_cast<QScatter3DSeries *>(q_ptr);
+}
+
+void QScatter3DSeriesPrivate::setDataProxy(QAbstractDataProxy *proxy)
+{
+ Q_ASSERT(proxy->type() == QAbstractDataProxy::DataTypeScatter);
+
+ QAbstract3DSeriesPrivate::setDataProxy(proxy);
+
+ emit qptr()->dataProxyChanged(static_cast<QScatterDataProxy *>(proxy));
+}
+
+void QScatter3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *newController)
+{
+ QScatterDataProxy *scatterDataProxy = static_cast<QScatterDataProxy *>(m_dataProxy);
+
+ if (m_controller && scatterDataProxy) {
+ //Disconnect old controller/old proxy
+ QObject::disconnect(scatterDataProxy, 0, m_controller, 0);
+ QObject::disconnect(q_ptr, 0, m_controller, 0);
+ }
+
+ if (newController && scatterDataProxy) {
+ Scatter3DController *controller = static_cast<Scatter3DController *>(newController);
+
+ QObject::connect(scatterDataProxy, &QScatterDataProxy::arrayReset,
+ controller, &Scatter3DController::handleArrayReset);
+ QObject::connect(scatterDataProxy, &QScatterDataProxy::itemsAdded,
+ controller, &Scatter3DController::handleItemsAdded);
+ QObject::connect(scatterDataProxy, &QScatterDataProxy::itemsChanged,
+ controller, &Scatter3DController::handleItemsChanged);
+ QObject::connect(scatterDataProxy, &QScatterDataProxy::itemsRemoved,
+ controller, &Scatter3DController::handleItemsRemoved);
+ QObject::connect(scatterDataProxy, &QScatterDataProxy::itemsInserted,
+ controller, &Scatter3DController::handleItemsInserted);
+
+ QObject::connect(q_ptr, &QAbstract3DSeries::visibilityChanged, controller,
+ &Abstract3DController::handleSeriesVisibilityChanged);
+
+ // Always clear selection on proxy change
+ // TODO: setSelectedScatter(noSelectionPoint());
+
+ newController->handleSeriesVisibilityChanged(m_visible);
+ }
+}
+
+QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qscatter3dseries.h b/src/datavisualization/data/qscatter3dseries.h
new file mode 100644
index 00000000..bb24f79a
--- /dev/null
+++ b/src/datavisualization/data/qscatter3dseries.h
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#ifndef QSCATTER3DSERIES_H
+#define QSCATTER3DSERIES_H
+
+#include <QtDataVisualization/qabstract3dseries.h>
+#include <QtDataVisualization/qscatterdataproxy.h>
+
+QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+
+class QScatter3DSeriesPrivate;
+
+class QT_DATAVISUALIZATION_EXPORT QScatter3DSeries : public QAbstract3DSeries
+{
+ Q_OBJECT
+ Q_PROPERTY(QScatterDataProxy *dataProxy READ dataProxy WRITE setDataProxy NOTIFY dataProxyChanged)
+
+public:
+ explicit QScatter3DSeries(QObject *parent = 0);
+ explicit QScatter3DSeries(QScatterDataProxy *dataProxy, QObject *parent = 0);
+ virtual ~QScatter3DSeries();
+
+ void setDataProxy(QScatterDataProxy *proxy);
+ QScatterDataProxy *dataProxy() const;
+
+signals:
+ void dataProxyChanged(QScatterDataProxy *proxy);
+
+protected:
+ explicit QScatter3DSeries(QScatter3DSeriesPrivate *d, QObject *parent = 0);
+ QScatter3DSeriesPrivate *dptr();
+ const QScatter3DSeriesPrivate *dptrc() const;
+
+private:
+ Q_DISABLE_COPY(QScatter3DSeries)
+
+ friend class Scatter3DController;
+};
+
+QT_DATAVISUALIZATION_END_NAMESPACE
+
+#endif
diff --git a/src/datavisualization/data/qscatter3dseries_p.h b/src/datavisualization/data/qscatter3dseries_p.h
new file mode 100644
index 00000000..001fb00c
--- /dev/null
+++ b/src/datavisualization/data/qscatter3dseries_p.h
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the QtDataVisualization API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+
+#ifndef QSCATTER3DSERIES_P_H
+#define QSCATTER3DSERIES_P_H
+
+#include "qscatter3dseries.h"
+#include "qabstract3dseries_p.h"
+
+QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+
+class QScatter3DSeriesPrivate : public QAbstract3DSeriesPrivate
+{
+ Q_OBJECT
+public:
+ QScatter3DSeriesPrivate(QScatter3DSeries *q);
+ virtual ~QScatter3DSeriesPrivate();
+
+ virtual void setDataProxy(QAbstractDataProxy *proxy);
+ virtual void connectControllerAndProxy(Abstract3DController *newController);
+private:
+ QScatter3DSeries *qptr();
+
+private:
+ friend class QScatter3DSeries;
+};
+
+QT_DATAVISUALIZATION_END_NAMESPACE
+
+#endif
diff --git a/src/datavisualization/data/qscatterdataproxy.cpp b/src/datavisualization/data/qscatterdataproxy.cpp
index 85cbb4eb..149cb1ae 100644
--- a/src/datavisualization/data/qscatterdataproxy.cpp
+++ b/src/datavisualization/data/qscatterdataproxy.cpp
@@ -18,6 +18,7 @@
#include "qscatterdataproxy.h"
#include "qscatterdataproxy_p.h"
+#include "qscatter3dseries_p.h"
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
@@ -80,6 +81,12 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
*/
/*!
+ * \qmlproperty Scatter3DSeries ScatterDataProxy::series
+ *
+ * The series this proxy is attached to.
+ */
+
+/*!
* Constructs QScatterDataProxy with the given \a parent.
*/
QScatterDataProxy::QScatterDataProxy(QObject *parent) :
@@ -103,6 +110,16 @@ QScatterDataProxy::~QScatterDataProxy()
}
/*!
+ * \property QScatterDataProxy::series
+ *
+ * The series this proxy is attached to.
+ */
+QScatter3DSeries *QScatterDataProxy::series()
+{
+ return static_cast<QScatter3DSeries *>(d_ptr->series());
+}
+
+/*!
* Takes ownership of the \a newArray. Clears the existing array if the \a newArray is
* different from the existing array. If it's the same array, this just triggers arrayReset()
* signal.
@@ -277,7 +294,6 @@ QScatterDataProxyPrivate::QScatterDataProxyPrivate(QScatterDataProxy *q)
: QAbstractDataProxyPrivate(q, QAbstractDataProxy::DataTypeScatter),
m_dataArray(new QScatterDataArray)
{
- m_itemLabelFormat = QStringLiteral("(@xLabel, @yLabel, @zLabel)");
}
QScatterDataProxyPrivate::~QScatterDataProxyPrivate()
@@ -346,7 +362,7 @@ void QScatterDataProxyPrivate::removeItems(int index, int removeCount)
m_dataArray->remove(index, removeCount);
}
-void QScatterDataProxyPrivate::limitValues(QVector3D &minValues, QVector3D &maxValues)
+void QScatterDataProxyPrivate::limitValues(QVector3D &minValues, QVector3D &maxValues) const
{
if (m_dataArray->isEmpty())
return;
@@ -393,4 +409,16 @@ void QScatterDataProxyPrivate::limitValues(QVector3D &minValues, QVector3D &maxV
maxValues.setZ(maxZ);
}
+void QScatterDataProxyPrivate::setSeries(QAbstract3DSeries *series)
+{
+ QAbstractDataProxyPrivate::setSeries(series);
+ QScatter3DSeries *scatterSeries = static_cast<QScatter3DSeries *>(series);
+ emit qptr()->seriesChanged(scatterSeries);
+}
+
+QScatterDataProxy *QScatterDataProxyPrivate::qptr()
+{
+ return static_cast<QScatterDataProxy *>(q_ptr);
+}
+
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qscatterdataproxy.h b/src/datavisualization/data/qscatterdataproxy.h
index 178bc900..e17154c0 100644
--- a/src/datavisualization/data/qscatterdataproxy.h
+++ b/src/datavisualization/data/qscatterdataproxy.h
@@ -27,12 +27,14 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
typedef QVector<QScatterDataItem> QScatterDataArray;
class QScatterDataProxyPrivate;
+class QScatter3DSeries;
class QT_DATAVISUALIZATION_EXPORT QScatterDataProxy : public QAbstractDataProxy
{
Q_OBJECT
Q_PROPERTY(int itemCount READ itemCount)
+ Q_PROPERTY(QScatter3DSeries *series READ series NOTIFY seriesChanged)
public:
explicit QScatterDataProxy(QObject *parent = 0);
@@ -46,6 +48,7 @@ public:
* added in the future such as color requires allocating additional data object for the bar.
*/
+ QScatter3DSeries *series();
int itemCount() const;
const QScatterDataArray *array() const;
const QScatterDataItem *itemAt(int index) const;
@@ -69,6 +72,7 @@ signals:
void itemsChanged(int startIndex, int count);
void itemsRemoved(int startIndex, int count);
void itemsInserted(int startIndex, int count);
+ void seriesChanged(QScatter3DSeries *series);
protected:
explicit QScatterDataProxy(QScatterDataProxyPrivate *d, QObject *parent = 0);
diff --git a/src/datavisualization/data/qscatterdataproxy_p.h b/src/datavisualization/data/qscatterdataproxy_p.h
index 24b5eb67..322c8937 100644
--- a/src/datavisualization/data/qscatterdataproxy_p.h
+++ b/src/datavisualization/data/qscatterdataproxy_p.h
@@ -51,9 +51,11 @@ public:
void insertItems(int index, const QScatterDataArray &items);
void removeItems(int index, int removeCount);
- void limitValues(QVector3D &minValues, QVector3D &maxValues);
+ void limitValues(QVector3D &minValues, QVector3D &maxValues) const;
+ virtual void setSeries(QAbstract3DSeries *series);
private:
+ QScatterDataProxy *qptr();
QScatterDataArray *m_dataArray;
friend class QScatterDataProxy;
diff --git a/src/datavisualization/data/qsurface3dseries.cpp b/src/datavisualization/data/qsurface3dseries.cpp
new file mode 100644
index 00000000..a4622580
--- /dev/null
+++ b/src/datavisualization/data/qsurface3dseries.cpp
@@ -0,0 +1,196 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#include "qsurface3dseries_p.h"
+#include "surface3dcontroller_p.h"
+
+QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+
+/*!
+ * \class QSurface3DSeries
+ * \inmodule QtDataVisualization
+ * \brief Base series class for Q3DSurface.
+ * \since Qt Data Visualization 1.0
+ *
+ * QSurface3DSeries manages the series specific visual elements, as well as series data
+ * (via data proxy).
+ *
+ * If no data proxy is set explicitly for the series, QSurface3DSeries creates a default
+ * proxy. If any other proxy is set as active data proxy later, the default proxy and all data
+ * added to it are destroyed.
+ *
+ * QSurface3DSeries supports the following format tags for QAbstract3DSeries::setItemLabelFormat():
+ * \table
+ * \row
+ * \li @xTitle \li Title from X axis
+ * \row
+ * \li @yTitle \li Title from Y axis
+ * \row
+ * \li @zTitle \li Title from Z axis
+ * \row
+ * \li @xLabel \li Item value formatted using the same format as the X axis attached to the graph uses,
+ * see \l{Q3DValueAxis::setLabelFormat()} for more information.
+ * \row
+ * \li @yLabel \li Item value formatted using the same format as the Y axis attached to the graph uses,
+ * see \l{Q3DValueAxis::setLabelFormat()} for more information.
+ * \row
+ * \li @zLabel \li Item value formatted using the same format as the Z axis attached to the graph uses,
+ * see \l{Q3DValueAxis::setLabelFormat()} for more information.
+ * \endtable
+ *
+ * For example:
+ * \snippet doc_src_qtdatavisualization.cpp 1
+ *
+ * \sa {Qt Data Visualization Data Handling}
+ */
+
+/*!
+ * \qmltype Surface3DSeries
+ * \inqmlmodule QtDataVisualization
+ * \since QtDataVisualization 1.0
+ * \ingroup datavisualization_qml
+ * \instantiates QSurface3DSeries
+ * \inherits Abstract3DSeries
+ * \brief Base series type for Surfaces3D.
+ *
+ * This type manages the series specific visual elements, as well as series data
+ * (via data proxy).
+ *
+ * For more complete description, see QSurface3DSeries.
+ *
+ * \sa {Qt Data Visualization Data Handling}
+ */
+
+
+/*!
+ * Constructs QSurface3DSeries with the given \a parent.
+ */
+QSurface3DSeries::QSurface3DSeries(QObject *parent) :
+ QAbstract3DSeries(new QSurface3DSeriesPrivate(this), parent)
+{
+ // Default proxy
+ dptr()->setDataProxy(new QSurfaceDataProxy);
+}
+
+QSurface3DSeries::QSurface3DSeries(QSurfaceDataProxy *dataProxy, QObject *parent) :
+ QAbstract3DSeries(new QSurface3DSeriesPrivate(this), parent)
+{
+ dptr()->setDataProxy(dataProxy);
+}
+
+/*!
+ * \internal
+ */
+QSurface3DSeries::QSurface3DSeries(QSurface3DSeriesPrivate *d, QObject *parent) :
+ QAbstract3DSeries(d, parent)
+{
+}
+
+/*!
+ * Destroys QSurface3DSeries.
+ */
+QSurface3DSeries::~QSurface3DSeries()
+{
+}
+
+/*!
+ * \property QSurface3DSeries::dataProxy
+ *
+ * This property holds the active data \a proxy. The series assumes ownership of any proxy set to
+ * it and deletes any previously set proxy when a new one is added. The \a proxy cannot be null or
+ * set to another series.
+ */
+void QSurface3DSeries::setDataProxy(QSurfaceDataProxy *proxy)
+{
+ d_ptr->setDataProxy(proxy);
+}
+
+QSurfaceDataProxy *QSurface3DSeries::dataProxy() const
+{
+ return static_cast<QSurfaceDataProxy *>(d_ptr->dataProxy());
+}
+
+/*!
+ * \internal
+ */
+QSurface3DSeriesPrivate *QSurface3DSeries::dptr()
+{
+ return static_cast<QSurface3DSeriesPrivate *>(d_ptr.data());
+}
+
+/*!
+ * \internal
+ */
+const QSurface3DSeriesPrivate *QSurface3DSeries::dptrc() const
+{
+ return static_cast<const QSurface3DSeriesPrivate *>(d_ptr.data());
+}
+
+// QSurface3DSeriesPrivate
+
+QSurface3DSeriesPrivate::QSurface3DSeriesPrivate(QSurface3DSeries *q)
+ : QAbstract3DSeriesPrivate(q, QAbstract3DSeries::SeriesTypeSurface)
+{
+ m_itemLabelFormat = QStringLiteral("(@xLabel, @yLabel, @zLabel)");
+}
+
+QSurface3DSeriesPrivate::~QSurface3DSeriesPrivate()
+{
+}
+
+QSurface3DSeries *QSurface3DSeriesPrivate::qptr()
+{
+ return static_cast<QSurface3DSeries *>(q_ptr);
+}
+
+void QSurface3DSeriesPrivate::setDataProxy(QAbstractDataProxy *proxy)
+{
+ Q_ASSERT(proxy->type() == QAbstractDataProxy::DataTypeSurface);
+
+ QAbstract3DSeriesPrivate::setDataProxy(proxy);
+
+ emit qptr()->dataProxyChanged(static_cast<QSurfaceDataProxy *>(proxy));
+}
+
+void QSurface3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *newController)
+{
+ QSurfaceDataProxy *surfaceDataProxy = static_cast<QSurfaceDataProxy *>(m_dataProxy);
+
+ if (m_controller && surfaceDataProxy) {
+ //Disconnect old controller/old proxy
+ QObject::disconnect(surfaceDataProxy, 0, m_controller, 0);
+ QObject::disconnect(q_ptr, 0, m_controller, 0);
+ }
+
+ if (newController && surfaceDataProxy) {
+ Surface3DController *controller = static_cast<Surface3DController *>(newController);
+
+ QObject::connect(surfaceDataProxy, &QSurfaceDataProxy::arrayReset, controller,
+ &Surface3DController::handleArrayReset);
+
+ QObject::connect(q_ptr, &QAbstract3DSeries::visibilityChanged, controller,
+ &Abstract3DController::handleSeriesVisibilityChanged);
+
+ // Always clear selection on proxy change
+ // TODO: setSelectedPoint(noSelectionPoint());
+
+ newController->handleSeriesVisibilityChanged(m_visible);
+ }
+}
+
+QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qsurface3dseries.h b/src/datavisualization/data/qsurface3dseries.h
new file mode 100644
index 00000000..db432e41
--- /dev/null
+++ b/src/datavisualization/data/qsurface3dseries.h
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#ifndef QSURFACE3DSERIES_H
+#define QSURFACE3DSERIES_H
+
+#include <QtDataVisualization/qabstract3dseries.h>
+#include <QtDataVisualization/qsurfacedataproxy.h>
+
+QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+
+class QSurface3DSeriesPrivate;
+
+class QT_DATAVISUALIZATION_EXPORT QSurface3DSeries : public QAbstract3DSeries
+{
+ Q_OBJECT
+ Q_PROPERTY(QSurfaceDataProxy *dataProxy READ dataProxy WRITE setDataProxy NOTIFY dataProxyChanged)
+
+public:
+ explicit QSurface3DSeries(QObject *parent = 0);
+ explicit QSurface3DSeries(QSurfaceDataProxy *dataProxy, QObject *parent = 0);
+ virtual ~QSurface3DSeries();
+
+ void setDataProxy(QSurfaceDataProxy *proxy);
+ QSurfaceDataProxy *dataProxy() const;
+
+signals:
+ void dataProxyChanged(QSurfaceDataProxy *proxy);
+
+protected:
+ explicit QSurface3DSeries(QSurface3DSeriesPrivate *d, QObject *parent = 0);
+ QSurface3DSeriesPrivate *dptr();
+ const QSurface3DSeriesPrivate *dptrc() const;
+
+private:
+ Q_DISABLE_COPY(QSurface3DSeries)
+
+ friend class Surface3DController;
+};
+
+QT_DATAVISUALIZATION_END_NAMESPACE
+
+#endif
diff --git a/src/datavisualization/data/qsurface3dseries_p.h b/src/datavisualization/data/qsurface3dseries_p.h
new file mode 100644
index 00000000..6e5d9337
--- /dev/null
+++ b/src/datavisualization/data/qsurface3dseries_p.h
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the QtDataVisualization API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+
+#ifndef QSURFACE3DSERIES_P_H
+#define QSURFACE3DSERIES_P_H
+
+#include "qsurface3dseries.h"
+#include "qabstract3dseries_p.h"
+
+QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+
+class QSurface3DSeriesPrivate : public QAbstract3DSeriesPrivate
+{
+ Q_OBJECT
+public:
+ QSurface3DSeriesPrivate(QSurface3DSeries *q);
+ virtual ~QSurface3DSeriesPrivate();
+
+ virtual void setDataProxy(QAbstractDataProxy *proxy);
+ virtual void connectControllerAndProxy(Abstract3DController *newController);
+private:
+ QSurface3DSeries *qptr();
+
+private:
+ friend class QSurface3DSeries;
+};
+
+QT_DATAVISUALIZATION_END_NAMESPACE
+
+#endif
diff --git a/src/datavisualization/data/qsurfacedataproxy.cpp b/src/datavisualization/data/qsurfacedataproxy.cpp
index 7fe44464..e3c2714c 100644
--- a/src/datavisualization/data/qsurfacedataproxy.cpp
+++ b/src/datavisualization/data/qsurfacedataproxy.cpp
@@ -18,6 +18,7 @@
#include "qsurfacedataproxy.h"
#include "qsurfacedataproxy_p.h"
+#include "qsurface3dseries_p.h"
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
@@ -94,6 +95,12 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
*/
/*!
+ * \qmlproperty Surface3DSeries SurfaceDataProxy::series
+ *
+ * The series this proxy is attached to.
+ */
+
+/*!
* Constructs QSurfaceDataProxy with the given \a parent.
*/
QSurfaceDataProxy::QSurfaceDataProxy(QObject *parent) :
@@ -117,6 +124,16 @@ QSurfaceDataProxy::~QSurfaceDataProxy()
}
/*!
+ * \property QSurfaceDataProxy::series
+ *
+ * The series this proxy is attached to.
+ */
+QSurface3DSeries *QSurfaceDataProxy::series()
+{
+ return static_cast<QSurface3DSeries *>(d_ptr->series());
+}
+
+/*!
* Takes ownership of the \a newArray. Clears the existing array if the \a newArray is
* different from the existing array. If it's the same array, this just triggers arrayReset()
* signal.
@@ -203,7 +220,6 @@ QSurfaceDataProxyPrivate::QSurfaceDataProxyPrivate(QSurfaceDataProxy *q)
: QAbstractDataProxyPrivate(q, QAbstractDataProxy::DataTypeSurface),
m_dataArray(new QSurfaceDataArray)
{
- m_itemLabelFormat = QStringLiteral("@yLabel (@xLabel, @zLabel)");
}
QSurfaceDataProxyPrivate::~QSurfaceDataProxyPrivate()
@@ -227,7 +243,7 @@ QSurfaceDataProxy *QSurfaceDataProxyPrivate::qptr()
return static_cast<QSurfaceDataProxy *>(q_ptr);
}
-void QSurfaceDataProxyPrivate::limitValues(QVector3D &minValues, QVector3D &maxValues)
+void QSurfaceDataProxyPrivate::limitValues(QVector3D &minValues, QVector3D &maxValues) const
{
qreal min = 0.0;
qreal max = 0.0;
@@ -286,4 +302,11 @@ void QSurfaceDataProxyPrivate::clearArray()
delete m_dataArray;
}
+void QSurfaceDataProxyPrivate::setSeries(QAbstract3DSeries *series)
+{
+ QAbstractDataProxyPrivate::setSeries(series);
+ QSurface3DSeries *surfaceSeries = static_cast<QSurface3DSeries *>(series);
+ emit qptr()->seriesChanged(surfaceSeries);
+}
+
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qsurfacedataproxy.h b/src/datavisualization/data/qsurfacedataproxy.h
index 460fa437..ed594963 100644
--- a/src/datavisualization/data/qsurfacedataproxy.h
+++ b/src/datavisualization/data/qsurfacedataproxy.h
@@ -28,6 +28,7 @@ typedef QVector<QSurfaceDataItem> QSurfaceDataRow;
typedef QList<QSurfaceDataRow *> QSurfaceDataArray;
class QSurfaceDataProxyPrivate;
+class QSurface3DSeries;
class QT_DATAVISUALIZATION_EXPORT QSurfaceDataProxy : public QAbstractDataProxy
{
@@ -35,11 +36,13 @@ class QT_DATAVISUALIZATION_EXPORT QSurfaceDataProxy : public QAbstractDataProxy
Q_PROPERTY(int rowCount READ rowCount)
Q_PROPERTY(int columnCount READ columnCount)
+ Q_PROPERTY(QSurface3DSeries *series READ series NOTIFY seriesChanged)
public:
explicit QSurfaceDataProxy(QObject *parent = 0);
virtual ~QSurfaceDataProxy();
+ QSurface3DSeries *series();
int rowCount() const;
int columnCount() const;
const QSurfaceDataArray *array() const;
@@ -49,6 +52,7 @@ public:
signals:
void arrayReset();
+ void seriesChanged(QSurface3DSeries *series);
protected:
explicit QSurfaceDataProxy(QSurfaceDataProxyPrivate *d, QObject *parent = 0);
diff --git a/src/datavisualization/data/qsurfacedataproxy_p.h b/src/datavisualization/data/qsurfacedataproxy_p.h
index 4c8c2820..066df629 100644
--- a/src/datavisualization/data/qsurfacedataproxy_p.h
+++ b/src/datavisualization/data/qsurfacedataproxy_p.h
@@ -45,7 +45,9 @@ public:
void resetArray(QSurfaceDataArray *newArray);
- void limitValues(QVector3D &minValues, QVector3D &maxValues);
+ void limitValues(QVector3D &minValues, QVector3D &maxValues) const;
+
+ virtual void setSeries(QAbstract3DSeries *series);
protected:
QSurfaceDataArray *m_dataArray;