diff options
author | Mika Salmela <mika.salmela@digia.com> | 2013-12-18 11:50:03 +0200 |
---|---|---|
committer | Mika Salmela <mika.salmela@digia.com> | 2013-12-18 11:51:20 +0200 |
commit | 07aba602fc82ac31684988f8e8e22521d2b3c982 (patch) | |
tree | 7ae1da139e8661bf157f996fe71844031d2995f4 /src/datavisualizationqml2/declarativescatter.cpp | |
parent | cf0cf6ca67aec8ae480bb705443ea17f5ab9f9e2 (diff) | |
parent | ea0442bc81ae034d22c5742b6075dee993fdd54d (diff) |
Merge branch 'develop' into mergebranch
Conflicts:
examples/qmlbars/qml/qmlbars/main.qml
examples/qmlscatter/qml/qmlscatter/main.qml
examples/qmlsurface/qml/qmlsurface/main.qml
src/datavisualization/data/qitemmodelbardatamapping.cpp
src/datavisualization/data/qitemmodelscatterdatamapping.cpp
src/datavisualization/data/qitemmodelsurfacedatamapping.cpp
src/datavisualization/engine/drawer.cpp
Change-Id: I731ebdb2cc5cee8f2cb32becee96d1fc1b3e5de1
Diffstat (limited to 'src/datavisualizationqml2/declarativescatter.cpp')
-rw-r--r-- | src/datavisualizationqml2/declarativescatter.cpp | 130 |
1 files changed, 44 insertions, 86 deletions
diff --git a/src/datavisualizationqml2/declarativescatter.cpp b/src/datavisualizationqml2/declarativescatter.cpp index 346abec2..5aaa19b6 100644 --- a/src/datavisualizationqml2/declarativescatter.cpp +++ b/src/datavisualizationqml2/declarativescatter.cpp @@ -17,20 +17,14 @@ ****************************************************************************/ #include "declarativescatter_p.h" -#include "declarativescatterrenderer_p.h" #include "qitemmodelscatterdataproxy.h" -#include "theme_p.h" QT_DATAVISUALIZATION_BEGIN_NAMESPACE -const QString smoothString(QStringLiteral("Smooth")); - DeclarativeScatter::DeclarativeScatter(QQuickItem *parent) : AbstractDeclarative(parent), - m_shared(0), - m_initialisedSize(0, 0) + m_scatterController(0) { - setFlags(QQuickItem::ItemHasContents); setAcceptedMouseButtons(Qt::AllButtons); // TODO: These seem to have no effect; find a way to activate anti-aliasing @@ -38,131 +32,95 @@ DeclarativeScatter::DeclarativeScatter(QQuickItem *parent) setSmooth(true); // Create the shared component on the main GUI thread. - m_shared = new Scatter3DController(boundingRect().toRect()); - setSharedController(m_shared); - m_shared->setActiveDataProxy(new QItemModelScatterDataProxy); -} + m_scatterController = new Scatter3DController(boundingRect().toRect()); + setSharedController(m_scatterController); -DeclarativeScatter::~DeclarativeScatter() -{ - delete m_shared; + // TODO: Uncomment when doing QTRD-2669 +// connect(m_scatterController, &Scatter3DController::axisXChanged, +// this, &DeclarativeBars::axisXChanged); +// connect(m_scatterController, &Scatter3DController::axisYChanged, +// this, &DeclarativeBars::axisYChanged); +// connect(m_scatterController, &Scatter3DController::axisZChanged, +// this, &DeclarativeBars::axisZChanged); } -QSGNode *DeclarativeScatter::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) -{ - // If old node exists and has right size, reuse it. - if (oldNode && m_initialisedSize == boundingRect().size().toSize()) { - // Update bounding rectangle (that has same size as before). - static_cast<DeclarativeScatterRenderer *>( oldNode )->setRect(boundingRect()); - return oldNode; - } - - // Create a new render node when size changes or if there is no node yet - m_initialisedSize = boundingRect().size().toSize(); - - // Delete old node - if (oldNode) - delete oldNode; - - // Create a new one and set it's bounding rectangle - DeclarativeScatterRenderer *node = new DeclarativeScatterRenderer(window(), m_shared); - node->setRect(boundingRect()); - m_shared->setBoundingRect(boundingRect().toRect()); - return node; -} - -void DeclarativeScatter::setObjectColor(const QColor &baseColor, bool uniform) -{ - m_shared->setObjectColor(baseColor, uniform); -} - -QScatterDataProxy *DeclarativeScatter::dataProxy() const -{ - return static_cast<QScatterDataProxy *>(m_shared->activeDataProxy()); -} - -void DeclarativeScatter::setDataProxy(QScatterDataProxy *dataProxy) +DeclarativeScatter::~DeclarativeScatter() { - m_shared->setActiveDataProxy(dataProxy); + delete m_scatterController; } Q3DValueAxis *DeclarativeScatter::axisX() const { - return static_cast<Q3DValueAxis *>(m_shared->axisX()); + return static_cast<Q3DValueAxis *>(m_scatterController->axisX()); } void DeclarativeScatter::setAxisX(Q3DValueAxis *axis) { - m_shared->setAxisX(axis); + m_scatterController->setAxisX(axis); } Q3DValueAxis *DeclarativeScatter::axisY() const { - return static_cast<Q3DValueAxis *>(m_shared->axisY()); + return static_cast<Q3DValueAxis *>(m_scatterController->axisY()); } void DeclarativeScatter::setAxisY(Q3DValueAxis *axis) { - m_shared->setAxisY(axis); + m_scatterController->setAxisY(axis); } Q3DValueAxis *DeclarativeScatter::axisZ() const { - return static_cast<Q3DValueAxis *>(m_shared->axisZ()); + return static_cast<Q3DValueAxis *>(m_scatterController->axisZ()); } void DeclarativeScatter::setAxisZ(Q3DValueAxis *axis) { - m_shared->setAxisZ(axis); + m_scatterController->setAxisZ(axis); +} + +QQmlListProperty<QScatter3DSeries> DeclarativeScatter::seriesList() +{ + return QQmlListProperty<QScatter3DSeries>(this, this, + &DeclarativeScatter::appendSeriesFunc, + &DeclarativeScatter::countSeriesFunc, + &DeclarativeScatter::atSeriesFunc, + &DeclarativeScatter::clearSeriesFunc); } -void DeclarativeScatter::setObjectType(QDataVis::MeshStyle style) +void DeclarativeScatter::appendSeriesFunc(QQmlListProperty<QScatter3DSeries> *list, QScatter3DSeries *series) { - QString objFile = m_shared->meshFileName(); - bool smooth = objFile.endsWith(smoothString); - m_shared->setObjectType(style, smooth); + reinterpret_cast<DeclarativeScatter *>(list->data)->addSeries(series); } -QDataVis::MeshStyle DeclarativeScatter::objectType() const +int DeclarativeScatter::countSeriesFunc(QQmlListProperty<QScatter3DSeries> *list) { - QString objFile = m_shared->meshFileName(); - if (objFile.contains("/sphere")) - return QDataVis::MeshStyleSpheres; - else - return QDataVis::MeshStyleDots; + return reinterpret_cast<DeclarativeScatter *>(list->data)->m_scatterController->scatterSeriesList().size(); } -void DeclarativeScatter::setObjectSmoothingEnabled(bool enabled) +QScatter3DSeries *DeclarativeScatter::atSeriesFunc(QQmlListProperty<QScatter3DSeries> *list, int index) { - QString objFile = m_shared->meshFileName(); - if (objFile.endsWith(smoothString)) { - if (enabled) - return; // Already smooth; do nothing - else // Rip Smooth off the end - objFile.resize(objFile.indexOf(smoothString)); - } else { - if (!enabled) // Already flat; do nothing - return; - else // Append Smooth to the end - objFile.append(smoothString); - } - m_shared->setMeshFileName(objFile); + return reinterpret_cast<DeclarativeScatter *>(list->data)->m_scatterController->scatterSeriesList().at(index); } -bool DeclarativeScatter::isObjectSmoothingEnabled() const +void DeclarativeScatter::clearSeriesFunc(QQmlListProperty<QScatter3DSeries> *list) { - QString objFile = m_shared->meshFileName(); - return objFile.endsWith(smoothString); + DeclarativeScatter *declScatter = reinterpret_cast<DeclarativeScatter *>(list->data); + QList<QScatter3DSeries *> realList = declScatter->m_scatterController->scatterSeriesList(); + int count = realList.size(); + for (int i = 0; i < count; i++) + declScatter->removeSeries(realList.at(i)); } -void DeclarativeScatter::setMeshFileName(const QString &objFileName) +void DeclarativeScatter::addSeries(QScatter3DSeries *series) { - m_shared->setMeshFileName(objFileName); + m_scatterController->addSeries(series); } -QString DeclarativeScatter::meshFileName() const +void DeclarativeScatter::removeSeries(QScatter3DSeries *series) { - return m_shared->meshFileName(); + m_scatterController->removeSeries(series); + series->setParent(this); // Reparent as removing will leave series parentless } QT_DATAVISUALIZATION_END_NAMESPACE |