summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-09-17 08:30:34 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-09-18 08:33:52 +0300
commit4daf244e9745a28b917b0976e39a60d73776c4aa (patch)
tree0b10abd2cea115f5f05b44e753e75cbde9badfd0 /src
parent43435c1b51e81c3ecdfec771950d861df90ebef3 (diff)
Bar graph data window controlled by category axes ranges
Task-number: QTRD-2183 Task-number: QTRD-2254 Change-Id: I09808c3980a4fa60b7584839e834ee3a734b3e9a Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/datavisualization/axis/q3dabstractaxis.cpp195
-rw-r--r--src/datavisualization/axis/q3dabstractaxis.h13
-rw-r--r--src/datavisualization/axis/q3dabstractaxis_p.h9
-rw-r--r--src/datavisualization/axis/q3dcategoryaxis.cpp2
-rw-r--r--src/datavisualization/axis/q3dcategoryaxis.h1
-rw-r--r--src/datavisualization/axis/q3dvalueaxis.cpp151
-rw-r--r--src/datavisualization/axis/q3dvalueaxis.h12
-rw-r--r--src/datavisualization/axis/q3dvalueaxis_p.h9
-rw-r--r--src/datavisualization/data/qbardataproxy.cpp3
-rw-r--r--src/datavisualization/data/qbardataproxy_p.h2
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp36
-rw-r--r--src/datavisualization/engine/bars3dcontroller.cpp138
-rw-r--r--src/datavisualization/engine/bars3dcontroller_p.h16
-rw-r--r--src/datavisualization/engine/bars3drenderer.cpp99
-rw-r--r--src/datavisualization/engine/bars3drenderer_p.h1
-rw-r--r--src/datavisualization/engine/q3dbars.cpp22
-rw-r--r--src/datavisualization/engine/q3dbars.h4
-rw-r--r--src/datavisualization/input/q3dinputhandler.cpp11
-rw-r--r--src/datavisualization/input/q3dinputhandler.h11
-rw-r--r--src/datavisualizationqml2/declarativebars.cpp25
-rw-r--r--src/datavisualizationqml2/declarativebars_p.h11
21 files changed, 398 insertions, 373 deletions
diff --git a/src/datavisualization/axis/q3dabstractaxis.cpp b/src/datavisualization/axis/q3dabstractaxis.cpp
index ce3b582f..8e1e6a35 100644
--- a/src/datavisualization/axis/q3dabstractaxis.cpp
+++ b/src/datavisualization/axis/q3dabstractaxis.cpp
@@ -60,6 +60,29 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
*/
/*!
+ * \qmlproperty real AbstractAxis3D::min
+ *
+ * Defines the minimum value on the axis.
+ * When setting this property the max is adjusted if necessary, to ensure that the range remains
+ * valid.
+ */
+
+/*!
+ * \qmlproperty real AbstractAxis3D::max
+ *
+ * Defines the maximum value on the axis.
+ * When setting this property the min is adjusted if necessary, to ensure that the range remains
+ * valid.
+ */
+
+/*!
+ * \qmlproperty bool AbstractAxis3D::autoAdjustRange
+ *
+ * If set, the axis will automatically adjust the range so that all data fits in it.
+ */
+
+
+/*!
* \enum Q3DAbstractAxis::AxisOrientation
*
* The orientation of the axis object.
@@ -145,6 +168,75 @@ void Q3DAbstractAxis::setTitle(QString title)
}
}
+/*!
+ * Sets value range of the axis from \a min to \a max.
+ * When setting the range, the max is adjusted if necessary, to ensure that the range remains valid.
+ * \note For Q3DCategoryAxis this specifies the index range of rows or columns to show.
+ */
+void Q3DAbstractAxis::setRange(qreal min, qreal max)
+{
+ d_ptr->setRange(min, max);
+ setAutoAdjustRange(false);
+}
+
+/*!
+ * \property Q3DAbstractAxis::min
+ *
+ * Defines the minimum value on the axis.
+ * When setting this property the max is adjusted if necessary, to ensure that the range remains
+ * valid.
+ * \note For Q3DCategoryAxis this specifies the index of the first row or column to show.
+ */
+void Q3DAbstractAxis::setMin(qreal min)
+{
+ d_ptr->setMin(min);
+ setAutoAdjustRange(false);
+}
+
+/*!
+ * \property Q3DAbstractAxis::max
+ *
+ * Defines the maximum value on the axis.
+ * When setting this property the min is adjusted if necessary, to ensure that the range remains
+ * valid.
+ * \note For Q3DCategoryAxis this specifies the index of the last row or column to show.
+ */
+void Q3DAbstractAxis::setMax(qreal max)
+{
+ d_ptr->setMax(max);
+ setAutoAdjustRange(false);
+}
+
+qreal Q3DAbstractAxis::min() const
+{
+ return d_ptr->m_min;
+}
+
+qreal Q3DAbstractAxis::max() const
+{
+ return d_ptr->m_max;
+}
+
+/*!
+ * \property Q3DAbstractAxis::autoAdjustRange
+ *
+ * If set, the axis will automatically adjust the range so that all data fits in it.
+ *
+ * \sa setRange(), setMin(), setMax()
+ */
+void Q3DAbstractAxis::setAutoAdjustRange(bool autoAdjust)
+{
+ if (d_ptr->m_autoAdjust != autoAdjust) {
+ d_ptr->m_autoAdjust = autoAdjust;
+ emit autoAdjustRangeChanged(autoAdjust);
+ }
+}
+
+bool Q3DAbstractAxis::isAutoAdjustRange() const
+{
+ return d_ptr->m_autoAdjust;
+}
+
// Q3DAbstractAxisPrivate
Q3DAbstractAxisPrivate::Q3DAbstractAxisPrivate(Q3DAbstractAxis *q, Q3DAbstractAxis::AxisType type)
@@ -152,7 +244,12 @@ Q3DAbstractAxisPrivate::Q3DAbstractAxisPrivate(Q3DAbstractAxis *q, Q3DAbstractAx
q_ptr(q),
m_orientation(Q3DAbstractAxis::AxisOrientationNone),
m_type(type),
- m_isDefaultAxis(false)
+ m_isDefaultAxis(false),
+ m_min(0.0),
+ m_max(10.0),
+ m_autoAdjust(true),
+ m_onlyPositiveValues(false),
+ m_allowMinMaxSame(false)
{
}
@@ -173,4 +270,100 @@ void Q3DAbstractAxisPrivate::updateLabels()
// Default implementation does nothing
}
+void Q3DAbstractAxisPrivate::setRange(qreal min, qreal max)
+{
+ bool adjusted = false;
+ if (m_onlyPositiveValues) {
+ if (min < 0.0) {
+ min = 0.0;
+ adjusted = true;
+ }
+ if (max < 0.0) {
+ max = 0.0;
+ adjusted = true;
+ }
+ }
+ // If min >= max, we adjust ranges so that
+ // m_max becomes (min + 1.0)
+ // as axes need some kind of valid range.
+ bool dirty = false;
+ if (m_min != min) {
+ m_min = min;
+ dirty = true;
+ }
+ if (m_max != max || min > max || (!m_allowMinMaxSame && min == max)) {
+ if (min > max || (!m_allowMinMaxSame && min == max)) {
+ m_max = min + 1.0;
+ adjusted = true;
+ } else {
+ m_max = max;
+ }
+ dirty = true;
+ }
+
+ if (dirty) {
+ if (adjusted) {
+ qWarning() << "Warning: Tried to set invalid range for axis."
+ " Range automatically adjusted to a valid one:"
+ << min << "-" << max << "-->" << m_min << "-" << m_max;
+ }
+ emit q_ptr->rangeChanged(m_min, m_max);
+ }
+}
+
+void Q3DAbstractAxisPrivate::setMin(qreal min)
+{
+ if (m_onlyPositiveValues) {
+ if (min < 0.0) {
+ min = 0.0;
+ qWarning() << "Warning: Tried to set negative minimum for an axis that only supports"
+ " positive values:" << min;
+ }
+ }
+
+ if (m_min != min) {
+ if (min > m_max || (!m_allowMinMaxSame && min == m_max)) {
+ qreal oldMax = m_max;
+ m_max = min + 1.0;
+ qWarning() << "Warning: Tried to set minimum to equal or larger than maximum for"
+ " value axis. Maximum automatically adjusted to a valid one:"
+ << oldMax << "-->" << m_max;
+ }
+ m_min = min;
+
+ emit q_ptr->rangeChanged(m_min, m_max);
+ }
+}
+
+void Q3DAbstractAxisPrivate::setMax(qreal max)
+{
+ if (m_onlyPositiveValues) {
+ if (max < 0.0) {
+ max = 0.0;
+ qWarning() << "Warning: Tried to set negative maximum for an axis that only supports"
+ " positive values:" << max;
+ }
+ }
+
+ if (m_max != max) {
+ if (m_min > max || (!m_allowMinMaxSame && m_min == max)) {
+ qreal oldMin = m_min;
+ m_min = max - 1.0;
+ if (m_onlyPositiveValues && m_min < 0.0) {
+ m_min = 0.0;
+ if (!m_allowMinMaxSame && max == 0.0) {
+ m_min = oldMin;
+ qWarning() << "Unable to set maximum value to zero.";
+ return;
+ }
+ }
+ qWarning() << "Warning: Tried to set maximum to equal or smaller than minimum for"
+ " value axis. Minimum automatically adjusted to a valid one:"
+ << oldMin << "-->" << m_min;
+ }
+ m_max = max;
+ emit q_ptr->rangeChanged(m_min, m_max);
+ }
+}
+
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/axis/q3dabstractaxis.h b/src/datavisualization/axis/q3dabstractaxis.h
index 6e89723a..31b7ab55 100644
--- a/src/datavisualization/axis/q3dabstractaxis.h
+++ b/src/datavisualization/axis/q3dabstractaxis.h
@@ -38,6 +38,9 @@ class QT_DATAVISUALIZATION_EXPORT Q3DAbstractAxis : public QObject
Q_PROPERTY(QStringList labels READ labels NOTIFY labelsChanged)
Q_PROPERTY(AxisOrientation orientation READ orientation)
Q_PROPERTY(AxisType type READ type)
+ Q_PROPERTY(qreal min READ min WRITE setMin NOTIFY rangeChanged)
+ Q_PROPERTY(qreal max READ max WRITE setMax NOTIFY rangeChanged)
+ Q_PROPERTY(bool autoAdjustRange READ isAutoAdjustRange WRITE setAutoAdjustRange NOTIFY autoAdjustRangeChanged)
public:
enum AxisOrientation {
@@ -66,12 +69,22 @@ public:
AxisOrientation orientation() const;
AxisType type() const;
+ qreal min() const;
+ qreal max() const;
+ bool isAutoAdjustRange() const;
+
public slots:
void setTitle(QString title);
+ void setRange(qreal min, qreal max);
+ void setMin(qreal min);
+ void setMax(qreal max);
+ void setAutoAdjustRange(bool autoAdjust);
signals:
void titleChanged(QString newTitle);
void labelsChanged();
+ void rangeChanged(qreal min, qreal max);
+ void autoAdjustRangeChanged(bool autoAdjust);
protected:
QScopedPointer<Q3DAbstractAxisPrivate> d_ptr;
diff --git a/src/datavisualization/axis/q3dabstractaxis_p.h b/src/datavisualization/axis/q3dabstractaxis_p.h
index f961e82e..902f65be 100644
--- a/src/datavisualization/axis/q3dabstractaxis_p.h
+++ b/src/datavisualization/axis/q3dabstractaxis_p.h
@@ -47,6 +47,10 @@ public:
inline bool isDefaultAxis() { return m_isDefaultAxis; }
inline void setDefaultAxis(bool isDefault) { m_isDefaultAxis = isDefault; }
+ virtual void setRange(qreal min, qreal max);
+ virtual void setMin(qreal min);
+ virtual void setMax (qreal max);
+
protected:
virtual void updateLabels();
@@ -57,6 +61,11 @@ protected:
Q3DAbstractAxis::AxisOrientation m_orientation;
Q3DAbstractAxis::AxisType m_type;
bool m_isDefaultAxis;
+ qreal m_min;
+ qreal m_max;
+ bool m_autoAdjust;
+ bool m_onlyPositiveValues;
+ bool m_allowMinMaxSame;
friend class Q3DAbstractAxis;
friend class Q3DValueAxis;
diff --git a/src/datavisualization/axis/q3dcategoryaxis.cpp b/src/datavisualization/axis/q3dcategoryaxis.cpp
index 57c545c8..3f032534 100644
--- a/src/datavisualization/axis/q3dcategoryaxis.cpp
+++ b/src/datavisualization/axis/q3dcategoryaxis.cpp
@@ -119,6 +119,8 @@ Q3DCategoryAxisPrivate::Q3DCategoryAxisPrivate(Q3DCategoryAxis *q)
: Q3DAbstractAxisPrivate(q, Q3DAbstractAxis::AxisTypeCategory),
m_labelsExplicitlySet(false)
{
+ m_onlyPositiveValues = true;
+ m_allowMinMaxSame = true;
}
Q3DCategoryAxisPrivate::~Q3DCategoryAxisPrivate()
diff --git a/src/datavisualization/axis/q3dcategoryaxis.h b/src/datavisualization/axis/q3dcategoryaxis.h
index bf5e66fd..7376760b 100644
--- a/src/datavisualization/axis/q3dcategoryaxis.h
+++ b/src/datavisualization/axis/q3dcategoryaxis.h
@@ -36,6 +36,7 @@ public:
QStringList categoryLabels() const;
+
public slots:
void setCategoryLabels(const QStringList &labels);
diff --git a/src/datavisualization/axis/q3dvalueaxis.cpp b/src/datavisualization/axis/q3dvalueaxis.cpp
index 86b16fd9..a32a96e7 100644
--- a/src/datavisualization/axis/q3dvalueaxis.cpp
+++ b/src/datavisualization/axis/q3dvalueaxis.cpp
@@ -45,21 +45,6 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
* counts to divide the range into.
*/
-/*!
- * \qmlproperty real ValueAxis3D::min
- *
- * Defines the minimum value on the axis.
- * When setting this property the max is adjusted if necessary, to ensure that the range remains
- * valid.
- */
-
-/*!
- * \qmlproperty real ValueAxis3D::max
- *
- * Defines the maximum value on the axis.
- * When setting this property the min is adjusted if necessary, to ensure that the range remains
- * valid.
- */
/*!
* \qmlproperty int ValueAxis3D::segmentCount
@@ -78,13 +63,6 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
*/
/*!
- * \qmlproperty bool ValueAxis3D::autoAdjustRange
- *
- * Determines if the axis is to automatically calculate the range instead of setting range or
- * adjusting min or max property.
- */
-
-/*!
* \qmlproperty string ValueAxis3D::labelFormat
*
* Defines the label format to be used for the labels on this axis. Supported specifiers are:
@@ -106,51 +84,6 @@ Q3DValueAxis::~Q3DValueAxis()
{
}
-/*!
- * Sets value range of the axis from \a min to \a max.
- * When setting the range, the max is adjusted if necessary, to ensure that the range remains valid.
- */
-void Q3DValueAxis::setRange(qreal min, qreal max)
-{
- dptr()->setRange(min, max);
- setAutoAdjustRange(false);
-}
-
-/*!
- * \property Q3DValueAxis::min
- *
- * Defines the minimum value on the axis.
- * When setting this property the max is adjusted if necessary, to ensure that the range remains
- * valid.
- */
-void Q3DValueAxis::setMin(qreal min)
-{
- dptr()->setMin(min);
- setAutoAdjustRange(false);
-}
-
-/*!
- * \property Q3DValueAxis::max
- *
- * Defines the maximum value on the axis.
- * When setting this property the min is adjusted if necessary, to ensure that the range remains
- * valid.
- */
-void Q3DValueAxis::setMax(qreal max)
-{
- dptr()->setMax(max);
- setAutoAdjustRange(false);
-}
-
-qreal Q3DValueAxis::min() const
-{
- return dptrc()->m_min;
-}
-
-qreal Q3DValueAxis::max() const
-{
- return dptrc()->m_max;
-}
/*!
* \property Q3DValueAxis::segmentCount
@@ -208,27 +141,6 @@ int Q3DValueAxis::subSegmentCount() const
}
/*!
- * \property Q3DValueAxis::autoAdjustRange
- *
- * Tells the axis to automatically calculate the range instead of setting range or adjusting min or
- * max property.
- *
- * \sa setRange(), setMin(), setMax()
- */
-void Q3DValueAxis::setAutoAdjustRange(bool autoAdjust)
-{
- if (dptr()->m_autoAdjust != autoAdjust) {
- dptr()->m_autoAdjust = autoAdjust;
- emit autoAdjustRangeChanged(autoAdjust);
- }
-}
-
-bool Q3DValueAxis::isAutoAdjustRange() const
-{
- return dptrc()->m_autoAdjust;
-}
-
-/*!
* \property Q3DValueAxis::labelFormat
*
* Defines the label format to be used for the labels on this axis. Supported specifiers are:
@@ -270,11 +182,8 @@ const Q3DValueAxisPrivate *Q3DValueAxis::dptrc() const
Q3DValueAxisPrivate::Q3DValueAxisPrivate(Q3DValueAxis *q)
: Q3DAbstractAxisPrivate(q, Q3DAbstractAxis::AxisTypeValue),
- m_min(0.0),
- m_max(10.0),
m_segmentCount(5),
m_subSegmentCount(1),
- m_autoAdjust(true),
m_labelFormat(Utils::defaultLabelFormat()),
m_labelsDirty(true)
{
@@ -286,62 +195,32 @@ Q3DValueAxisPrivate::~Q3DValueAxisPrivate()
void Q3DValueAxisPrivate::setRange(qreal min, qreal max)
{
- // If min >= max, we adjust ranges so that
- // m_max becomes (min + 1.0)
- // as axes need some kind of valid range.
- // TODO: Make "reverse" axes work (i.e. min > max)
- bool dirty = false;
- if (m_min != min) {
- m_min = min;
- dirty = true;
- }
- if (m_max != max || min >= max) {
- if (min >= max) {
- m_max = min + 1.0;
- qWarning() << "Warning: Tried to set invalid range for value axis."
- " Range automatically adjusted to a valid one:"
- << min << "-" << max << "-->" << m_min << "-" << m_max;
- } else {
- m_max = max;
- }
- dirty = true;
- }
- if (dirty) {
+ bool dirty = (min != m_min || max != m_max);
+
+ Q3DAbstractAxisPrivate::setRange(min, max);
+
+ if (dirty)
emitLabelsChanged();
- emit qptr()->rangeChanged(min, max);
- }
}
void Q3DValueAxisPrivate::setMin(qreal min)
{
- if (m_min != min) {
- if (min >= m_max) {
- qreal oldMax = m_max;
- m_max = min + 1.0;
- qWarning() << "Warning: Tried to set minimum to equal or larger than maximum for"
- " value axis. Maximum automatically adjusted to a valid one:"
- << oldMax << "-->" << m_max;
- }
- m_min = min;
+ bool dirty = (min != m_min);
+
+ Q3DAbstractAxisPrivate::setMin(min);
+
+ if (dirty)
emitLabelsChanged();
- emit qptr()->rangeChanged(m_min, m_max);
- }
}
void Q3DValueAxisPrivate::setMax(qreal max)
{
- if (m_max != max) {
- if (max <= m_min) {
- qreal oldMin = m_min;
- m_min = max - 1.0;
- qWarning() << "Warning: Tried to set maximum to equal or smaller than minimum for"
- " value axis. Minimum automatically adjusted to a valid one:"
- << oldMin << "-->" << m_min;
- }
- m_max = max;
+ bool dirty = (max != m_max);
+
+ Q3DAbstractAxisPrivate::setMax(max);
+
+ if (dirty)
emitLabelsChanged();
- emit qptr()->rangeChanged(m_min, m_max);
- }
}
void Q3DValueAxisPrivate::emitLabelsChanged()
diff --git a/src/datavisualization/axis/q3dvalueaxis.h b/src/datavisualization/axis/q3dvalueaxis.h
index eb00f27f..8ff7a531 100644
--- a/src/datavisualization/axis/q3dvalueaxis.h
+++ b/src/datavisualization/axis/q3dvalueaxis.h
@@ -28,38 +28,26 @@ class Q3DValueAxisPrivate;
class QT_DATAVISUALIZATION_EXPORT Q3DValueAxis : public Q3DAbstractAxis
{
Q_OBJECT
- Q_PROPERTY(qreal min READ min WRITE setMin NOTIFY rangeChanged)
- Q_PROPERTY(qreal max READ max WRITE setMax NOTIFY rangeChanged)
Q_PROPERTY(int segmentCount READ segmentCount WRITE setSegmentCount NOTIFY segmentCountChanged)
Q_PROPERTY(int subSegmentCount READ subSegmentCount WRITE setSubSegmentCount NOTIFY subSegmentCountChanged)
- Q_PROPERTY(bool autoAdjustRange READ isAutoAdjustRange WRITE setAutoAdjustRange NOTIFY autoAdjustRangeChanged)
Q_PROPERTY(QString labelFormat READ labelFormat WRITE setLabelFormat NOTIFY labelFormatChanged)
public:
explicit Q3DValueAxis(QObject *parent = 0);
virtual ~Q3DValueAxis();
- qreal min() const;
- qreal max() const;
int segmentCount() const;
int subSegmentCount() const;
- bool isAutoAdjustRange() const;
QString labelFormat() const;
public slots:
- void setRange(qreal min, qreal max);
- void setMin(qreal min);
- void setMax(qreal max);
void setSegmentCount(int count);
void setSubSegmentCount(int count);
- void setAutoAdjustRange(bool autoAdjust);
void setLabelFormat(const QString &format);
signals:
- void rangeChanged(qreal min, qreal max);
void segmentCountChanged(int count);
void subSegmentCountChanged(int count);
- void autoAdjustRangeChanged(bool autoAdjust);
void labelFormatChanged(QString format);
protected:
diff --git a/src/datavisualization/axis/q3dvalueaxis_p.h b/src/datavisualization/axis/q3dvalueaxis_p.h
index 8fcf50da..5d0084e6 100644
--- a/src/datavisualization/axis/q3dvalueaxis_p.h
+++ b/src/datavisualization/axis/q3dvalueaxis_p.h
@@ -42,19 +42,16 @@ public:
Q3DValueAxisPrivate(Q3DValueAxis *q);
virtual ~Q3DValueAxisPrivate();
- void setRange(qreal min, qreal max);
- void setMin(qreal min);
- void setMax (qreal max);
+ virtual void setRange(qreal min, qreal max);
+ virtual void setMin(qreal min);
+ virtual void setMax (qreal max);
protected:
void emitLabelsChanged();
virtual void updateLabels();
- qreal m_min;
- qreal m_max;
int m_segmentCount;
int m_subSegmentCount;
- bool m_autoAdjust;
QString m_labelFormat;
bool m_labelsDirty;
diff --git a/src/datavisualization/data/qbardataproxy.cpp b/src/datavisualization/data/qbardataproxy.cpp
index 79821aca..badbfb7b 100644
--- a/src/datavisualization/data/qbardataproxy.cpp
+++ b/src/datavisualization/data/qbardataproxy.cpp
@@ -654,7 +654,8 @@ void QBarDataProxyPrivate::fixRowLabels(int startIndex, int count, const QString
emit qptr()->rowLabelsChanged();
}
-QPair<GLfloat, GLfloat> QBarDataProxyPrivate::limitValues(int startRow, int endRow, int startColumn, int endColumn)
+QPair<GLfloat, GLfloat> QBarDataProxyPrivate::limitValues(int startRow, int endRow,
+ int startColumn, int endColumn) const
{
QPair<GLfloat, GLfloat> limits = qMakePair(0.0f, 0.0f);
endRow = qMin(endRow, m_dataArray->size() - 1);
diff --git a/src/datavisualization/data/qbardataproxy_p.h b/src/datavisualization/data/qbardataproxy_p.h
index 6aa9d2cb..a0f95d35 100644
--- a/src/datavisualization/data/qbardataproxy_p.h
+++ b/src/datavisualization/data/qbardataproxy_p.h
@@ -54,7 +54,7 @@ public:
void removeRows(int rowIndex, int removeCount, bool removeLabels);
QPair<GLfloat, GLfloat> limitValues(int startRow, int startColumn, int rowCount,
- int columnCount);
+ int columnCount) const;
private:
QBarDataProxy *qptr();
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index bcccf833..e9ba1739 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -194,30 +194,21 @@ void Abstract3DController::synchDataToRenderer()
}
if (m_changeTracker.axisXRangeChanged) {
+ m_renderer->updateAxisRange(Q3DAbstractAxis::AxisOrientationX, m_axisX->min(),
+ m_axisX->max());
m_changeTracker.axisXRangeChanged = false;
- if (m_axisX->type() & Q3DAbstractAxis::AxisTypeValue) {
- Q3DValueAxis *valueAxisX = static_cast<Q3DValueAxis *>(m_axisX);
- m_renderer->updateAxisRange(Q3DAbstractAxis::AxisOrientationX,
- valueAxisX->min(), valueAxisX->max());
- }
}
if (m_changeTracker.axisYRangeChanged) {
+ m_renderer->updateAxisRange(Q3DAbstractAxis::AxisOrientationY, m_axisY->min(),
+ m_axisY->max());
m_changeTracker.axisYRangeChanged = false;
- if (m_axisY->type() & Q3DAbstractAxis::AxisTypeValue) {
- Q3DValueAxis *valueAxisY = static_cast<Q3DValueAxis *>(m_axisY);
- m_renderer->updateAxisRange(Q3DAbstractAxis::AxisOrientationY,
- valueAxisY->min(), valueAxisY->max());
- }
}
if (m_changeTracker.axisZRangeChanged) {
+ m_renderer->updateAxisRange(Q3DAbstractAxis::AxisOrientationZ, m_axisZ->min(),
+ m_axisZ->max());
m_changeTracker.axisZRangeChanged = false;
- if (m_axisZ->type() & Q3DAbstractAxis::AxisTypeValue) {
- Q3DValueAxis *valueAxisZ = static_cast<Q3DValueAxis *>(m_axisZ);
- m_renderer->updateAxisRange(Q3DAbstractAxis::AxisOrientationZ,
- valueAxisZ->min(), valueAxisZ->max());
- }
}
if (m_changeTracker.axisXSegmentCountChanged) {
@@ -989,6 +980,10 @@ void Abstract3DController::setAxisHelper(Q3DAbstractAxis::AxisOrientation orient
this, &Abstract3DController::handleAxisTitleChanged);
QObject::connect(axis, &Q3DAbstractAxis::labelsChanged,
this, &Abstract3DController::handleAxisLabelsChanged);
+ QObject::connect(axis, &Q3DAbstractAxis::rangeChanged,
+ this, &Abstract3DController::handleAxisRangeChanged);
+ QObject::connect(axis, &Q3DAbstractAxis::autoAdjustRangeChanged,
+ this, &Abstract3DController::handleAxisAutoAdjustRangeChanged);
if (orientation == Q3DAbstractAxis::AxisOrientationX)
m_changeTracker.axisXTypeChanged = true;
@@ -999,25 +994,21 @@ void Abstract3DController::setAxisHelper(Q3DAbstractAxis::AxisOrientation orient
handleAxisTitleChangedBySender(axis);
handleAxisLabelsChangedBySender(axis);
+ handleAxisRangeChangedBySender(axis);
+ handleAxisAutoAdjustRangeChangedInOrientation(axis->orientation(),
+ axis->isAutoAdjustRange());
if (axis->type() & Q3DAbstractAxis::AxisTypeValue) {
Q3DValueAxis *valueAxis = static_cast<Q3DValueAxis *>(axis);
- QObject::connect(valueAxis, &Q3DValueAxis::rangeChanged,
- this, &Abstract3DController::handleAxisRangeChanged);
QObject::connect(valueAxis, &Q3DValueAxis::segmentCountChanged,
this, &Abstract3DController::handleAxisSegmentCountChanged);
QObject::connect(valueAxis, &Q3DValueAxis::subSegmentCountChanged,
this, &Abstract3DController::handleAxisSubSegmentCountChanged);
- QObject::connect(valueAxis, &Q3DValueAxis::autoAdjustRangeChanged,
- this, &Abstract3DController::handleAxisAutoAdjustRangeChanged);
QObject::connect(valueAxis, &Q3DValueAxis::labelFormatChanged,
this, &Abstract3DController::handleAxisLabelFormatChanged);
- handleAxisRangeChangedBySender(valueAxis);
handleAxisSegmentCountChangedBySender(valueAxis);
handleAxisSubSegmentCountChangedBySender(valueAxis);
- handleAxisAutoAdjustRangeChangedInOrientation(valueAxis->orientation(),
- valueAxis->isAutoAdjustRange());
handleAxisLabelFormatChangedBySender(valueAxis);
}
}
@@ -1051,6 +1042,7 @@ Q3DCategoryAxis *Abstract3DController::createDefaultCategoryAxis()
// Default category axis has no labels
// TODO: Grid should be also hidden, but that is not currently controlled by axis.
Q3DCategoryAxis *defaultAxis = new Q3DCategoryAxis;
+ defaultAxis->setAutoAdjustRange(true);
defaultAxis->d_ptr->setDefaultAxis(true);
return defaultAxis;
}
diff --git a/src/datavisualization/engine/bars3dcontroller.cpp b/src/datavisualization/engine/bars3dcontroller.cpp
index 1f4d44c0..5ec6f01f 100644
--- a/src/datavisualization/engine/bars3dcontroller.cpp
+++ b/src/datavisualization/engine/bars3dcontroller.cpp
@@ -32,8 +32,6 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
Bars3DController::Bars3DController(QRect boundRect)
: Abstract3DController(boundRect),
- m_rowCount(10),
- m_columnCount(10),
m_selectedBarPos(noSelectionPoint()),
m_isBarSpecRelative(true),
m_barThicknessRatio(1.0f),
@@ -81,11 +79,6 @@ void Bars3DController::synchDataToRenderer()
return;
// Notify changes to renderer
- if (m_changeTracker.sampleSpaceChanged) {
- m_renderer->updateSampleSpace(m_rowCount, m_columnCount);
- m_changeTracker.sampleSpaceChanged = false;
- }
-
if (m_changeTracker.barSpecsChanged) {
m_renderer->updateBarSpecs(m_barThicknessRatio, m_barSpacing, m_isBarSpecRelative);
m_changeTracker.barSpecsChanged = false;
@@ -133,7 +126,7 @@ void Bars3DController::setActiveDataProxy(QAbstractDataProxy *proxy)
QObject::connect(barDataProxy, &QBarDataProxy::columnLabelsChanged, this,
&Bars3DController::handleDataColumnLabelsChanged);
- adjustValueAxisRange();
+ adjustAxisRanges();
// Always clear selection on proxy change
setSelectedBarPos(noSelectionPoint());
@@ -145,7 +138,7 @@ void Bars3DController::setActiveDataProxy(QAbstractDataProxy *proxy)
void Bars3DController::handleArrayReset()
{
scene()->setSlicingActivated(false);
- adjustValueAxisRange();
+ adjustAxisRanges();
m_isDataDirty = true;
// Clear selection unless still valid
setSelectedBarPos(m_selectedBarPos);
@@ -156,10 +149,9 @@ void Bars3DController::handleRowsAdded(int startIndex, int count)
{
Q_UNUSED(startIndex)
Q_UNUSED(count)
- // TODO check if affects data window
// TODO should update slice instead of deactivating?
scene()->setSlicingActivated(false);
- adjustValueAxisRange();
+ adjustAxisRanges();
m_isDataDirty = true;
emitNeedRender();
}
@@ -168,10 +160,9 @@ void Bars3DController::handleRowsChanged(int startIndex, int count)
{
Q_UNUSED(startIndex)
Q_UNUSED(count)
- // TODO check if affects data window
// TODO should update slice instead of deactivating?
scene()->setSlicingActivated(false);
- adjustValueAxisRange();
+ adjustAxisRanges();
m_isDataDirty = true;
emitNeedRender();
}
@@ -180,10 +171,9 @@ void Bars3DController::handleRowsRemoved(int startIndex, int count)
{
Q_UNUSED(startIndex)
Q_UNUSED(count)
- // TODO check if affects data window
// TODO should update slice instead of deactivating?
scene()->setSlicingActivated(false);
- adjustValueAxisRange();
+ adjustAxisRanges();
m_isDataDirty = true;
// Clear selection unless still valid
@@ -196,10 +186,9 @@ void Bars3DController::handleRowsInserted(int startIndex, int count)
{
Q_UNUSED(startIndex)
Q_UNUSED(count)
- // TODO check if affects data window
// TODO should update slice instead of deactivating?
scene()->setSlicingActivated(false);
- adjustValueAxisRange();
+ adjustAxisRanges();
m_isDataDirty = true;
emitNeedRender();
}
@@ -208,10 +197,9 @@ void Bars3DController::handleItemChanged(int rowIndex, int columnIndex)
{
Q_UNUSED(rowIndex)
Q_UNUSED(columnIndex)
- // TODO check if affects data window
// TODO should update slice instead of deactivating?
scene()->setSlicingActivated(false);
- adjustValueAxisRange();
+ adjustAxisRanges();
m_isDataDirty = true;
emitNeedRender();
}
@@ -220,8 +208,9 @@ void Bars3DController::handleDataRowLabelsChanged()
{
if (m_axisX && m_data) {
// Grab a sublist equal to data window (no need to have more labels in axis)
- // TODO once axis controls data window, this needs to change
- QStringList subList = static_cast<QBarDataProxy *>(m_data)->rowLabels().mid(0, m_rowCount);
+ int min = int(m_axisX->min());
+ int count = int(m_axisX->max()) - min + 1;
+ QStringList subList = static_cast<QBarDataProxy *>(m_data)->rowLabels().mid(min, count);
static_cast<Q3DCategoryAxis *>(m_axisX)->dptr()->setDataLabels(subList);
}
}
@@ -230,8 +219,9 @@ void Bars3DController::handleDataColumnLabelsChanged()
{
if (m_axisZ && m_data) {
// Grab a sublist equal to data window (no need to have more labels in axis)
- // TODO once axis controls data window, this needs to change
- QStringList subList = static_cast<QBarDataProxy *>(m_data)->columnLabels().mid(0, m_columnCount);
+ int min = int(m_axisZ->min());
+ int count = int(m_axisZ->max()) - min + 1;
+ QStringList subList = static_cast<QBarDataProxy *>(m_data)->columnLabels().mid(min, count);
static_cast<Q3DCategoryAxis *>(m_axisZ)->dptr()->setDataLabels(subList);
}
}
@@ -253,7 +243,7 @@ void Bars3DController::handleAxisAutoAdjustRangeChangedInOrientation(
{
Q_UNUSED(orientation)
Q_UNUSED(autoAdjust)
- adjustValueAxisRange();
+ adjustAxisRanges();
}
QPoint Bars3DController::noSelectionPoint()
@@ -274,6 +264,25 @@ void Bars3DController::setAxisZ(Q3DAbstractAxis *axis)
handleDataColumnLabelsChanged();
}
+void Bars3DController::handleAxisRangeChangedBySender(QObject *sender)
+{
+ // Data window changed
+ if (sender == m_axisX || sender == m_axisZ) {
+ // Disable zoom mode if we're in it (causes crash if not, as zoom selection is deleted)
+ scene()->setSlicingActivated(false);
+
+ // Clear selection unless still valid
+ setSelectedBarPos(m_selectedBarPos);
+
+ if (sender == m_axisX)
+ handleDataRowLabelsChanged();
+ if (sender == m_axisZ)
+ handleDataColumnLabelsChanged();
+ }
+
+ Abstract3DController::handleAxisRangeChangedBySender(sender);
+}
+
void Bars3DController::setBarSpecs(GLfloat thicknessRatio, const QSizeF &spacing, bool relative)
{
m_barThicknessRatio = thicknessRatio;
@@ -319,29 +328,6 @@ void Bars3DController::setBarType(QDataVis::MeshStyle style, bool smooth)
Abstract3DController::setMeshFileName(objFile);
}
-// TODO: This sets data window. Needs more parameters, now assumes window always starts at 0,0.
-void Bars3DController::setDataWindow(int rowCount, int columnCount)
-{
- // Disable zoom mode if we're in it (causes crash if not, as zoom selection is deleted)
- scene()->setSlicingActivated(false);
-
- m_rowCount = rowCount;
- m_columnCount = columnCount;
-
- adjustValueAxisRange();
-
- // Clear selection unless still valid
- setSelectedBarPos(m_selectedBarPos);
-
- m_changeTracker.sampleSpaceChanged = true;
- m_isDataDirty = true; // Render item array is recreated in renderer
-
- handleDataRowLabelsChanged();
- handleDataColumnLabelsChanged();
-
- emitNeedRender();
-}
-
void Bars3DController::setSelectionMode(QDataVis::SelectionMode mode)
{
// Disable zoom if selection mode changes
@@ -353,13 +339,19 @@ void Bars3DController::setSelectedBarPos(const QPoint &position)
{
// If the selection is outside data window or targets non-existent
// bar, clear selection instead.
- // TODO this will break once data window offset is implemented
QPoint pos = position;
- if (pos.x() < 0 || pos.y() < 0
- || pos.x() >= static_cast<QBarDataProxy *>(m_data)->rowCount()
- || pos.y() >= static_cast<QBarDataProxy *>(m_data)->rowAt(pos.x())->size()
- || pos.x() >= m_rowCount || pos.y() >= m_columnCount) {
- pos = noSelectionPoint();
+
+ if (pos != noSelectionPoint()) {
+ int minRow = int(m_axisX->min());
+ int maxRow = int(m_axisX->max());
+ int minCol = int(m_axisZ->min());
+ int maxCol = int(m_axisZ->max());
+
+ if (pos.x() < minRow || pos.x() > maxRow || pos.y() < minCol || pos.y() > maxCol
+ || pos.x() + minRow >= static_cast<QBarDataProxy *>(m_data)->rowCount()
+ || pos.y() + minCol >= static_cast<QBarDataProxy *>(m_data)->rowAt(pos.x())->size()) {
+ pos = noSelectionPoint();
+ }
}
if (pos != m_selectedBarPos) {
@@ -375,23 +367,37 @@ QPoint Bars3DController::selectedBarPos() const
return m_selectedBarPos;
}
-int Bars3DController::columnCount()
+void Bars3DController::adjustAxisRanges()
{
- return m_columnCount;
-}
+ const QBarDataProxy *proxy = static_cast<QBarDataProxy *>(m_data);
+ const QBarDataArray *array = proxy->array();
+
+ Q3DCategoryAxis *categoryAxisX = static_cast<Q3DCategoryAxis *>(m_axisX);
+ if (categoryAxisX && categoryAxisX->isAutoAdjustRange() && proxy) {
+ int rowCount = proxy->rowCount();
+ if (rowCount)
+ rowCount--;
+ categoryAxisX->dptr()->setRange(0.0, qreal(rowCount));
+ }
-int Bars3DController::rowCount()
-{
- return m_rowCount;
-}
+ Q3DCategoryAxis *categoryAxisZ = static_cast<Q3DCategoryAxis *>(m_axisZ);
+ if (categoryAxisZ && categoryAxisZ->isAutoAdjustRange() && proxy) {
+ int columnCount = 0;
+ for (int i = 0; i < array->size(); i++) {
+ if (columnCount < array->at(i)->size())
+ columnCount = array->at(i)->size();
+ }
+ if (columnCount)
+ columnCount--;
+ categoryAxisZ->dptr()->setRange(0.0, qreal(columnCount));
+ }
-void Bars3DController::adjustValueAxisRange()
-{
Q3DValueAxis *valueAxis = static_cast<Q3DValueAxis *>(m_axisY);
- if (valueAxis && valueAxis->isAutoAdjustRange() && m_data) {
- QPair<GLfloat, GLfloat> limits =
- static_cast<QBarDataProxy *>(m_data)->dptr()->limitValues(0, m_rowCount,
- 0, m_columnCount);
+ if (valueAxis && categoryAxisX && categoryAxisZ && valueAxis->isAutoAdjustRange() && proxy) {
+ QPair<GLfloat, GLfloat> limits = proxy->dptrc()->limitValues(categoryAxisX->min(),
+ categoryAxisX->max(),
+ categoryAxisZ->min(),
+ categoryAxisZ->max());
if (limits.first < 0) {
// TODO: Currently we only support symmetric y-axis for bar chart if there are negative values
qreal maxAbs = qMax(qFabs(limits.first), qFabs(limits.second));
diff --git a/src/datavisualization/engine/bars3dcontroller_p.h b/src/datavisualization/engine/bars3dcontroller_p.h
index 6dbaf742..8398dd81 100644
--- a/src/datavisualization/engine/bars3dcontroller_p.h
+++ b/src/datavisualization/engine/bars3dcontroller_p.h
@@ -41,13 +41,11 @@ class QBarDataProxy;
struct Bars3DChangeBitField {
bool slicingActiveChanged : 1;
- bool sampleSpaceChanged : 1;
bool barSpecsChanged : 1;
bool selectedBarPosChanged : 1;
Bars3DChangeBitField() :
slicingActiveChanged(true),
- sampleSpaceChanged(true),
barSpecsChanged(true),
selectedBarPosChanged(true)
{
@@ -61,10 +59,6 @@ class QT_DATAVISUALIZATION_EXPORT Bars3DController : public Abstract3DController
private:
Bars3DChangeBitField m_changeTracker;
- // Data
- int m_rowCount;
- int m_columnCount;
-
// Interaction
QPoint m_selectedBarPos; // Points to row & column in data window.
@@ -83,9 +77,6 @@ public:
void initializeOpenGL();
virtual void synchDataToRenderer();
- int columnCount();
- int rowCount();
-
// bar thickness, spacing between bars, and is spacing relative to thickness or absolute
// y -component sets the thickness/spacing of z -direction
// With relative 0.0f means side-to-side, 1.0f = one thickness in between
@@ -99,9 +90,6 @@ public:
// bar type; bars (=cubes), pyramids, cones, cylinders, etc.
void setBarType(QDataVis::MeshStyle style, bool smooth = false);
- // how many samples per row and column, and names for axes
- void setDataWindow(int samplesRow, int samplesColumn);
-
// Change selection mode; single bar, bar and row, bar and column, or all
void setSelectionMode(QDataVis::SelectionMode mode);
@@ -117,6 +105,8 @@ public:
virtual void setAxisX(Q3DAbstractAxis *axis);
virtual void setAxisZ(Q3DAbstractAxis *axis);
+ virtual void handleAxisRangeChangedBySender(QObject *sender);
+
public slots:
void handleArrayReset();
void handleRowsAdded(int startIndex, int count);
@@ -136,7 +126,7 @@ protected:
virtual Q3DAbstractAxis *createDefaultAxis(Q3DAbstractAxis::AxisOrientation orientation);
private:
- void adjustValueAxisRange();
+ void adjustAxisRanges();
Q_DISABLE_COPY(Bars3DController)
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp
index 5d7abb16..adc3c257 100644
--- a/src/datavisualization/engine/bars3drenderer.cpp
+++ b/src/datavisualization/engine/bars3drenderer.cpp
@@ -150,18 +150,49 @@ void Bars3DRenderer::initializeOpenGL()
void Bars3DRenderer::updateDataModel(QBarDataProxy *dataProxy)
{
+ int minRow = m_axisCacheX.min();
+ int maxRow = m_axisCacheX.max();
+ int minCol = m_axisCacheZ.min();
+ int maxCol = m_axisCacheZ.max();
+ int newRows = maxRow - minRow + 1;
+ int newColumns = maxCol - minCol + 1;
+ if (newRows != m_renderItemArray.size() || newColumns != m_renderItemArray.at(0).size()) {
+ // Destroy old render items and reallocate new array
+ m_renderItemArray.clear();
+ m_renderItemArray.resize(newRows);
+ for (int i = 0; i < newRows; i++)
+ m_renderItemArray[i].resize(newColumns);
+
+ // Force update for selection related items
+ m_sliceCache = 0;
+ m_sliceTitleItem = 0;
+ if (m_sliceSelection)
+ m_sliceSelection->clear();
+
+ m_cachedColumnCount = newColumns;
+ m_cachedRowCount = newRows;
+ // TODO: Invent foolproof max scene size formula
+ // This seems to work ok if spacing is not negative (and row/column or column/row ratio is not too high)
+ m_maxSceneSize = 2 * qSqrt(newColumns * newRows);
+ // Calculate here and at setting bar specs
+ calculateSceneScalingFactors();
+ }
+
// Update cached data window
int dataRowCount = dataProxy->rowCount();
- for (int i = 0; i < m_renderItemArray.size(); i++) {
+ int dataRowIndex = minRow;
+ for (int i = 0; i < newRows; i++) {
int j = 0;
- if (i < dataRowCount) {
- const QBarDataRow *dataRow = dataProxy->rowAt(i);
- int updateSize = qMin(dataRow->size(), m_renderItemArray[i].size());
+ if (dataRowIndex < dataRowCount) {
+ const QBarDataRow *dataRow = dataProxy->rowAt(dataRowIndex);
+ int updateSize = qMin((dataRow->size() - minCol), m_renderItemArray[i].size());
if (dataRow) {
+ int dataColIndex = minCol;
for (; j < updateSize ; j++) {
- qreal value = dataRow->at(j).value();
+ qreal value = dataRow->at(dataColIndex).value();
m_renderItemArray[i][j].setValue(value);
m_renderItemArray[i][j].setHeight(value / m_heightNormalizer);
+ dataColIndex++;
}
}
}
@@ -169,6 +200,7 @@ void Bars3DRenderer::updateDataModel(QBarDataProxy *dataProxy)
m_renderItemArray[i][j].setValue(0.0);
m_renderItemArray[i][j].setHeight(0.0f);
}
+ dataRowIndex++;
}
Abstract3DRenderer::updateDataModel(dataProxy);
@@ -1489,47 +1521,26 @@ void Bars3DRenderer::updateBarSpecs(GLfloat thicknessRatio, const QSizeF &spacin
void Bars3DRenderer::updateAxisRange(Q3DAbstractAxis::AxisOrientation orientation, qreal min, qreal max)
{
Abstract3DRenderer::updateAxisRange(orientation, min, max);
- calculateHeightAdjustment();
- // Check if we have negative values
- if (min < 0 && !m_hasNegativeValues) {
- m_hasNegativeValues = true;
- // Reload background
- loadBackgroundMesh();
-
- } else if (min >= 0 && m_hasNegativeValues) {
- m_hasNegativeValues = false;
- // Reload background
- loadBackgroundMesh();
- }
- // TODO Currently barchart only supports zero centered or zero minimum ranges
- if (min > 0.0 || (min != 0.0 && (qFabs(min) != qFabs(max))))
- qWarning() << __FUNCTION__ << "Bar chart currently properly supports only zero-centered and zero minimum ranges for Y-axis.";
-}
+ if (orientation == Q3DAbstractAxis::AxisOrientationY) {
+ calculateHeightAdjustment();
+ // Check if we have negative values
+ if (min < 0 && !m_hasNegativeValues) {
+ m_hasNegativeValues = true;
+ // Reload background
+ loadBackgroundMesh();
+ emit needRender();
+ } else if (min >= 0 && m_hasNegativeValues) {
+ m_hasNegativeValues = false;
+ // Reload background
+ loadBackgroundMesh();
+ emit needRender();
+ }
-void Bars3DRenderer::updateSampleSpace(int rowCount, int columnCount)
-{
- // Destroy old render items and reallocate new array
- // TODO is there a way to allocate the whole array with one allocation?
- m_renderItemArray.clear();
- m_renderItemArray.resize(rowCount);
- for (int i = 0; i < rowCount; i++)
- m_renderItemArray[i].resize(columnCount);
-
- // Force update for selection related items
- m_sliceCache = 0;
- m_sliceTitleItem = 0;
- if (m_sliceSelection)
- m_sliceSelection->clear();
-
- m_cachedColumnCount = columnCount;
- m_cachedRowCount = rowCount;
- // TODO: Invent "idiotproof" max scene size formula..
- // This seems to work ok if spacing is not negative (and row/column or column/row ratio is not too high)
- m_maxSceneSize = 2 * qSqrt(columnCount * rowCount);
- //qDebug() << "maxSceneSize" << m_maxSceneSize;
- // Calculate here and at setting bar specs
- calculateSceneScalingFactors();
+ // TODO Currently barchart only supports zero centered or zero minimum ranges
+ if (min > 0.0 || (min != 0.0 && (qFabs(min) != qFabs(max))))
+ qWarning() << __FUNCTION__ << "Bar chart currently properly supports only zero-centered and zero minimum ranges for Y-axis.";
+ }
}
void Bars3DRenderer::updateSelectionMode(QDataVis::SelectionMode mode)
diff --git a/src/datavisualization/engine/bars3drenderer_p.h b/src/datavisualization/engine/bars3drenderer_p.h
index 3be0ebf9..9b612474 100644
--- a/src/datavisualization/engine/bars3drenderer_p.h
+++ b/src/datavisualization/engine/bars3drenderer_p.h
@@ -126,7 +126,6 @@ public slots:
bool relative = true);
void updateSelectionMode(QDataVis::SelectionMode newMode);
void updateSlicingActive(bool isSlicing);
- void updateSampleSpace(int rowCount, int columnCount);
void updateBackgroundEnabled(bool enable);
void updateSelectedBarPos(const QPoint &position);
diff --git a/src/datavisualization/engine/q3dbars.cpp b/src/datavisualization/engine/q3dbars.cpp
index be8b3a88..e892367e 100644
--- a/src/datavisualization/engine/q3dbars.cpp
+++ b/src/datavisualization/engine/q3dbars.cpp
@@ -231,7 +231,7 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
/*!
* \qmlproperty point Bars3D::selectedBarPos
- * Position of the selected bar, if any. Only one bar can be selected at a time.
+ * Position of the selected bar in data window. Only one bar can be selected at a time.
* To clear selection, specify an illegal position, e.g. Qt.point(-1.0, -1.0).
*/
@@ -405,23 +405,6 @@ void Q3DBars::setBarType(QDataVis::MeshStyle style, bool smooth)
}
/*!
- * Set up data window to \a samplesRow rows and \a samplesColumn columns. Both are preset to \c 10
- * by default.
- */
-void Q3DBars::setDataWindow(int samplesRow, int samplesColumn)
-{
- d_ptr->m_shared->setDataWindow(samplesRow, samplesColumn);
-}
-
-/*!
- * \return size of the sample space in QSize.
- */
-QSize Q3DBars::dataWindow() const
-{
- return QSize(d_ptr->m_shared->rowCount(), d_ptr->m_shared->columnCount());
-}
-
-/*!
* \property Q3DBars::cameraPreset
*
* The \a preset position of the camera. The position can be one of \c QDataVis::CameraPreset.
@@ -584,7 +567,8 @@ bool Q3DBars::isBackgroundVisible() const
/*!
* \property Q3DBars::selectedBarPos
*
- * Selects a bar in a \a position. Only one bar can be selected at a time.
+ * Selects a bar in a \a position. The position is the position in data window.
+ * Only one bar can be selected at a time.
* To clear selection, specify an illegal \a position, e.g. (-1, -1).
*/
void Q3DBars::setSelectedBarPos(const QPoint &position)
diff --git a/src/datavisualization/engine/q3dbars.h b/src/datavisualization/engine/q3dbars.h
index 1404ea05..9a8e97bb 100644
--- a/src/datavisualization/engine/q3dbars.h
+++ b/src/datavisualization/engine/q3dbars.h
@@ -57,10 +57,6 @@ public:
void setBarType(QDataVis::MeshStyle style, bool smooth = false);
- // TODO: This defines the data window, needs additional parameters startRow, startColumn
- void setDataWindow(int samplesRow, int samplesColumn);
- QSize dataWindow() const; // TODO: Return QRect once data window properly implemented?
-
void setCameraPreset(QDataVis::CameraPreset preset);
QDataVis::CameraPreset cameraPreset() const;
diff --git a/src/datavisualization/input/q3dinputhandler.cpp b/src/datavisualization/input/q3dinputhandler.cpp
index 51f0670a..2b16c942 100644
--- a/src/datavisualization/input/q3dinputhandler.cpp
+++ b/src/datavisualization/input/q3dinputhandler.cpp
@@ -23,6 +23,17 @@
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+const int minZoomLevel = 10;
+const int halfSizeZoomLevel = 50;
+const int oneToOneZoomLevel = 100;
+const int maxZoomLevel = 500;
+
+const int nearZoomRangeDivider = 12;
+const int midZoomRangeDivider = 60;
+const int farZoomRangeDivider = 120;
+
+const qreal rotationSpeed = 100.0;
+
Q3DInputHandler::Q3DInputHandler(QObject *parent) :
QAbstract3DInputHandler(parent)
{
diff --git a/src/datavisualization/input/q3dinputhandler.h b/src/datavisualization/input/q3dinputhandler.h
index d87966d6..a337d4d6 100644
--- a/src/datavisualization/input/q3dinputhandler.h
+++ b/src/datavisualization/input/q3dinputhandler.h
@@ -23,17 +23,6 @@
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
-const int minZoomLevel = 10;
-const int halfSizeZoomLevel = 50;
-const int oneToOneZoomLevel = 100;
-const int maxZoomLevel = 500;
-
-const int nearZoomRangeDivider = 12;
-const int midZoomRangeDivider = 60;
-const int farZoomRangeDivider = 120;
-
-const float rotationSpeed = 100.0f;
-
class QT_DATAVISUALIZATION_EXPORT Q3DInputHandler : public QAbstract3DInputHandler
{
Q_OBJECT
diff --git a/src/datavisualizationqml2/declarativebars.cpp b/src/datavisualizationqml2/declarativebars.cpp
index 010409e8..dd575d35 100644
--- a/src/datavisualizationqml2/declarativebars.cpp
+++ b/src/datavisualizationqml2/declarativebars.cpp
@@ -82,11 +82,6 @@ QSGNode *DeclarativeBars::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData
return node;
}
-void DeclarativeBars::setDataWindow(int rowCount, int columnCount)
-{
- m_shared->setDataWindow(rowCount, columnCount);
-}
-
void DeclarativeBars::setBarColor(const QColor &baseColor, bool uniform)
{
m_shared->setObjectColor(baseColor, uniform);
@@ -299,26 +294,6 @@ QDataVis::ShadowQuality DeclarativeBars::shadowQuality()
return m_shared->shadowQuality();
}
-int DeclarativeBars::rows() const
-{
- return m_shared->rowCount();
-}
-
-void DeclarativeBars::setRows(int rows)
-{
- setDataWindow(rows, columns());
-}
-
-int DeclarativeBars::columns() const
-{
- return m_shared->columnCount();
-}
-
-void DeclarativeBars::setColumns(int columns)
-{
- setDataWindow(rows(), columns);
-}
-
void DeclarativeBars::setItemLabelFormat(const QString &format)
{
m_shared->activeDataProxy()->setItemLabelFormat(format);
diff --git a/src/datavisualizationqml2/declarativebars_p.h b/src/datavisualizationqml2/declarativebars_p.h
index ebf565fe..b2e64eae 100644
--- a/src/datavisualizationqml2/declarativebars_p.h
+++ b/src/datavisualizationqml2/declarativebars_p.h
@@ -64,8 +64,6 @@ class DeclarativeBars : public QQuickItem
Q_PROPERTY(QFont font READ font WRITE setFont)
Q_PROPERTY(bool gridVisible READ isGridVisible WRITE setGridVisible)
Q_PROPERTY(bool backgroundVisible READ isBackgroundVisible WRITE setBackgroundVisible)
- Q_PROPERTY(int rows READ rows WRITE setRows)
- Q_PROPERTY(int columns READ columns WRITE setColumns)
Q_PROPERTY(QString itemLabelFormat READ itemLabelFormat WRITE setItemLabelFormat)
Q_PROPERTY(QPointF selectedBarPos READ selectedBarPos WRITE setSelectedBarPos NOTIFY selectedBarPosChanged)
Q_ENUMS(QtDataVisualization::QDataVis::SelectionMode)
@@ -79,9 +77,6 @@ public:
explicit DeclarativeBars(QQuickItem *parent = 0);
~DeclarativeBars();
- // how many samples per row and column
- Q_INVOKABLE void setDataWindow(int rowCount, int columnCount);
-
// Set color if you don't want to use themes. Set uniform to false if you want the (height)
// color to change from bottom to top
Q_INVOKABLE void setBarColor(const QColor &baseColor, bool uniform = true);
@@ -159,12 +154,6 @@ public:
void setShadowQuality(QDataVis::ShadowQuality quality);
QDataVis::ShadowQuality shadowQuality();
- int rows() const;
- void setRows(int rows);
-
- int columns() const;
- void setColumns(int columns);
-
void setItemLabelFormat(const QString &format);
QString itemLabelFormat();