summaryrefslogtreecommitdiffstats
path: root/src/datavisualizationqml2
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualizationqml2')
-rw-r--r--src/datavisualizationqml2/colorgradient.cpp75
-rw-r--r--src/datavisualizationqml2/colorgradient_p.h90
-rw-r--r--src/datavisualizationqml2/datavisualizationqml2.pro6
-rw-r--r--src/datavisualizationqml2/datavisualizationqml2_plugin.cpp6
-rw-r--r--src/datavisualizationqml2/datavisualizationqml2_plugin.h53
-rw-r--r--src/datavisualizationqml2/declarativesurface.cpp55
-rw-r--r--src/datavisualizationqml2/declarativesurface_p.h16
7 files changed, 256 insertions, 45 deletions
diff --git a/src/datavisualizationqml2/colorgradient.cpp b/src/datavisualizationqml2/colorgradient.cpp
new file mode 100644
index 00000000..43efbd1c
--- /dev/null
+++ b/src/datavisualizationqml2/colorgradient.cpp
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** 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 "colorgradient_p.h"
+
+QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+
+ColorGradientStop::ColorGradientStop(QObject *parent)
+ : QObject(parent)
+{
+}
+
+qreal ColorGradientStop::position() const
+{
+ return m_position;
+}
+
+void ColorGradientStop::setPosition(qreal position)
+{
+ m_position = position;
+ updateGradient();
+}
+
+QColor ColorGradientStop::color() const
+{
+ return m_color;
+}
+
+void ColorGradientStop::setColor(const QColor &color)
+{
+ m_color = color;
+ updateGradient();
+}
+
+void ColorGradientStop::updateGradient()
+{
+ if (ColorGradient *grad = qobject_cast<ColorGradient*>(parent()))
+ grad->doUpdate();
+}
+
+ColorGradient::ColorGradient(QObject *parent)
+: QObject(parent)
+{
+}
+
+ColorGradient::~ColorGradient()
+{
+}
+
+QQmlListProperty<ColorGradientStop> ColorGradient::stops()
+{
+ return QQmlListProperty<ColorGradientStop>(this, m_stops);
+}
+
+void ColorGradient::doUpdate()
+{
+ emit updated();
+}
+
+QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualizationqml2/colorgradient_p.h b/src/datavisualizationqml2/colorgradient_p.h
new file mode 100644
index 00000000..37d3e407
--- /dev/null
+++ b/src/datavisualizationqml2/colorgradient_p.h
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** 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 COLORGRADIENT_P_H
+#define COLORGRADIENT_P_H
+
+#include "datavisualizationglobal_p.h"
+#include <QColor>
+#include <QQmlListProperty>
+
+QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+
+class ColorGradientStop : public QObject
+{
+ Q_OBJECT
+
+ Q_PROPERTY(qreal position READ position WRITE setPosition)
+ Q_PROPERTY(QColor color READ color WRITE setColor)
+
+public:
+ ColorGradientStop(QObject *parent = 0);
+
+ qreal position() const;
+ void setPosition(qreal position);
+
+ QColor color() const;
+ void setColor(const QColor &color);
+
+private:
+ void updateGradient();
+
+private:
+ qreal m_position;
+ QColor m_color;
+};
+
+class ColorGradient : public QObject
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QQmlListProperty<ColorGradientStop> stops READ stops)
+ Q_CLASSINFO("DefaultProperty", "stops")
+
+public:
+ ColorGradient(QObject *parent = 0);
+ ~ColorGradient();
+
+ QQmlListProperty<ColorGradientStop> stops();
+
+Q_SIGNALS:
+ void updated();
+
+private:
+ void doUpdate();
+
+private:
+ QList<ColorGradientStop *> m_stops;
+
+ friend class ColorGradientStop;
+ friend class DeclarativeSurface;
+};
+
+QT_DATAVISUALIZATION_END_NAMESPACE
+
+#endif
diff --git a/src/datavisualizationqml2/datavisualizationqml2.pro b/src/datavisualizationqml2/datavisualizationqml2.pro
index 68e267ed..d5191c62 100644
--- a/src/datavisualizationqml2/datavisualizationqml2.pro
+++ b/src/datavisualizationqml2/datavisualizationqml2.pro
@@ -24,7 +24,8 @@ SOURCES += \
declarativescatterrenderer.cpp \
declarativesurface.cpp \
declarativesurfacerenderer.cpp \
- abstractdeclarative.cpp
+ abstractdeclarative.cpp \
+ colorgradient.cpp
HEADERS += \
datavisualizationqml2_plugin.h \
@@ -34,7 +35,8 @@ HEADERS += \
declarativescatterrenderer_p.h \
declarativesurface_p.h \
declarativesurfacerenderer_p.h \
- abstractdeclarative_p.h
+ abstractdeclarative_p.h \
+ colorgradient_p.h
OTHER_FILES = qmldir
diff --git a/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp b/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp
index f5642831..10fc7f4c 100644
--- a/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp
+++ b/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp
@@ -25,8 +25,6 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
void Datavis3Dqml2Plugin::registerTypes(const char *uri)
{
// @uri com.digia.QtDataVisualization
- qmlRegisterUncreatableType<QLinearGradient>(uri, 1, 0, "LinearGradient",
- QLatin1String("Trying to create uncreatable: LinearGradient."));
qmlRegisterUncreatableType<const QAbstractItemModel>(uri, 1, 0, "AbstractItemModel",
QLatin1String("Trying to create uncreatable: AbstractItemModel."));
qmlRegisterUncreatableType<QDataVis>(uri, 1, 0, "DataVis",
@@ -59,6 +57,10 @@ void Datavis3Dqml2Plugin::registerTypes(const char *uri)
qmlRegisterType<QItemModelScatterDataProxy>(uri, 1, 0, "ItemModelScatterDataProxy");
qmlRegisterType<QItemModelSurfaceDataProxy>(uri, 1, 0, "ItemModelSurfaceDataProxy");
qmlRegisterType<QHeightMapSurfaceDataProxy>(uri, 1, 0, "HeightMapSurfaceDataProxy");
+
+ qmlRegisterType<ColorGradientStop>(uri, 1, 0, "ColorGradientStop");
+ qmlRegisterType<ColorGradient>(uri, 1, 0, "ColorGradient");
+
}
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualizationqml2/datavisualizationqml2_plugin.h b/src/datavisualizationqml2/datavisualizationqml2_plugin.h
index 31066c47..66b5cb61 100644
--- a/src/datavisualizationqml2/datavisualizationqml2_plugin.h
+++ b/src/datavisualizationqml2/datavisualizationqml2_plugin.h
@@ -37,32 +37,33 @@
QT_DATAVISUALIZATION_USE_NAMESPACE
-Q_DECLARE_METATYPE(AbstractDeclarative *)
-Q_DECLARE_METATYPE(DeclarativeBars *)
-Q_DECLARE_METATYPE(DeclarativeScatter *)
-Q_DECLARE_METATYPE(DeclarativeSurface *)
-
-Q_DECLARE_METATYPE(QItemModelBarDataMapping *)
-Q_DECLARE_METATYPE(QItemModelScatterDataMapping *)
-Q_DECLARE_METATYPE(QItemModelSurfaceDataMapping *)
-
-Q_DECLARE_METATYPE(const QAbstractItemModel *)
-Q_DECLARE_METATYPE(QLinearGradient)
-
-Q_DECLARE_METATYPE(QDataVis *)
-
-Q_DECLARE_METATYPE(Q3DAbstractAxis *)
-Q_DECLARE_METATYPE(Q3DCategoryAxis *)
-Q_DECLARE_METATYPE(Q3DValueAxis *)
-
-Q_DECLARE_METATYPE(QAbstractDataProxy *)
-Q_DECLARE_METATYPE(QBarDataProxy *)
-Q_DECLARE_METATYPE(QItemModelBarDataProxy *)
-Q_DECLARE_METATYPE(QScatterDataProxy *)
-Q_DECLARE_METATYPE(QItemModelScatterDataProxy *)
-Q_DECLARE_METATYPE(QSurfaceDataProxy *)
-Q_DECLARE_METATYPE(QItemModelSurfaceDataProxy *)
-Q_DECLARE_METATYPE(QHeightMapSurfaceDataProxy *)
+QML_DECLARE_TYPE(AbstractDeclarative)
+QML_DECLARE_TYPE(DeclarativeBars)
+QML_DECLARE_TYPE(DeclarativeScatter)
+QML_DECLARE_TYPE(DeclarativeSurface)
+
+QML_DECLARE_TYPE(QItemModelBarDataMapping)
+QML_DECLARE_TYPE(QItemModelScatterDataMapping)
+QML_DECLARE_TYPE(QItemModelSurfaceDataMapping)
+
+QML_DECLARE_TYPE(const QAbstractItemModel)
+QML_DECLARE_TYPE(QDataVis)
+
+QML_DECLARE_TYPE(Q3DAbstractAxis)
+QML_DECLARE_TYPE(Q3DCategoryAxis)
+QML_DECLARE_TYPE(Q3DValueAxis)
+
+QML_DECLARE_TYPE(QAbstractDataProxy)
+QML_DECLARE_TYPE(QBarDataProxy)
+QML_DECLARE_TYPE(QItemModelBarDataProxy)
+QML_DECLARE_TYPE(QScatterDataProxy)
+QML_DECLARE_TYPE(QItemModelScatterDataProxy)
+QML_DECLARE_TYPE(QSurfaceDataProxy)
+QML_DECLARE_TYPE(QItemModelSurfaceDataProxy)
+QML_DECLARE_TYPE(QHeightMapSurfaceDataProxy)
+
+QML_DECLARE_TYPE(ColorGradientStop)
+QML_DECLARE_TYPE(ColorGradient)
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
diff --git a/src/datavisualizationqml2/declarativesurface.cpp b/src/datavisualizationqml2/declarativesurface.cpp
index f74472f5..8375fa53 100644
--- a/src/datavisualizationqml2/declarativesurface.cpp
+++ b/src/datavisualizationqml2/declarativesurface.cpp
@@ -27,7 +27,8 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
DeclarativeSurface::DeclarativeSurface(QQuickItem *parent)
: AbstractDeclarative(parent),
m_shared(0),
- m_initialisedSize(0, 0)
+ m_initialisedSize(0, 0),
+ m_gradient(0)
{
setFlags(QQuickItem::ItemHasContents);
setAcceptedMouseButtons(Qt::AllButtons);
@@ -49,6 +50,12 @@ DeclarativeSurface::~DeclarativeSurface()
delete m_shared;
}
+void DeclarativeSurface::handleGradientUpdate()
+{
+ if (m_gradient)
+ setControllerGradient(*m_gradient);
+}
+
QSGNode *DeclarativeSurface::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
{
// If old node exists and has right size, reuse it.
@@ -72,11 +79,6 @@ QSGNode *DeclarativeSurface::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeDa
return node;
}
-void DeclarativeSurface::setGradientColorAt(qreal pos, const QColor &color)
-{
- m_shared->setGradientColorAt(pos, color);
-}
-
void DeclarativeSurface::setDataProxy(QSurfaceDataProxy *dataProxy)
{
m_shared->setActiveDataProxy(dataProxy);
@@ -137,14 +139,47 @@ bool DeclarativeSurface::isSurfaceGridEnabled() const
return m_shared->surfaceGrid();
}
-void DeclarativeSurface::setGradient(const QLinearGradient &gradient)
+void DeclarativeSurface::setGradient(ColorGradient *gradient)
{
- m_shared->setGradient(gradient);
+ // connect new / disconnect old
+ if (gradient != m_gradient) {
+ if (m_gradient)
+ QObject::disconnect(m_gradient, 0, this, 0);
+
+ m_gradient = gradient;
+
+ if (m_gradient) {
+ QObject::connect(m_gradient, &ColorGradient::updated, this,
+ &DeclarativeSurface::handleGradientUpdate);
+ }
+ }
+
+ if (m_gradient)
+ setControllerGradient(*m_gradient);
+}
+
+ColorGradient *DeclarativeSurface::gradient() const
+{
+
+ return m_gradient;
}
-QLinearGradient DeclarativeSurface::gradient() const
+void DeclarativeSurface::setControllerGradient(const ColorGradient &gradient)
{
- return m_shared->gradient();
+ QLinearGradient newGradient;
+ QGradientStops stops;
+ QList<ColorGradientStop *> qmlstops = gradient.m_stops;
+
+ // Get sorted gradient stops
+ for (int i = 0; i < qmlstops.size(); i++) {
+ int j = 0;
+ while (j < stops.size() && stops.at(j).first < qmlstops[i]->position())
+ j++;
+ stops.insert(j, QGradientStop(qmlstops.at(i)->position(), qmlstops.at(i)->color()));
+ }
+
+ newGradient.setStops(stops);
+ m_shared->setGradient(newGradient);
}
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualizationqml2/declarativesurface_p.h b/src/datavisualizationqml2/declarativesurface_p.h
index 29db1a44..6ba52146 100644
--- a/src/datavisualizationqml2/declarativesurface_p.h
+++ b/src/datavisualizationqml2/declarativesurface_p.h
@@ -35,6 +35,7 @@
#include "declarativesurface_p.h"
#include "q3dvalueaxis.h"
#include "qsurfacedataproxy.h"
+#include "colorgradient_p.h"
#include <QAbstractItemModel>
#include <QQuickItem>
@@ -52,14 +53,12 @@ class DeclarativeSurface : public AbstractDeclarative
Q_PROPERTY(Q3DValueAxis *axisZ READ axisZ WRITE setAxisZ)
Q_PROPERTY(bool smoothSurfaceEnabled READ isSmoothSurfaceEnabled WRITE setSmoothSurfaceEnabled)
Q_PROPERTY(bool surfaceGridEnabled READ isSurfaceGridEnabled WRITE setSurfaceGridEnabled)
- Q_PROPERTY(QLinearGradient gradient READ gradient WRITE setGradient)
+ Q_PROPERTY(ColorGradient *gradient READ gradient WRITE setGradient)
public:
explicit DeclarativeSurface(QQuickItem *parent = 0);
~DeclarativeSurface();
- Q_INVOKABLE void setGradientColorAt(qreal pos, const QColor &color);
-
QSurfaceDataProxy *dataProxy() const;
void setDataProxy(QSurfaceDataProxy *dataProxy);
@@ -76,14 +75,21 @@ public:
void setSurfaceGridEnabled(bool enabled);
bool isSurfaceGridEnabled() const;
- void setGradient(const QLinearGradient &gradient);
- QLinearGradient gradient() const;
+ void setGradient(ColorGradient *gradient);
+ ColorGradient *gradient() const;
+
protected:
+ void handleGradientUpdate();
+
QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *);
private:
Surface3DController *m_shared;
+
+ void setControllerGradient(const ColorGradient &gradient);
+
QSize m_initialisedSize;
+ ColorGradient *m_gradient; // Not owned
};
QT_DATAVISUALIZATION_END_NAMESPACE