summaryrefslogtreecommitdiffstats
path: root/src/datavisualizationqml2
diff options
context:
space:
mode:
authorTomi Korpipää <tomi.korpipaa@digia.com>2013-12-10 12:55:22 +0200
committerTomi Korpipää <tomi.korpipaa@digia.com>2013-12-10 13:34:29 +0200
commit56eb5442dd1e2d6233e443bab956c6bd1b7a116b (patch)
treef787dd58af4219c4d51b1131e26b14271924fa62 /src/datavisualizationqml2
parent6e35dbbfc272b322d9e39d30dec3039a75a149fa (diff)
Multiseries support for theme colors and gradients, Part 1
Task-number: QTRD-2611 - declarative support for color list missing - declarative connections and fixes for count etc. Change-Id: I0ac007dcd7acb011d1a4461a56066ee41c364a75 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src/datavisualizationqml2')
-rw-r--r--src/datavisualizationqml2/datavisualizationqml2.pro6
-rw-r--r--src/datavisualizationqml2/datavisualizationqml2_plugin.cpp1
-rw-r--r--src/datavisualizationqml2/datavisualizationqml2_plugin.h3
-rw-r--r--src/datavisualizationqml2/declarativecolor.cpp29
-rw-r--r--src/datavisualizationqml2/declarativecolor_p.h49
-rw-r--r--src/datavisualizationqml2/declarativetheme.cpp174
-rw-r--r--src/datavisualizationqml2/declarativetheme_p.h34
7 files changed, 234 insertions, 62 deletions
diff --git a/src/datavisualizationqml2/datavisualizationqml2.pro b/src/datavisualizationqml2/datavisualizationqml2.pro
index b9785f44..938a8a5c 100644
--- a/src/datavisualizationqml2/datavisualizationqml2.pro
+++ b/src/datavisualizationqml2/datavisualizationqml2.pro
@@ -27,7 +27,8 @@ SOURCES += \
colorgradient.cpp \
declarativeseries.cpp \
declarativerenderer.cpp \
- declarativetheme.cpp
+ declarativetheme.cpp \
+ declarativecolor.cpp
HEADERS += \
datavisualizationqml2_plugin.h \
@@ -38,7 +39,8 @@ HEADERS += \
colorgradient_p.h \
declarativeseries_p.h \
declarativerenderer_p.h \
- declarativetheme_p.h
+ declarativetheme_p.h \
+ declarativecolor_p.h
OTHER_FILES = qmldir
diff --git a/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp b/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp
index 2ca23643..ceefa91e 100644
--- a/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp
+++ b/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp
@@ -73,6 +73,7 @@ void Datavis3Dqml2Plugin::registerTypes(const char *uri)
qmlRegisterType<ColorGradientStop>(uri, 1, 0, "ColorGradientStop");
qmlRegisterType<ColorGradient>(uri, 1, 0, "ColorGradient");
+ qmlRegisterType<DeclarativeColor>(uri, 1, 0, "Color");
qmlRegisterType<DeclarativeTheme3D>(uri, 1, 0, "Theme3D");
diff --git a/src/datavisualizationqml2/datavisualizationqml2_plugin.h b/src/datavisualizationqml2/datavisualizationqml2_plugin.h
index 7a30d65d..25c06364 100644
--- a/src/datavisualizationqml2/datavisualizationqml2_plugin.h
+++ b/src/datavisualizationqml2/datavisualizationqml2_plugin.h
@@ -41,6 +41,7 @@
#include "q3dtheme.h"
#include "declarativetheme_p.h"
#include "qabstract3dinputhandler.h"
+#include "declarativecolor_p.h"
#include <QQmlExtensionPlugin>
@@ -83,6 +84,8 @@ QML_DECLARE_TYPE(DeclarativeSurface3DSeries)
QML_DECLARE_TYPE(ColorGradientStop)
QML_DECLARE_TYPE(ColorGradient)
+QML_DECLARE_TYPE(DeclarativeColor)
+
QML_DECLARE_TYPE(Q3DTheme)
QML_DECLARE_TYPE(DeclarativeTheme3D)
diff --git a/src/datavisualizationqml2/declarativecolor.cpp b/src/datavisualizationqml2/declarativecolor.cpp
new file mode 100644
index 00000000..e15edd45
--- /dev/null
+++ b/src/datavisualizationqml2/declarativecolor.cpp
@@ -0,0 +1,29 @@
+/****************************************************************************
+**
+** 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 "declarativecolor_p.h"
+
+QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+
+DeclarativeColor::DeclarativeColor(QObject *parent)
+ : QObject(parent)
+{
+
+}
+
+QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualizationqml2/declarativecolor_p.h b/src/datavisualizationqml2/declarativecolor_p.h
new file mode 100644
index 00000000..e500f794
--- /dev/null
+++ b/src/datavisualizationqml2/declarativecolor_p.h
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** 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 DECLARATIVECOLOR_P_H
+#define DECLARATIVECOLOR_P_H
+
+#include "datavisualizationglobal_p.h"
+#include <QColor>
+#include <QQmlListProperty>
+
+QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+
+class DeclarativeColor : public QObject, public QColor
+{
+ Q_OBJECT
+
+public:
+ DeclarativeColor(QObject *parent = 0);
+
+};
+
+QT_DATAVISUALIZATION_END_NAMESPACE
+
+#endif
diff --git a/src/datavisualizationqml2/declarativetheme.cpp b/src/datavisualizationqml2/declarativetheme.cpp
index eb7fd2cc..263fa62e 100644
--- a/src/datavisualizationqml2/declarativetheme.cpp
+++ b/src/datavisualizationqml2/declarativetheme.cpp
@@ -22,7 +22,7 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
DeclarativeTheme3D::DeclarativeTheme3D(QObject *parent)
: Q3DTheme(parent),
- m_baseGradient(0),
+ m_gradients(QList<ColorGradient *>()),
m_singleHLGradient(0),
m_multiHLGradient(0)
{
@@ -45,48 +45,16 @@ void DeclarativeTheme3D::appendSeriesChildren(QQmlListProperty<QObject> *list, Q
// Nothing to do, seriesChildren is there only to enable scoping gradient items in Theme3D item.
}
-void DeclarativeTheme3D::handleBaseGradientUpdate()
-{
- if (m_baseGradient)
- setThemeGradient(*m_baseGradient, GradientTypeBase);
-}
-
void DeclarativeTheme3D::handleSingleHLGradientUpdate()
{
if (m_singleHLGradient)
- setThemeGradient(*m_singleHLGradient, GradientTypeSingleHL);
+ setThemeGradient(m_singleHLGradient, GradientTypeSingleHL);
}
void DeclarativeTheme3D::handleMultiHLGradientUpdate()
{
if (m_multiHLGradient)
- setThemeGradient(*m_multiHLGradient, GradientTypeMultiHL);
-}
-
-void DeclarativeTheme3D::setBaseGradient(ColorGradient *gradient)
-{
- // connect new / disconnect old
- if (gradient != m_baseGradient) {
- if (m_baseGradient)
- QObject::disconnect(m_baseGradient, 0, this, 0);
-
- m_baseGradient = gradient;
-
- if (m_baseGradient) {
- QObject::connect(m_baseGradient, &ColorGradient::updated, this,
- &DeclarativeTheme3D::handleBaseGradientUpdate);
- }
-
- emit baseGradientChanged(m_baseGradient);
- }
-
- if (m_baseGradient)
- setThemeGradient(*m_baseGradient, GradientTypeBase);
-}
-
-ColorGradient *DeclarativeTheme3D::baseGradient() const
-{
- return m_baseGradient;
+ setThemeGradient(m_multiHLGradient, GradientTypeMultiHL);
}
void DeclarativeTheme3D::setSingleHighlightGradient(ColorGradient *gradient)
@@ -107,7 +75,7 @@ void DeclarativeTheme3D::setSingleHighlightGradient(ColorGradient *gradient)
}
if (m_singleHLGradient)
- setThemeGradient(*m_singleHLGradient, GradientTypeSingleHL);
+ setThemeGradient(m_singleHLGradient, GradientTypeSingleHL);
}
ColorGradient *DeclarativeTheme3D::singleHighlightGradient() const
@@ -133,7 +101,7 @@ void DeclarativeTheme3D::setMultiHighlightGradient(ColorGradient *gradient)
}
if (m_multiHLGradient)
- setThemeGradient(*m_baseGradient, GradientTypeMultiHL);
+ setThemeGradient(m_multiHLGradient, GradientTypeMultiHL);
}
ColorGradient *DeclarativeTheme3D::multiHighlightGradient() const
@@ -141,11 +109,28 @@ ColorGradient *DeclarativeTheme3D::multiHighlightGradient() const
return m_multiHLGradient;
}
-void DeclarativeTheme3D::setThemeGradient(const ColorGradient &gradient, GradientType type)
+void DeclarativeTheme3D::setThemeGradient(ColorGradient *gradient, GradientType type)
+{
+ QLinearGradient newGradient = convertGradient(gradient);
+
+ switch (type) {
+ case GradientTypeSingleHL:
+ Q3DTheme::setSingleHighlightGradient(newGradient);
+ break;
+ case GradientTypeMultiHL:
+ break;
+ Q3DTheme::setMultiHighlightGradient(newGradient);
+ default:
+ qWarning("Incorrect usage. Type may be GradientTypeSingleHL or GradientTypeMultiHL.");
+ break;
+ }
+}
+
+QLinearGradient DeclarativeTheme3D::convertGradient(ColorGradient *gradient)
{
QLinearGradient newGradient;
QGradientStops stops;
- QList<ColorGradientStop *> qmlstops = gradient.m_stops;
+ QList<ColorGradientStop *> qmlstops = gradient->m_stops;
// Get sorted gradient stops
for (int i = 0; i < qmlstops.size(); i++) {
@@ -156,19 +141,104 @@ void DeclarativeTheme3D::setThemeGradient(const ColorGradient &gradient, Gradien
}
newGradient.setStops(stops);
- switch (type) {
- case GradientTypeBase:
- Q3DTheme::setBaseGradient(newGradient);
- break;
- case GradientTypeSingleHL:
- Q3DTheme::setSingleHighlightGradient(newGradient);
- break;
- case GradientTypeMultiHL:
- break;
- Q3DTheme::setMultiHighlightGradient(newGradient);
- default:
- break;
- }
+
+ return newGradient;
+}
+
+//void DeclarativeTheme3D::addColor(const DeclarativeColor &color)
+//{
+// QList<QColor> list = Q3DTheme::baseColors();
+// list.append(color);
+// Q3DTheme::setBaseColors(list);
+//}
+
+//QList<DeclarativeColor> DeclarativeTheme3D::colorList() const
+//{
+// return Q3DTheme::baseColors();
+//}
+
+//void DeclarativeTheme3D::clearColors()
+//{
+// Q3DTheme::setBaseColors(QList<QColor>());
+//}
+
+void DeclarativeTheme3D::addGradient(ColorGradient *gradient)
+{
+ m_gradients.append(gradient);
+ QList<QLinearGradient> list = Q3DTheme::baseGradients();
+ list.append(convertGradient(gradient));
+ Q3DTheme::setBaseGradients(list);
+}
+
+QList<ColorGradient *> DeclarativeTheme3D::gradientList() const
+{
+ return m_gradients;
+}
+
+void DeclarativeTheme3D::clearGradients()
+{
+ m_gradients.clear();
+ Q3DTheme::setBaseGradients(QList<QLinearGradient>());
+}
+
+//QQmlListProperty<DeclarativeColor> DeclarativeTheme3D::baseColors()
+//{
+// return QQmlListProperty<DeclarativeColor>(this, this,
+// &DeclarativeTheme3D::appendBaseColorsFunc,
+// &DeclarativeTheme3D::countBaseColorsFunc,
+// &DeclarativeTheme3D::atBaseColorsFunc,
+// &DeclarativeTheme3D::clearBaseColorsFunc);
+//}
+
+//void DeclarativeTheme3D::appendBaseColorsFunc(QQmlListProperty<DeclarativeColor> *list, DeclarativeColor *color)
+//{
+// reinterpret_cast<DeclarativeTheme3D *>(list->data)->addColor(*color);
+//}
+
+//int DeclarativeTheme3D::countBaseColorsFunc(QQmlListProperty<DeclarativeColor> *list)
+//{
+// return reinterpret_cast<DeclarativeTheme3D *>(list->data)->colorList().size();
+//}
+
+//DeclarativeColor *DeclarativeTheme3D::atBaseColorsFunc(QQmlListProperty<DeclarativeColor> *list, int index)
+//{
+// return &(reinterpret_cast<DeclarativeTheme3D *>(list->data)->colorList()[index]);
+//}
+
+//void DeclarativeTheme3D::clearBaseColorsFunc(QQmlListProperty<DeclarativeColor> *list)
+//{
+// reinterpret_cast<DeclarativeTheme3D *>(list->data)->clearGradients();
+//}
+
+QQmlListProperty<ColorGradient> DeclarativeTheme3D::baseGradients()
+{
+ return QQmlListProperty<ColorGradient>(this, this,
+ &DeclarativeTheme3D::appendBaseGradientsFunc,
+ &DeclarativeTheme3D::countBaseGradientsFunc,
+ &DeclarativeTheme3D::atBaseGradientsFunc,
+ &DeclarativeTheme3D::clearBaseGradientsFunc);
+}
+
+void DeclarativeTheme3D::appendBaseGradientsFunc(QQmlListProperty<ColorGradient> *list,
+ ColorGradient *gradient)
+{
+ reinterpret_cast<DeclarativeTheme3D *>(list->data)->addGradient(gradient);
+}
+
+int DeclarativeTheme3D::countBaseGradientsFunc(QQmlListProperty<ColorGradient> *list)
+{
+ return reinterpret_cast<DeclarativeTheme3D *>(list->data)->gradientList().size();
+}
+
+ColorGradient *DeclarativeTheme3D::atBaseGradientsFunc(QQmlListProperty<ColorGradient> *list,
+ int index)
+{
+ return reinterpret_cast<DeclarativeTheme3D *>(list->data)->gradientList().at(index);
+}
+
+void DeclarativeTheme3D::clearBaseGradientsFunc(QQmlListProperty<ColorGradient> *list)
+{
+ reinterpret_cast<DeclarativeTheme3D *>(list->data)->clearGradients();
}
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualizationqml2/declarativetheme_p.h b/src/datavisualizationqml2/declarativetheme_p.h
index 9bbb518a..75ab9514 100644
--- a/src/datavisualizationqml2/declarativetheme_p.h
+++ b/src/datavisualizationqml2/declarativetheme_p.h
@@ -31,6 +31,7 @@
#include "datavisualizationglobal_p.h"
#include "colorgradient_p.h"
+//#include "declarativecolor_p.h"
#include "q3dtheme.h"
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
@@ -39,7 +40,8 @@ class DeclarativeTheme3D : public Q3DTheme
{
Q_OBJECT
Q_PROPERTY(QQmlListProperty<QObject> seriesChildren READ seriesChildren)
- Q_PROPERTY(ColorGradient *baseGradient READ baseGradient WRITE setBaseGradient NOTIFY baseGradientChanged)
+// Q_PROPERTY(QQmlListProperty<DeclarativeColor> baseColors READ baseColors)
+ Q_PROPERTY(QQmlListProperty<ColorGradient> baseGradients READ baseGradients)
Q_PROPERTY(ColorGradient *singleHighlightGradient READ singleHighlightGradient WRITE setSingleHighlightGradient NOTIFY singleHighlightGradientChanged)
Q_PROPERTY(ColorGradient *multiHighlightGradient READ multiHighlightGradient WRITE setMultiHighlightGradient NOTIFY multiHighlightGradientChanged)
Q_CLASSINFO("DefaultProperty", "seriesChildren")
@@ -51,8 +53,19 @@ public:
QQmlListProperty<QObject> seriesChildren();
static void appendSeriesChildren(QQmlListProperty<QObject> *list, QObject *element);
- void setBaseGradient(ColorGradient *gradient);
- ColorGradient *baseGradient() const;
+// QQmlListProperty<DeclarativeColor> baseColors();
+// static void appendBaseColorsFunc(QQmlListProperty<DeclarativeColor> *list,
+// DeclarativeColor *color);
+// static int countBaseColorsFunc(QQmlListProperty<DeclarativeColor> *list);
+// static DeclarativeColor *atBaseColorsFunc(QQmlListProperty<DeclarativeColor> *list, int index);
+// static void clearBaseColorsFunc(QQmlListProperty<DeclarativeColor> *list);
+
+ QQmlListProperty<ColorGradient> baseGradients();
+ static void appendBaseGradientsFunc(QQmlListProperty<ColorGradient> *list,
+ ColorGradient *gradient);
+ static int countBaseGradientsFunc(QQmlListProperty<ColorGradient> *list);
+ static ColorGradient *atBaseGradientsFunc(QQmlListProperty<ColorGradient> *list, int index);
+ static void clearBaseGradientsFunc(QQmlListProperty<ColorGradient> *list);
void setSingleHighlightGradient(ColorGradient *gradient);
ColorGradient *singleHighlightGradient() const;
@@ -61,12 +74,10 @@ public:
ColorGradient *multiHighlightGradient() const;
signals:
- void baseGradientChanged(ColorGradient *gradient);
void singleHighlightGradientChanged(ColorGradient *gradient);
void multiHighlightGradientChanged(ColorGradient *gradient);
protected:
- void handleBaseGradientUpdate();
void handleSingleHLGradientUpdate();
void handleMultiHLGradientUpdate();
@@ -77,9 +88,16 @@ protected:
};
private:
- void setThemeGradient(const ColorGradient &gradient, GradientType type);
-
- ColorGradient *m_baseGradient; // Not owned
+// void addColor(const DeclarativeColor &color);
+// QList<DeclarativeColor> colorList() const;
+// void clearColors();
+ void addGradient(ColorGradient *gradient);
+ QList<ColorGradient *> gradientList() const;
+ void clearGradients();
+ void setThemeGradient(ColorGradient *gradient, GradientType type);
+ QLinearGradient convertGradient(ColorGradient *gradient);
+
+ QList<ColorGradient *> m_gradients; // Not owned
ColorGradient *m_singleHLGradient; // Not owned
ColorGradient *m_multiHLGradient; // Not owned
};