summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/itemmodel/doc/src/itemmodel.qdoc19
-rw-r--r--examples/itemmodel/main.cpp7
-rw-r--r--examples/qmlbars/doc/src/qmlbars.qdoc6
-rw-r--r--examples/qmlbars/qml/qmlbars/data.qml18
-rw-r--r--examples/qmlbars/qml/qmlbars/main.qml24
-rw-r--r--examples/qmlcustominput/qml/qmlcustominput/data.qml8
-rw-r--r--examples/qmlcustominput/qml/qmlcustominput/main.qml4
-rw-r--r--examples/qmlscatter/qml/qmlscatter/data.qml10
-rw-r--r--examples/qmlscatter/qml/qmlscatter/main.qml4
-rw-r--r--examples/qmlsurface/qml/qmlsurface/data.qml10
-rw-r--r--examples/qmlsurface/qml/qmlsurface/main.qml4
-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
-rw-r--r--src/datavisualizationqml2/datavisualizationqml2_plugin.cpp4
-rw-r--r--src/datavisualizationqml2/datavisualizationqml2_plugin.h7
-rw-r--r--tests/qmlcamera/qml/qmlcamera/Data.qml12
-rw-r--r--tests/qmlcamera/qml/qmlcamera/main.qml12
47 files changed, 1134 insertions, 2070 deletions
diff --git a/examples/itemmodel/doc/src/itemmodel.qdoc b/examples/itemmodel/doc/src/itemmodel.qdoc
index 6c192f6f..14cc2637 100644
--- a/examples/itemmodel/doc/src/itemmodel.qdoc
+++ b/examples/itemmodel/doc/src/itemmodel.qdoc
@@ -27,7 +27,7 @@
\list
\li How to create an application with Q3DBars and widgets
- \li How to use QItemModelBarDataMapping and QItemModelBarDataProxy to set data to the graph
+ \li How to use QItemModelBarDataProxy to set data to the graph
\li How to use a table widget to modify the data in the graph
\endlist
@@ -52,15 +52,13 @@
The table widget is going to be used to display the numerical data being inserted into the
graph, and to modify it (See \l {Adding data to the graph} and \l {Interacting with the data}).
- We need to instantiate QItemModelBarDataMapping and QItemModelBarDataProxy and give them to the
- graph:
+ We need to instantiate QItemModelBarDataProxy and give it to the graph:
\snippet ../examples/itemmodel/main.cpp 2
- Here we tell the mapping object to directly map the model's rows and columns into the proxy's rows and
+ Here we tell the proxy to directly map the model's rows and columns into the proxy's rows and
columns instead of defining row and column roles to map for them. Then we give the model from
- the table widget and the mapping object to the proxy. Finally we set the proxy as the active
- data proxy for the graph.
+ the table widget to the proxy. Finally we set the proxy to a series and add it to the graph.
Next, let's create another class to handle the data addition and other interaction with the
graph. Let's call it GraphDataGenerator (See \l {Setting up the graph} and
@@ -149,11 +147,10 @@
\snippet ../examples/itemmodel/main.cpp 2
- We created QItemModelBarDataMapping and QItemModelBarDataProxy instances, and gave the proxy
- the model of the table widget and the model mapping we just created. Then we set the proxy as
- the active proxy for the graph. The proxy maps the rows and the columns in the model of the table
- widget into rows and columns for itself using the model mapping, and the graph gets the data
- to be displayed from its active proxy.
+ We created QItemModelBarDataProxy instance, and gave the proxy the model of the table widget
+ we just created. The proxy maps the rows and the columns in the model of the table widget into
+ rows and columns for itself directly, as we set the useModelCategories property to true, and
+ the graph gets the data to be displayed via the series that owns the proxy.
\section1 Interacting with the data
diff --git a/examples/itemmodel/main.cpp b/examples/itemmodel/main.cpp
index 789ff0ff..d6263c7c 100644
--- a/examples/itemmodel/main.cpp
+++ b/examples/itemmodel/main.cpp
@@ -266,10 +266,9 @@ int main(int argc, char **argv)
//! [2]
// Since we are dealing with QTableWidget, the model will already have data sorted properly
- // in rows and columns, so create a mapping to utilize this.
- QItemModelBarDataMapping *mapping = new QItemModelBarDataMapping;
- mapping->setUseModelCategories(true);
- QItemModelBarDataProxy *proxy = new QItemModelBarDataProxy(tableWidget->model(), mapping);
+ // in rows and columns, so we simply set useModelCategories property to true to utilize this.
+ QItemModelBarDataProxy *proxy = new QItemModelBarDataProxy(tableWidget->model());
+ proxy->setUseModelCategories(true);
QBar3DSeries *series = new QBar3DSeries(proxy);
graph->addSeries(series);
//! [2]
diff --git a/examples/qmlbars/doc/src/qmlbars.qdoc b/examples/qmlbars/doc/src/qmlbars.qdoc
index 79b6c4fd..bb76d398 100644
--- a/examples/qmlbars/doc/src/qmlbars.qdoc
+++ b/examples/qmlbars/doc/src/qmlbars.qdoc
@@ -63,7 +63,7 @@
In the \c main.qml, we set up the graph and various UI elements. There are three interesting
mapping related code blocks we want to highlight here. The first one shows how to change the
visualized data from expenses to income, and vice versa, by simply changing the value role on the
- BarDataMapping item:
+ ItemModelBarDataProxy item:
\snippet ../examples/qmlbars/qml/qmlbars/main.qml 0
@@ -74,11 +74,11 @@
\snippet ../examples/qmlbars/qml/qmlbars/main.qml 1
- The filtering is done by setting \c autoRowCategories to false on the BarDataMapping item and defining
+ The filtering is done by setting \c autoRowCategories to false on the ItemModelBarDataProxy item and defining
the row categories explicitly. This way, only the items in specified rows are visualized.
The third interesting block shows how to get the row and column index of an item if you know the
- row and column values by using BarDataMapping methods \c rowCategoryIndex() and \c columnCategoryIndex():
+ row and column values by using ItemModelBarDataProxy methods \c rowCategoryIndex() and \c columnCategoryIndex():
\snippet ../examples/qmlbars/qml/qmlbars/main.qml 2
*/
diff --git a/examples/qmlbars/qml/qmlbars/data.qml b/examples/qmlbars/qml/qmlbars/data.qml
index 12ba171c..5a17bcd1 100644
--- a/examples/qmlbars/qml/qmlbars/data.qml
+++ b/examples/qmlbars/qml/qmlbars/data.qml
@@ -21,24 +21,6 @@ import QtDataVisualization 1.0
Item {
property alias model: dataModel
- property alias mapping: valueMapping
- property alias secondaryMapping: secondaryMapping
-
- //! [1]
- BarDataMapping {
- id: valueMapping
- rowRole: "year"
- columnRole: "month"
- valueRole: "income"
- }
- //! [1]
-
- BarDataMapping {
- id: secondaryMapping
- rowRole: "year"
- columnRole: "month"
- valueRole: "expenses"
- }
//! [0]
ListModel {
diff --git a/examples/qmlbars/qml/qmlbars/main.qml b/examples/qmlbars/qml/qmlbars/main.qml
index 753859e5..c7ec4f71 100644
--- a/examples/qmlbars/qml/qmlbars/main.qml
+++ b/examples/qmlbars/qml/qmlbars/main.qml
@@ -94,8 +94,10 @@ Item {
ItemModelBarDataProxy {
id: modelProxy
- activeMapping: graphData.mapping
itemModel: graphData.model
+ rowRole: "year"
+ columnRole: "month"
+ valueRole: "income"
}
onSelectedBarChanged: handleSelectionChange(barSeries, position)
@@ -108,8 +110,10 @@ Item {
ItemModelBarDataProxy {
id: secondaryProxy
- activeMapping: graphData.secondaryMapping
itemModel: graphData.model
+ rowRole: "year"
+ columnRole: "month"
+ valueRole: "expenses"
}
onSelectedBarChanged: handleSelectionChange(secondarySeries, position)
@@ -170,16 +174,16 @@ Item {
onClicked: {
if (testGraph.rowAxis.max !== 6) {
text = "Show 2010 - 2012"
- graphData.mapping.autoRowCategories = true
- graphData.secondaryMapping.autoRowCategories = true
+ modelProxy.autoRowCategories = true
+ secondaryProxy.autoRowCategories = true
} else {
text = "Show all years"
// Explicitly defining row categories, since we do not want to show data for
// all years in the model, just for the selected ones.
- graphData.mapping.autoRowCategories = false
- graphData.secondaryMapping.autoRowCategories = false
- graphData.mapping.rowCategories = ["2010", "2011", "2012"]
- graphData.secondaryMapping.rowCategories = ["2010", "2011", "2012"]
+ modelProxy.autoRowCategories = false
+ secondaryProxy.autoRowCategories = false
+ modelProxy.rowCategories = ["2010", "2011", "2012"]
+ secondaryProxy.rowCategories = ["2010", "2011", "2012"]
}
}
//! [1]
@@ -199,8 +203,8 @@ Item {
//! [2]
onCurrentRowChanged: {
- var rowIndex = modelProxy.activeMapping.rowCategoryIndex(graphData.model.get(currentRow).year)
- var colIndex = modelProxy.activeMapping.columnCategoryIndex(graphData.model.get(currentRow).month)
+ var rowIndex = modelProxy.rowCategoryIndex(graphData.model.get(currentRow).year)
+ var colIndex = modelProxy.columnCategoryIndex(graphData.model.get(currentRow).month)
if (selectedSeries.visible)
mainview.selectedSeries.selectedBar = Qt.point(rowIndex, colIndex)
else if (barSeries.visible)
diff --git a/examples/qmlcustominput/qml/qmlcustominput/data.qml b/examples/qmlcustominput/qml/qmlcustominput/data.qml
index bd81becd..71c544a4 100644
--- a/examples/qmlcustominput/qml/qmlcustominput/data.qml
+++ b/examples/qmlcustominput/qml/qmlcustominput/data.qml
@@ -21,16 +21,8 @@ import QtDataVisualization 1.0
import QtQuick.XmlListModel 2.0
Item {
- property alias mapping: scatterMapping
property alias model: dataModel
- ScatterDataMapping {
- id: scatterMapping
- xPosRole: "xPos"
- yPosRole: "yPos"
- zPosRole: "zPos"
- }
-
ListModel {
id: dataModel
ListElement{ xPos: -10.0; yPos: 5.0; zPos: -5.0 }
diff --git a/examples/qmlcustominput/qml/qmlcustominput/main.qml b/examples/qmlcustominput/qml/qmlcustominput/main.qml
index 83fa0980..2ab39ca8 100644
--- a/examples/qmlcustominput/qml/qmlcustominput/main.qml
+++ b/examples/qmlcustominput/qml/qmlcustominput/main.qml
@@ -51,8 +51,10 @@ Item {
itemLabelFormat: "X:@xLabel Y:@yLabel Z:@zLabel"
ItemModelScatterDataProxy {
- activeMapping: graphData.mapping
itemModel: graphData.model
+ xPosRole: "xPos"
+ yPosRole: "yPos"
+ zPosRole: "zPos"
}
}
}
diff --git a/examples/qmlscatter/qml/qmlscatter/data.qml b/examples/qmlscatter/qml/qmlscatter/data.qml
index 523aceb0..b8b2a77b 100644
--- a/examples/qmlscatter/qml/qmlscatter/data.qml
+++ b/examples/qmlscatter/qml/qmlscatter/data.qml
@@ -21,19 +21,9 @@ import QtDataVisualization 1.0
Item {
//! [3]
- property alias mapping: scatterMapping
property alias model: dataModel
//! [3]
- //! [1]
- ScatterDataMapping {
- id: scatterMapping
- xPosRole: "xPos"
- yPosRole: "yPos"
- zPosRole: "zPos"
- }
- //! [1]
-
//! [0]
ListModel {
id: dataModel
diff --git a/examples/qmlscatter/qml/qmlscatter/main.qml b/examples/qmlscatter/qml/qmlscatter/main.qml
index 8ca73628..92809297 100644
--- a/examples/qmlscatter/qml/qmlscatter/main.qml
+++ b/examples/qmlscatter/qml/qmlscatter/main.qml
@@ -73,8 +73,10 @@ Item {
itemLabelFormat: "X:@xLabel Y:@yLabel Z:@zLabel"
ItemModelScatterDataProxy {
- activeMapping: graphData.mapping
itemModel: graphData.model
+ xPosRole: "xPos"
+ yPosRole: "yPos"
+ zPosRole: "zPos"
}
}
diff --git a/examples/qmlsurface/qml/qmlsurface/data.qml b/examples/qmlsurface/qml/qmlsurface/data.qml
index f9b008df..3ecc899f 100644
--- a/examples/qmlsurface/qml/qmlsurface/data.qml
+++ b/examples/qmlsurface/qml/qmlsurface/data.qml
@@ -20,18 +20,8 @@ import QtQuick 2.1
import QtDataVisualization 1.0
Item {
- property alias mapping: surfaceMapping
property alias model: dataModel
- //! [2]
- SurfaceDataMapping {
- id: surfaceMapping
- rowRole: "longitude"
- columnRole: "latitude"
- valueRole: "height"
- }
- //! [2]
-
//! [1]
ListModel {
id: dataModel
diff --git a/examples/qmlsurface/qml/qmlsurface/main.qml b/examples/qmlsurface/qml/qmlsurface/main.qml
index a78ac796..f83dc9a9 100644
--- a/examples/qmlsurface/qml/qmlsurface/main.qml
+++ b/examples/qmlsurface/qml/qmlsurface/main.qml
@@ -74,8 +74,10 @@ Item {
id: surfaceSeries
ItemModelSurfaceDataProxy {
- activeMapping: surfaceData.mapping
itemModel: surfaceData.model
+ rowRole: "longitude"
+ columnRole: "latitude"
+ valueRole: "height"
}
}
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]
diff --git a/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp b/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp
index e1a74691..1368b480 100644
--- a/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp
+++ b/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp
@@ -52,10 +52,6 @@ void Datavis3Dqml2Plugin::registerTypes(const char *uri)
qmlRegisterUncreatableType<QSurface3DSeries>(uri, 1, 0, "QSurface3DSeries",
QLatin1String("Trying to create uncreatable: QSurface3DSeries, use Surface3DSeries instead."));
- qmlRegisterType<QItemModelBarDataMapping>(uri, 1, 0, "BarDataMapping");
- qmlRegisterType<QItemModelScatterDataMapping>(uri, 1, 0, "ScatterDataMapping");
- qmlRegisterType<QItemModelSurfaceDataMapping>(uri, 1, 0, "SurfaceDataMapping");
-
qmlRegisterType<DeclarativeBars>(uri, 1, 0, "Bars3D");
qmlRegisterType<DeclarativeScatter>(uri, 1, 0, "Scatter3D");
qmlRegisterType<DeclarativeSurface>(uri, 1, 0, "Surface3D");
diff --git a/src/datavisualizationqml2/datavisualizationqml2_plugin.h b/src/datavisualizationqml2/datavisualizationqml2_plugin.h
index 5552e94d..b9cda29c 100644
--- a/src/datavisualizationqml2/datavisualizationqml2_plugin.h
+++ b/src/datavisualizationqml2/datavisualizationqml2_plugin.h
@@ -23,9 +23,6 @@
#include "declarativebars_p.h"
#include "declarativescatter_p.h"
#include "declarativesurface_p.h"
-#include "qitemmodelbardatamapping.h"
-#include "qitemmodelscatterdatamapping.h"
-#include "qitemmodelsurfacedatamapping.h"
#include "qitemmodelbardataproxy.h"
#include "qitemmodelscatterdataproxy.h"
#include "qitemmodelsurfacedataproxy.h"
@@ -51,10 +48,6 @@ QML_DECLARE_TYPE(DeclarativeBars)
QML_DECLARE_TYPE(DeclarativeScatter)
QML_DECLARE_TYPE(DeclarativeSurface)
-QML_DECLARE_TYPE(QItemModelBarDataMapping)
-QML_DECLARE_TYPE(QItemModelScatterDataMapping)
-QML_DECLARE_TYPE(QItemModelSurfaceDataMapping)
-
QML_DECLARE_TYPE(const QAbstractItemModel)
QML_DECLARE_TYPE(QDataVis)
diff --git a/tests/qmlcamera/qml/qmlcamera/Data.qml b/tests/qmlcamera/qml/qmlcamera/Data.qml
index 2072aaed..f7b71c7a 100644
--- a/tests/qmlcamera/qml/qmlcamera/Data.qml
+++ b/tests/qmlcamera/qml/qmlcamera/Data.qml
@@ -20,22 +20,16 @@ import QtQuick 2.1
import QtDataVisualization 1.0
Item {
- property alias mapping: valueMapping
property alias model: dataModel
property alias proxy: modelProxy
property alias series: barSeries
- BarDataMapping {
- id: valueMapping
- rowRole: "year"
- columnRole: "month"
- valueRole: "expenses"
- }
-
ItemModelBarDataProxy {
id: modelProxy
- activeMapping: valueMapping
itemModel: dataModel
+ rowRole: "year"
+ columnRole: "month"
+ valueRole: "expenses"
}
Bar3DSeries {
diff --git a/tests/qmlcamera/qml/qmlcamera/main.qml b/tests/qmlcamera/qml/qmlcamera/main.qml
index fce5cc33..aad60f42 100644
--- a/tests/qmlcamera/qml/qmlcamera/main.qml
+++ b/tests/qmlcamera/qml/qmlcamera/main.qml
@@ -118,12 +118,12 @@ Item {
width: camControlArea.width
text: "Show Income"
onClicked: {
- if (chartData.mapping.valueRole === "expenses") {
- chartData.mapping.valueRole = "income"
+ if (chartData.proxy.valueRole === "expenses") {
+ chartData.proxy.valueRole = "income"
text = "Show Expenses"
testChart.valueAxis = chartAxes.income
} else {
- chartData.mapping.valueRole = "expenses"
+ chartData.proxy.valueRole = "expenses"
text = "Show Income"
testChart.valueAxis = chartAxes.expenses
}
@@ -154,13 +154,13 @@ Item {
onClicked: {
if (testChart.rowAxis.max !== 6) {
text = "Show 2010 - 2012"
- chartData.mapping.autoRowCategories = true
+ chartData.proxy.autoRowCategories = true
} else {
text = "Show all years"
// Explicitly defining row categories, since we do not want to show data for
// all years in the model, just for the selected ones.
- chartData.mapping.autoRowCategories = false
- chartData.mapping.rowCategories = ["2010", "2011", "2012"]
+ chartData.proxy.autoRowCategories = false
+ chartData.proxy.rowCategories = ["2010", "2011", "2012"]
}
}
}