From 48ec1d061bfd202f68f8c6771917fa22f9e45733 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 6 Sep 2013 12:24:41 +0300 Subject: Expose data proxy in QML MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I1102520678f2c8ae2932ddb396b41655cfd538e9 Reviewed-by: Tomi Korpipää --- src/datavis3d/data/qabstractdataproxy.h | 1 + src/datavis3d/data/qbardataproxy.h | 1 + src/datavis3d/data/qscatterdataproxy.h | 1 + src/datavis3d/engine/bars3dcontroller.cpp | 21 ++++++++++++------- src/datavis3dqml2/datavis3dqml2_plugin.cpp | 9 ++++++++ src/datavis3dqml2/datavis3dqml2_plugin.h | 8 ++++++++ src/datavis3dqml2/declarativebars.cpp | 33 +++++------------------------- src/datavis3dqml2/declarativebars_p.h | 18 ++++------------ src/datavis3dqml2/declarativescatter.cpp | 28 ++++--------------------- src/datavis3dqml2/declarativescatter_p.h | 16 ++++----------- 10 files changed, 51 insertions(+), 85 deletions(-) (limited to 'src') diff --git a/src/datavis3d/data/qabstractdataproxy.h b/src/datavis3d/data/qabstractdataproxy.h index ccf66b20..6cd2386d 100644 --- a/src/datavis3d/data/qabstractdataproxy.h +++ b/src/datavis3d/data/qabstractdataproxy.h @@ -32,6 +32,7 @@ class QT_DATAVIS3D_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 { diff --git a/src/datavis3d/data/qbardataproxy.h b/src/datavis3d/data/qbardataproxy.h index 51191739..3338bc75 100644 --- a/src/datavis3d/data/qbardataproxy.h +++ b/src/datavis3d/data/qbardataproxy.h @@ -34,6 +34,7 @@ class QT_DATAVIS3D_EXPORT QBarDataProxy : public QAbstractDataProxy { Q_OBJECT + Q_PROPERTY(int rowCount READ rowCount) public: explicit QBarDataProxy(QObject *parent = 0); virtual ~QBarDataProxy(); diff --git a/src/datavis3d/data/qscatterdataproxy.h b/src/datavis3d/data/qscatterdataproxy.h index b8f505f9..d5897631 100644 --- a/src/datavis3d/data/qscatterdataproxy.h +++ b/src/datavis3d/data/qscatterdataproxy.h @@ -32,6 +32,7 @@ class QT_DATAVIS3D_EXPORT QScatterDataProxy : public QAbstractDataProxy { Q_OBJECT + Q_PROPERTY(int itemCount READ itemCount) public: explicit QScatterDataProxy(QObject *parent = 0); virtual ~QScatterDataProxy(); diff --git a/src/datavis3d/engine/bars3dcontroller.cpp b/src/datavis3d/engine/bars3dcontroller.cpp index e8b5fe30..1591eb46 100644 --- a/src/datavis3d/engine/bars3dcontroller.cpp +++ b/src/datavis3d/engine/bars3dcontroller.cpp @@ -290,6 +290,8 @@ void Bars3DController::setActiveDataProxy(QAbstractDataProxy *proxy) &Bars3DController::handleItemChanged); adjustValueAxisRange(); + + // Always clear selection on proxy change setSelectedBarPos(noSelectionPoint()); } @@ -298,7 +300,8 @@ void Bars3DController::handleArrayReset() setSlicingActive(false); adjustValueAxisRange(); m_isDataDirty = true; - setSelectedBarPos(noSelectionPoint()); + // Clear selection unless still valid + setSelectedBarPos(m_selectedBarPos); emitNeedRender(); } @@ -335,9 +338,10 @@ void Bars3DController::handleRowsRemoved(int startIndex, int count) setSlicingActive(false); adjustValueAxisRange(); m_isDataDirty = true; - // TODO this will break once data window offset is implemented - if (startIndex >= static_cast(m_data)->rowCount()) - setSelectedBarPos(noSelectionPoint()); + + // Clear selection unless still valid + setSelectedBarPos(m_selectedBarPos); + emitNeedRender(); } @@ -447,8 +451,8 @@ void Bars3DController::setDataWindow(int rowCount, int columnCount) adjustValueAxisRange(); - if (m_selectedBarPos.x() >= rowCount || m_selectedBarPos.y() >= columnCount) - setSelectedBarPos(noSelectionPoint()); + // Clear selection unless still valid + setSelectedBarPos(m_selectedBarPos); m_changeTracker.sampleSpaceChanged = true; m_isDataDirty = true; // Render item array is recreated in renderer @@ -464,11 +468,14 @@ void Bars3DController::setSelectionMode(QDataVis::SelectionMode mode) void Bars3DController::setSelectedBarPos(const QPoint &position) { + // If the selection is outside data window or targets non-existent + // bar, clear selection instead. // TODO this will break once data window offset is implemented QPoint pos = position; if (pos.x() < 0 || pos.y() < 0 || pos.x() >= static_cast(m_data)->rowCount() - || pos.y() >= static_cast(m_data)->rowAt(pos.x())->size()) { + || pos.y() >= static_cast(m_data)->rowAt(pos.x())->size() + || pos.x() >= m_rowCount || pos.y() >= m_columnCount) { pos = noSelectionPoint(); } diff --git a/src/datavis3dqml2/datavis3dqml2_plugin.cpp b/src/datavis3dqml2/datavis3dqml2_plugin.cpp index 48f39cf4..8c73e318 100644 --- a/src/datavis3dqml2/datavis3dqml2_plugin.cpp +++ b/src/datavis3dqml2/datavis3dqml2_plugin.cpp @@ -31,6 +31,12 @@ void Datavis3Dqml2Plugin::registerTypes(const char *uri) QLatin1String("Trying to create uncreatable: DataVis.")); qmlRegisterUncreatableType(uri, 1, 0, "AbstractAxis3D", QLatin1String("Trying to create uncreatable: AbstractAxis.")); + qmlRegisterUncreatableType(uri, 1, 0, "AbstractDataProxy", + QLatin1String("Trying to create uncreatable: AbstractDataProxy.")); + qmlRegisterUncreatableType(uri, 1, 0, "BarDataProxy", + QLatin1String("Trying to create uncreatable: BarDataProxy.")); + qmlRegisterUncreatableType(uri, 1, 0, "ScatterDataProxy", + QLatin1String("Trying to create uncreatable: ScatterDataProxy.")); qmlRegisterType(uri, 1, 0, "BarDataMapping"); qmlRegisterType(uri, 1, 0, "ScatterDataMapping"); @@ -40,6 +46,9 @@ void Datavis3Dqml2Plugin::registerTypes(const char *uri) qmlRegisterType(uri, 1, 0, "ValueAxis3D"); qmlRegisterType(uri, 1, 0, "CategoryAxis3D"); + + qmlRegisterType(uri, 1, 0, "ItemModelBarDataProxy"); + qmlRegisterType(uri, 1, 0, "ItemModelScatterDataProxy"); } QT_DATAVIS3D_END_NAMESPACE diff --git a/src/datavis3dqml2/datavis3dqml2_plugin.h b/src/datavis3dqml2/datavis3dqml2_plugin.h index 35bd8840..cc9894ba 100644 --- a/src/datavis3dqml2/datavis3dqml2_plugin.h +++ b/src/datavis3dqml2/datavis3dqml2_plugin.h @@ -26,6 +26,8 @@ #include "qitemmodelscatterdatamapping.h" #include "q3dvalueaxis.h" #include "q3dcategoryaxis.h" +#include "qitemmodelbardataproxy.h" +#include "qitemmodelscatterdataproxy.h" #include @@ -43,6 +45,12 @@ 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 *) + QT_DATAVIS3D_BEGIN_NAMESPACE class Datavis3Dqml2Plugin : public QQmlExtensionPlugin diff --git a/src/datavis3dqml2/declarativebars.cpp b/src/datavis3dqml2/declarativebars.cpp index f94487bc..30ee0257 100644 --- a/src/datavis3dqml2/declarativebars.cpp +++ b/src/datavis3dqml2/declarativebars.cpp @@ -18,8 +18,8 @@ #include "declarativebars_p.h" #include "declarativebarsrenderer_p.h" -#include "qitemmodelbardataproxy.h" #include "q3dvalueaxis.h" +#include "qitemmodelbardataproxy.h" QT_DATAVIS3D_BEGIN_NAMESPACE @@ -46,9 +46,6 @@ DeclarativeBars::DeclarativeBars(QQuickItem *parent) QItemModelBarDataProxy *proxy = new QItemModelBarDataProxy; m_shared->setActiveDataProxy(proxy); - - QObject::connect(proxy, &QBarDataProxy::arrayReset, this, - &DeclarativeBars::dataResolved); } DeclarativeBars::~DeclarativeBars() @@ -61,16 +58,6 @@ void DeclarativeBars::handleShadowQualityUpdate(QDataVis::ShadowQuality quality) emit shadowQualityChanged(quality); } -void DeclarativeBars::classBegin() -{ - //qDebug() << "classBegin"; -} - -void DeclarativeBars::componentComplete() -{ - //qDebug() << "componentComplete"; -} - QSGNode *DeclarativeBars::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) { // If old node exists and has right size, reuse it. @@ -110,19 +97,14 @@ void DeclarativeBars::setCameraPosition(qreal horizontal, qreal vertical, int di m_shared->setCameraPosition(GLfloat(horizontal), GLfloat(vertical), GLint(distance)); } -void DeclarativeBars::setData(const QAbstractItemModel *data) -{ - static_cast(m_shared->activeDataProxy())->setItemModel(data); -} - -const QAbstractItemModel *DeclarativeBars::data() const +void DeclarativeBars::setDataProxy(QBarDataProxy *dataProxy) { - return static_cast(m_shared->activeDataProxy())->itemModel(); + m_shared->setActiveDataProxy(dataProxy); } -void DeclarativeBars::setMapping(QItemModelBarDataMapping *mapping) +QBarDataProxy *DeclarativeBars::dataProxy() const { - static_cast(m_shared->activeDataProxy())->setActiveMapping(mapping); + return static_cast(m_shared->activeDataProxy()); } Q3DCategoryAxis *DeclarativeBars::rowAxis() const @@ -155,11 +137,6 @@ void DeclarativeBars::setColumnAxis(Q3DCategoryAxis *axis) m_shared->setAxisZ(axis); } -QItemModelBarDataMapping *DeclarativeBars::mapping() const -{ - return static_cast(m_shared->activeDataProxy())->activeMapping(); -} - void DeclarativeBars::setBarThickness(qreal thicknessRatio) { m_shared->setBarSpecs(GLfloat(thicknessRatio), barSpacing(), isBarSpacingRelative()); diff --git a/src/datavis3dqml2/declarativebars_p.h b/src/datavis3dqml2/declarativebars_p.h index 283afdfb..a5d2ee05 100644 --- a/src/datavis3dqml2/declarativebars_p.h +++ b/src/datavis3dqml2/declarativebars_p.h @@ -32,9 +32,9 @@ #include "datavis3dglobal_p.h" #include "bars3dcontroller_p.h" #include "declarativebars_p.h" -#include "qitemmodelbardatamapping.h" #include "q3dvalueaxis.h" #include "q3dcategoryaxis.h" +#include "qbardataproxy.h" #include #include @@ -46,8 +46,7 @@ QT_DATAVIS3D_BEGIN_NAMESPACE class DeclarativeBars : public QQuickItem { Q_OBJECT - Q_PROPERTY(const QAbstractItemModel *data READ data WRITE setData) - Q_PROPERTY(QItemModelBarDataMapping *mapping READ mapping WRITE setMapping) + Q_PROPERTY(QBarDataProxy *dataProxy READ dataProxy WRITE setDataProxy) Q_PROPERTY(Q3DCategoryAxis *rowAxis READ rowAxis WRITE setRowAxis) Q_PROPERTY(Q3DValueAxis *valueAxis READ valueAxis WRITE setValueAxis) Q_PROPERTY(Q3DCategoryAxis *columnAxis READ columnAxis WRITE setColumnAxis) @@ -80,9 +79,6 @@ public: explicit DeclarativeBars(QQuickItem *parent = 0); ~DeclarativeBars(); - void classBegin(); - void componentComplete(); - // how many samples per row and column Q_INVOKABLE void setDataWindow(int rowCount, int columnCount); @@ -96,12 +92,8 @@ public: // percentage (10...500)) Q_INVOKABLE void setCameraPosition(qreal horizontal, qreal vertical, int distance); - // Add whole data set. - void setData(const QAbstractItemModel *data); - const QAbstractItemModel *data() const; - - QItemModelBarDataMapping *mapping() const; - void setMapping(QItemModelBarDataMapping *mapping); + QBarDataProxy *dataProxy() const; + void setDataProxy(QBarDataProxy *dataProxy); Q3DCategoryAxis *rowAxis() const; void setRowAxis(Q3DCategoryAxis *axis); @@ -183,8 +175,6 @@ public: signals: // Signals shadow quality changes. void shadowQualityChanged(QDataVis::ShadowQuality quality); - // Signals data has been resolved - void dataResolved(); protected: Bars3DController *m_shared; diff --git a/src/datavis3dqml2/declarativescatter.cpp b/src/datavis3dqml2/declarativescatter.cpp index c38dc9d0..79f91265 100644 --- a/src/datavis3dqml2/declarativescatter.cpp +++ b/src/datavis3dqml2/declarativescatter.cpp @@ -56,16 +56,6 @@ void DeclarativeScatter::handleShadowQualityUpdate(QDataVis::ShadowQuality quali emit shadowQualityChanged(quality); } -void DeclarativeScatter::classBegin() -{ - //qDebug() << "classBegin"; -} - -void DeclarativeScatter::componentComplete() -{ - //qDebug() << "componentComplete"; -} - QSGNode *DeclarativeScatter::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) { // If old node exists and has right size, reuse it. @@ -100,24 +90,14 @@ void DeclarativeScatter::setObjectColor(const QColor &baseColor, const QColor &h m_shared->setObjectColor(baseColor, heightColor, depthColor, uniform); } -void DeclarativeScatter::setData(const QAbstractItemModel *data) -{ - static_cast(m_shared->activeDataProxy())->setItemModel(data); -} - -const QAbstractItemModel *DeclarativeScatter::data() const -{ - return static_cast(m_shared->activeDataProxy())->itemModel(); -} - -void DeclarativeScatter::setMapping(QItemModelScatterDataMapping *mapping) +QScatterDataProxy *DeclarativeScatter::dataProxy() const { - static_cast(m_shared->activeDataProxy())->setActiveMapping(mapping); + return static_cast(m_shared->activeDataProxy()); } -QItemModelScatterDataMapping *DeclarativeScatter::mapping() const +void DeclarativeScatter::setDataProxy(QScatterDataProxy *dataProxy) { - return static_cast(m_shared->activeDataProxy())->activeMapping(); + m_shared->setActiveDataProxy(dataProxy); } Q3DValueAxis *DeclarativeScatter::axisX() const diff --git a/src/datavis3dqml2/declarativescatter_p.h b/src/datavis3dqml2/declarativescatter_p.h index 187d1b89..60a751be 100644 --- a/src/datavis3dqml2/declarativescatter_p.h +++ b/src/datavis3dqml2/declarativescatter_p.h @@ -32,8 +32,8 @@ #include "datavis3dglobal_p.h" #include "scatter3dcontroller_p.h" #include "declarativescatter_p.h" -#include "qitemmodelscatterdatamapping.h" #include "q3dvalueaxis.h" +#include "qscatterdataproxy.h" #include #include @@ -44,8 +44,7 @@ QT_DATAVIS3D_BEGIN_NAMESPACE class DeclarativeScatter : public QQuickItem { Q_OBJECT - Q_PROPERTY(const QAbstractItemModel *data READ data WRITE setData) - Q_PROPERTY(QItemModelScatterDataMapping *mapping READ mapping WRITE setMapping) + Q_PROPERTY(QScatterDataProxy *dataProxy READ dataProxy WRITE setDataProxy) Q_PROPERTY(Q3DValueAxis *axisX READ axisX WRITE setAxisX) Q_PROPERTY(Q3DValueAxis *axisY READ axisY WRITE setAxisY) Q_PROPERTY(Q3DValueAxis *axisZ READ axisZ WRITE setAxisZ) @@ -72,9 +71,6 @@ public: explicit DeclarativeScatter(QQuickItem *parent = 0); ~DeclarativeScatter(); - void classBegin(); - void componentComplete(); - // Set camera rotation if you don't want to use the presets (in horizontal (-180...180) and // vertical (-90...90) angles and distance in percentage (10...500)) Q_INVOKABLE void setCameraPosition(qreal horizontal, qreal vertical, int distance); @@ -84,12 +80,8 @@ public: Q_INVOKABLE void setObjectColor(const QColor &baseColor, const QColor &heightColor, const QColor &depthColor, bool uniform = true); - // Add whole data set. - void setData(const QAbstractItemModel *data); - const QAbstractItemModel *data() const; - - QItemModelScatterDataMapping *mapping() const; - void setMapping(QItemModelScatterDataMapping *mapping); + QScatterDataProxy *dataProxy() const; + void setDataProxy(QScatterDataProxy *dataProxy); Q3DValueAxis *axisX() const; void setAxisX(Q3DValueAxis *axis); -- cgit v1.2.3