summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomi Korpipää <tomi.korpipaa@digia.com>2014-05-14 13:40:35 +0300
committerTomi Korpipää <tomi.korpipaa@digia.com>2014-05-14 13:44:46 +0300
commit8015a58ea819b41e0a896ea9e7d57d7f3a9f1c5f (patch)
tree486a6017c2bd0fdaeb408aed46b76587ddd034dd
parent824cf363f6ab999d2fc38ebdab1f7faae5559ad0 (diff)
Added visible flag and possibility to release ownership of custom item
Task-number: QTRD-3080 Change-Id: I198930c48fe9bce6a158406aff5fbf31272b9afe Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
-rw-r--r--src/datavisualization/data/customrenderitem.cpp3
-rw-r--r--src/datavisualization/data/customrenderitem_p.h3
-rw-r--r--src/datavisualization/data/qcustom3ditem.cpp26
-rw-r--r--src/datavisualization/data/qcustom3ditem.h5
-rw-r--r--src/datavisualization/data/qcustom3ditem_p.h1
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc8
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp10
-rw-r--r--src/datavisualization/engine/abstract3dcontroller_p.h1
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp4
-rw-r--r--src/datavisualization/engine/qabstract3dgraph.cpp10
-rw-r--r--src/datavisualization/engine/qabstract3dgraph.h1
-rw-r--r--src/datavisualizationqml2/abstractdeclarative.cpp5
-rw-r--r--src/datavisualizationqml2/abstractdeclarative_p.h1
-rw-r--r--tests/qmlcamera/qml/qmlcamera/main.qml12
14 files changed, 85 insertions, 5 deletions
diff --git a/src/datavisualization/data/customrenderitem.cpp b/src/datavisualization/data/customrenderitem.cpp
index ad1fba71..53db9bd1 100644
--- a/src/datavisualization/data/customrenderitem.cpp
+++ b/src/datavisualization/data/customrenderitem.cpp
@@ -23,7 +23,8 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION
CustomRenderItem::CustomRenderItem()
: AbstractRenderItem(),
m_texture(0),
- m_object(0)
+ m_object(0),
+ m_visible(true)
{
}
diff --git a/src/datavisualization/data/customrenderitem_p.h b/src/datavisualization/data/customrenderitem_p.h
index 0632f53e..70c162b7 100644
--- a/src/datavisualization/data/customrenderitem_p.h
+++ b/src/datavisualization/data/customrenderitem_p.h
@@ -49,12 +49,15 @@ public:
inline QVector3D scaling() { return m_scaling; }
inline void setBlendNeeded(bool blend) { m_needBlend = blend; }
inline bool isBlendNeeded() { return m_needBlend; }
+ inline void setVisible(bool visible) { m_visible = visible; }
+ inline bool isVisible() { return m_visible; }
private:
GLuint m_texture;
QVector3D m_scaling;
ObjectHelper *m_object;
bool m_needBlend;
+ bool m_visible;
};
typedef QVector<CustomRenderItem *> CustomRenderItemArray;
diff --git a/src/datavisualization/data/qcustom3ditem.cpp b/src/datavisualization/data/qcustom3ditem.cpp
index 70795fdf..285f5a39 100644
--- a/src/datavisualization/data/qcustom3ditem.cpp
+++ b/src/datavisualization/data/qcustom3ditem.cpp
@@ -187,6 +187,23 @@ QQuaternion QCustom3DItem::rotation()
return d_ptr->m_rotation;
}
+/*! \property QCustom3DItem::visible
+ *
+ * Sets the item \a visible. Defaults to \c{true}.
+ */
+void QCustom3DItem::setVisible(bool visible)
+{
+ if (d_ptr->m_visible != visible) {
+ d_ptr->m_visible = visible;
+ emit visibleChanged(visible);
+ }
+}
+
+bool QCustom3DItem::isVisible()
+{
+ return d_ptr->m_visible;
+}
+
/*!
* A convenience function to construct rotation quaternion from \a axis and \a angle.
*
@@ -242,7 +259,11 @@ QString QCustom3DItem::textureFile()
QCustom3DItemPrivate::QCustom3DItemPrivate(QCustom3DItem *q, QObject *parent) :
QObject(parent),
- q_ptr(q)
+ q_ptr(q),
+ m_position(QVector3D(0.0f, 0.0f, 0.0f)),
+ m_scaling(QVector3D(0.1f, 0.1f, 0.1f)),
+ m_rotation(QQuaternion(0.0f, 0.0f, 0.0f, 0.0f)),
+ m_visible(true)
{
}
@@ -254,7 +275,8 @@ QCustom3DItemPrivate::QCustom3DItemPrivate(QCustom3DItem *q, const QString &mesh
m_meshFile(meshFile),
m_position(position),
m_scaling(scaling),
- m_rotation(rotation)
+ m_rotation(rotation),
+ m_visible(true)
{
}
diff --git a/src/datavisualization/data/qcustom3ditem.h b/src/datavisualization/data/qcustom3ditem.h
index 394c51d7..c9d0cd63 100644
--- a/src/datavisualization/data/qcustom3ditem.h
+++ b/src/datavisualization/data/qcustom3ditem.h
@@ -36,6 +36,7 @@ class QT_DATAVISUALIZATION_EXPORT QCustom3DItem : public QObject
Q_PROPERTY(QVector3D position READ position WRITE setPosition NOTIFY positionChanged)
Q_PROPERTY(QVector3D scaling READ scaling WRITE setScaling NOTIFY scalingChanged)
Q_PROPERTY(QQuaternion rotation READ rotation WRITE setRotation NOTIFY rotationChanged)
+ Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged)
public:
explicit QCustom3DItem(QObject *parent = 0);
@@ -59,6 +60,9 @@ public:
void setRotation(const QQuaternion &rotation);
QQuaternion rotation();
+ void setVisible(bool visible);
+ bool isVisible();
+
Q_INVOKABLE void setRotationAxisAndAngle(const QVector3D &axis, float angle);
void setTextureImage(const QImage &textureImage);
@@ -69,6 +73,7 @@ signals:
void positionChanged(const QVector3D &position);
void scalingChanged(const QVector3D &scaling);
void rotationChanged(const QQuaternion &rotation);
+ void visibleChanged(bool visible);
protected:
QScopedPointer<QCustom3DItemPrivate> d_ptr;
diff --git a/src/datavisualization/data/qcustom3ditem_p.h b/src/datavisualization/data/qcustom3ditem_p.h
index 77062768..f85ec5bf 100644
--- a/src/datavisualization/data/qcustom3ditem_p.h
+++ b/src/datavisualization/data/qcustom3ditem_p.h
@@ -53,6 +53,7 @@ public:
QVector3D m_position;
QVector3D m_scaling;
QQuaternion m_rotation;
+ bool m_visible;
private:
friend class QCustom3DItem;
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc
index 62e4034f..4fac937b 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-abstractdeclarative.qdoc
@@ -187,6 +187,14 @@
*/
/*!
+ * \qmlmethod void AbstractGraph3D::releaseCustomItem(Custom3DItem item)
+ *
+ * Gets ownership of \a item back and removes the \a item from the graph.
+ *
+ * \since Qt Data Visualization 1.1
+ */
+
+/*!
* \qmlmethod int AbstractGraph3D::selectedLabelIndex()
*
* Can be used to query the index of the selected label after receiving elementSelected signal with
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index 6b6f154d..78ac135b 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -911,6 +911,16 @@ void Abstract3DController::deleteCustomItem(const QVector3D &position)
}
}
+void Abstract3DController::releaseCustomItem(QCustom3DItem *item)
+{
+ if (item && m_customItems.contains(item)) {
+ m_customItems.removeOne(item);
+ item->setParent(0);
+ m_isCustomDataDirty = true;
+ emitNeedRender();
+ }
+}
+
void Abstract3DController::handleAxisTitleChanged(const QString &title)
{
Q_UNUSED(title)
diff --git a/src/datavisualization/engine/abstract3dcontroller_p.h b/src/datavisualization/engine/abstract3dcontroller_p.h
index 41c75d8e..79320c25 100644
--- a/src/datavisualization/engine/abstract3dcontroller_p.h
+++ b/src/datavisualization/engine/abstract3dcontroller_p.h
@@ -244,6 +244,7 @@ public:
void deleteCustomItems();
void deleteCustomItem(QCustom3DItem *item);
void deleteCustomItem(const QVector3D &position);
+ void releaseCustomItem(QCustom3DItem *item);
int selectedLabelIndex() const;
QAbstract3DAxis *selectedAxis() const;
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp
index bcf03ed7..6dcc46df 100644
--- a/src/datavisualization/engine/abstract3drenderer.cpp
+++ b/src/datavisualization/engine/abstract3drenderer.cpp
@@ -551,6 +551,7 @@ void Abstract3DRenderer::addCustomItem(QCustom3DItem *item) {
//item->d_ptr->clearTextureImage();
QVector3D translation = convertPositionToTranslation(item->position());
newItem->setTranslation(translation);
+ newItem->setVisible(item->isVisible());
m_customRenderCache.append(newItem);
}
@@ -580,6 +581,9 @@ void Abstract3DRenderer::drawCustomItems(RenderingState state,
// Draw custom items
foreach (CustomRenderItem *item, m_customRenderCache) {
+ if (!item->isVisible())
+ continue;
+
QMatrix4x4 modelMatrix;
QMatrix4x4 itModelMatrix;
QMatrix4x4 MVPMatrix;
diff --git a/src/datavisualization/engine/qabstract3dgraph.cpp b/src/datavisualization/engine/qabstract3dgraph.cpp
index b3a788cb..9818d176 100644
--- a/src/datavisualization/engine/qabstract3dgraph.cpp
+++ b/src/datavisualization/engine/qabstract3dgraph.cpp
@@ -427,6 +427,16 @@ void QAbstract3DGraph::removeCustomItemAt(const QVector3D &position)
}
/*!
+ * Gets ownership of given \a item back and removes the \a item from the graph.
+ *
+ * \since Qt Data Visualization 1.1
+ */
+void QAbstract3DGraph::releaseCustomItem(QCustom3DItem *item)
+{
+ return d_ptr->m_visualController->releaseCustomItem(item);
+}
+
+/*!
* Can be used to query the index of the selected label after receiving elementSelected signal with
* any label type. Selection is valid until the next elementSelected signal.
*
diff --git a/src/datavisualization/engine/qabstract3dgraph.h b/src/datavisualization/engine/qabstract3dgraph.h
index bfc03cc1..23dba269 100644
--- a/src/datavisualization/engine/qabstract3dgraph.h
+++ b/src/datavisualization/engine/qabstract3dgraph.h
@@ -114,6 +114,7 @@ public:
void removeCustomItems();
void removeCustomItem(QCustom3DItem *item);
void removeCustomItemAt(const QVector3D &position);
+ void releaseCustomItem(QCustom3DItem *item);
int selectedLabelIndex() const;
QAbstract3DAxis *selectedAxis() const;
diff --git a/src/datavisualizationqml2/abstractdeclarative.cpp b/src/datavisualizationqml2/abstractdeclarative.cpp
index ed122104..47d3bb66 100644
--- a/src/datavisualizationqml2/abstractdeclarative.cpp
+++ b/src/datavisualizationqml2/abstractdeclarative.cpp
@@ -231,6 +231,11 @@ void AbstractDeclarative::removeCustomItemAt(const QVector3D &position)
m_controller->deleteCustomItem(position);
}
+void AbstractDeclarative::releaseCustomItem(QCustom3DItem *item)
+{
+ return m_controller->releaseCustomItem(item);
+}
+
int AbstractDeclarative::selectedLabelIndex() const
{
return m_controller->selectedLabelIndex();
diff --git a/src/datavisualizationqml2/abstractdeclarative_p.h b/src/datavisualizationqml2/abstractdeclarative_p.h
index 837c632c..8095e87a 100644
--- a/src/datavisualizationqml2/abstractdeclarative_p.h
+++ b/src/datavisualizationqml2/abstractdeclarative_p.h
@@ -134,6 +134,7 @@ public:
Q_REVISION(1) Q_INVOKABLE virtual void removeCustomItems();
Q_REVISION(1) Q_INVOKABLE virtual void removeCustomItem(QCustom3DItem *item);
Q_REVISION(1) Q_INVOKABLE virtual void removeCustomItemAt(const QVector3D &position);
+ Q_REVISION(1) Q_INVOKABLE virtual void releaseCustomItem(QCustom3DItem *item);
Q_REVISION(1) Q_INVOKABLE virtual int selectedLabelIndex() const;
Q_REVISION(1) Q_INVOKABLE virtual QAbstract3DAxis *selectedAxis() const;
diff --git a/tests/qmlcamera/qml/qmlcamera/main.qml b/tests/qmlcamera/qml/qmlcamera/main.qml
index 0f708615..6b83bde2 100644
--- a/tests/qmlcamera/qml/qmlcamera/main.qml
+++ b/tests/qmlcamera/qml/qmlcamera/main.qml
@@ -179,9 +179,17 @@ Rectangle {
anchors.bottom: dataToggle.top
width: camControlArea.width
text: "Remove Shuttle"
+ property bool addObject: false
onClicked: {
- testChart.removeCustomItemAt(Qt.vector3d(5.0,35.0,3.0))
- text = "Shuttle has been deleted"
+ if (addObject === true) {
+ testChart.addCustomItem(shuttleItem)
+ text = "Remove Shuttle"
+ addObject = false
+ } else {
+ testChart.releaseCustomItem(shuttleItem)
+ text = "Add Shuttle"
+ addObject = true
+ }
}
}
}