From 56eb5442dd1e2d6233e443bab956c6bd1b7a116b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomi=20Korpip=C3=A4=C3=A4?= Date: Tue, 10 Dec 2013 12:55:22 +0200 Subject: 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 --- .../datavisualizationqml2.pro | 6 +- .../datavisualizationqml2_plugin.cpp | 1 + .../datavisualizationqml2_plugin.h | 3 + src/datavisualizationqml2/declarativecolor.cpp | 29 ++++ src/datavisualizationqml2/declarativecolor_p.h | 49 ++++++ src/datavisualizationqml2/declarativetheme.cpp | 174 +++++++++++++++------ src/datavisualizationqml2/declarativetheme_p.h | 34 +++- 7 files changed, 234 insertions(+), 62 deletions(-) create mode 100644 src/datavisualizationqml2/declarativecolor.cpp create mode 100644 src/datavisualizationqml2/declarativecolor_p.h (limited to 'src/datavisualizationqml2') 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(uri, 1, 0, "ColorGradientStop"); qmlRegisterType(uri, 1, 0, "ColorGradient"); + qmlRegisterType(uri, 1, 0, "Color"); qmlRegisterType(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 @@ -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 +#include + +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()), m_singleHLGradient(0), m_multiHLGradient(0) { @@ -45,48 +45,16 @@ void DeclarativeTheme3D::appendSeriesChildren(QQmlListProperty *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 qmlstops = gradient.m_stops; + QList 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 list = Q3DTheme::baseColors(); +// list.append(color); +// Q3DTheme::setBaseColors(list); +//} + +//QList DeclarativeTheme3D::colorList() const +//{ +// return Q3DTheme::baseColors(); +//} + +//void DeclarativeTheme3D::clearColors() +//{ +// Q3DTheme::setBaseColors(QList()); +//} + +void DeclarativeTheme3D::addGradient(ColorGradient *gradient) +{ + m_gradients.append(gradient); + QList list = Q3DTheme::baseGradients(); + list.append(convertGradient(gradient)); + Q3DTheme::setBaseGradients(list); +} + +QList DeclarativeTheme3D::gradientList() const +{ + return m_gradients; +} + +void DeclarativeTheme3D::clearGradients() +{ + m_gradients.clear(); + Q3DTheme::setBaseGradients(QList()); +} + +//QQmlListProperty DeclarativeTheme3D::baseColors() +//{ +// return QQmlListProperty(this, this, +// &DeclarativeTheme3D::appendBaseColorsFunc, +// &DeclarativeTheme3D::countBaseColorsFunc, +// &DeclarativeTheme3D::atBaseColorsFunc, +// &DeclarativeTheme3D::clearBaseColorsFunc); +//} + +//void DeclarativeTheme3D::appendBaseColorsFunc(QQmlListProperty *list, DeclarativeColor *color) +//{ +// reinterpret_cast(list->data)->addColor(*color); +//} + +//int DeclarativeTheme3D::countBaseColorsFunc(QQmlListProperty *list) +//{ +// return reinterpret_cast(list->data)->colorList().size(); +//} + +//DeclarativeColor *DeclarativeTheme3D::atBaseColorsFunc(QQmlListProperty *list, int index) +//{ +// return &(reinterpret_cast(list->data)->colorList()[index]); +//} + +//void DeclarativeTheme3D::clearBaseColorsFunc(QQmlListProperty *list) +//{ +// reinterpret_cast(list->data)->clearGradients(); +//} + +QQmlListProperty DeclarativeTheme3D::baseGradients() +{ + return QQmlListProperty(this, this, + &DeclarativeTheme3D::appendBaseGradientsFunc, + &DeclarativeTheme3D::countBaseGradientsFunc, + &DeclarativeTheme3D::atBaseGradientsFunc, + &DeclarativeTheme3D::clearBaseGradientsFunc); +} + +void DeclarativeTheme3D::appendBaseGradientsFunc(QQmlListProperty *list, + ColorGradient *gradient) +{ + reinterpret_cast(list->data)->addGradient(gradient); +} + +int DeclarativeTheme3D::countBaseGradientsFunc(QQmlListProperty *list) +{ + return reinterpret_cast(list->data)->gradientList().size(); +} + +ColorGradient *DeclarativeTheme3D::atBaseGradientsFunc(QQmlListProperty *list, + int index) +{ + return reinterpret_cast(list->data)->gradientList().at(index); +} + +void DeclarativeTheme3D::clearBaseGradientsFunc(QQmlListProperty *list) +{ + reinterpret_cast(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 seriesChildren READ seriesChildren) - Q_PROPERTY(ColorGradient *baseGradient READ baseGradient WRITE setBaseGradient NOTIFY baseGradientChanged) +// Q_PROPERTY(QQmlListProperty baseColors READ baseColors) + Q_PROPERTY(QQmlListProperty 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 seriesChildren(); static void appendSeriesChildren(QQmlListProperty *list, QObject *element); - void setBaseGradient(ColorGradient *gradient); - ColorGradient *baseGradient() const; +// QQmlListProperty baseColors(); +// static void appendBaseColorsFunc(QQmlListProperty *list, +// DeclarativeColor *color); +// static int countBaseColorsFunc(QQmlListProperty *list); +// static DeclarativeColor *atBaseColorsFunc(QQmlListProperty *list, int index); +// static void clearBaseColorsFunc(QQmlListProperty *list); + + QQmlListProperty baseGradients(); + static void appendBaseGradientsFunc(QQmlListProperty *list, + ColorGradient *gradient); + static int countBaseGradientsFunc(QQmlListProperty *list); + static ColorGradient *atBaseGradientsFunc(QQmlListProperty *list, int index); + static void clearBaseGradientsFunc(QQmlListProperty *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 colorList() const; +// void clearColors(); + void addGradient(ColorGradient *gradient); + QList gradientList() const; + void clearGradients(); + void setThemeGradient(ColorGradient *gradient, GradientType type); + QLinearGradient convertGradient(ColorGradient *gradient); + + QList m_gradients; // Not owned ColorGradient *m_singleHLGradient; // Not owned ColorGradient *m_multiHLGradient; // Not owned }; -- cgit v1.2.3