summaryrefslogtreecommitdiffstats
path: root/src/datavisualization
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-11-26 14:53:50 +0200
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-11-27 11:29:30 +0200
commit7c942cc0f497fe7e61ce6a10fce45771c0858e09 (patch)
treeaab5d2285b8e583f3565e305e0818a49503cf95c /src/datavisualization
parente029d0ea1d486dd3dbbfa4519a2125da202f22e4 (diff)
Integrated item model mappings to item model proxies
Separate mapping object was redundant. Task-number: QTRD-2564 Change-Id: I6b1a23ba52dbb184f46df0fdd64184eeb145c0c3 Reviewed-by: Mika Salmela <mika.salmela@digia.com>
Diffstat (limited to 'src/datavisualization')
-rw-r--r--src/datavisualization/data/abstractitemmodelhandler.cpp111
-rw-r--r--src/datavisualization/data/abstractitemmodelhandler_p.h12
-rw-r--r--src/datavisualization/data/baritemmodelhandler.cpp28
-rw-r--r--src/datavisualization/data/baritemmodelhandler_p.h2
-rw-r--r--src/datavisualization/data/data.pri12
-rw-r--r--src/datavisualization/data/qabstractdatamapping.cpp71
-rw-r--r--src/datavisualization/data/qabstractdatamapping.h53
-rw-r--r--src/datavisualization/data/qabstractdatamapping_p.h50
-rw-r--r--src/datavisualization/data/qitemmodelbardatamapping.cpp407
-rw-r--r--src/datavisualization/data/qitemmodelbardatamapping.h90
-rw-r--r--src/datavisualization/data/qitemmodelbardatamapping_p.h63
-rw-r--r--src/datavisualization/data/qitemmodelbardataproxy.cpp374
-rw-r--r--src/datavisualization/data/qitemmodelbardataproxy.h70
-rw-r--r--src/datavisualization/data/qitemmodelbardataproxy_p.h15
-rw-r--r--src/datavisualization/data/qitemmodelscatterdatamapping.cpp200
-rw-r--r--src/datavisualization/data/qitemmodelscatterdatamapping.h62
-rw-r--r--src/datavisualization/data/qitemmodelscatterdatamapping_p.h56
-rw-r--r--src/datavisualization/data/qitemmodelscatterdataproxy.cpp144
-rw-r--r--src/datavisualization/data/qitemmodelscatterdataproxy.h37
-rw-r--r--src/datavisualization/data/qitemmodelscatterdataproxy_p.h6
-rw-r--r--src/datavisualization/data/qitemmodelsurfacedatamapping.cpp411
-rw-r--r--src/datavisualization/data/qitemmodelsurfacedatamapping.h90
-rw-r--r--src/datavisualization/data/qitemmodelsurfacedatamapping_p.h63
-rw-r--r--src/datavisualization/data/qitemmodelsurfacedataproxy.cpp376
-rw-r--r--src/datavisualization/data/qitemmodelsurfacedataproxy.h70
-rw-r--r--src/datavisualization/data/qitemmodelsurfacedataproxy_p.h15
-rw-r--r--src/datavisualization/data/scatteritemmodelhandler.cpp9
-rw-r--r--src/datavisualization/data/scatteritemmodelhandler_p.h2
-rw-r--r--src/datavisualization/data/surfaceitemmodelhandler.cpp28
-rw-r--r--src/datavisualization/data/surfaceitemmodelhandler_p.h2
-rw-r--r--src/datavisualization/doc/snippets/doc_src_qmldatavisualization.cpp90
-rw-r--r--src/datavisualization/doc/snippets/doc_src_qtdatavisualization.cpp36
32 files changed, 1088 insertions, 1967 deletions
diff --git a/src/datavisualization/data/abstractitemmodelhandler.cpp b/src/datavisualization/data/abstractitemmodelhandler.cpp
index 0ad0ac0b..41f520a4 100644
--- a/src/datavisualization/data/abstractitemmodelhandler.cpp
+++ b/src/datavisualization/data/abstractitemmodelhandler.cpp
@@ -17,14 +17,12 @@
****************************************************************************/
#include "abstractitemmodelhandler_p.h"
-#include "qabstractdatamapping.h"
#include <QTimer>
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
AbstractItemModelHandler::AbstractItemModelHandler(QObject *parent)
: QObject(parent),
- m_activeMapping(0),
resolvePending(0)
{
m_resolveTimer.setSingleShot(true);
@@ -38,33 +36,37 @@ AbstractItemModelHandler::~AbstractItemModelHandler()
void AbstractItemModelHandler::setItemModel(const QAbstractItemModel *itemModel)
{
- if (!m_itemModel.isNull())
- QObject::disconnect(m_itemModel, 0, this, 0);
-
- m_itemModel = itemModel;
-
- if (!m_itemModel.isNull()) {
- QObject::connect(m_itemModel.data(), &QAbstractItemModel::columnsInserted,
- this, &AbstractItemModelHandler::handleColumnsInserted);
- QObject::connect(m_itemModel.data(), &QAbstractItemModel::columnsMoved,
- this, &AbstractItemModelHandler::handleColumnsMoved);
- QObject::connect(m_itemModel.data(), &QAbstractItemModel::columnsRemoved,
- this, &AbstractItemModelHandler::handleColumnsRemoved);
- QObject::connect(m_itemModel.data(), &QAbstractItemModel::dataChanged,
- this, &AbstractItemModelHandler::handleDataChanged);
- QObject::connect(m_itemModel.data(), &QAbstractItemModel::layoutChanged,
- this, &AbstractItemModelHandler::handleLayoutChanged);
- QObject::connect(m_itemModel.data(), &QAbstractItemModel::modelReset,
- this, &AbstractItemModelHandler::handleModelReset);
- QObject::connect(m_itemModel.data(), &QAbstractItemModel::rowsInserted,
- this, &AbstractItemModelHandler::handleRowsInserted);
- QObject::connect(m_itemModel.data(), &QAbstractItemModel::rowsMoved,
- this, &AbstractItemModelHandler::handleRowsMoved);
- QObject::connect(m_itemModel.data(), &QAbstractItemModel::rowsRemoved,
- this, &AbstractItemModelHandler::handleRowsRemoved);
+ if (itemModel != m_itemModel.data()) {
+ if (!m_itemModel.isNull())
+ QObject::disconnect(m_itemModel, 0, this, 0);
+
+ m_itemModel = itemModel;
+
+ if (!m_itemModel.isNull()) {
+ QObject::connect(m_itemModel.data(), &QAbstractItemModel::columnsInserted,
+ this, &AbstractItemModelHandler::handleColumnsInserted);
+ QObject::connect(m_itemModel.data(), &QAbstractItemModel::columnsMoved,
+ this, &AbstractItemModelHandler::handleColumnsMoved);
+ QObject::connect(m_itemModel.data(), &QAbstractItemModel::columnsRemoved,
+ this, &AbstractItemModelHandler::handleColumnsRemoved);
+ QObject::connect(m_itemModel.data(), &QAbstractItemModel::dataChanged,
+ this, &AbstractItemModelHandler::handleDataChanged);
+ QObject::connect(m_itemModel.data(), &QAbstractItemModel::layoutChanged,
+ this, &AbstractItemModelHandler::handleLayoutChanged);
+ QObject::connect(m_itemModel.data(), &QAbstractItemModel::modelReset,
+ this, &AbstractItemModelHandler::handleModelReset);
+ QObject::connect(m_itemModel.data(), &QAbstractItemModel::rowsInserted,
+ this, &AbstractItemModelHandler::handleRowsInserted);
+ QObject::connect(m_itemModel.data(), &QAbstractItemModel::rowsMoved,
+ this, &AbstractItemModelHandler::handleRowsMoved);
+ QObject::connect(m_itemModel.data(), &QAbstractItemModel::rowsRemoved,
+ this, &AbstractItemModelHandler::handleRowsRemoved);
+ }
+ if (!m_resolveTimer.isActive())
+ m_resolveTimer.start(0);
+
+ emit itemModelChanged(itemModel);
}
- if (!m_resolveTimer.isActive())
- m_resolveTimer.start(0);
}
const QAbstractItemModel *AbstractItemModelHandler::itemModel() const
@@ -72,59 +74,6 @@ const QAbstractItemModel *AbstractItemModelHandler::itemModel() const
return m_itemModel.data();
}
-void AbstractItemModelHandler::setActiveMapping(QAbstractDataMapping *mapping)
-{
- if (m_activeMapping)
- QObject::disconnect(m_activeMapping, 0, this, 0);
-
- if (mapping)
- addMapping(mapping);
-
- m_activeMapping = mapping;
-
- if (m_activeMapping) {
- QObject::connect(m_activeMapping, &QAbstractDataMapping::mappingChanged,
- this, &AbstractItemModelHandler::handleMappingChanged);
- }
-
- if (!m_resolveTimer.isActive())
- m_resolveTimer.start(0);
-}
-
-QAbstractDataMapping *AbstractItemModelHandler::activeMapping() const
-{
- return m_activeMapping;
-}
-
-void AbstractItemModelHandler::addMapping(QAbstractDataMapping *mapping)
-{
- Q_ASSERT(mapping);
- AbstractItemModelHandler *owner = qobject_cast<AbstractItemModelHandler *>(mapping->parent());
- if (owner != this) {
- Q_ASSERT_X(!owner, "addMapping", "Mapping already attached to a proxy.");
- mapping->setParent(this);
- }
- if (!m_mappings.contains(mapping))
- m_mappings.append(mapping);
-}
-
-void AbstractItemModelHandler::releaseMapping(QAbstractDataMapping *mapping)
-{
- if (mapping && m_mappings.contains(mapping)) {
- // If the mapping is in use, clear the existing mapping
- if (m_activeMapping == mapping)
- setActiveMapping(0);
-
- m_mappings.removeAll(mapping);
- mapping->setParent(0);
- }
-}
-
-QList<QAbstractDataMapping *> AbstractItemModelHandler::mappings() const
-{
- return m_mappings;
-}
-
void AbstractItemModelHandler::handleColumnsInserted(const QModelIndex &parent,
int start, int end)
{
diff --git a/src/datavisualization/data/abstractitemmodelhandler_p.h b/src/datavisualization/data/abstractitemmodelhandler_p.h
index fbaaa1f9..b4d55b4a 100644
--- a/src/datavisualization/data/abstractitemmodelhandler_p.h
+++ b/src/datavisualization/data/abstractitemmodelhandler_p.h
@@ -36,8 +36,6 @@
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
-class QAbstractDataMapping;
-
class AbstractItemModelHandler : public QObject
{
Q_OBJECT
@@ -47,11 +45,6 @@ public:
virtual void setItemModel(const QAbstractItemModel *itemModel);
virtual const QAbstractItemModel *itemModel() const;
- virtual void setActiveMapping(QAbstractDataMapping *mapping);
- virtual QAbstractDataMapping *activeMapping() const;
- virtual void addMapping(QAbstractDataMapping *mapping);
- virtual void releaseMapping(QAbstractDataMapping *mapping);
- virtual QList<QAbstractDataMapping *> mappings() const;
public slots:
virtual void handleColumnsInserted(const QModelIndex &parent, int start, int end);
@@ -72,14 +65,15 @@ public slots:
virtual void handleMappingChanged();
virtual void handlePendingResolve();
+signals:
+ void itemModelChanged(const QAbstractItemModel *itemModel);
+
protected:
virtual void resolveModel() = 0;
QPointer<const QAbstractItemModel> m_itemModel; // Not owned
- QAbstractDataMapping *m_activeMapping;
bool resolvePending;
QTimer m_resolveTimer;
- QList<QAbstractDataMapping *> m_mappings;
private:
Q_DISABLE_COPY(AbstractItemModelHandler)
diff --git a/src/datavisualization/data/baritemmodelhandler.cpp b/src/datavisualization/data/baritemmodelhandler.cpp
index cbe19c43..b67a3d8a 100644
--- a/src/datavisualization/data/baritemmodelhandler.cpp
+++ b/src/datavisualization/data/baritemmodelhandler.cpp
@@ -17,7 +17,6 @@
****************************************************************************/
#include "baritemmodelhandler_p.h"
-#include "qitemmodelbardatamapping_p.h"
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
@@ -36,14 +35,13 @@ BarItemModelHandler::~BarItemModelHandler()
// Resolve entire item model into QBarDataArray.
void BarItemModelHandler::resolveModel()
{
- QItemModelBarDataMapping *mapping = static_cast<QItemModelBarDataMapping *>(m_activeMapping);
- if (m_itemModel.isNull() || !mapping) {
+ if (m_itemModel.isNull()) {
m_proxy->resetArray(0);
return;
}
- if (!mapping->useModelCategories()
- && (mapping->rowRole().isEmpty() || mapping->columnRole().isEmpty())) {
+ if (!m_proxy->useModelCategories()
+ && (m_proxy->rowRole().isEmpty() || m_proxy->columnRole().isEmpty())) {
m_proxy->resetArray(0);
return;
}
@@ -54,11 +52,11 @@ void BarItemModelHandler::resolveModel()
QHash<int, QByteArray> roleHash = m_itemModel->roleNames();
// Default to display role if no mapping
- int valueRole = roleHash.key(mapping->valueRole().toLatin1(), Qt::DisplayRole);
+ int valueRole = roleHash.key(m_proxy->valueRole().toLatin1(), Qt::DisplayRole);
int rowCount = m_itemModel->rowCount();
int columnCount = m_itemModel->columnCount();
- if (mapping->useModelCategories()) {
+ if (m_proxy->useModelCategories()) {
// If dimensions have changed, recreate the array
if (m_proxyArray != m_proxy->array() || columnCount != m_columnCount
|| rowCount != m_proxyArray->size()) {
@@ -79,11 +77,11 @@ void BarItemModelHandler::resolveModel()
columnLabels << m_itemModel->headerData(i, Qt::Horizontal).toString();
m_columnCount = columnCount;
} else {
- int rowRole = roleHash.key(mapping->rowRole().toLatin1());
- int columnRole = roleHash.key(mapping->columnRole().toLatin1());
+ int rowRole = roleHash.key(m_proxy->rowRole().toLatin1());
+ int columnRole = roleHash.key(m_proxy->columnRole().toLatin1());
- bool generateRows = mapping->autoRowCategories();
- bool generateColumns = mapping->autoColumnCategories();
+ bool generateRows = m_proxy->autoRowCategories();
+ bool generateColumns = m_proxy->autoColumnCategories();
QStringList rowList;
QStringList columnList;
// For detecting duplicates in categories generation, using QHashes should be faster than
@@ -112,14 +110,14 @@ void BarItemModelHandler::resolveModel()
}
if (generateRows)
- mapping->dptr()->m_rowCategories = rowList;
+ m_proxy->dptr()->m_rowCategories = rowList;
else
- rowList = mapping->rowCategories();
+ rowList = m_proxy->rowCategories();
if (generateColumns)
- mapping->dptr()->m_columnCategories = columnList;
+ m_proxy->dptr()->m_columnCategories = columnList;
else
- columnList = mapping->columnCategories();
+ columnList = m_proxy->columnCategories();
// If dimensions have changed, recreate the array
if (m_proxyArray != m_proxy->array() || columnList.size() != m_columnCount
diff --git a/src/datavisualization/data/baritemmodelhandler_p.h b/src/datavisualization/data/baritemmodelhandler_p.h
index 54b45f2e..99192b55 100644
--- a/src/datavisualization/data/baritemmodelhandler_p.h
+++ b/src/datavisualization/data/baritemmodelhandler_p.h
@@ -30,7 +30,7 @@
#define BARITEMMODELHANDLER_P_H
#include "abstractitemmodelhandler_p.h"
-#include "qitemmodelbardataproxy.h"
+#include "qitemmodelbardataproxy_p.h"
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
diff --git a/src/datavisualization/data/data.pri b/src/datavisualization/data/data.pri
index 66ad0e3b..6ebfed6b 100644
--- a/src/datavisualization/data/data.pri
+++ b/src/datavisualization/data/data.pri
@@ -8,8 +8,6 @@ HEADERS += \
$$PWD/barrenderitem_p.h \
$$PWD/qbardataitem.h \
$$PWD/qbardataitem_p.h \
- $$PWD/qitemmodelbardatamapping.h \
- $$PWD/qitemmodelbardatamapping_p.h \
$$PWD/qitemmodelbardataproxy_p.h \
$$PWD/qitemmodelbardataproxy.h \
$$PWD/scatterrenderitem_p.h \
@@ -17,21 +15,15 @@ HEADERS += \
$$PWD/qscatterdataitem_p.h \
$$PWD/qscatterdataproxy.h \
$$PWD/qscatterdataproxy_p.h \
- $$PWD/qitemmodelscatterdatamapping.h \
- $$PWD/qitemmodelscatterdatamapping_p.h \
$$PWD/qitemmodelscatterdataproxy.h \
$$PWD/qitemmodelscatterdataproxy_p.h \
$$PWD/abstractitemmodelhandler_p.h \
$$PWD/baritemmodelhandler_p.h \
- $$PWD/qabstractdatamapping.h \
- $$PWD/qabstractdatamapping_p.h \
$$PWD/scatteritemmodelhandler_p.h \
$$PWD/qsurfacedataproxy.h \
$$PWD/qsurfacedataproxy_p.h \
$$PWD/qheightmapsurfacedataproxy.h \
$$PWD/qheightmapsurfacedataproxy_p.h \
- $$PWD/qitemmodelsurfacedatamapping.h \
- $$PWD/qitemmodelsurfacedatamapping_p.h \
$$PWD/qitemmodelsurfacedataproxy.h \
$$PWD/qitemmodelsurfacedataproxy_p.h \
$$PWD/surfaceitemmodelhandler_p.h \
@@ -53,20 +45,16 @@ SOURCES += \
$$PWD/abstractrenderitem.cpp \
$$PWD/barrenderitem.cpp \
$$PWD/qbardataitem.cpp \
- $$PWD/qitemmodelbardatamapping.cpp \
$$PWD/qitemmodelbardataproxy.cpp \
$$PWD/scatterrenderitem.cpp \
$$PWD/qscatterdataitem.cpp \
$$PWD/qscatterdataproxy.cpp \
- $$PWD/qitemmodelscatterdatamapping.cpp \
$$PWD/qitemmodelscatterdataproxy.cpp \
$$PWD/abstractitemmodelhandler.cpp \
$$PWD/baritemmodelhandler.cpp \
- $$PWD/qabstractdatamapping.cpp \
$$PWD/scatteritemmodelhandler.cpp \
$$PWD/qsurfacedataproxy.cpp \
$$PWD/qheightmapsurfacedataproxy.cpp \
- $$PWD/qitemmodelsurfacedatamapping.cpp \
$$PWD/qitemmodelsurfacedataproxy.cpp \
$$PWD/surfaceitemmodelhandler.cpp \
$$PWD/qsurfacedataitem.cpp \
diff --git a/src/datavisualization/data/qabstractdatamapping.cpp b/src/datavisualization/data/qabstractdatamapping.cpp
deleted file mode 100644
index a0698810..00000000
--- a/src/datavisualization/data/qabstractdatamapping.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************************
-**
-** 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 "qabstractdatamapping_p.h"
-
-QT_DATAVISUALIZATION_BEGIN_NAMESPACE
-
-/*!
- * \class QAbstractDataMapping
- * \inmodule QtDataVisualization
- * \brief Abstract base class for QtDataVisualization data mapping classes.
- * \since Qt Data Visualization 1.0
- *
- * Data mapping classes provide a way to map data from an external data source to one of
- * QtDataVisualization data proxies.
- * \sa QItemModelBarDataMapping, QItemModelScatterDataMapping
- */
-
-/*!
- * \internal
- */
-QAbstractDataMapping::QAbstractDataMapping(QAbstractDataMappingPrivate *d, QObject *parent)
- : QObject(parent),
- d_ptr(d)
-{
-}
-
-/*!
- * Destroys QAbstractDataMapping.
- */
-QAbstractDataMapping::~QAbstractDataMapping()
-{
-}
-
-/*!
- * \fn void QAbstractDataMapping::mappingChanged()
- *
- * Emitted when any mapping has changed.
- */
-
-// QItemModelBarDataMappingPrivate
-
-QAbstractDataMappingPrivate::QAbstractDataMappingPrivate(QAbstractDataMapping *q,
- QAbstractDataProxy::DataType type)
- : QObject(0),
- q_ptr(q),
- m_type(type)
-{
-}
-
-QAbstractDataMappingPrivate::~QAbstractDataMappingPrivate()
-{
-}
-
-QT_DATAVISUALIZATION_END_NAMESPACE
-
diff --git a/src/datavisualization/data/qabstractdatamapping.h b/src/datavisualization/data/qabstractdatamapping.h
deleted file mode 100644
index eb892cb7..00000000
--- a/src/datavisualization/data/qabstractdatamapping.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/****************************************************************************
-**
-** 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
-**
-****************************************************************************/
-
-#ifndef QABSTRACTDATAMAPPING_H
-#define QABSTRACTDATAMAPPING_H
-
-#include <QtDataVisualization/qdatavisualizationenums.h>
-#include <QtDataVisualization/qabstractdataproxy.h>
-
-QT_DATAVISUALIZATION_BEGIN_NAMESPACE
-
-class QAbstractDataMappingPrivate;
-
-class QT_DATAVISUALIZATION_EXPORT QAbstractDataMapping : public QObject
-{
- Q_OBJECT
-
-public:
- explicit QAbstractDataMapping(QAbstractDataMappingPrivate *d, QObject *parent = 0);
- virtual ~QAbstractDataMapping();
-
-signals:
- void mappingChanged();
-
-private:
- QScopedPointer<QAbstractDataMappingPrivate> d_ptr;
-
- Q_DISABLE_COPY(QAbstractDataMapping)
-
- friend class QItemModelBarDataMapping;
- friend class QItemModelScatterDataMapping;
- friend class QItemModelSurfaceDataMapping;
-};
-
-
-QT_DATAVISUALIZATION_END_NAMESPACE
-
-#endif
diff --git a/src/datavisualization/data/qabstractdatamapping_p.h b/src/datavisualization/data/qabstractdatamapping_p.h
deleted file mode 100644
index 39012237..00000000
--- a/src/datavisualization/data/qabstractdatamapping_p.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/****************************************************************************
-**
-** 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.
-
-#include "qabstractdatamapping.h"
-
-#ifndef QABSTRACTDATAMAPPING_P_H
-#define QABSTRACTDATAMAPPING_P_H
-
-QT_DATAVISUALIZATION_BEGIN_NAMESPACE
-
-class QAbstractDataMappingPrivate : public QObject
-{
- Q_OBJECT
-public:
- QAbstractDataMappingPrivate(QAbstractDataMapping *q, QAbstractDataProxy::DataType type);
- virtual ~QAbstractDataMappingPrivate();
-
-private:
- QAbstractDataMapping *q_ptr;
- QAbstractDataProxy::DataType m_type;
-};
-
-QT_DATAVISUALIZATION_END_NAMESPACE
-
-#endif
diff --git a/src/datavisualization/data/qitemmodelbardatamapping.cpp b/src/datavisualization/data/qitemmodelbardatamapping.cpp
deleted file mode 100644
index 0e92680f..00000000
--- a/src/datavisualization/data/qitemmodelbardatamapping.cpp
+++ /dev/null
@@ -1,407 +0,0 @@
-/****************************************************************************
-**
-** 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 "qitemmodelbardatamapping_p.h"
-
-QT_DATAVISUALIZATION_BEGIN_NAMESPACE
-
-/*!
- * \class QItemModelBarDataMapping
- * \inmodule QtDataVisualization
- * \brief Item model mapping for Q3DBars.
- * \since Qt Data Visualization 1.0
- *
- * QItemModelBarDataMapping is used to map roles of QAbstractItemModel to rows, columns, and values
- * of Q3DBars. There are three ways to use QItemModelBarDataMapping:
- *
- * 1) If useModelCategories property is set to true, QItemModelBarDataMapping will map rows and
- * columns of QAbstractItemModel to rows and columns of Q3DBars, and uses the value returned for
- * Qt::DisplayRole as bar value by default.
- * The value role to be used can be redefined if Qt::DisplayRole is not suitable.
- *
- * 2) For models that do not have data already neatly sorted into rows and columns, such as
- * QAbstractListModel based models, you can define a role from the model to map for each of row,
- * column and value.
- *
- * 3) If you do not want to include all data contained in the model, or the autogenerated rows and
- * columns are not ordered as you wish, you can specify which rows and columns should be included
- * and in which order by defining an explicit list of categories for either or both of rows and
- * columns.
- *
- * For example, assume that you have a custom QAbstractItemModel for storing various monthly values
- * related to a business.
- * Each item in the model has the roles "year", "month", "income", and "expenses".
- * You could do the following to display the data in a bar graph:
- *
- * \snippet doc_src_qtdatavisualization.cpp 3
- *
- * \sa QItemModelBarDataProxy, {Qt Data Visualization Data Handling}
- */
-
-/*!
- * \qmltype BarDataMapping
- * \inqmlmodule QtDataVisualization
- * \since QtDataVisualization 1.0
- * \ingroup datavisualization_qml
- * \instantiates QItemModelBarDataMapping
- * \brief Item model mapping for Bars3D.
- *
- * This type is used to map roles of AbstractItemModel to rows, columns, and values of Bars3D. For
- * a more complete description, see QItemModelBarDataMapping.
- *
- * Usage example:
- *
- * \snippet doc_src_qmldatavisualization.cpp 4
- *
- * \sa ItemModelBarDataProxy, {Qt Data Visualization Data Handling}
- */
-
-/*!
- * \qmlproperty string BarDataMapping::rowRole
- * The row role of the mapping.
- */
-
-/*!
- * \qmlproperty string BarDataMapping::columnRole
- * The column role of the mapping.
- */
-
-/*!
- * \qmlproperty string BarDataMapping::valueRole
- * The value role of the mapping.
- */
-
-/*!
- * \qmlproperty list BarDataMapping::rowCategories
- * The row categories of the mapping. Only items with row roles that are found in this list are
- * included when the data is resolved. The rows are ordered in the same order as they are in this list.
- */
-
-/*!
- * \qmlproperty list BarDataMapping::columnCategories
- * The column categories of the mapping. Only items with column roles that are found in this list are
- * included when the data is resolved. The columns are ordered in the same order as they are in this list.
- */
-
-/*!
- * \qmlproperty list BarDataMapping::useModelCategories
- * When set to true, the mapping ignores row and column roles and categories, and uses
- * the rows and columns from the model instead. Defaults to false.
- */
-
-/*!
- * \qmlproperty list BarDataMapping::autoRowCategories
- * When set to true, the mapping ignores any explicitly set row categories
- * and overwrites them with automatically generated ones whenever the
- * data from the model is resolved. Defaults to true.
- */
-
-/*!
- * \qmlproperty list BarDataMapping::autoColumnCategories
- * When set to true, the mapping ignores any explicitly set column categories
- * and overwrites them with automatically generated ones whenever the
- * data from model is resolved. Defaults to true.
- */
-
-/*!
- * Constructs QItemModelBarDataMapping with the given \a parent.
- */
-QItemModelBarDataMapping::QItemModelBarDataMapping(QObject *parent)
- : QAbstractDataMapping(new QItemModelBarDataMappingPrivate(this), parent)
-{
-}
-
-/*!
- * Constructs QItemModelBarDataMapping with \a valueRole and the given \a parent.
- * This constructor is meant to be used with models that have data properly sorted
- * in rows and columns already, so it also sets useModelCategories property to true.
- */
-QItemModelBarDataMapping::QItemModelBarDataMapping(const QString &valueRole, QObject *parent)
- : QAbstractDataMapping(new QItemModelBarDataMappingPrivate(this), parent)
-{
- dptr()->m_valueRole = valueRole;
- dptr()->m_useModelCategories = true;
-}
-
-/*!
- * Constructs QItemModelBarDataMapping with \a rowRole, \a columnRole, \a valueRole
- * and the given \a parent.
- */
-QItemModelBarDataMapping::QItemModelBarDataMapping(const QString &rowRole,
- const QString &columnRole,
- const QString &valueRole,
- QObject *parent)
- : QAbstractDataMapping(new QItemModelBarDataMappingPrivate(this), parent)
-{
- dptr()->m_rowRole = rowRole;
- dptr()->m_columnRole = columnRole;
- dptr()->m_valueRole = valueRole;
-}
-
-/*!
- * Constructs QItemModelBarDataMapping with \a rowRole, \a columnRole, \a valueRole,
- * \a rowCategories, \a columnCategories and the given \a parent. This constructor
- * also sets autoRowCategories and autoColumnCategories to false.
- */
-QItemModelBarDataMapping::QItemModelBarDataMapping(const QString &rowRole,
- const QString &columnRole,
- const QString &valueRole,
- const QStringList &rowCategories,
- const QStringList &columnCategories,
- QObject *parent)
- : QAbstractDataMapping(new QItemModelBarDataMappingPrivate(this), parent)
-{
- dptr()->m_rowRole = rowRole;
- dptr()->m_columnRole = columnRole;
- dptr()->m_valueRole = valueRole;
- dptr()->m_rowCategories = rowCategories;
- dptr()->m_columnCategories = columnCategories;
- dptr()->m_autoRowCategories = false;
- dptr()->m_autoColumnCategories = false;
-}
-
-/*!
- * Destroys QItemModelBarDataMapping.
- */
-QItemModelBarDataMapping::~QItemModelBarDataMapping()
-{
-}
-
-/*!
- * \property QItemModelBarDataMapping::rowRole
- *
- * Defines the row role for the mapping.
- */
-void QItemModelBarDataMapping::setRowRole(const QString &role)
-{
- if (dptr()->m_rowRole != role) {
- dptr()->m_rowRole = role;
- emit mappingChanged();
- }
-}
-
-QString QItemModelBarDataMapping::rowRole() const
-{
- return dptrc()->m_rowRole;
-}
-
-/*!
- * \property QItemModelBarDataMapping::columnRole
- *
- * Defines the column role for the mapping.
- */
-void QItemModelBarDataMapping::setColumnRole(const QString &role)
-{
- if (dptr()->m_columnRole != role) {
- dptr()->m_columnRole = role;
- emit mappingChanged();
- }
-}
-
-QString QItemModelBarDataMapping::columnRole() const
-{
- return dptrc()->m_columnRole;
-}
-
-/*!
- * \property QItemModelBarDataMapping::valueRole
- *
- * Defines the value role for the mapping.
- */
-void QItemModelBarDataMapping::setValueRole(const QString &role)
-{
- if (dptr()->m_valueRole != role) {
- dptr()->m_valueRole = role;
- emit mappingChanged();
- }
-}
-
-QString QItemModelBarDataMapping::valueRole() const
-{
- return dptrc()->m_valueRole;
-}
-
-/*!
- * \property QItemModelBarDataMapping::rowCategories
- *
- * Defines the row categories for the mapping.
- */
-void QItemModelBarDataMapping::setRowCategories(const QStringList &categories)
-{
- if (dptr()->m_rowCategories != categories) {
- dptr()->m_rowCategories = categories;
- emit mappingChanged();
- }
-}
-
-QStringList QItemModelBarDataMapping::rowCategories() const
-{
- return dptrc()->m_rowCategories;
-}
-
-/*!
- * \property QItemModelBarDataMapping::columnCategories
- *
- * Defines the column categories for the mapping.
- */
-void QItemModelBarDataMapping::setColumnCategories(const QStringList &categories)
-{
- if (dptr()->m_columnCategories != categories) {
- dptr()->m_columnCategories = categories;
- emit mappingChanged();
- }
-}
-
-QStringList QItemModelBarDataMapping::columnCategories() const
-{
- return dptrc()->m_columnCategories;
-}
-
-/*!
- * \property QItemModelBarDataMapping::useModelCategories
- *
- * When set to true, the mapping ignores row and column roles and categories, and uses
- * the rows and columns from the model instead. Defaults to false.
- */
-void QItemModelBarDataMapping::setUseModelCategories(bool enable)
-{
- if (dptr()->m_useModelCategories != enable) {
- dptr()->m_useModelCategories = enable;
- emit mappingChanged();
- }
-}
-
-bool QItemModelBarDataMapping::useModelCategories() const
-{
- return dptrc()->m_useModelCategories;
-}
-
-/*!
- * \property QItemModelBarDataMapping::autoRowCategories
- *
- * When set to true, the mapping ignores any explicitly set row categories
- * and overwrites them with automatically generated ones whenever the
- * data from model is resolved. Defaults to true.
- */
-void QItemModelBarDataMapping::setAutoRowCategories(bool enable)
-{
- if (dptr()->m_autoRowCategories != enable) {
- dptr()->m_autoRowCategories = enable;
- emit mappingChanged();
- }
-}
-
-bool QItemModelBarDataMapping::autoRowCategories() const
-{
- return dptrc()->m_autoRowCategories;
-}
-
-/*!
- * \property QItemModelBarDataMapping::autoColumnCategories
- *
- * When set to true, the mapping ignores any explicitly set column categories
- * and overwrites them with automatically generated ones whenever the
- * data from model is resolved. Defaults to true.
- */
-void QItemModelBarDataMapping::setAutoColumnCategories(bool enable)
-{
- if (dptr()->m_autoColumnCategories != enable) {
- dptr()->m_autoColumnCategories = enable;
- emit mappingChanged();
- }
-}
-
-bool QItemModelBarDataMapping::autoColumnCategories() const
-{
- return dptrc()->m_autoColumnCategories;
-}
-
-/*!
- * Changes \a rowRole, \a columnRole, \a valueRole, \a rowCategories and \a columnCategories to the
- * mapping.
- */
-void QItemModelBarDataMapping::remap(const QString &rowRole,
- const QString &columnRole,
- const QString &valueRole,
- const QStringList &rowCategories,
- const QStringList &columnCategories)
-{
- dptr()->m_rowRole = rowRole;
- dptr()->m_columnRole = columnRole;
- dptr()->m_valueRole = valueRole;
- dptr()->m_rowCategories = rowCategories;
- dptr()->m_columnCategories = columnCategories;
-
- emit mappingChanged();
-}
-
-/*!
- * /return index of the specified \a category in row categories list.
- * If the row categories list is empty, -1 is returned.
- * \note If the automatic row categories generation is in use, this method will
- * not return a valid index before the data in the model is resolved for the first time.
- */
-int QItemModelBarDataMapping::rowCategoryIndex(const QString &category)
-{
- return dptr()->m_rowCategories.indexOf(category);
-}
-
-/*!
- * /return index of the specified \a category in column categories list.
- * If the category is not found, -1 is returned.
- * \note If the automatic column categories generation is in use, this method will
- * not return a valid index before the data in the model is resolved for the first time.
- */
-int QItemModelBarDataMapping::columnCategoryIndex(const QString &category)
-{
- return dptr()->m_columnCategories.indexOf(category);
-}
-
-/*!
- * \internal
- */
-QItemModelBarDataMappingPrivate *QItemModelBarDataMapping::dptr()
-{
- return static_cast<QItemModelBarDataMappingPrivate *>(d_ptr.data());
-}
-
-/*!
- * \internal
- */
-const QItemModelBarDataMappingPrivate *QItemModelBarDataMapping::dptrc() const
-{
- return static_cast<const QItemModelBarDataMappingPrivate *>(d_ptr.data());
-}
-
-// QItemModelBarDataMappingPrivate
-
-QItemModelBarDataMappingPrivate::QItemModelBarDataMappingPrivate(QItemModelBarDataMapping *q)
- : QAbstractDataMappingPrivate(q, QAbstractDataProxy::DataTypeBar),
- m_useModelCategories(false),
- m_autoRowCategories(true),
- m_autoColumnCategories(true)
-{
-}
-
-QItemModelBarDataMappingPrivate::~QItemModelBarDataMappingPrivate()
-{
-}
-
-
-QT_DATAVISUALIZATION_END_NAMESPACE
-
diff --git a/src/datavisualization/data/qitemmodelbardatamapping.h b/src/datavisualization/data/qitemmodelbardatamapping.h
deleted file mode 100644
index a5ef33b8..00000000
--- a/src/datavisualization/data/qitemmodelbardatamapping.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-**
-** 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
-**
-****************************************************************************/
-
-#ifndef QITEMMODELBARDATAMAPPING_H
-#define QITEMMODELBARDATAMAPPING_H
-
-#include <QtDataVisualization/qdatavisualizationenums.h>
-#include <QtDataVisualization/qabstractdatamapping.h>
-#include <QStringList>
-
-QT_DATAVISUALIZATION_BEGIN_NAMESPACE
-
-class QItemModelBarDataMappingPrivate;
-
-class QT_DATAVISUALIZATION_EXPORT QItemModelBarDataMapping : public QAbstractDataMapping
-{
- Q_OBJECT
- Q_PROPERTY(QString rowRole READ rowRole WRITE setRowRole)
- Q_PROPERTY(QString columnRole READ columnRole WRITE setColumnRole)
- Q_PROPERTY(QString valueRole READ valueRole WRITE setValueRole)
- Q_PROPERTY(QStringList rowCategories READ rowCategories WRITE setRowCategories)
- Q_PROPERTY(QStringList columnCategories READ columnCategories WRITE setColumnCategories)
- Q_PROPERTY(bool useModelCategories READ useModelCategories WRITE setUseModelCategories)
- Q_PROPERTY(bool autoRowCategories READ autoRowCategories WRITE setAutoRowCategories)
- Q_PROPERTY(bool autoColumnCategories READ autoColumnCategories WRITE setAutoColumnCategories)
-
-public:
- explicit QItemModelBarDataMapping(QObject *parent = 0);
- QItemModelBarDataMapping(const QString &valueRole, QObject *parent = 0);
- QItemModelBarDataMapping(const QString &rowRole, const QString &columnRole,
- const QString &valueRole, QObject *parent = 0);
- QItemModelBarDataMapping(const QString &rowRole, const QString &columnRole,
- const QString &valueRole, const QStringList &rowCategories,
- const QStringList &columnCategories, QObject *parent = 0);
- virtual ~QItemModelBarDataMapping();
-
- void setRowRole(const QString &role);
- QString rowRole() const;
- void setColumnRole(const QString &role);
- QString columnRole() const;
- void setValueRole(const QString &role);
- QString valueRole() const;
-
- void setRowCategories(const QStringList &categories);
- QStringList rowCategories() const;
- void setColumnCategories(const QStringList &categories);
- QStringList columnCategories() const;
-
- void setUseModelCategories(bool enable);
- bool useModelCategories() const;
- void setAutoRowCategories(bool enable);
- bool autoRowCategories() const;
- void setAutoColumnCategories(bool enable);
- bool autoColumnCategories() const;
-
- void remap(const QString &rowRole, const QString &columnRole,
- const QString &valueRole, const QStringList &rowCategories,
- const QStringList &columnCategories);
-
- Q_INVOKABLE int rowCategoryIndex(const QString& category);
- Q_INVOKABLE int columnCategoryIndex(const QString& category);
-
-protected:
- QItemModelBarDataMappingPrivate *dptr();
- const QItemModelBarDataMappingPrivate *dptrc() const;
-
-private:
- Q_DISABLE_COPY(QItemModelBarDataMapping)
-
- friend class BarItemModelHandler;
-};
-
-QT_DATAVISUALIZATION_END_NAMESPACE
-
-#endif
diff --git a/src/datavisualization/data/qitemmodelbardatamapping_p.h b/src/datavisualization/data/qitemmodelbardatamapping_p.h
deleted file mode 100644
index 90a17fdb..00000000
--- a/src/datavisualization/data/qitemmodelbardatamapping_p.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** 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.
-
-#include "qitemmodelbardatamapping.h"
-#include "qabstractdatamapping_p.h"
-
-#ifndef QITEMMODELBARDATAMAPPING_P_H
-#define QITEMMODELBARDATAMAPPING_P_H
-
-QT_DATAVISUALIZATION_BEGIN_NAMESPACE
-
-class QItemModelBarDataMappingPrivate : public QAbstractDataMappingPrivate
-{
- Q_OBJECT
-public:
- QItemModelBarDataMappingPrivate(QItemModelBarDataMapping *q);
- virtual ~QItemModelBarDataMappingPrivate();
-
-private:
- QString m_rowRole;
- QString m_columnRole;
- QString m_valueRole;
-
- // For row/column items, sort items into these categories. Other categories are ignored.
- QStringList m_rowCategories;
- QStringList m_columnCategories;
-
- bool m_useModelCategories;
- bool m_autoRowCategories;
- bool m_autoColumnCategories;
-
- friend class QItemModelBarDataMapping;
- friend class BarItemModelHandler;
-};
-
-QT_DATAVISUALIZATION_END_NAMESPACE
-
-#endif
diff --git a/src/datavisualization/data/qitemmodelbardataproxy.cpp b/src/datavisualization/data/qitemmodelbardataproxy.cpp
index a28e05e1..71bb6c75 100644
--- a/src/datavisualization/data/qitemmodelbardataproxy.cpp
+++ b/src/datavisualization/data/qitemmodelbardataproxy.cpp
@@ -29,13 +29,36 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
* \since Qt Data Visualization 1.0
*
* QItemModelBarDataProxy allows you to use QAbstractItemModel derived models as a data source
- * for Q3DBars. It uses QItemModelBarDataMapping instance to map data from the model to Q3DBars
- * graph.
+ * for Q3DBars. It uses the defined mappings to map data from the model to rows, columns, and
+ * values of Q3DBars graph.
*
- * The data is resolved asynchronously whenever the mapping or the model changes.
+ * The data is resolved asynchronously whenever mappings or the model changes.
* QBarDataProxy::arrayReset() is emitted when the data has been resolved.
*
- * \sa QItemModelBarDataMapping, {Qt Data Visualization Data Handling}
+ * There are three ways to use mappings:
+ *
+ * 1) If useModelCategories property is set to true, this proxy will map rows and
+ * columns of QAbstractItemModel directly to rows and columns of Q3DBars, and uses the value
+ * returned for Qt::DisplayRole as bar value by default.
+ * The value role to be used can be redefined if Qt::DisplayRole is not suitable.
+ *
+ * 2) For models that do not have data already neatly sorted into rows and columns, such as
+ * QAbstractListModel based models, you can define a role from the model to map for each of row,
+ * column and value.
+ *
+ * 3) If you do not want to include all data contained in the model, or the autogenerated rows and
+ * columns are not ordered as you wish, you can specify which rows and columns should be included
+ * and in which order by defining an explicit list of categories for either or both of rows and
+ * columns.
+ *
+ * For example, assume that you have a custom QAbstractItemModel for storing various monthly values
+ * related to a business.
+ * Each item in the model has the roles "year", "month", "income", and "expenses".
+ * You could do the following to display the data in a bar graph:
+ *
+ * \snippet doc_src_qtdatavisualization.cpp 3
+ *
+ * \sa {Qt Data Visualization Data Handling}
*/
/*!
@@ -52,11 +75,13 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
* Data is resolved asynchronously whenever the mapping or the model changes.
* QBarDataProxy::arrayReset() is emitted when the data has been resolved.
*
+ * For more details, see QItemModelBarDataProxy documentation.
+ *
* Usage example:
*
* \snippet doc_src_qmldatavisualization.cpp 7
*
- * \sa BarDataProxy, BarDataMapping, {Qt Data Visualization Data Handling}
+ * \sa BarDataProxy, {Qt Data Visualization Data Handling}
*/
/*!
@@ -65,30 +90,133 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
*/
/*!
- * \qmlproperty list ItemModelBarDataProxy::activeMapping
- * The active mapping. Modifying a mapping that is set to the proxy will trigger data set
- * re-resolving.
+ * \qmlproperty string ItemModelBarDataProxy::rowRole
+ * The row role of the mapping.
+ */
+
+/*!
+ * \qmlproperty string ItemModelBarDataProxy::columnRole
+ * The column role of the mapping.
+ */
+
+/*!
+ * \qmlproperty string ItemModelBarDataProxy::valueRole
+ * The value role of the mapping.
+ */
+
+/*!
+ * \qmlproperty list ItemModelBarDataProxy::rowCategories
+ * The row categories of the mapping. Only items with row roles that are found in this list are
+ * included when the data is resolved. The rows are ordered in the same order as they are in this list.
+ */
+
+/*!
+ * \qmlproperty list ItemModelBarDataProxy::columnCategories
+ * The column categories of the mapping. Only items with column roles that are found in this list are
+ * included when the data is resolved. The columns are ordered in the same order as they are in this list.
+ */
+
+/*!
+ * \qmlproperty list ItemModelBarDataProxy::useModelCategories
+ * When set to true, the mapping ignores row and column roles and categories, and uses
+ * the rows and columns from the model instead. Row and column headers are used for row and column
+ * labels. Defaults to false.
+ */
+
+/*!
+ * \qmlproperty list ItemModelBarDataProxy::autoRowCategories
+ * When set to true, the mapping ignores any explicitly set row categories
+ * and overwrites them with automatically generated ones whenever the
+ * data from the model is resolved. Defaults to true.
+ */
+
+/*!
+ * \qmlproperty list ItemModelBarDataProxy::autoColumnCategories
+ * When set to true, the mapping ignores any explicitly set column categories
+ * and overwrites them with automatically generated ones whenever the
+ * data from model is resolved. Defaults to true.
*/
/*!
- * Constructs QItemModelBarDataProxy.
+ * Constructs QItemModelBarDataProxy with optional \a parent.
*/
-QItemModelBarDataProxy::QItemModelBarDataProxy() :
- QBarDataProxy(new QItemModelBarDataProxyPrivate(this))
+QItemModelBarDataProxy::QItemModelBarDataProxy(QObject *parent)
+ : QBarDataProxy(new QItemModelBarDataProxyPrivate(this), parent)
{
+ connectItemModelHandler();
}
/*!
- * Constructs QItemModelBarDataProxy with \a itemModel and \a mapping. Proxy takes ownership of the
- * \a mapping, but doesn't take ownership of the \a itemModel, as typically item models are owned
- * by other controls.
+ * Constructs QItemModelBarDataProxy with \a itemModel and optional \a parent. Proxy doesn't take
+ * ownership of the \a itemModel, as typically item models are owned by other controls.
+ */
+QItemModelBarDataProxy::QItemModelBarDataProxy(const QAbstractItemModel *itemModel, QObject *parent)
+ : QBarDataProxy(new QItemModelBarDataProxyPrivate(this), parent)
+{
+ setItemModel(itemModel);
+ connectItemModelHandler();
+}
+
+/*!
+ * Constructs QItemModelBarDataProxy with \a itemModel and optional \a parent. Proxy doesn't take
+ * ownership of the \a itemModel, as typically item models are owned by other controls.
+ * The value role is set to \a valueRole.
+ * This constructor is meant to be used with models that have data properly sorted
+ * in rows and columns already, so it also sets useModelCategories property to true.
+ */
+QItemModelBarDataProxy::QItemModelBarDataProxy(const QAbstractItemModel *itemModel,
+ const QString &valueRole, QObject *parent)
+ : QBarDataProxy(new QItemModelBarDataProxyPrivate(this), parent)
+{
+ dptr()->m_itemModelHandler->setItemModel(itemModel);
+ dptr()->m_valueRole = valueRole;
+ dptr()->m_useModelCategories = true;
+ connectItemModelHandler();
+}
+
+/*!
+ * Constructs QItemModelBarDataProxy with \a itemModel and optional \a parent. Proxy doesn't take
+ * ownership of the \a itemModel, as typically item models are owned by other controls.
+ * The role mappings are set with \a rowRole, \a columnRole, and \a valueRole.
+ */
+QItemModelBarDataProxy::QItemModelBarDataProxy(const QAbstractItemModel *itemModel,
+ const QString &rowRole,
+ const QString &columnRole,
+ const QString &valueRole, QObject *parent)
+ : QBarDataProxy(new QItemModelBarDataProxyPrivate(this), parent)
+{
+ dptr()->m_itemModelHandler->setItemModel(itemModel);
+ dptr()->m_rowRole = rowRole;
+ dptr()->m_columnRole = columnRole;
+ dptr()->m_valueRole = valueRole;
+ connectItemModelHandler();
+}
+
+/*!
+ * Constructs QItemModelBarDataProxy with \a itemModel and optional \a parent. Proxy doesn't take
+ * ownership of the \a itemModel, as typically item models are owned by other controls.
+ * The role mappings are set with \a rowRole, \a columnRole, and \a valueRole.
+ * Row and column categories are set with \a rowCategories and \a columnCategories.
+ * This constructor also sets autoRowCategories and autoColumnCategories to false.
*/
QItemModelBarDataProxy::QItemModelBarDataProxy(const QAbstractItemModel *itemModel,
- QItemModelBarDataMapping *mapping) :
- QBarDataProxy(new QItemModelBarDataProxyPrivate(this))
+ const QString &rowRole,
+ const QString &columnRole,
+ const QString &valueRole,
+ const QStringList &rowCategories,
+ const QStringList &columnCategories,
+ QObject *parent)
+ : QBarDataProxy(new QItemModelBarDataProxyPrivate(this), parent)
{
dptr()->m_itemModelHandler->setItemModel(itemModel);
- dptr()->m_itemModelHandler->setActiveMapping(mapping);
+ dptr()->m_rowRole = rowRole;
+ dptr()->m_columnRole = columnRole;
+ dptr()->m_valueRole = valueRole;
+ dptr()->m_rowCategories = rowCategories;
+ dptr()->m_columnCategories = columnCategories;
+ dptr()->m_autoRowCategories = false;
+ dptr()->m_autoColumnCategories = false;
+ connectItemModelHandler();
}
/*!
@@ -115,50 +243,191 @@ const QAbstractItemModel *QItemModelBarDataProxy::itemModel() const
}
/*!
- * \property QItemModelBarDataProxy::activeMapping
+ * \property QItemModelBarDataProxy::rowRole
+ *
+ * Defines the row role for the mapping.
+ */
+void QItemModelBarDataProxy::setRowRole(const QString &role)
+{
+ if (dptr()->m_rowRole != role) {
+ dptr()->m_rowRole = role;
+ emit rowRoleChanged(role);
+ }
+}
+
+QString QItemModelBarDataProxy::rowRole() const
+{
+ return dptrc()->m_rowRole;
+}
+
+/*!
+ * \property QItemModelBarDataProxy::columnRole
*
- * Defines data mapping. Proxy takes ownership of the \a mapping.
- * Modifying a mapping that is set to the proxy will trigger data set re-resolving.
+ * Defines the column role for the mapping.
*/
-void QItemModelBarDataProxy::setActiveMapping(QItemModelBarDataMapping *mapping)
+void QItemModelBarDataProxy::setColumnRole(const QString &role)
{
- dptr()->m_itemModelHandler->setActiveMapping(mapping);
+ if (dptr()->m_columnRole != role) {
+ dptr()->m_columnRole = role;
+ emit columnRoleChanged(role);
+ }
}
-QItemModelBarDataMapping *QItemModelBarDataProxy::activeMapping() const
+QString QItemModelBarDataProxy::columnRole() const
{
- return static_cast<QItemModelBarDataMapping *>(dptrc()->m_itemModelHandler->activeMapping());
+ return dptrc()->m_columnRole;
}
/*!
- * Transfers the ownership of the \a mapping to this proxy. The mapping is not taken to use yet.
- * \sa setActiveMapping(), releaseMapping()
+ * \property QItemModelBarDataProxy::valueRole
+ *
+ * Defines the value role for the mapping.
+ */
+void QItemModelBarDataProxy::setValueRole(const QString &role)
+{
+ if (dptr()->m_valueRole != role) {
+ dptr()->m_valueRole = role;
+ emit valueRoleChanged(role);
+ }
+}
+
+QString QItemModelBarDataProxy::valueRole() const
+{
+ return dptrc()->m_valueRole;
+}
+
+/*!
+ * \property QItemModelBarDataProxy::rowCategories
+ *
+ * Defines the row categories for the mapping.
+ */
+void QItemModelBarDataProxy::setRowCategories(const QStringList &categories)
+{
+ if (dptr()->m_rowCategories != categories) {
+ dptr()->m_rowCategories = categories;
+ emit rowCategoriesChanged(categories);
+ }
+}
+
+QStringList QItemModelBarDataProxy::rowCategories() const
+{
+ return dptrc()->m_rowCategories;
+}
+
+/*!
+ * \property QItemModelBarDataProxy::columnCategories
+ *
+ * Defines the column categories for the mapping.
+ */
+void QItemModelBarDataProxy::setColumnCategories(const QStringList &categories)
+{
+ if (dptr()->m_columnCategories != categories) {
+ dptr()->m_columnCategories = categories;
+ emit columnCategoriesChanged(categories);
+ }
+}
+
+QStringList QItemModelBarDataProxy::columnCategories() const
+{
+ return dptrc()->m_columnCategories;
+}
+
+/*!
+ * \property QItemModelBarDataProxy::useModelCategories
+ *
+ * When set to true, the mapping ignores row and column roles and categories, and uses
+ * the rows and columns from the model instead. Defaults to false.
*/
-void QItemModelBarDataProxy::addMapping(QItemModelBarDataMapping *mapping)
+void QItemModelBarDataProxy::setUseModelCategories(bool enable)
{
- dptr()->m_itemModelHandler->addMapping(mapping);
+ if (dptr()->m_useModelCategories != enable) {
+ dptr()->m_useModelCategories = enable;
+ emit useModelCategoriesChanged(enable);
+ }
+}
+
+bool QItemModelBarDataProxy::useModelCategories() const
+{
+ return dptrc()->m_useModelCategories;
+}
+
+/*!
+ * \property QItemModelBarDataProxy::autoRowCategories
+ *
+ * When set to true, the mapping ignores any explicitly set row categories
+ * and overwrites them with automatically generated ones whenever the
+ * data from model is resolved. Defaults to true.
+ */
+void QItemModelBarDataProxy::setAutoRowCategories(bool enable)
+{
+ if (dptr()->m_autoRowCategories != enable) {
+ dptr()->m_autoRowCategories = enable;
+ emit autoRowCategoriesChanged(enable);
+ }
+}
+
+bool QItemModelBarDataProxy::autoRowCategories() const
+{
+ return dptrc()->m_autoRowCategories;
+}
+
+/*!
+ * \property QItemModelBarDataProxy::autoColumnCategories
+ *
+ * When set to true, the mapping ignores any explicitly set column categories
+ * and overwrites them with automatically generated ones whenever the
+ * data from model is resolved. Defaults to true.
+ */
+void QItemModelBarDataProxy::setAutoColumnCategories(bool enable)
+{
+ if (dptr()->m_autoColumnCategories != enable) {
+ dptr()->m_autoColumnCategories = enable;
+ emit autoColumnCategoriesChanged(enable);
+ }
+}
+
+bool QItemModelBarDataProxy::autoColumnCategories() const
+{
+ return dptrc()->m_autoColumnCategories;
}
/*!
- * Releases the ownership of the \a mapping back to the caller. If the mapping was the currently
- * active one, no mapping remains active after this call.
+ * Changes \a rowRole, \a columnRole, \a valueRole, \a rowCategories and \a columnCategories to the
+ * mapping.
*/
-void QItemModelBarDataProxy::releaseMapping(QItemModelBarDataMapping *mapping)
+void QItemModelBarDataProxy::remap(const QString &rowRole,
+ const QString &columnRole,
+ const QString &valueRole,
+ const QStringList &rowCategories,
+ const QStringList &columnCategories)
{
- dptr()->m_itemModelHandler->releaseMapping(mapping);
+ setRowRole(rowRole);
+ setColumnRole(columnRole);
+ setValueRole(valueRole);
+ setRowCategories(rowCategories);
+ setColumnCategories(columnCategories);
}
/*!
- * \return list of mappings owned by the proxy.
+ * /return index of the specified \a category in row categories list.
+ * If the row categories list is empty, -1 is returned.
+ * \note If the automatic row categories generation is in use, this method will
+ * not return a valid index before the data in the model is resolved for the first time.
*/
-QList<QItemModelBarDataMapping *> QItemModelBarDataProxy::mappings() const
+int QItemModelBarDataProxy::rowCategoryIndex(const QString &category)
{
- QList<QItemModelBarDataMapping *> retList;
- QList<QAbstractDataMapping *> abstractList = dptrc()->m_itemModelHandler->mappings();
- foreach (QAbstractDataMapping *mapping, abstractList)
- retList.append(static_cast<QItemModelBarDataMapping *>(mapping));
+ return dptr()->m_rowCategories.indexOf(category);
+}
- return retList;
+/*!
+ * /return index of the specified \a category in column categories list.
+ * If the category is not found, -1 is returned.
+ * \note If the automatic column categories generation is in use, this method will
+ * not return a valid index before the data in the model is resolved for the first time.
+ */
+int QItemModelBarDataProxy::columnCategoryIndex(const QString &category)
+{
+ return dptr()->m_columnCategories.indexOf(category);
}
/*!
@@ -177,11 +446,36 @@ const QItemModelBarDataProxyPrivate *QItemModelBarDataProxy::dptrc() const
return static_cast<const QItemModelBarDataProxyPrivate *>(d_ptr.data());
}
+void QItemModelBarDataProxy::connectItemModelHandler()
+{
+ QObject::connect(dptr()->m_itemModelHandler, &BarItemModelHandler::itemModelChanged,
+ this, &QItemModelBarDataProxy::itemModelChanged);
+ QObject::connect(this, &QItemModelBarDataProxy::rowRoleChanged,
+ dptr()->m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
+ QObject::connect(this, &QItemModelBarDataProxy::columnRoleChanged,
+ dptr()->m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
+ QObject::connect(this, &QItemModelBarDataProxy::valueRoleChanged,
+ dptr()->m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
+ QObject::connect(this, &QItemModelBarDataProxy::rowCategoriesChanged,
+ dptr()->m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
+ QObject::connect(this, &QItemModelBarDataProxy::columnCategoriesChanged,
+ dptr()->m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
+ QObject::connect(this, &QItemModelBarDataProxy::useModelCategoriesChanged,
+ dptr()->m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
+ QObject::connect(this, &QItemModelBarDataProxy::autoRowCategoriesChanged,
+ dptr()->m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
+ QObject::connect(this, &QItemModelBarDataProxy::autoColumnCategoriesChanged,
+ dptr()->m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
+}
+
// QItemModelBarDataProxyPrivate
QItemModelBarDataProxyPrivate::QItemModelBarDataProxyPrivate(QItemModelBarDataProxy *q)
: QBarDataProxyPrivate(q),
- m_itemModelHandler(new BarItemModelHandler(q))
+ m_itemModelHandler(new BarItemModelHandler(q)),
+ m_useModelCategories(false),
+ m_autoRowCategories(true),
+ m_autoColumnCategories(true)
{
}
diff --git a/src/datavisualization/data/qitemmodelbardataproxy.h b/src/datavisualization/data/qitemmodelbardataproxy.h
index 2a96f0c8..81c46926 100644
--- a/src/datavisualization/data/qitemmodelbardataproxy.h
+++ b/src/datavisualization/data/qitemmodelbardataproxy.h
@@ -20,7 +20,6 @@
#define QITEMMODELBARDATAPROXY_H
#include <QtDataVisualization/qbardataproxy.h>
-#include <QtDataVisualization/qitemmodelbardatamapping.h>
#include <QAbstractItemModel>
#include <QStringList>
@@ -31,30 +30,79 @@ class QItemModelBarDataProxyPrivate;
class QT_DATAVISUALIZATION_EXPORT QItemModelBarDataProxy : public QBarDataProxy
{
Q_OBJECT
- Q_PROPERTY(const QAbstractItemModel* itemModel READ itemModel WRITE setItemModel)
- Q_PROPERTY(QItemModelBarDataMapping* activeMapping READ activeMapping WRITE setActiveMapping)
+ Q_PROPERTY(const QAbstractItemModel* itemModel READ itemModel WRITE setItemModel NOTIFY itemModelChanged)
+ Q_PROPERTY(QString rowRole READ rowRole WRITE setRowRole NOTIFY rowRoleChanged)
+ Q_PROPERTY(QString columnRole READ columnRole WRITE setColumnRole NOTIFY columnRoleChanged)
+ Q_PROPERTY(QString valueRole READ valueRole WRITE setValueRole NOTIFY valueRoleChanged)
+ Q_PROPERTY(QStringList rowCategories READ rowCategories WRITE setRowCategories NOTIFY rowCategoriesChanged)
+ Q_PROPERTY(QStringList columnCategories READ columnCategories WRITE setColumnCategories NOTIFY columnCategoriesChanged)
+ Q_PROPERTY(bool useModelCategories READ useModelCategories WRITE setUseModelCategories NOTIFY useModelCategoriesChanged)
+ Q_PROPERTY(bool autoRowCategories READ autoRowCategories WRITE setAutoRowCategories NOTIFY autoRowCategoriesChanged)
+ Q_PROPERTY(bool autoColumnCategories READ autoColumnCategories WRITE setAutoColumnCategories NOTIFY autoColumnCategoriesChanged)
public:
- explicit QItemModelBarDataProxy();
- explicit QItemModelBarDataProxy(const QAbstractItemModel *itemModel,
- QItemModelBarDataMapping *mapping);
+ explicit QItemModelBarDataProxy(QObject *parent = 0);
+ QItemModelBarDataProxy(const QAbstractItemModel *itemModel, QObject *parent = 0);
+ QItemModelBarDataProxy(const QAbstractItemModel *itemModel, const QString &valueRole,
+ QObject *parent = 0);
+ QItemModelBarDataProxy(const QAbstractItemModel *itemModel, const QString &rowRole,
+ const QString &columnRole, const QString &valueRole,
+ QObject *parent = 0);
+ QItemModelBarDataProxy(const QAbstractItemModel *itemModel, const QString &rowRole,
+ const QString &columnRole, const QString &valueRole,
+ const QStringList &rowCategories, const QStringList &columnCategories,
+ QObject *parent = 0);
virtual ~QItemModelBarDataProxy();
void setItemModel(const QAbstractItemModel *itemModel);
const QAbstractItemModel *itemModel() const;
- void setActiveMapping(QItemModelBarDataMapping *mapping);
- QItemModelBarDataMapping *activeMapping() const;
- void addMapping(QItemModelBarDataMapping *mapping);
- void releaseMapping(QItemModelBarDataMapping *mapping);
- QList<QItemModelBarDataMapping *> mappings() const;
+ void setRowRole(const QString &role);
+ QString rowRole() const;
+ void setColumnRole(const QString &role);
+ QString columnRole() const;
+ void setValueRole(const QString &role);
+ QString valueRole() const;
+
+ void setRowCategories(const QStringList &categories);
+ QStringList rowCategories() const;
+ void setColumnCategories(const QStringList &categories);
+ QStringList columnCategories() const;
+
+ void setUseModelCategories(bool enable);
+ bool useModelCategories() const;
+ void setAutoRowCategories(bool enable);
+ bool autoRowCategories() const;
+ void setAutoColumnCategories(bool enable);
+ bool autoColumnCategories() const;
+
+ void remap(const QString &rowRole, const QString &columnRole,
+ const QString &valueRole, const QStringList &rowCategories,
+ const QStringList &columnCategories);
+
+ Q_INVOKABLE int rowCategoryIndex(const QString& category);
+ Q_INVOKABLE int columnCategoryIndex(const QString& category);
+
+signals:
+ void itemModelChanged(const QAbstractItemModel* itemModel);
+ void rowRoleChanged(QString role);
+ void columnRoleChanged(QString role);
+ void valueRoleChanged(QString role);
+ void rowCategoriesChanged(QStringList categories);
+ void columnCategoriesChanged(QStringList categories);
+ void useModelCategoriesChanged(bool enable);
+ void autoRowCategoriesChanged(bool enable);
+ void autoColumnCategoriesChanged(bool enable);
protected:
QItemModelBarDataProxyPrivate *dptr();
const QItemModelBarDataProxyPrivate *dptrc() const;
private:
+ void connectItemModelHandler();
Q_DISABLE_COPY(QItemModelBarDataProxy)
+
+ friend class BarItemModelHandler;
};
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qitemmodelbardataproxy_p.h b/src/datavisualization/data/qitemmodelbardataproxy_p.h
index fc646f0d..6f71429c 100644
--- a/src/datavisualization/data/qitemmodelbardataproxy_p.h
+++ b/src/datavisualization/data/qitemmodelbardataproxy_p.h
@@ -31,8 +31,6 @@
#include "qitemmodelbardataproxy.h"
#include "qbardataproxy_p.h"
-#include <QPointer>
-#include <QTimer>
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
@@ -50,6 +48,19 @@ private:
BarItemModelHandler *m_itemModelHandler;
+ QString m_rowRole;
+ QString m_columnRole;
+ QString m_valueRole;
+
+ // For row/column items, sort items into these categories. Other categories are ignored.
+ QStringList m_rowCategories;
+ QStringList m_columnCategories;
+
+ bool m_useModelCategories;
+ bool m_autoRowCategories;
+ bool m_autoColumnCategories;
+
+ friend class BarItemModelHandler;
friend class QItemModelBarDataProxy;
};
diff --git a/src/datavisualization/data/qitemmodelscatterdatamapping.cpp b/src/datavisualization/data/qitemmodelscatterdatamapping.cpp
deleted file mode 100644
index 3d94d0ce..00000000
--- a/src/datavisualization/data/qitemmodelscatterdatamapping.cpp
+++ /dev/null
@@ -1,200 +0,0 @@
-/****************************************************************************
-**
-** 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 "qitemmodelscatterdatamapping_p.h"
-
-QT_DATAVISUALIZATION_BEGIN_NAMESPACE
-
-/*!
- * \class QItemModelScatterDataMapping
- * \inmodule QtDataVisualization
- * \brief Item model mapping for Q3DScatter.
- * \since Qt Data Visualization 1.0
- *
- * QItemModelScatterDataMapping is used to map roles of QAbstractItemModel to the XYZ-values
- * of Q3DScatter points.
- *
- * QItemModelScatterDataMapping ignores rows and columns of the QAbstractItemModel and treats
- * all items equally. It requires the model to provide at least three roles for the data items
- * that can be mapped to X, Y, and Z-values for the scatter points.
- *
- * For example, assume that you have a custom QAbstractItemModel for storing various measurements
- * done on material samples, providing data for roles such as "density", "hardness", and
- * "conductivity". You could visualize these properties on a scatter graph:
- *
- * \snippet doc_src_qtdatavisualization.cpp 4
- *
- * \sa QItemModelScatterDataProxy, {Qt Data Visualization Data Handling}
- */
-
-/*!
- * \qmltype ScatterDataMapping
- * \inqmlmodule QtDataVisualization
- * \since QtDataVisualization 1.0
- * \ingroup datavisualization_qml
- * \instantiates QItemModelScatterDataMapping
- * \brief Item model mapping for Scatter3D.
- *
- * This type is used to map roles of AbstractItemModel to the XYZ-values of Scatter3D points. For
- * a more complete description, see QItemModelScatterDataMapping.
- *
- * Usage example:
- *
- * \snippet doc_src_qmldatavisualization.cpp 5
- *
- * \sa ItemModelScatterDataProxy, {Qt Data Visualization Data Handling}
- */
-
-/*!
- * \qmlproperty string ScatterDataMapping::xPosRole
- * The X position role of the mapping.
- */
-
-/*!
- * \qmlproperty string ScatterDataMapping::yPosRole
- * The Y position role of the mapping.
- */
-
-/*!
- * \qmlproperty string ScatterDataMapping::zPosRole
- * The Z position role of the mapping.
- */
-
-/*!
- * Constructs QItemModelScatterDataMapping with the given \a parent.
- */
-QItemModelScatterDataMapping::QItemModelScatterDataMapping(QObject *parent)
- : QAbstractDataMapping(new QItemModelScatterDataMappingPrivate(this), parent)
-{
-}
-
-/*!
- * Constructs QItemModelScatterDataMapping with \a xPosRole, \a yPosRole, \a zPosRole
- * and the given \a parent.
- */
-QItemModelScatterDataMapping::QItemModelScatterDataMapping(const QString &xPosRole,
- const QString &yPosRole,
- const QString &zPosRole,
- QObject *parent)
- : QAbstractDataMapping(new QItemModelScatterDataMappingPrivate(this), parent)
-{
- dptr()->m_xPosRole = xPosRole;
- dptr()->m_yPosRole = yPosRole;
- dptr()->m_zPosRole = zPosRole;
-}
-
-/*!
- * Destroys QItemModelScatterDataMapping.
- */
-QItemModelScatterDataMapping::~QItemModelScatterDataMapping()
-{
-}
-
-/*!
- * \property QItemModelScatterDataMapping::xPosRole
- *
- * Defines the X position role for the mapping.
- */
-void QItemModelScatterDataMapping::setXPosRole(const QString &role)
-{
- dptr()->m_xPosRole = role;
- emit mappingChanged();
-}
-
-QString QItemModelScatterDataMapping::xPosRole() const
-{
- return dptrc()->m_xPosRole;
-}
-
-/*!
- * \property QItemModelScatterDataMapping::yPosRole
- *
- * Defines the Y position role for the mapping.
- */
-void QItemModelScatterDataMapping::setYPosRole(const QString &role)
-{
- dptr()->m_yPosRole = role;
- emit mappingChanged();
-}
-
-QString QItemModelScatterDataMapping::yPosRole() const
-{
- return dptrc()->m_yPosRole;
-}
-
-/*!
- * \property QItemModelScatterDataMapping::zPosRole
- *
- * Defines the Z position role for the mapping.
- */
-void QItemModelScatterDataMapping::setZPosRole(const QString &role)
-{
- dptr()->m_zPosRole = role;
- emit mappingChanged();
-}
-
-QString QItemModelScatterDataMapping::zPosRole() const
-{
- return dptrc()->m_zPosRole;
-}
-
-/*!
- * Changes \a xPosRole, \a yPosRole and \a zPosRole to the mapping.
- *
- * Emits mappingChanged() signal after remapping.
- */
-void QItemModelScatterDataMapping::remap(const QString &xPosRole, const QString &yPosRole,
- const QString &zPosRole)
-{
- dptr()->m_xPosRole = xPosRole;
- dptr()->m_yPosRole = yPosRole;
- dptr()->m_zPosRole = zPosRole;
-
- emit mappingChanged();
-}
-
-/*!
- * \internal
- */
-QItemModelScatterDataMappingPrivate *QItemModelScatterDataMapping::dptr()
-{
- return static_cast<QItemModelScatterDataMappingPrivate *>(d_ptr.data());
-}
-
-/*!
- * \internal
- */
-const QItemModelScatterDataMappingPrivate *QItemModelScatterDataMapping::dptrc() const
-{
- return static_cast<const QItemModelScatterDataMappingPrivate *>(d_ptr.data());
-}
-
-// QItemModelScatterDataMappingPrivate
-
-QItemModelScatterDataMappingPrivate::QItemModelScatterDataMappingPrivate(
- QItemModelScatterDataMapping *q)
- : QAbstractDataMappingPrivate(q, QAbstractDataProxy::DataTypeScatter)
-{
-}
-
-QItemModelScatterDataMappingPrivate::~QItemModelScatterDataMappingPrivate()
-{
-}
-
-QT_DATAVISUALIZATION_END_NAMESPACE
-
diff --git a/src/datavisualization/data/qitemmodelscatterdatamapping.h b/src/datavisualization/data/qitemmodelscatterdatamapping.h
deleted file mode 100644
index 62f2fefc..00000000
--- a/src/datavisualization/data/qitemmodelscatterdatamapping.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/****************************************************************************
-**
-** 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
-**
-****************************************************************************/
-
-#ifndef QITEMMODELSCATTERDATAMAPPING_H
-#define QITEMMODELSCATTERDATAMAPPING_H
-
-#include <QtDataVisualization/qdatavisualizationenums.h>
-#include <QtDataVisualization/qabstractdatamapping.h>
-#include <QObject>
-
-QT_DATAVISUALIZATION_BEGIN_NAMESPACE
-
-class QItemModelScatterDataMappingPrivate;
-
-class QT_DATAVISUALIZATION_EXPORT QItemModelScatterDataMapping : public QAbstractDataMapping
-{
- Q_OBJECT
- Q_PROPERTY(QString xPosRole READ xPosRole WRITE setXPosRole)
- Q_PROPERTY(QString yPosRole READ yPosRole WRITE setYPosRole)
- Q_PROPERTY(QString zPosRole READ zPosRole WRITE setZPosRole)
-
-public:
- explicit QItemModelScatterDataMapping(QObject *parent = 0);
- QItemModelScatterDataMapping(const QString &xPosRole, const QString &yPosRole,
- const QString &zPosRole, QObject *parent = 0);
- virtual ~QItemModelScatterDataMapping();
-
- void setXPosRole(const QString &role);
- QString xPosRole() const;
- void setYPosRole(const QString &role);
- QString yPosRole() const;
- void setZPosRole(const QString &role);
- QString zPosRole() const;
-
- void remap(const QString &xPosRole, const QString &yPosRole, const QString &zPosRole);
-
-protected:
- QItemModelScatterDataMappingPrivate *dptr();
- const QItemModelScatterDataMappingPrivate *dptrc() const;
-
-private:
- Q_DISABLE_COPY(QItemModelScatterDataMapping)
-};
-
-QT_DATAVISUALIZATION_END_NAMESPACE
-
-#endif
diff --git a/src/datavisualization/data/qitemmodelscatterdatamapping_p.h b/src/datavisualization/data/qitemmodelscatterdatamapping_p.h
deleted file mode 100644
index 62ff42b4..00000000
--- a/src/datavisualization/data/qitemmodelscatterdatamapping_p.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/****************************************************************************
-**
-** 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 QITEMMODELSCATTERDATAMAPPING_P_H
-#define QITEMMODELSCATTERDATAMAPPING_P_H
-
-#include "qitemmodelscatterdatamapping.h"
-#include "qabstractdatamapping_p.h"
-
-QT_DATAVISUALIZATION_BEGIN_NAMESPACE
-
-class QItemModelScatterDataMappingPrivate : public QAbstractDataMappingPrivate
-{
- Q_OBJECT
-public:
- QItemModelScatterDataMappingPrivate(QItemModelScatterDataMapping *q);
- virtual ~QItemModelScatterDataMappingPrivate();
-
-private:
- //QString m_labelRole;
- QString m_xPosRole;
- QString m_yPosRole;
- QString m_zPosRole;
- //QString m_valueRole;
-
- friend class QItemModelScatterDataMapping;
-};
-
-QT_DATAVISUALIZATION_END_NAMESPACE
-
-#endif
diff --git a/src/datavisualization/data/qitemmodelscatterdataproxy.cpp b/src/datavisualization/data/qitemmodelscatterdataproxy.cpp
index 5536a105..471033e8 100644
--- a/src/datavisualization/data/qitemmodelscatterdataproxy.cpp
+++ b/src/datavisualization/data/qitemmodelscatterdataproxy.cpp
@@ -29,11 +29,21 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
* \since Qt Data Visualization 1.0
*
* QItemModelScatterDataProxy allows you to use QAbstractItemModel derived models as a data source
- * for Q3DScatter. It maps roles defined in QItemModelScatterDataMapping to roles in the model.
+ * for Q3DScatter. It maps roles of QAbstractItemModel to the XYZ-values of Q3DScatter points.
*
* The data is resolved asynchronously whenever the mapping or the model changes.
* QScatterDataProxy::arrayReset() is emitted when the data has been resolved.
*
+ * Mapping ignores rows and columns of the QAbstractItemModel and treats
+ * all items equally. It requires the model to provide at least three roles for the data items
+ * that can be mapped to X, Y, and Z-values for the scatter points.
+ *
+ * For example, assume that you have a custom QAbstractItemModel for storing various measurements
+ * done on material samples, providing data for roles such as "density", "hardness", and
+ * "conductivity". You could visualize these properties on a scatter graph using this proxy:
+ *
+ * \snippet doc_src_qtdatavisualization.cpp 4
+ *
* \sa {Qt Data Visualization Data Handling}
*/
@@ -51,11 +61,13 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
* The data is resolved asynchronously whenever the mapping or the model changes.
* QScatterDataProxy::arrayReset() is emitted when the data has been resolved.
*
+ * For more details, see QItemModelScatterDataProxy documentation.
+ *
* Usage example:
*
* \snippet doc_src_qmldatavisualization.cpp 8
*
- * \sa ScatterDataProxy, ScatterDataMapping, {Qt Data Visualization Data Handling}
+ * \sa ScatterDataProxy, {Qt Data Visualization Data Handling}
*/
/*!
@@ -64,29 +76,59 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
*/
/*!
- * \qmlproperty list ItemModelScatterDataProxy::activeMapping
- * The active mapping. Modifying a mapping that is set to the proxy will trigger data set
- * re-resolving.
+ * \qmlproperty string ItemModelScatterDataProxy::xPosRole
+ * The X position role of the mapping.
*/
/*!
- * Constructs QItemModelScatterDataProxy.
+ * \qmlproperty string ItemModelScatterDataProxy::yPosRole
+ * The Y position role of the mapping.
*/
-QItemModelScatterDataProxy::QItemModelScatterDataProxy() :
- QScatterDataProxy(new QItemModelScatterDataProxyPrivate(this))
+
+/*!
+ * \qmlproperty string ItemModelScatterDataProxy::zPosRole
+ * The Z position role of the mapping.
+ */
+
+/*!
+ * Constructs QItemModelScatterDataProxy with optional \a parent.
+ */
+QItemModelScatterDataProxy::QItemModelScatterDataProxy(QObject *parent)
+ : QScatterDataProxy(new QItemModelScatterDataProxyPrivate(this), parent)
{
+ connectItemModelHandler();
}
/*!
- * Constructs QItemModelScatterDataProxy with \a itemModel and \a mapping. Does not take ownership
- * of the model or the mapping, but does connect to them to listen for changes.
+ * Constructs QItemModelScatterDataProxy with \a itemModel and optional \a parent. Proxy doesn't take
+ * ownership of the \a itemModel, as typically item models are owned by other controls.
*/
QItemModelScatterDataProxy::QItemModelScatterDataProxy(const QAbstractItemModel *itemModel,
- QItemModelScatterDataMapping *mapping) :
- QScatterDataProxy(new QItemModelScatterDataProxyPrivate(this))
+ QObject *parent)
+ : QScatterDataProxy(new QItemModelScatterDataProxyPrivate(this), parent)
{
dptr()->m_itemModelHandler->setItemModel(itemModel);
- dptr()->m_itemModelHandler->setActiveMapping(mapping);
+ connectItemModelHandler();
+}
+
+/*!
+ * Constructs QItemModelScatterDataProxy with \a itemModel and optional \a parent. Proxy doesn't take
+ * ownership of the \a itemModel, as typically item models are owned by other controls.
+ * The xPosRole property is set to \a xPosRole, yPosRole property to \a yPosRole, and zPosRole property
+ * to \a zPosRole.
+ */
+QItemModelScatterDataProxy::QItemModelScatterDataProxy(const QAbstractItemModel *itemModel,
+ const QString &xPosRole,
+ const QString &yPosRole,
+ const QString &zPosRole,
+ QObject *parent)
+ : QScatterDataProxy(new QItemModelScatterDataProxyPrivate(this), parent)
+{
+ dptr()->m_itemModelHandler->setItemModel(itemModel);
+ dptr()->m_xPosRole = xPosRole;
+ dptr()->m_yPosRole = yPosRole;
+ dptr()->m_zPosRole = zPosRole;
+ connectItemModelHandler();
}
/*!
@@ -113,50 +155,68 @@ const QAbstractItemModel *QItemModelScatterDataProxy::itemModel() const
}
/*!
- * \property QItemModelScatterDataProxy::activeMapping
+ * \property QItemModelScatterDataProxy::xPosRole
*
- * Defines the data mapping. The proxy takes ownership of the \a mapping.
- * Modifying a mapping that is set to the proxy will trigger data set re-resolving.
+ * Defines the X position role for the mapping.
*/
-void QItemModelScatterDataProxy::setActiveMapping(QItemModelScatterDataMapping *mapping)
+void QItemModelScatterDataProxy::setXPosRole(const QString &role)
{
- dptr()->m_itemModelHandler->setActiveMapping(mapping);
+ if (dptr()->m_xPosRole != role) {
+ dptr()->m_xPosRole = role;
+ emit xPosRoleChanged(role);
+ }
}
-QItemModelScatterDataMapping *QItemModelScatterDataProxy::activeMapping() const
+QString QItemModelScatterDataProxy::xPosRole() const
{
- return static_cast<QItemModelScatterDataMapping *>(dptrc()->m_itemModelHandler->activeMapping());
+ return dptrc()->m_xPosRole;
}
/*!
- * Transfers the ownership of the \a mapping to this proxy. The mapping is not taken to use yet.
- * \sa setActiveMapping(), releaseMapping()
+ * \property QItemModelScatterDataProxy::yPosRole
+ *
+ * Defines the Y position role for the mapping.
*/
-void QItemModelScatterDataProxy::addMapping(QItemModelScatterDataMapping *mapping)
+void QItemModelScatterDataProxy::setYPosRole(const QString &role)
{
- dptr()->m_itemModelHandler->addMapping(mapping);
+ if (dptr()->m_yPosRole != role) {
+ dptr()->m_yPosRole = role;
+ emit yPosRoleChanged(role);
+ }
+}
+
+QString QItemModelScatterDataProxy::yPosRole() const
+{
+ return dptrc()->m_yPosRole;
}
/*!
- * Releases the ownership of the \a mapping back to the caller. If the mapping was the currently
- * active one, no mapping remains active after this call.
+ * \property QItemModelScatterDataProxy::zPosRole
+ *
+ * Defines the Z position role for the mapping.
*/
-void QItemModelScatterDataProxy::releaseMapping(QItemModelScatterDataMapping *mapping)
+void QItemModelScatterDataProxy::setZPosRole(const QString &role)
{
- dptr()->m_itemModelHandler->releaseMapping(mapping);
+ if (dptr()->m_zPosRole != role) {
+ dptr()->m_zPosRole = role;
+ emit zPosRoleChanged(role);
+ }
+}
+
+QString QItemModelScatterDataProxy::zPosRole() const
+{
+ return dptrc()->m_zPosRole;
}
/*!
- * \return list of mappings owned by the proxy.
+ * Changes \a xPosRole, \a yPosRole and \a zPosRole mapping.
*/
-QList<QItemModelScatterDataMapping *> QItemModelScatterDataProxy::mappings() const
+void QItemModelScatterDataProxy::remap(const QString &xPosRole, const QString &yPosRole,
+ const QString &zPosRole)
{
- QList<QItemModelScatterDataMapping *> retList;
- QList<QAbstractDataMapping *> abstractList = dptrc()->m_itemModelHandler->mappings();
- foreach (QAbstractDataMapping *mapping, abstractList)
- retList.append(static_cast<QItemModelScatterDataMapping *>(mapping));
-
- return retList;
+ setXPosRole(xPosRole);
+ setYPosRole(yPosRole);
+ setZPosRole(zPosRole);
}
/*!
@@ -175,6 +235,18 @@ const QItemModelScatterDataProxyPrivate *QItemModelScatterDataProxy::dptrc() con
return static_cast<const QItemModelScatterDataProxyPrivate *>(d_ptr.data());
}
+void QItemModelScatterDataProxy::connectItemModelHandler()
+{
+ QObject::connect(dptr()->m_itemModelHandler, &ScatterItemModelHandler::itemModelChanged,
+ this, &QItemModelScatterDataProxy::itemModelChanged);
+ QObject::connect(this, &QItemModelScatterDataProxy::xPosRoleChanged,
+ dptr()->m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
+ QObject::connect(this, &QItemModelScatterDataProxy::yPosRoleChanged,
+ dptr()->m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
+ QObject::connect(this, &QItemModelScatterDataProxy::zPosRoleChanged,
+ dptr()->m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
+}
+
// QItemModelScatterDataProxyPrivate
QItemModelScatterDataProxyPrivate::QItemModelScatterDataProxyPrivate(QItemModelScatterDataProxy *q)
diff --git a/src/datavisualization/data/qitemmodelscatterdataproxy.h b/src/datavisualization/data/qitemmodelscatterdataproxy.h
index 891950c1..7c63ce2a 100644
--- a/src/datavisualization/data/qitemmodelscatterdataproxy.h
+++ b/src/datavisualization/data/qitemmodelscatterdataproxy.h
@@ -20,7 +20,6 @@
#define QITEMMODELSCATTERDATAPROXY_H
#include <QtDataVisualization/qscatterdataproxy.h>
-#include <QtDataVisualization/qitemmodelscatterdatamapping.h>
#include <QAbstractItemModel>
#include <QStringList>
@@ -31,30 +30,46 @@ class QItemModelScatterDataProxyPrivate;
class QT_DATAVISUALIZATION_EXPORT QItemModelScatterDataProxy : public QScatterDataProxy
{
Q_OBJECT
- Q_PROPERTY(const QAbstractItemModel* itemModel READ itemModel WRITE setItemModel)
- Q_PROPERTY(QItemModelScatterDataMapping* activeMapping READ activeMapping WRITE setActiveMapping)
+ Q_PROPERTY(const QAbstractItemModel* itemModel READ itemModel WRITE setItemModel NOTIFY itemModelChanged)
+ Q_PROPERTY(QString xPosRole READ xPosRole WRITE setXPosRole NOTIFY xPosRoleChanged)
+ Q_PROPERTY(QString yPosRole READ yPosRole WRITE setYPosRole NOTIFY yPosRoleChanged)
+ Q_PROPERTY(QString zPosRole READ zPosRole WRITE setZPosRole NOTIFY zPosRoleChanged)
public:
- explicit QItemModelScatterDataProxy();
- explicit QItemModelScatterDataProxy(const QAbstractItemModel *itemModel,
- QItemModelScatterDataMapping *mapping);
+ explicit QItemModelScatterDataProxy(QObject *parent = 0);
+ QItemModelScatterDataProxy(const QAbstractItemModel *itemModel, QObject *parent = 0);
+ QItemModelScatterDataProxy(const QAbstractItemModel *itemModel,
+ const QString &xPosRole, const QString &yPosRole,
+ const QString &zPosRole, QObject *parent = 0);
virtual ~QItemModelScatterDataProxy();
void setItemModel(const QAbstractItemModel *itemModel);
const QAbstractItemModel *itemModel() const;
- void setActiveMapping(QItemModelScatterDataMapping *mapping);
- QItemModelScatterDataMapping *activeMapping() const;
- void addMapping(QItemModelScatterDataMapping *mapping);
- void releaseMapping(QItemModelScatterDataMapping *mapping);
- QList<QItemModelScatterDataMapping *> mappings() const;
+ void setXPosRole(const QString &role);
+ QString xPosRole() const;
+ void setYPosRole(const QString &role);
+ QString yPosRole() const;
+ void setZPosRole(const QString &role);
+ QString zPosRole() const;
+
+ void remap(const QString &xPosRole, const QString &yPosRole, const QString &zPosRole);
+
+signals:
+ void itemModelChanged(const QAbstractItemModel* itemModel);
+ void xPosRoleChanged(QString role);
+ void yPosRoleChanged(QString role);
+ void zPosRoleChanged(QString role);
protected:
QItemModelScatterDataProxyPrivate *dptr();
const QItemModelScatterDataProxyPrivate *dptrc() const;
private:
+ void connectItemModelHandler();
Q_DISABLE_COPY(QItemModelScatterDataProxy)
+
+ friend class ScatterItemModelHandler;
};
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qitemmodelscatterdataproxy_p.h b/src/datavisualization/data/qitemmodelscatterdataproxy_p.h
index 854062a3..43ab0ac2 100644
--- a/src/datavisualization/data/qitemmodelscatterdataproxy_p.h
+++ b/src/datavisualization/data/qitemmodelscatterdataproxy_p.h
@@ -31,8 +31,6 @@
#include "qitemmodelscatterdataproxy.h"
#include "qscatterdataproxy_p.h"
-#include <QPointer>
-#include <QTimer>
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
@@ -49,7 +47,11 @@ private:
QItemModelScatterDataProxy *qptr();
ScatterItemModelHandler *m_itemModelHandler;
+ QString m_xPosRole;
+ QString m_yPosRole;
+ QString m_zPosRole;
+ friend class ScatterItemModelHandler;
friend class QItemModelScatterDataProxy;
};
diff --git a/src/datavisualization/data/qitemmodelsurfacedatamapping.cpp b/src/datavisualization/data/qitemmodelsurfacedatamapping.cpp
deleted file mode 100644
index bfe62c6d..00000000
--- a/src/datavisualization/data/qitemmodelsurfacedatamapping.cpp
+++ /dev/null
@@ -1,411 +0,0 @@
-/****************************************************************************
-**
-** 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 "qitemmodelsurfacedatamapping_p.h"
-
-QT_DATAVISUALIZATION_BEGIN_NAMESPACE
-
-/*!
- * \class QItemModelSurfaceDataMapping
- * \inmodule QtDataVisualization
- * \brief Item model mapping for Q3DSurface.
- * \since Qt Data Visualization 1.0
- *
- * QItemModelSurfaceDataMapping is used to map roles of QAbstractItemModel to rows, columns, and values
- * of Q3DSurface. There are three ways to use QItemModelSurfaceDataMapping:
- *
- * 1) If useModelCategories property is set to true, QItemModelSurfaceDataMapping will map rows and
- * columns of QAbstractItemModel to rows and columns of Q3DSurface, and uses the value returned for
- * Qt::DisplayRole as bar value by default.
- * The value role to be used can be redefined if Qt::DisplayRole is not suitable.
- *
- * 2) For models that do not have data already neatly sorted into rows and columns, such as
- * QAbstractListModel based models, you can define a role from the model to map for each of row,
- * column and value.
- *
- * 3) If you do not want to include all data contained in the model, or the autogenerated rows and
- * columns are not ordered as you wish, you can specify which rows and columns should be included
- * and in which order by defining an explicit list of categories for either or both of rows and
- * columns.
- *
- * For example, assume that you have a custom QAbstractItemModel storing surface topography data.
- * Each item in the model has the roles "longitude", "latitude", and "height". The item model already
- * contains the data properly sorted so that longitudes and latitudes are first encountered in
- * correct order, which enables us to utilize the row and column category autogeneration.
- * You could do the following to display the data in a surface graph:
- *
- * \snippet doc_src_qtdatavisualization.cpp 5
- *
- * \sa QItemModelSurfaceDataProxy, {Qt Data Visualization Data Handling}
- */
-
-/*!
- * \qmltype SurfaceDataMapping
- * \inqmlmodule QtDataVisualization
- * \since QtDataVisualization 1.0
- * \ingroup datavisualization_qml
- * \instantiates QItemModelSurfaceDataMapping
- * \brief Item model mapping for Surface3D.
- *
- * This type is used to map roles of AbstractItemModel to rows, columns, and values of Surface3D.
- * For a more complete description, see QItemModelSurfaceDataMapping.
- *
- * Usage example:
- *
- * \snippet doc_src_qmldatavisualization.cpp 6
- *
- * \sa ItemModelSurfaceDataProxy, {Qt Data Visualization Data Handling}
- */
-
-/*!
- * \qmlproperty string SurfaceDataMapping::rowRole
- * The row role of the mapping.
- */
-
-/*!
- * \qmlproperty string SurfaceDataMapping::columnRole
- * The column role of the mapping.
- */
-
-/*!
- * \qmlproperty string SurfaceDataMapping::valueRole
- * The value role of the mapping.
- */
-
-/*!
- * \qmlproperty list SurfaceDataMapping::rowCategories
- * The row categories of the mapping. Only items with row roles that are found in this list are
- * included when data is resolved. The rows are ordered in the same order as they are in this list.
- */
-
-/*!
- * \qmlproperty list SurfaceDataMapping::columnCategories
- * The column categories of the mapping. Only items with column roles that are found in this list are
- * included when data is resolved. The columns are ordered in the same order as they are in this list.
- */
-
-/*!
- * \qmlproperty list SurfaceDataMapping::useModelCategories
- * When set to true, the mapping ignores row and column roles and categories, and uses
- * the rows and columns from the model instead. Defaults to false.
- */
-
-/*!
- * \qmlproperty list SurfaceDataMapping::autoRowCategories
- * When set to true, the mapping ignores any explicitly set row categories
- * and overwrites them with automatically generated ones whenever the
- * data from model is resolved. Proxy minimum and maximum row values are also
- * autogenerated from data when this is set to true. Defaults to true.
- */
-
-/*!
- * \qmlproperty list SurfaceDataMapping::autoColumnCategories
- * When set to true, the mapping ignores any explicitly set column categories
- * and overwrites them with automatically generated ones whenever the
- * data from model is resolved. Proxy minimum and maximum column values are also
- * autogenerated from data when this is set to true. Defaults to true.
- */
-
-/*!
- * Constructs QItemModelSurfaceDataMapping with the given \a parent.
- */
-QItemModelSurfaceDataMapping::QItemModelSurfaceDataMapping(QObject *parent)
- : QAbstractDataMapping(new QItemModelSurfaceDataMappingPrivate(this), parent)
-{
-}
-
-/*!
- * Constructs QItemModelSurfaceDataMapping with \a valueRole and the given \a parent.
- * This constructor is meant to be used with models that have data properly sorted
- * in rows and columns already, so it also sets useModelCategories property to true.
- */
-QItemModelSurfaceDataMapping::QItemModelSurfaceDataMapping(const QString &valueRole, QObject *parent)
- : QAbstractDataMapping(new QItemModelSurfaceDataMappingPrivate(this), parent)
-{
- dptr()->m_valueRole = valueRole;
- dptr()->m_useModelCategories = true;
-}
-
-/*!
- * Constructs QItemModelSurfaceDataMapping with \a rowRole, \a columnRole, \a valueRole,
- * and the given \a parent.
- */
-QItemModelSurfaceDataMapping::QItemModelSurfaceDataMapping(const QString &rowRole,
- const QString &columnRole,
- const QString &valueRole,
- QObject *parent)
- : QAbstractDataMapping(new QItemModelSurfaceDataMappingPrivate(this), parent)
-{
- dptr()->m_rowRole = rowRole;
- dptr()->m_columnRole = columnRole;
- dptr()->m_valueRole = valueRole;
-}
-
-/*!
- * Constructs QItemModelSurfaceDataMapping with \a rowRole, \a columnRole, \a valueRole,
- * \a rowCategories, \a columnCategories, and the given \a parent. This constructor
- * also sets autoRowCategories and autoColumnCategories to false.
- */
-QItemModelSurfaceDataMapping::QItemModelSurfaceDataMapping(const QString &rowRole,
- const QString &columnRole,
- const QString &valueRole,
- const QStringList &rowCategories,
- const QStringList &columnCategories,
- QObject *parent)
- : QAbstractDataMapping(new QItemModelSurfaceDataMappingPrivate(this), parent)
-{
- dptr()->m_rowRole = rowRole;
- dptr()->m_columnRole = columnRole;
- dptr()->m_valueRole = valueRole;
- dptr()->m_rowCategories = rowCategories;
- dptr()->m_columnCategories = columnCategories;
- dptr()->m_autoRowCategories = false;
- dptr()->m_autoColumnCategories = false;
-}
-
-/*!
- * Destroys QItemModelSurfaceDataMapping.
- */
-QItemModelSurfaceDataMapping::~QItemModelSurfaceDataMapping()
-{
-}
-
-/*!
- * \property QItemModelSurfaceDataMapping::rowRole
- *
- * Defines the row role for the mapping.
- */
-void QItemModelSurfaceDataMapping::setRowRole(const QString &role)
-{
- if (dptr()->m_rowRole != role) {
- dptr()->m_rowRole = role;
- emit mappingChanged();
- }
-}
-
-QString QItemModelSurfaceDataMapping::rowRole() const
-{
- return dptrc()->m_rowRole;
-}
-
-/*!
- * \property QItemModelSurfaceDataMapping::columnRole
- *
- * Defines the column role for the mapping.
- */
-void QItemModelSurfaceDataMapping::setColumnRole(const QString &role)
-{
- if (dptr()->m_columnRole != role) {
- dptr()->m_columnRole = role;
- emit mappingChanged();
- }
-}
-
-QString QItemModelSurfaceDataMapping::columnRole() const
-{
- return dptrc()->m_columnRole;
-}
-
-/*!
- * \property QItemModelSurfaceDataMapping::valueRole
- *
- * Defines the value role for the mapping.
- */
-void QItemModelSurfaceDataMapping::setValueRole(const QString &role)
-{
- if (dptr()->m_valueRole != role) {
- dptr()->m_valueRole = role;
- emit mappingChanged();
- }
-}
-
-QString QItemModelSurfaceDataMapping::valueRole() const
-{
- return dptrc()->m_valueRole;
-}
-
-/*!
- * \property QItemModelSurfaceDataMapping::rowCategories
- *
- * Defines the row categories for the mapping.
- */
-void QItemModelSurfaceDataMapping::setRowCategories(const QStringList &categories)
-{
- if (dptr()->m_rowCategories != categories) {
- dptr()->m_rowCategories = categories;
- emit mappingChanged();
- }
-}
-
-QStringList QItemModelSurfaceDataMapping::rowCategories() const
-{
- return dptrc()->m_rowCategories;
-}
-
-/*!
- * \property QItemModelSurfaceDataMapping::columnCategories
- *
- * Defines the column categories for the mapping.
- */
-void QItemModelSurfaceDataMapping::setColumnCategories(const QStringList &categories)
-{
- if (dptr()->m_columnCategories != categories) {
- dptr()->m_columnCategories = categories;
- emit mappingChanged();
- }
-}
-
-QStringList QItemModelSurfaceDataMapping::columnCategories() const
-{
- return dptrc()->m_columnCategories;
-}
-
-/*!
- * \property QItemModelSurfaceDataMapping::useModelCategories
- *
- * When set to true, the mapping ignores row and column roles and categories, and uses
- * the rows and columns from the model instead. Defaults to false.
- */
-void QItemModelSurfaceDataMapping::setUseModelCategories(bool enable)
-{
- if (dptr()->m_useModelCategories != enable) {
- dptr()->m_useModelCategories = enable;
- emit mappingChanged();
- }
-}
-
-bool QItemModelSurfaceDataMapping::useModelCategories() const
-{
- return dptrc()->m_useModelCategories;
-}
-
-/*!
- * \property QItemModelSurfaceDataMapping::autoRowCategories
- *
- * When set to true, the mapping ignores any explicitly set row categories
- * and overwrites them with automatically generated ones whenever the
- * data from model is resolved. Proxy minimum and maximum row values are also
- * autogenerated from data when this is set to true. Defaults to true.
- */
-void QItemModelSurfaceDataMapping::setAutoRowCategories(bool enable)
-{
- if (dptr()->m_autoRowCategories != enable) {
- dptr()->m_autoRowCategories = enable;
- emit mappingChanged();
- }
-}
-
-bool QItemModelSurfaceDataMapping::autoRowCategories() const
-{
- return dptrc()->m_autoRowCategories;
-}
-
-/*!
- * \property QItemModelSurfaceDataMapping::autoColumnCategories
- *
- * When set to true, the mapping ignores any explicitly set column categories
- * and overwrites them with automatically generated ones whenever the
- * data from model is resolved. Proxy minimum and maximum column values are also
- * autogenerated from data when this is set to true. Defaults to true.
- */
-void QItemModelSurfaceDataMapping::setAutoColumnCategories(bool enable)
-{
- if (dptr()->m_autoColumnCategories != enable) {
- dptr()->m_autoColumnCategories = enable;
- emit mappingChanged();
- }
-}
-
-bool QItemModelSurfaceDataMapping::autoColumnCategories() const
-{
- return dptrc()->m_autoColumnCategories;
-}
-
-/*!
- * Changes \a rowRole, \a columnRole, \a valueRole, \a rowCategories and \a columnCategories to the
- * mapping.
- */
-void QItemModelSurfaceDataMapping::remap(const QString &rowRole,
- const QString &columnRole,
- const QString &valueRole,
- const QStringList &rowCategories,
- const QStringList &columnCategories)
-{
- dptr()->m_rowRole = rowRole;
- dptr()->m_columnRole = columnRole;
- dptr()->m_valueRole = valueRole;
- dptr()->m_rowCategories = rowCategories;
- dptr()->m_columnCategories = columnCategories;
-
- emit mappingChanged();
-}
-
-/*!
- * /return index of the specified \a category in row categories list.
- * If the row categories list is empty, -1 is returned.
- * \note If the automatic row categories generation is in use, this method will
- * not return a valid index before the data in the model is resolved for the first time.
- */
-int QItemModelSurfaceDataMapping::rowCategoryIndex(const QString &category)
-{
- return dptr()->m_rowCategories.indexOf(category);
-}
-
-/*!
- * /return index of the specified \a category in column categories list.
- * \note If the automatic column categories generation is in use, this method will
- * not return a valid index before the data in the model is resolved for the first time.
- */
-int QItemModelSurfaceDataMapping::columnCategoryIndex(const QString &category)
-{
- return dptr()->m_columnCategories.indexOf(category);
-}
-
-/*!
- * \internal
- */
-QItemModelSurfaceDataMappingPrivate *QItemModelSurfaceDataMapping::dptr()
-{
- return static_cast<QItemModelSurfaceDataMappingPrivate *>(d_ptr.data());
-}
-
-/*!
- * \internal
- */
-const QItemModelSurfaceDataMappingPrivate *QItemModelSurfaceDataMapping::dptrc() const
-{
- return static_cast<const QItemModelSurfaceDataMappingPrivate *>(d_ptr.data());
-}
-
-// QItemModelSurfaceDataMappingPrivate
-
-QItemModelSurfaceDataMappingPrivate::QItemModelSurfaceDataMappingPrivate(QItemModelSurfaceDataMapping *q)
- : QAbstractDataMappingPrivate(q, QAbstractDataProxy::DataTypeSurface),
- m_useModelCategories(false),
- m_autoRowCategories(true),
- m_autoColumnCategories(true)
-{
-}
-
-QItemModelSurfaceDataMappingPrivate::~QItemModelSurfaceDataMappingPrivate()
-{
-}
-
-
-QT_DATAVISUALIZATION_END_NAMESPACE
-
diff --git a/src/datavisualization/data/qitemmodelsurfacedatamapping.h b/src/datavisualization/data/qitemmodelsurfacedatamapping.h
deleted file mode 100644
index 7e8817bf..00000000
--- a/src/datavisualization/data/qitemmodelsurfacedatamapping.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-**
-** 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
-**
-****************************************************************************/
-
-#ifndef QITEMMODELSURFACEDATAMAPPING_H
-#define QITEMMODELSURFACEDATAMAPPING_H
-
-#include <QtDataVisualization/qdatavisualizationenums.h>
-#include <QtDataVisualization/qabstractdatamapping.h>
-#include <QStringList>
-
-QT_DATAVISUALIZATION_BEGIN_NAMESPACE
-
-class QItemModelSurfaceDataMappingPrivate;
-
-class QT_DATAVISUALIZATION_EXPORT QItemModelSurfaceDataMapping : public QAbstractDataMapping
-{
- Q_OBJECT
- Q_PROPERTY(QString rowRole READ rowRole WRITE setRowRole)
- Q_PROPERTY(QString columnRole READ columnRole WRITE setColumnRole)
- Q_PROPERTY(QString valueRole READ valueRole WRITE setValueRole)
- Q_PROPERTY(QStringList rowCategories READ rowCategories WRITE setRowCategories)
- Q_PROPERTY(QStringList columnCategories READ columnCategories WRITE setColumnCategories)
- Q_PROPERTY(bool useModelCategories READ useModelCategories WRITE setUseModelCategories)
- Q_PROPERTY(bool autoRowCategories READ autoRowCategories WRITE setAutoRowCategories)
- Q_PROPERTY(bool autoColumnCategories READ autoColumnCategories WRITE setAutoColumnCategories)
-
-public:
- explicit QItemModelSurfaceDataMapping(QObject *parent = 0);
- QItemModelSurfaceDataMapping(const QString &valueRole, QObject *parent = 0);
- QItemModelSurfaceDataMapping(const QString &rowRole, const QString &columnRole,
- const QString &valueRole, QObject *parent = 0);
- QItemModelSurfaceDataMapping(const QString &rowRole, const QString &columnRole,
- const QString &valueRole, const QStringList &rowCategories,
- const QStringList &columnCategories, QObject *parent = 0);
- virtual ~QItemModelSurfaceDataMapping();
-
- void setRowRole(const QString &role);
- QString rowRole() const;
- void setColumnRole(const QString &role);
- QString columnRole() const;
- void setValueRole(const QString &role);
- QString valueRole() const;
-
- void setRowCategories(const QStringList &categories);
- QStringList rowCategories() const;
- void setColumnCategories(const QStringList &categories);
- QStringList columnCategories() const;
-
- void setUseModelCategories(bool enable);
- bool useModelCategories() const;
- void setAutoRowCategories(bool enable);
- bool autoRowCategories() const;
- void setAutoColumnCategories(bool enable);
- bool autoColumnCategories() const;
-
- void remap(const QString &rowRole, const QString &columnRole,
- const QString &valueRole, const QStringList &rowCategories,
- const QStringList &columnCategories);
-
- Q_INVOKABLE int rowCategoryIndex(const QString& category);
- Q_INVOKABLE int columnCategoryIndex(const QString& category);
-
-protected:
- QItemModelSurfaceDataMappingPrivate *dptr();
- const QItemModelSurfaceDataMappingPrivate *dptrc() const;
-
-private:
- Q_DISABLE_COPY(QItemModelSurfaceDataMapping)
-
- friend class SurfaceItemModelHandler;
-};
-
-QT_DATAVISUALIZATION_END_NAMESPACE
-
-#endif
diff --git a/src/datavisualization/data/qitemmodelsurfacedatamapping_p.h b/src/datavisualization/data/qitemmodelsurfacedatamapping_p.h
deleted file mode 100644
index 9896f868..00000000
--- a/src/datavisualization/data/qitemmodelsurfacedatamapping_p.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** 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.
-
-#include "qitemmodelsurfacedatamapping.h"
-#include "qabstractdatamapping_p.h"
-
-#ifndef QITEMMODELSURFACEDATAMAPPING_P_H
-#define QITEMMODELSURFACEDATAMAPPING_P_H
-
-QT_DATAVISUALIZATION_BEGIN_NAMESPACE
-
-class QItemModelSurfaceDataMappingPrivate : public QAbstractDataMappingPrivate
-{
- Q_OBJECT
-public:
- QItemModelSurfaceDataMappingPrivate(QItemModelSurfaceDataMapping *q);
- virtual ~QItemModelSurfaceDataMappingPrivate();
-
-private:
- QString m_rowRole;
- QString m_columnRole;
- QString m_valueRole;
-
- // For row/column items, sort items into these categories. Other categories are ignored.
- QStringList m_rowCategories;
- QStringList m_columnCategories;
-
- bool m_useModelCategories;
- bool m_autoRowCategories;
- bool m_autoColumnCategories;
-
- friend class QItemModelSurfaceDataMapping;
- friend class SurfaceItemModelHandler;
-};
-
-QT_DATAVISUALIZATION_END_NAMESPACE
-
-#endif
diff --git a/src/datavisualization/data/qitemmodelsurfacedataproxy.cpp b/src/datavisualization/data/qitemmodelsurfacedataproxy.cpp
index 75032930..920878d5 100644
--- a/src/datavisualization/data/qitemmodelsurfacedataproxy.cpp
+++ b/src/datavisualization/data/qitemmodelsurfacedataproxy.cpp
@@ -31,11 +31,36 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
* \since Qt Data Visualization 1.0
*
* QItemModelSurfaceDataProxy allows you to use QAbstractItemModel derived models as a data source
- * for Q3DSurface. It maps roles defined in QItemModelSurfaceDataMapping to roles in the model.
+ * for Q3DSurface. It uses the defined mappings to map data from the model to rows, columns, and
+ * values of Q3DSurface graph.
*
* Data is resolved asynchronously whenever the mapping or the model changes.
* QSurfaceDataProxy::arrayReset() is emitted when the data has been resolved.
*
+ * There are three ways to use mappings:
+ *
+ * 1) If useModelCategories property is set to true, this proxy will map rows and
+ * columns of QAbstractItemModel to rows and columns of Q3DSurface, and uses the value returned for
+ * Qt::DisplayRole as bar value by default.
+ * The value role to be used can be redefined if Qt::DisplayRole is not suitable.
+ *
+ * 2) For models that do not have data already neatly sorted into rows and columns, such as
+ * QAbstractListModel based models, you can define a role from the model to map for each of row,
+ * column and value.
+ *
+ * 3) If you do not want to include all data contained in the model, or the autogenerated rows and
+ * columns are not ordered as you wish, you can specify which rows and columns should be included
+ * and in which order by defining an explicit list of categories for either or both of rows and
+ * columns.
+ *
+ * For example, assume that you have a custom QAbstractItemModel storing surface topography data.
+ * Each item in the model has the roles "longitude", "latitude", and "height". The item model already
+ * contains the data properly sorted so that longitudes and latitudes are first encountered in
+ * correct order, which enables us to utilize the row and column category autogeneration.
+ * You could do the following to display the data in a surface graph:
+ *
+ * \snippet doc_src_qtdatavisualization.cpp 5
+ *
* \sa {Qt Data Visualization Data Handling}
*/
@@ -53,11 +78,13 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
* Data is resolved asynchronously whenever the mapping or the model changes.
* QSurfaceDataProxy::arrayReset() is emitted when the data has been resolved.
*
+ * For more details, see QItemModelSurfaceDataProxy documentation.
+ *
* Usage example:
*
* \snippet doc_src_qmldatavisualization.cpp 9
*
- * \sa SurfaceDataProxy, SurfaceDataMapping, {Qt Data Visualization Data Handling}
+ * \sa SurfaceDataProxy, {Qt Data Visualization Data Handling}
*/
/*!
@@ -66,29 +93,140 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
*/
/*!
- * \qmlproperty list ItemModelSurfaceDataProxy::activeMapping
- * The active mapping. Modifying a mapping that is set to the proxy will trigger data set
- * re-resolving.
+ * \qmlproperty string ItemModelSurfaceDataProxy::rowRole
+ * The row role of the mapping.
+ * In addition to defining which row the data belongs to, the value indicated by row role
+ * is also set as the Z-coordinate value of the QSurfaceDataItem when model data is resolved.
*/
/*!
- * Constructs QItemModelSurfaceDataProxy.
+ * \qmlproperty string ItemModelSurfaceDataProxy::columnRole
+ * The column role of the mapping.
+ * In addition to defining which column the data belongs to, the value indicated by column role
+ * is also set as the X-coordinate value of the QSurfaceDataItem when model data is resolved.
*/
-QItemModelSurfaceDataProxy::QItemModelSurfaceDataProxy() :
- QSurfaceDataProxy(new QItemModelSurfaceDataProxyPrivate(this))
+
+/*!
+ * \qmlproperty string ItemModelSurfaceDataProxy::valueRole
+ * The value role of the mapping.
+ * The value indicated by value role is set as Y-coodrinate value of the
+ * QSurfaceDataItem when model data is resolved.
+ */
+
+/*!
+ * \qmlproperty list ItemModelSurfaceDataProxy::rowCategories
+ * The row categories of the mapping. Only items with row roles that are found in this list are
+ * included when data is resolved. The rows are ordered in the same order as they are in this list.
+ */
+
+/*!
+ * \qmlproperty list ItemModelSurfaceDataProxy::columnCategories
+ * The column categories of the mapping. Only items with column roles that are found in this list are
+ * included when data is resolved. The columns are ordered in the same order as they are in this list.
+ */
+
+/*!
+ * \qmlproperty list ItemModelSurfaceDataProxy::useModelCategories
+ * When set to true, the mapping ignores row and column roles and categories, and uses
+ * the rows and columns from the model instead. Defaults to false.
+ */
+
+/*!
+ * \qmlproperty list ItemModelSurfaceDataProxy::autoRowCategories
+ * When set to true, the mapping ignores any explicitly set row categories
+ * and overwrites them with automatically generated ones whenever the
+ * data from model is resolved. Proxy minimum and maximum row values are also
+ * autogenerated from data when this is set to true. Defaults to true.
+ */
+
+/*!
+ * \qmlproperty list ItemModelSurfaceDataProxy::autoColumnCategories
+ * When set to true, the mapping ignores any explicitly set column categories
+ * and overwrites them with automatically generated ones whenever the
+ * data from model is resolved. Proxy minimum and maximum column values are also
+ * autogenerated from data when this is set to true. Defaults to true.
+ */
+
+/*!
+ * Constructs QItemModelSurfaceDataProxy with optional \a parent.
+ */
+QItemModelSurfaceDataProxy::QItemModelSurfaceDataProxy(QObject *parent)
+ : QSurfaceDataProxy(new QItemModelSurfaceDataProxyPrivate(this), parent)
{
+ connectItemModelHandler();
}
/*!
- * Constructs QItemModelSurfaceDataProxy with \a itemModel and \a mapping. Does not take ownership
- * of the model or the mapping, but does connect to them to listen for changes.
+ * Constructs QItemModelSurfaceDataProxy with \a itemModel and optional \a parent. Proxy doesn't take
+ * ownership of the \a itemModel, as typically item models are owned by other controls.
+ */
+QItemModelSurfaceDataProxy::QItemModelSurfaceDataProxy(const QAbstractItemModel *itemModel, QObject *parent)
+ : QSurfaceDataProxy(new QItemModelSurfaceDataProxyPrivate(this), parent)
+{
+ dptr()->m_itemModelHandler->setItemModel(itemModel);
+ connectItemModelHandler();
+}
+
+/*!
+ * Constructs QItemModelSurfaceDataProxy with \a itemModel and optional \a parent. Proxy doesn't take
+ * ownership of the \a itemModel, as typically item models are owned by other controls.
+ * The value role is set to \a valueRole.
+ * This constructor is meant to be used with models that have data properly sorted
+ * in rows and columns already, so it also sets useModelCategories property to true.
+ */
+QItemModelSurfaceDataProxy::QItemModelSurfaceDataProxy(const QAbstractItemModel *itemModel,
+ const QString &valueRole, QObject *parent)
+ : QSurfaceDataProxy(new QItemModelSurfaceDataProxyPrivate(this), parent)
+{
+ dptr()->m_itemModelHandler->setItemModel(itemModel);
+ dptr()->m_valueRole = valueRole;
+ dptr()->m_useModelCategories = true;
+ connectItemModelHandler();
+}
+
+/*!
+ * Constructs QItemModelSurfaceDataProxy with \a itemModel and optional \a parent. Proxy doesn't take
+ * ownership of the \a itemModel, as typically item models are owned by other controls.
+ * The role mappings are set with \a rowRole, \a columnRole, and \a valueRole.
+ */
+QItemModelSurfaceDataProxy::QItemModelSurfaceDataProxy(const QAbstractItemModel *itemModel,
+ const QString &rowRole,
+ const QString &columnRole,
+ const QString &valueRole, QObject *parent)
+ : QSurfaceDataProxy(new QItemModelSurfaceDataProxyPrivate(this), parent)
+{
+ dptr()->m_itemModelHandler->setItemModel(itemModel);
+ dptr()->m_rowRole = rowRole;
+ dptr()->m_columnRole = columnRole;
+ dptr()->m_valueRole = valueRole;
+ connectItemModelHandler();
+}
+
+/*!
+ * Constructs QItemModelSurfaceDataProxy with \a itemModel and optional \a parent. Proxy doesn't take
+ * ownership of the \a itemModel, as typically item models are owned by other controls.
+ * The role mappings are set with \a rowRole, \a columnRole, and \a valueRole.
+ * Row and column categories are set with \a rowCategories and \a columnCategories.
+ * This constructor also sets autoRowCategories and autoColumnCategories to false.
*/
QItemModelSurfaceDataProxy::QItemModelSurfaceDataProxy(const QAbstractItemModel *itemModel,
- QItemModelSurfaceDataMapping *mapping) :
- QSurfaceDataProxy(new QItemModelSurfaceDataProxyPrivate(this))
+ const QString &rowRole,
+ const QString &columnRole,
+ const QString &valueRole,
+ const QStringList &rowCategories,
+ const QStringList &columnCategories,
+ QObject *parent)
+ : QSurfaceDataProxy(new QItemModelSurfaceDataProxyPrivate(this), parent)
{
dptr()->m_itemModelHandler->setItemModel(itemModel);
- dptr()->m_itemModelHandler->setActiveMapping(mapping);
+ dptr()->m_rowRole = rowRole;
+ dptr()->m_columnRole = columnRole;
+ dptr()->m_valueRole = valueRole;
+ dptr()->m_rowCategories = rowCategories;
+ dptr()->m_columnCategories = columnCategories;
+ dptr()->m_autoRowCategories = false;
+ dptr()->m_autoColumnCategories = false;
+ connectItemModelHandler();
}
/*!
@@ -115,50 +253,191 @@ const QAbstractItemModel *QItemModelSurfaceDataProxy::itemModel() const
}
/*!
- * \property QItemModelSurfaceDataProxy::activeMapping
+ * \property QItemModelSurfaceDataProxy::rowRole
*
- * Defines data mapping. Proxy takes ownership of the \a mapping.
- * Modifying a mapping that is set to the proxy will trigger data set re-resolving.
+ * Defines the row role for the mapping.
*/
-void QItemModelSurfaceDataProxy::setActiveMapping(QItemModelSurfaceDataMapping *mapping)
+void QItemModelSurfaceDataProxy::setRowRole(const QString &role)
{
- dptr()->m_itemModelHandler->setActiveMapping(mapping);
+ if (dptr()->m_rowRole != role) {
+ dptr()->m_rowRole = role;
+ emit rowRoleChanged(role);
+ }
}
-QItemModelSurfaceDataMapping *QItemModelSurfaceDataProxy::activeMapping() const
+QString QItemModelSurfaceDataProxy::rowRole() const
{
- return static_cast<QItemModelSurfaceDataMapping *>(dptrc()->m_itemModelHandler->activeMapping());
+ return dptrc()->m_rowRole;
}
/*!
- * Transfers the ownership of the \a mapping to this proxy. The mapping is not taken to use yet.
- * \sa setActiveMapping(), releaseMapping()
+ * \property QItemModelSurfaceDataProxy::columnRole
+ *
+ * Defines the column role for the mapping.
*/
-void QItemModelSurfaceDataProxy::addMapping(QItemModelSurfaceDataMapping *mapping)
+void QItemModelSurfaceDataProxy::setColumnRole(const QString &role)
+{
+ if (dptr()->m_columnRole != role) {
+ dptr()->m_columnRole = role;
+ emit columnRoleChanged(role);
+ }
+}
+
+QString QItemModelSurfaceDataProxy::columnRole() const
{
- dptr()->m_itemModelHandler->addMapping(mapping);
+ return dptrc()->m_columnRole;
}
/*!
- * Releases the ownership of the \a mapping back to the caller. If the mapping was the currently
- * active one, no mapping remains active after this call.
+ * \property QItemModelSurfaceDataProxy::valueRole
+ *
+ * Defines the value role for the mapping.
*/
-void QItemModelSurfaceDataProxy::releaseMapping(QItemModelSurfaceDataMapping *mapping)
+void QItemModelSurfaceDataProxy::setValueRole(const QString &role)
{
- dptr()->m_itemModelHandler->releaseMapping(mapping);
+ if (dptr()->m_valueRole != role) {
+ dptr()->m_valueRole = role;
+ emit valueRoleChanged(role);
+ }
+}
+
+QString QItemModelSurfaceDataProxy::valueRole() const
+{
+ return dptrc()->m_valueRole;
}
/*!
- * \return list of mappings owned by the proxy.
+ * \property QItemModelSurfaceDataProxy::rowCategories
+ *
+ * Defines the row categories for the mapping.
*/
-QList<QItemModelSurfaceDataMapping *> QItemModelSurfaceDataProxy::mappings() const
+void QItemModelSurfaceDataProxy::setRowCategories(const QStringList &categories)
{
- QList<QItemModelSurfaceDataMapping *> retList;
- QList<QAbstractDataMapping *> abstractList = dptrc()->m_itemModelHandler->mappings();
- foreach (QAbstractDataMapping *mapping, abstractList)
- retList.append(static_cast<QItemModelSurfaceDataMapping *>(mapping));
+ if (dptr()->m_rowCategories != categories) {
+ dptr()->m_rowCategories = categories;
+ emit rowCategoriesChanged(categories);
+ }
+}
+
+QStringList QItemModelSurfaceDataProxy::rowCategories() const
+{
+ return dptrc()->m_rowCategories;
+}
+
+/*!
+ * \property QItemModelSurfaceDataProxy::columnCategories
+ *
+ * Defines the column categories for the mapping.
+ */
+void QItemModelSurfaceDataProxy::setColumnCategories(const QStringList &categories)
+{
+ if (dptr()->m_columnCategories != categories) {
+ dptr()->m_columnCategories = categories;
+ emit columnCategoriesChanged(categories);
+ }
+}
+
+QStringList QItemModelSurfaceDataProxy::columnCategories() const
+{
+ return dptrc()->m_columnCategories;
+}
+
+/*!
+ * \property QItemModelSurfaceDataProxy::useModelCategories
+ *
+ * When set to true, the mapping ignores row and column roles and categories, and uses
+ * the rows and columns from the model instead. Defaults to false.
+ */
+void QItemModelSurfaceDataProxy::setUseModelCategories(bool enable)
+{
+ if (dptr()->m_useModelCategories != enable) {
+ dptr()->m_useModelCategories = enable;
+ emit useModelCategoriesChanged(enable);
+ }
+}
+
+bool QItemModelSurfaceDataProxy::useModelCategories() const
+{
+ return dptrc()->m_useModelCategories;
+}
+
+/*!
+ * \property QItemModelSurfaceDataProxy::autoRowCategories
+ *
+ * When set to true, the mapping ignores any explicitly set row categories
+ * and overwrites them with automatically generated ones whenever the
+ * data from model is resolved. Defaults to true.
+ */
+void QItemModelSurfaceDataProxy::setAutoRowCategories(bool enable)
+{
+ if (dptr()->m_autoRowCategories != enable) {
+ dptr()->m_autoRowCategories = enable;
+ emit autoRowCategoriesChanged(enable);
+ }
+}
- return retList;
+bool QItemModelSurfaceDataProxy::autoRowCategories() const
+{
+ return dptrc()->m_autoRowCategories;
+}
+
+/*!
+ * \property QItemModelSurfaceDataProxy::autoColumnCategories
+ *
+ * When set to true, the mapping ignores any explicitly set column categories
+ * and overwrites them with automatically generated ones whenever the
+ * data from model is resolved. Defaults to true.
+ */
+void QItemModelSurfaceDataProxy::setAutoColumnCategories(bool enable)
+{
+ if (dptr()->m_autoColumnCategories != enable) {
+ dptr()->m_autoColumnCategories = enable;
+ emit autoColumnCategoriesChanged(enable);
+ }
+}
+
+bool QItemModelSurfaceDataProxy::autoColumnCategories() const
+{
+ return dptrc()->m_autoColumnCategories;
+}
+
+/*!
+ * Changes \a rowRole, \a columnRole, \a valueRole, \a rowCategories and \a columnCategories to the
+ * mapping.
+ */
+void QItemModelSurfaceDataProxy::remap(const QString &rowRole,
+ const QString &columnRole,
+ const QString &valueRole,
+ const QStringList &rowCategories,
+ const QStringList &columnCategories)
+{
+ setRowRole(rowRole);
+ setColumnRole(columnRole);
+ setValueRole(valueRole);
+ setRowCategories(rowCategories);
+ setColumnCategories(columnCategories);
+}
+
+/*!
+ * /return index of the specified \a category in row categories list.
+ * If the row categories list is empty, -1 is returned.
+ * \note If the automatic row categories generation is in use, this method will
+ * not return a valid index before the data in the model is resolved for the first time.
+ */
+int QItemModelSurfaceDataProxy::rowCategoryIndex(const QString &category)
+{
+ return dptr()->m_rowCategories.indexOf(category);
+}
+
+/*!
+ * /return index of the specified \a category in column categories list.
+ * If the category is not found, -1 is returned.
+ * \note If the automatic column categories generation is in use, this method will
+ * not return a valid index before the data in the model is resolved for the first time.
+ */
+int QItemModelSurfaceDataProxy::columnCategoryIndex(const QString &category)
+{
+ return dptr()->m_columnCategories.indexOf(category);
}
/*!
@@ -177,11 +456,36 @@ const QItemModelSurfaceDataProxyPrivate *QItemModelSurfaceDataProxy::dptrc() con
return static_cast<const QItemModelSurfaceDataProxyPrivate *>(d_ptr.data());
}
+void QItemModelSurfaceDataProxy::connectItemModelHandler()
+{
+ QObject::connect(dptr()->m_itemModelHandler, &SurfaceItemModelHandler::itemModelChanged,
+ this, &QItemModelSurfaceDataProxy::itemModelChanged);
+ QObject::connect(this, &QItemModelSurfaceDataProxy::rowRoleChanged,
+ dptr()->m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
+ QObject::connect(this, &QItemModelSurfaceDataProxy::columnRoleChanged,
+ dptr()->m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
+ QObject::connect(this, &QItemModelSurfaceDataProxy::valueRoleChanged,
+ dptr()->m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
+ QObject::connect(this, &QItemModelSurfaceDataProxy::rowCategoriesChanged,
+ dptr()->m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
+ QObject::connect(this, &QItemModelSurfaceDataProxy::columnCategoriesChanged,
+ dptr()->m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
+ QObject::connect(this, &QItemModelSurfaceDataProxy::useModelCategoriesChanged,
+ dptr()->m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
+ QObject::connect(this, &QItemModelSurfaceDataProxy::autoRowCategoriesChanged,
+ dptr()->m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
+ QObject::connect(this, &QItemModelSurfaceDataProxy::autoColumnCategoriesChanged,
+ dptr()->m_itemModelHandler, &AbstractItemModelHandler::handleMappingChanged);
+}
+
// QItemModelSurfaceDataProxyPrivate
QItemModelSurfaceDataProxyPrivate::QItemModelSurfaceDataProxyPrivate(QItemModelSurfaceDataProxy *q)
: QSurfaceDataProxyPrivate(q),
- m_itemModelHandler(new SurfaceItemModelHandler(q))
+ m_itemModelHandler(new SurfaceItemModelHandler(q)),
+ m_useModelCategories(false),
+ m_autoRowCategories(true),
+ m_autoColumnCategories(true)
{
}
diff --git a/src/datavisualization/data/qitemmodelsurfacedataproxy.h b/src/datavisualization/data/qitemmodelsurfacedataproxy.h
index 080bf54b..843fa3af 100644
--- a/src/datavisualization/data/qitemmodelsurfacedataproxy.h
+++ b/src/datavisualization/data/qitemmodelsurfacedataproxy.h
@@ -20,7 +20,6 @@
#define QITEMMODELSURFACEDATAPROXY_H
#include <QtDataVisualization/qsurfacedataproxy.h>
-#include <QtDataVisualization/qitemmodelsurfacedatamapping.h>
#include <QAbstractItemModel>
#include <QStringList>
@@ -31,30 +30,79 @@ class QItemModelSurfaceDataProxyPrivate;
class QT_DATAVISUALIZATION_EXPORT QItemModelSurfaceDataProxy : public QSurfaceDataProxy
{
Q_OBJECT
- Q_PROPERTY(const QAbstractItemModel* itemModel READ itemModel WRITE setItemModel)
- Q_PROPERTY(QItemModelSurfaceDataMapping* activeMapping READ activeMapping WRITE setActiveMapping)
+ Q_PROPERTY(const QAbstractItemModel* itemModel READ itemModel WRITE setItemModel NOTIFY itemModelChanged)
+ Q_PROPERTY(QString rowRole READ rowRole WRITE setRowRole NOTIFY rowRoleChanged)
+ Q_PROPERTY(QString columnRole READ columnRole WRITE setColumnRole NOTIFY columnRoleChanged)
+ Q_PROPERTY(QString valueRole READ valueRole WRITE setValueRole NOTIFY valueRoleChanged)
+ Q_PROPERTY(QStringList rowCategories READ rowCategories WRITE setRowCategories NOTIFY rowCategoriesChanged)
+ Q_PROPERTY(QStringList columnCategories READ columnCategories WRITE setColumnCategories NOTIFY columnCategoriesChanged)
+ Q_PROPERTY(bool useModelCategories READ useModelCategories WRITE setUseModelCategories NOTIFY useModelCategoriesChanged)
+ Q_PROPERTY(bool autoRowCategories READ autoRowCategories WRITE setAutoRowCategories NOTIFY autoRowCategoriesChanged)
+ Q_PROPERTY(bool autoColumnCategories READ autoColumnCategories WRITE setAutoColumnCategories NOTIFY autoColumnCategoriesChanged)
public:
- explicit QItemModelSurfaceDataProxy();
- explicit QItemModelSurfaceDataProxy(const QAbstractItemModel *itemModel,
- QItemModelSurfaceDataMapping *mapping);
+ explicit QItemModelSurfaceDataProxy(QObject *parent = 0);
+ QItemModelSurfaceDataProxy(const QAbstractItemModel *itemModel, QObject *parent = 0);
+ QItemModelSurfaceDataProxy(const QAbstractItemModel *itemModel, const QString &valueRole,
+ QObject *parent = 0);
+ QItemModelSurfaceDataProxy(const QAbstractItemModel *itemModel, const QString &rowRole,
+ const QString &columnRole, const QString &valueRole,
+ QObject *parent = 0);
+ QItemModelSurfaceDataProxy(const QAbstractItemModel *itemModel, const QString &rowRole,
+ const QString &columnRole, const QString &valueRole,
+ const QStringList &rowCategories, const QStringList &columnCategories,
+ QObject *parent = 0);
virtual ~QItemModelSurfaceDataProxy();
void setItemModel(const QAbstractItemModel *itemModel);
const QAbstractItemModel *itemModel() const;
- void setActiveMapping(QItemModelSurfaceDataMapping *mapping);
- QItemModelSurfaceDataMapping *activeMapping() const;
- void addMapping(QItemModelSurfaceDataMapping *mapping);
- void releaseMapping(QItemModelSurfaceDataMapping *mapping);
- QList<QItemModelSurfaceDataMapping *> mappings() const;
+ void setRowRole(const QString &role);
+ QString rowRole() const;
+ void setColumnRole(const QString &role);
+ QString columnRole() const;
+ void setValueRole(const QString &role);
+ QString valueRole() const;
+
+ void setRowCategories(const QStringList &categories);
+ QStringList rowCategories() const;
+ void setColumnCategories(const QStringList &categories);
+ QStringList columnCategories() const;
+
+ void setUseModelCategories(bool enable);
+ bool useModelCategories() const;
+ void setAutoRowCategories(bool enable);
+ bool autoRowCategories() const;
+ void setAutoColumnCategories(bool enable);
+ bool autoColumnCategories() const;
+
+ void remap(const QString &rowRole, const QString &columnRole,
+ const QString &valueRole, const QStringList &rowCategories,
+ const QStringList &columnCategories);
+
+ Q_INVOKABLE int rowCategoryIndex(const QString& category);
+ Q_INVOKABLE int columnCategoryIndex(const QString& category);
+
+signals:
+ void itemModelChanged(const QAbstractItemModel* itemModel);
+ void rowRoleChanged(QString role);
+ void columnRoleChanged(QString role);
+ void valueRoleChanged(QString role);
+ void rowCategoriesChanged(QStringList categories);
+ void columnCategoriesChanged(QStringList categories);
+ void useModelCategoriesChanged(bool enable);
+ void autoRowCategoriesChanged(bool enable);
+ void autoColumnCategoriesChanged(bool enable);
protected:
QItemModelSurfaceDataProxyPrivate *dptr();
const QItemModelSurfaceDataProxyPrivate *dptrc() const;
private:
+ void connectItemModelHandler();
Q_DISABLE_COPY(QItemModelSurfaceDataProxy)
+
+ friend class SurfaceItemModelHandler;
};
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qitemmodelsurfacedataproxy_p.h b/src/datavisualization/data/qitemmodelsurfacedataproxy_p.h
index ff9d13de..9af8d3ae 100644
--- a/src/datavisualization/data/qitemmodelsurfacedataproxy_p.h
+++ b/src/datavisualization/data/qitemmodelsurfacedataproxy_p.h
@@ -31,8 +31,6 @@
#include "qitemmodelsurfacedataproxy.h"
#include "qsurfacedataproxy_p.h"
-#include <QPointer>
-#include <QTimer>
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
@@ -50,6 +48,19 @@ private:
SurfaceItemModelHandler *m_itemModelHandler;
+ QString m_rowRole;
+ QString m_columnRole;
+ QString m_valueRole;
+
+ // For row/column items, sort items into these categories. Other categories are ignored.
+ QStringList m_rowCategories;
+ QStringList m_columnCategories;
+
+ bool m_useModelCategories;
+ bool m_autoRowCategories;
+ bool m_autoColumnCategories;
+
+ friend class SurfaceItemModelHandler;
friend class QItemModelSurfaceDataProxy;
};
diff --git a/src/datavisualization/data/scatteritemmodelhandler.cpp b/src/datavisualization/data/scatteritemmodelhandler.cpp
index 34230ae0..a70b35b0 100644
--- a/src/datavisualization/data/scatteritemmodelhandler.cpp
+++ b/src/datavisualization/data/scatteritemmodelhandler.cpp
@@ -35,8 +35,7 @@ ScatterItemModelHandler::~ScatterItemModelHandler()
// Resolve entire item model into QScatterDataArray.
void ScatterItemModelHandler::resolveModel()
{
- QItemModelScatterDataMapping *mapping = static_cast<QItemModelScatterDataMapping *>(m_activeMapping);
- if (m_itemModel.isNull() || !mapping) {
+ if (m_itemModel.isNull()) {
m_proxy->resetArray(0);
m_proxyArray = 0;
return;
@@ -45,9 +44,9 @@ void ScatterItemModelHandler::resolveModel()
static const int noRoleIndex = -1;
QHash<int, QByteArray> roleHash = m_itemModel->roleNames();
- const int xPosRole = roleHash.key(mapping->xPosRole().toLatin1(), noRoleIndex);
- const int yPosRole = roleHash.key(mapping->yPosRole().toLatin1(), noRoleIndex);
- const int zPosRole = roleHash.key(mapping->zPosRole().toLatin1(), noRoleIndex);
+ const int xPosRole = roleHash.key(m_proxy->xPosRole().toLatin1(), noRoleIndex);
+ const int yPosRole = roleHash.key(m_proxy->yPosRole().toLatin1(), noRoleIndex);
+ const int zPosRole = roleHash.key(m_proxy->zPosRole().toLatin1(), noRoleIndex);
const int columnCount = m_itemModel->columnCount();
const int rowCount = m_itemModel->rowCount();
const int totalCount = rowCount * columnCount;
diff --git a/src/datavisualization/data/scatteritemmodelhandler_p.h b/src/datavisualization/data/scatteritemmodelhandler_p.h
index 9b8a19a2..72f8f76c 100644
--- a/src/datavisualization/data/scatteritemmodelhandler_p.h
+++ b/src/datavisualization/data/scatteritemmodelhandler_p.h
@@ -30,7 +30,7 @@
#define SCATTERITEMMODELHANDLER_P_H
#include "abstractitemmodelhandler_p.h"
-#include "qitemmodelscatterdataproxy.h"
+#include "qitemmodelscatterdataproxy_p.h"
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
diff --git a/src/datavisualization/data/surfaceitemmodelhandler.cpp b/src/datavisualization/data/surfaceitemmodelhandler.cpp
index e602dedc..10b4ccc5 100644
--- a/src/datavisualization/data/surfaceitemmodelhandler.cpp
+++ b/src/datavisualization/data/surfaceitemmodelhandler.cpp
@@ -17,7 +17,6 @@
****************************************************************************/
#include "surfaceitemmodelhandler_p.h"
-#include "qitemmodelsurfacedatamapping_p.h"
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
@@ -35,15 +34,14 @@ SurfaceItemModelHandler::~SurfaceItemModelHandler()
// Resolve entire item model into QSurfaceDataArray.
void SurfaceItemModelHandler::resolveModel()
{
- QItemModelSurfaceDataMapping *mapping = static_cast<QItemModelSurfaceDataMapping *>(m_activeMapping);
- if (m_itemModel.isNull() || !mapping) {
+ if (m_itemModel.isNull()) {
m_proxy->resetArray(0);
m_proxyArray = 0;
return;
}
- if (!mapping->useModelCategories()
- && (mapping->rowRole().isEmpty() || mapping->columnRole().isEmpty())) {
+ if (!m_proxy->useModelCategories()
+ && (m_proxy->rowRole().isEmpty() || m_proxy->columnRole().isEmpty())) {
m_proxy->resetArray(0);
m_proxyArray = 0;
return;
@@ -52,11 +50,11 @@ void SurfaceItemModelHandler::resolveModel()
QHash<int, QByteArray> roleHash = m_itemModel->roleNames();
// Default to display role if no mapping
- int valueRole = roleHash.key(mapping->valueRole().toLatin1(), Qt::DisplayRole);
+ int valueRole = roleHash.key(m_proxy->valueRole().toLatin1(), Qt::DisplayRole);
int rowCount = m_itemModel->rowCount();
int columnCount = m_itemModel->columnCount();
- if (mapping->useModelCategories()) {
+ if (m_proxy->useModelCategories()) {
// If dimensions have changed, recreate the array
if (m_proxyArray != m_proxy->array() || columnCount != m_proxy->columnCount()
|| rowCount != m_proxyArray->size()) {
@@ -75,11 +73,11 @@ void SurfaceItemModelHandler::resolveModel()
}
}
} else {
- int rowRole = roleHash.key(mapping->rowRole().toLatin1());
- int columnRole = roleHash.key(mapping->columnRole().toLatin1());
+ int rowRole = roleHash.key(m_proxy->rowRole().toLatin1());
+ int columnRole = roleHash.key(m_proxy->columnRole().toLatin1());
- bool generateRows = mapping->autoRowCategories();
- bool generateColumns = mapping->autoColumnCategories();
+ bool generateRows = m_proxy->autoRowCategories();
+ bool generateColumns = m_proxy->autoColumnCategories();
QStringList rowList;
QStringList columnList;
@@ -109,14 +107,14 @@ void SurfaceItemModelHandler::resolveModel()
}
if (generateRows)
- mapping->dptr()->m_rowCategories = rowList;
+ m_proxy->dptr()->m_rowCategories = rowList;
else
- rowList = mapping->rowCategories();
+ rowList = m_proxy->rowCategories();
if (generateColumns)
- mapping->dptr()->m_columnCategories = columnList;
+ m_proxy->dptr()->m_columnCategories = columnList;
else
- columnList = mapping->columnCategories();
+ columnList = m_proxy->columnCategories();
// If dimensions have changed, recreate the array
if (m_proxyArray != m_proxy->array() || columnList.size() != m_proxy->columnCount()
diff --git a/src/datavisualization/data/surfaceitemmodelhandler_p.h b/src/datavisualization/data/surfaceitemmodelhandler_p.h
index bcf642c5..de0d2885 100644
--- a/src/datavisualization/data/surfaceitemmodelhandler_p.h
+++ b/src/datavisualization/data/surfaceitemmodelhandler_p.h
@@ -30,7 +30,7 @@
#define SURFACEITEMMODELHANDLER_P_H
#include "abstractitemmodelhandler_p.h"
-#include "qitemmodelsurfacedataproxy.h"
+#include "qitemmodelsurfacedataproxy_p.h"
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
diff --git a/src/datavisualization/doc/snippets/doc_src_qmldatavisualization.cpp b/src/datavisualization/doc/snippets/doc_src_qmldatavisualization.cpp
index 204e1cee..03f6e847 100644
--- a/src/datavisualization/doc/snippets/doc_src_qmldatavisualization.cpp
+++ b/src/datavisualization/doc/snippets/doc_src_qmldatavisualization.cpp
@@ -24,17 +24,27 @@ import QtDataVisualization 1.0
Bars3D {
rows: 4
columns: 4
- dataProxy: barProxy // an ItemModelBarDataProxy
barSpacing: Qt.size(0.5, 0.5)
barSpacingRelative: false
- itemLabelFormat: "@valueTitle for @colLabel, @rowLabel: @valueLabel"
+
+ Bar3DSeries {
+ itemLabelFormat: "@valueTitle for @colLabel, @rowLabel: @valueLabel"
+
+ ItemModelBarDataProxy {
+ itemModel: model // E.g. a list model defined elsewhere containing monthly expenses data.
+ // Mapping model roles to bar series rows, columns, and values.
+ rowRole: "year"
+ columnRole: "city"
+ valueRole: "expenses"
+ rowCategories: ["2010", "2011", "2012", "2013"]
+ columnCategories: ["Oulu", "Rauma", "Helsinki", "Tampere"]
+ }
+ }
}
//! [1]
//! [2]
Scatter3D {
- dataProxy: scatterProxy // an ItemModelScatterDataProxy
- itemLabelFormat: "X:@xLabel Y:@yLabel Z:@zLabel"
axisX.segmentCount: 2
axisX.subSegmentCount: 2
axisX.labelFormat: "%.2f"
@@ -44,12 +54,23 @@ Scatter3D {
axisY.segmentCount: 3
axisY.subSegmentCount: 2
axisY.labelFormat: "%.2f"
+
+ Scatter3DSeries {
+ itemLabelFormat: "X:@xLabel Y:@yLabel Z:@zLabel"
+
+ ItemModelScatterDataProxy {
+ itemModel: model // E.g. a list model defined elsewhere containing point coordinates.
+ // Mapping model roles to scatter series item coordinates.
+ xPosRole: "xPos"
+ yPosRole: "yPos"
+ zPosRole: "zPos"
+ }
+ }
}
//! [2]
//! [3]
Surface3D {
- dataProxy: surfaceProxy // an ItemModelSurfaceDataProxy
axisX.min: 0.0
axisX.max: 10.0
axisZ.min: 0.0
@@ -64,58 +85,47 @@ Surface3D {
axisZ.labelFormat: "%i"
axisY.segmentCount: 5
axisY.labelFormat: "%.1f"
+
+ Surface3DSeries {
+ ItemModelSurfaceDataProxy {
+ itemModel: model // E.g. a list model defined elsewhere containing population data.
+ // Mapping model roles to surface series rows, columns, and values.
+ rowRole: "longitude"
+ columnRole: "latitude"
+ valueRole: "pop_density"
+ }
+ }
}
//! [3]
-//! [4]
-BarDataMapping {
- id: barMapping
+//! [7]
+ItemModelBarDataProxy {
+ itemModel: model // E.g. a list model defined elsewhere containing monthly expenses data.
+ // Mapping model roles to bar series rows, columns, and values.
rowRole: "year"
columnRole: "city"
valueRole: "expenses"
rowCategories: ["2010", "2011", "2012", "2013"]
columnCategories: ["Oulu", "Rauma", "Helsinki", "Tampere"]
}
-//! [4]
-
-//! [5]
-ScatterDataMapping {
- id: scatterMapping
- xPosRole: "xPos"
- yPosRole: "yPos"
- zPosRole: "zPos"
-}
-//! [5]
-
-//! [6]
-SurfaceDataMapping {
- id: surfaceMapping
- rowRole: "latitude"
- columnRole: "longitude"
- valueRole: "population"
-}
-//! [6]
-
-//! [7]
-ItemModelBarDataProxy {
- id: barProxy
- activeMapping: barMapping // a BarDataMapping
- itemModel: dataModel // a ListModel
-}
//! [7]
//! [8]
ItemModelScatterDataProxy {
- id: scatterProxy
- activeMapping: scatterMapping // a ScatterDataMapping
- itemModel: dataModel // a ListModel
+ itemModel: model // E.g. a list model defined elsewhere containing point coordinates.
+ // Mapping model roles to scatter series item coordinates.
+ xPosRole: "xPos"
+ yPosRole: "yPos"
+ zPosRole: "zPos"
}
//! [8]
//! [9]
ItemModelSurfaceDataProxy {
- id: surfaceProxy
- activeMapping: surfaceMapping // a SurfaceDataMapping
- itemModel: dataModel // a ListModel
+ itemModel: model // E.g. a list model defined elsewhere containing population data.
+ // Mapping model roles to surface series rows, columns, and values.
+ rowRole: "longitude"
+ columnRole: "latitude"
+ valueRole: "pop_density"
}
//! [9]
diff --git a/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.cpp b/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.cpp
index e0a9fa58..35d75fcb 100644
--- a/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.cpp
+++ b/src/datavisualization/doc/snippets/doc_src_qtdatavisualization.cpp
@@ -47,36 +47,32 @@ QStringList months;
years << "2006" << "2007" << "2008" << "2009" << "2010" << "2011" << "2012";
months << "jan" << "feb" << "mar" << "apr" << "may" << "jun" << "jul" << "aug" << "sep" << "oct" << "nov" << "dec";
-QItemModelBarDataMapping *mapping = new QItemModelBarDataMapping(QStringLiteral("year"), // Row role
- QStringLiteral("month"), // Column role
- QStringLiteral("income"), // Value role
- years, // Row categories
- months); // Column categories
-
-QItemModelBarDataProxy *proxy = new QItemModelBarDataProxy(customModel, mapping);
+QItemModelBarDataProxy *proxy = new QItemModelBarDataProxy(customModel,
+ QStringLiteral("year"), // Row role
+ QStringLiteral("month"), // Column role
+ QStringLiteral("income"), // Value role
+ years, // Row categories
+ months); // Column categories
//...
-// To display different data later, you can simply change the mapping of the current
-// mapping object, or set another mapping object.
-proxy->activeMapping()->setValueRole(QStringLiteral("expenses"));
+// To display different data later, you can simply change the mapping.
+proxy->setValueRole(QStringLiteral("expenses"));
//! [3]
//! [4]
// Map "density" value to X-axis, "hardness" to Y-axis and "conductivity" to Z-axis.
-QItemModelScatterDataMapping *mapping = new QItemModelScatterDataMapping(QStringLiteral("density"),
- QStringLiteral("hardness"),
- QStringLiteral("conductivity"))
-
-QItemModelScatterDataProxy *proxy = new QItemModelScatterDataProxy(customModel, mapping);
+QItemModelScatterDataProxy *proxy = new QItemModelScatterDataProxy(customModel,
+ QStringLiteral("density"),
+ QStringLiteral("hardness"),
+ QStringLiteral("conductivity"));
//! [4]
//! [5]
-QItemModelSurfaceDataMapping *mapping = new QItemModelSurfaceDataMapping(QStringLiteral("longitude"), // Row role
- QStringLiteral("latitude"), // Column role
- QStringLiteral("height")); // value role
-
-QItemModelSurfaceDataProxy *proxy = new QItemModelSurfaceDataProxy(customModel, mapping);
+QItemModelSurfaceDataProxy *proxy = new QItemModelSurfaceDataProxy(customModel,
+ QStringLiteral("longitude"), // Row role
+ QStringLiteral("latitude"), // Column role
+ QStringLiteral("height")); // value role
//! [5]
//! [6]