summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/data
diff options
context:
space:
mode:
authorMika Salmela <mika.salmela@digia.com>2013-09-13 14:50:47 +0300
committerMika Salmela <mika.salmela@digia.com>2013-09-13 15:09:53 +0300
commit76c4cfa1693230c569fc34c0fb595de59d73a49d (patch)
tree3ac8e92f5319cc98f6083997d76d66743d530b9a /src/datavisualization/data
parentf0133f606ff43d0a5d28dcc34b118bf5f82db673 (diff)
Axis setRange selects region from data
Task-number: QTRD-2280 Change-Id: I6313ac321f84fbd6d9a06c198caccccd805d336b Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src/datavisualization/data')
-rw-r--r--src/datavisualization/data/qsurfacedataproxy.cpp227
-rw-r--r--src/datavisualization/data/qsurfacedataproxy.h23
-rw-r--r--src/datavisualization/data/qsurfacedataproxy_p.h15
3 files changed, 258 insertions, 7 deletions
diff --git a/src/datavisualization/data/qsurfacedataproxy.cpp b/src/datavisualization/data/qsurfacedataproxy.cpp
index a1c4b534..5d284501 100644
--- a/src/datavisualization/data/qsurfacedataproxy.cpp
+++ b/src/datavisualization/data/qsurfacedataproxy.cpp
@@ -27,8 +27,9 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
* \brief Proxy class for Q3DSurface.
* \since 1.0.0
*
- * DOCUMENTATION GOES HERE
+ * QSurfaceDataProxy takes care of surface related data handling.
*
+ * Make sure that amount of items on QSurfaceDataRow is the same for all rows.
*/
/*!
@@ -88,16 +89,29 @@ const QSurfaceDataArray *QSurfaceDataProxy::array() const
}
/*!
- * \property QSurfaceDataProxy::itemCount
+ * \property QSurfaceDataProxy::rowCount
*
- * \return item count in the array.
+ * \return number of rows in the data.
*/
-int QSurfaceDataProxy::itemCount() const
+int QSurfaceDataProxy::rowCount() const
{
return dptrc()->m_dataArray->size();
}
/*!
+ * \property QSurfaceDataProxy::columnCount
+ *
+ * \return number of items in the columns.
+ */
+int QSurfaceDataProxy::columnCount() const
+{
+ if (dptrc()->m_dataArray->size() > 0)
+ return dptrc()->m_dataArray->at(0)->size();
+ else
+ return 0;
+}
+
+/*!
* \return pointer to the item at \a index. It is guaranteed to be valid only until next call that
* modifies data.
*/
@@ -128,13 +142,104 @@ const QSurfaceDataProxyPrivate *QSurfaceDataProxy::dptrc() const
* Emitted when data array is reset.
*/
+/*!
+ * Sets the value range for rows from \a min to \a max.
+ * When setting the range, the max is adjusted if necessary, to ensure that the range remains valid.
+ */
+void QSurfaceDataProxy::setValueRangeRows(qreal min, qreal max)
+{
+ dptr()->setValueRangeRows(min, max);
+}
+
+/*!
+ * Sets the value range for columns from \a min to \a max.
+ * When setting the range, the max is adjusted if necessary, to ensure that the range remains valid.
+ */
+void QSurfaceDataProxy::setValueRangeColumns(qreal min, qreal max)
+{
+ dptr()->setValueRangeColumns(min, max);
+}
+
+/*!
+ * \property QSurfaceDataProxy::minValueRows
+ *
+ * Defines the minimum value of the range for rows.
+ * When setting this property the max is adjusted if necessary, to ensure that the range remains
+ * valid.
+ */
+void QSurfaceDataProxy::setMinValueRows(qreal min)
+{
+ dptr()->setMinValueRows(min);
+}
+
+qreal QSurfaceDataProxy::minValueRows() const
+{
+ return dptrc()->m_minValueRows;
+}
+
+/*!
+ * \property QSurfaceDataProxy::maxValueRows
+ *
+ * Defines the maximum value of the range for rows.
+ * When setting this property the min is adjusted if necessary, to ensure that the range remains
+ * valid.
+ */
+void QSurfaceDataProxy::setMaxValueRows(qreal max)
+{
+ dptr()->setMaxValueRows(max);
+}
+
+qreal QSurfaceDataProxy::maxValueRows() const
+{
+ return dptrc()->m_maxValueRows;
+}
+
+/*!
+ * \property QSurfaceDataProxy::minValueColumns
+ *
+ * Defines the minimum value of the range for columns.
+ * When setting this property the min is adjusted if necessary, to ensure that the range remains
+ * valid.
+ */
+void QSurfaceDataProxy::setMinValueColumns(qreal min)
+{
+ dptr()->setMinValueColumns(min);
+}
+
+qreal QSurfaceDataProxy::minValueColumns() const
+{
+ return dptrc()->m_minValueColumns;
+}
+
+/*!
+ * \property QSurfaceDataProxy::maxValueColumns
+ *
+ * Defines the maximum value of the range for columns.
+ * When setting this property the min is adjusted if necessary, to ensure that the range remains
+ * valid.
+ */
+void QSurfaceDataProxy::setMaxValueColumns(qreal max)
+{
+ dptr()->setMaxValueColumns(max);
+}
+
+qreal QSurfaceDataProxy::maxValueColumns() const
+{
+ return dptrc()->m_maxValueColumns;
+}
+
+
//
// QSurfaceDataProxyPrivate
//
QSurfaceDataProxyPrivate::QSurfaceDataProxyPrivate(QSurfaceDataProxy *q)
: QAbstractDataProxyPrivate(q, QAbstractDataProxy::DataTypeSurface),
- m_dataArray(new QSurfaceDataArray)
+ m_dataArray(new QSurfaceDataArray),
+ m_minValueRows(0.0),
+ m_maxValueRows(0.0),
+ m_minValueColumns(0.0),
+ m_maxValueColumns(0.0)
{
m_itemLabelFormat = QStringLiteral("(@yLabel)");
}
@@ -161,4 +266,116 @@ bool QSurfaceDataProxyPrivate::resetArray(QSurfaceDataArray *newArray)
return true;
}
+void QSurfaceDataProxyPrivate::setValueRangeRows(qreal min, qreal max)
+{
+ bool changed = false;
+ if (m_minValueRows != min) {
+ m_minValueRows = min;
+ changed = true;
+ }
+ if (m_maxValueRows != max || min >= max) {
+ if (min >= max) {
+ m_maxValueRows = min + 1.0;
+ qWarning() << "Warning: Tried to set invalid range for value range."
+ " Range automatically adjusted to a valid one:"
+ << min << "-" << max << "-->" << m_minValueRows << "-" << m_maxValueRows;
+ } else {
+ m_maxValueRows = max;
+ }
+ changed = true;
+ }
+
+ if (changed)
+ emit qptr()->valueRangeRowsChanged(min, max);
+}
+
+void QSurfaceDataProxyPrivate::setValueRangeColumns(qreal min, qreal max)
+{
+ bool changed = false;
+ if (m_minValueColumns != min) {
+ m_minValueColumns = min;
+ changed = true;
+ }
+ if (m_maxValueColumns != max || min >= max) {
+ if (min >= max) {
+ m_maxValueColumns = min + 1.0;
+ qWarning() << "Warning: Tried to set invalid range for value range."
+ " Range automatically adjusted to a valid one:"
+ << min << "-" << max << "-->" << m_minValueColumns << "-" << m_maxValueColumns;
+ } else {
+ m_maxValueColumns = max;
+ }
+ changed = true;
+ }
+
+ if (changed)
+ emit qptr()->valueRangeColumnsChanged(min, max);
+}
+
+void QSurfaceDataProxyPrivate::setMinValueRows(qreal min)
+{
+ if (min != m_minValueRows) {
+ if (min >= m_maxValueRows) {
+ qreal oldMax = m_maxValueRows;
+ m_maxValueRows = min + 1.0;
+ qWarning() << "Warning: Tried to set minimum to equal or larger than maximum for"
+ " value range. Maximum automatically adjusted to a valid one:"
+ << oldMax << "-->" << m_maxValueRows;
+ }
+ m_minValueRows = min;
+ emit qptr()->valueRangeRowsChanged(m_minValueRows, m_maxValueRows);
+ }
+}
+
+void QSurfaceDataProxyPrivate::setMaxValueRows(qreal max)
+{
+ if (m_maxValueRows != max) {
+ if (max <= m_minValueRows) {
+ qreal oldMin = m_minValueRows;
+ m_minValueRows = max - 1.0;
+ qWarning() << "Warning: Tried to set maximum to equal or smaller than minimum for"
+ " value range. Minimum automatically adjusted to a valid one:"
+ << oldMin << "-->" << m_minValueRows;
+ }
+ m_maxValueRows = max;
+ emit qptr()->valueRangeRowsChanged(m_minValueRows, m_maxValueRows);
+ }
+}
+
+void QSurfaceDataProxyPrivate::setMinValueColumns(qreal min)
+{
+ if (min != m_minValueColumns) {
+ if (min >= m_maxValueColumns) {
+ qreal oldMax = m_maxValueColumns;
+ m_maxValueColumns = min + 1.0;
+ qWarning() << "Warning: Tried to set minimum to equal or larger than maximum for"
+ " value range. Maximum automatically adjusted to a valid one:"
+ << oldMax << "-->" << m_maxValueColumns;
+ }
+ m_minValueColumns = min;
+ emit qptr()->valueRangeColumnsChanged(m_minValueColumns, m_maxValueRows);
+ }
+}
+
+void QSurfaceDataProxyPrivate::setMaxValueColumns(qreal max)
+{
+ if (m_maxValueColumns != max) {
+ if (max <= m_minValueColumns) {
+ qreal oldMin = m_minValueColumns;
+ m_minValueColumns = max - 1.0;
+ qWarning() << "Warning: Tried to set maximum to equal or smaller than minimum for"
+ " value range. Minimum automatically adjusted to a valid one:"
+ << oldMin << "-->" << m_minValueColumns;
+ }
+ m_maxValueColumns = max;
+ emit qptr()->valueRangeColumnsChanged(m_minValueColumns, m_maxValueColumns);
+ }
+}
+
+QSurfaceDataProxy *QSurfaceDataProxyPrivate::qptr()
+{
+ return static_cast<QSurfaceDataProxy *>(q_ptr);
+}
+
+
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qsurfacedataproxy.h b/src/datavisualization/data/qsurfacedataproxy.h
index 7f104c43..488855ca 100644
--- a/src/datavisualization/data/qsurfacedataproxy.h
+++ b/src/datavisualization/data/qsurfacedataproxy.h
@@ -34,20 +34,39 @@ class QT_DATAVISUALIZATION_EXPORT QSurfaceDataProxy : public QAbstractDataProxy
{
Q_OBJECT
- Q_PROPERTY(int itemCount READ itemCount)
+ Q_PROPERTY(int rowCount READ rowCount)
+ Q_PROPERTY(int columnCount READ columnCount)
+ Q_PROPERTY(qreal minValueRows READ minValueRows WRITE setMinValueRows NOTIFY valueRangeRowsChanged)
+ Q_PROPERTY(qreal maxValueRows READ maxValueRows WRITE setMaxValueRows NOTIFY valueRangeRowsChanged)
+ Q_PROPERTY(qreal minValueColumns READ minValueColumns WRITE setMinValueColumns NOTIFY valueRangeColumnsChanged)
+ Q_PROPERTY(qreal maxValueColumns READ maxValueColumns WRITE setMaxValueColumns NOTIFY valueRangeColumnsChanged)
public:
explicit QSurfaceDataProxy(QObject *parent = 0);
virtual ~QSurfaceDataProxy();
- int itemCount() const;
+ int rowCount() const;
+ int columnCount() const;
const QSurfaceDataArray *array() const;
const QSurfaceDataItem *itemAt(int index) const;
+ void setValueRangeRows(qreal min, qreal max);
+ void setValueRangeColumns(qreal min, qreal max);
+ void setMinValueRows(qreal min);
+ qreal minValueRows() const;
+ void setMaxValueRows(qreal max);
+ qreal maxValueRows() const;
+ void setMinValueColumns(qreal min);
+ qreal minValueColumns() const;
+ void setMaxValueColumns(qreal max);
+ qreal maxValueColumns() const;
+
void resetArray(QSurfaceDataArray *newArray);
signals:
void arrayReset();
+ void valueRangeRowsChanged(int min, int max);
+ void valueRangeColumnsChanged(int min, int max);
protected:
explicit QSurfaceDataProxy(QSurfaceDataProxyPrivate *d, QObject *parent = 0);
diff --git a/src/datavisualization/data/qsurfacedataproxy_p.h b/src/datavisualization/data/qsurfacedataproxy_p.h
index 37663a87..1893d381 100644
--- a/src/datavisualization/data/qsurfacedataproxy_p.h
+++ b/src/datavisualization/data/qsurfacedataproxy_p.h
@@ -45,8 +45,23 @@ public:
bool resetArray(QSurfaceDataArray *newArray);
+ void setValueRangeRows(qreal min, qreal max);
+ void setValueRangeColumns(qreal min, qreal max);
+ void setMinValueRows(qreal min);
+ void setMaxValueRows(qreal max);
+ void setMinValueColumns(qreal min);
+ void setMaxValueColumns(qreal max);
+
+ qreal rowValue(int segment, int segmentCount);
+ qreal columnValue(int segment, int segmentCount);
+
private:
+ QSurfaceDataProxy *qptr();
QSurfaceDataArray *m_dataArray;
+ qreal m_minValueRows;
+ qreal m_maxValueRows;
+ qreal m_minValueColumns;
+ qreal m_maxValueColumns;
friend class QSurfaceDataProxy;
};