summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/datavisualization/engine/bars3dcontroller.cpp52
-rw-r--r--src/datavisualization/engine/scatter3dcontroller.cpp50
-rw-r--r--src/datavisualization/engine/scatter3dcontroller_p.h1
-rw-r--r--src/datavisualization/engine/surface3dcontroller.cpp50
-rw-r--r--tests/scattertest/main.cpp6
-rw-r--r--tests/scattertest/scatterchart.cpp6
-rw-r--r--tests/scattertest/scatterchart.h1
7 files changed, 121 insertions, 45 deletions
diff --git a/src/datavisualization/engine/bars3dcontroller.cpp b/src/datavisualization/engine/bars3dcontroller.cpp
index c765a37a..8bf0cb8c 100644
--- a/src/datavisualization/engine/bars3dcontroller.cpp
+++ b/src/datavisualization/engine/bars3dcontroller.cpp
@@ -98,8 +98,11 @@ void Bars3DController::synchDataToRenderer()
void Bars3DController::handleArrayReset()
{
- adjustAxisRanges();
- m_isDataDirty = true;
+ QBar3DSeries *series = static_cast<QBarDataProxy *>(sender())->series();
+ if (series->isVisible()) {
+ adjustAxisRanges();
+ m_isDataDirty = true;
+ }
// Clear selection unless still valid
setSelectedBar(m_selectedBar, m_selectedBarSeries);
emitNeedRender();
@@ -109,8 +112,11 @@ void Bars3DController::handleRowsAdded(int startIndex, int count)
{
Q_UNUSED(startIndex)
Q_UNUSED(count)
- adjustAxisRanges();
- m_isDataDirty = true;
+ QBar3DSeries *series = static_cast<QBarDataProxy *>(sender())->series();
+ if (series->isVisible()) {
+ adjustAxisRanges();
+ m_isDataDirty = true;
+ }
emitNeedRender();
}
@@ -118,8 +124,11 @@ void Bars3DController::handleRowsChanged(int startIndex, int count)
{
Q_UNUSED(startIndex)
Q_UNUSED(count)
- adjustAxisRanges();
- m_isDataDirty = true;
+ QBar3DSeries *series = static_cast<QBarDataProxy *>(sender())->series();
+ if (series->isVisible()) {
+ adjustAxisRanges();
+ m_isDataDirty = true;
+ }
emitNeedRender();
}
@@ -127,8 +136,11 @@ void Bars3DController::handleRowsRemoved(int startIndex, int count)
{
Q_UNUSED(startIndex)
Q_UNUSED(count)
- adjustAxisRanges();
- m_isDataDirty = true;
+ QBar3DSeries *series = static_cast<QBarDataProxy *>(sender())->series();
+ if (series->isVisible()) {
+ adjustAxisRanges();
+ m_isDataDirty = true;
+ }
// Clear selection unless still valid
setSelectedBar(m_selectedBar, m_selectedBarSeries);
@@ -140,8 +152,11 @@ void Bars3DController::handleRowsInserted(int startIndex, int count)
{
Q_UNUSED(startIndex)
Q_UNUSED(count)
- adjustAxisRanges();
- m_isDataDirty = true;
+ QBar3DSeries *series = static_cast<QBarDataProxy *>(sender())->series();
+ if (series->isVisible()) {
+ adjustAxisRanges();
+ m_isDataDirty = true;
+ }
emitNeedRender();
}
@@ -149,8 +164,11 @@ void Bars3DController::handleItemChanged(int rowIndex, int columnIndex)
{
Q_UNUSED(rowIndex)
Q_UNUSED(columnIndex)
- adjustAxisRanges();
- m_isDataDirty = true;
+ QBar3DSeries *series = static_cast<QBarDataProxy *>(sender())->series();
+ if (series->isVisible()) {
+ adjustAxisRanges();
+ m_isDataDirty = true;
+ }
emitNeedRender();
}
@@ -203,6 +221,8 @@ void Bars3DController::handleSeriesVisibilityChangedBySender(QObject *sender)
{
Abstract3DController::handleSeriesVisibilityChangedBySender(sender);
+ adjustAxisRanges();
+
// Visibility changes may require disabling/enabling slicing,
// so just reset selection to ensure everything is still valid.
setSelectedBar(m_selectedBar, m_selectedBarSeries);
@@ -234,9 +254,10 @@ void Bars3DController::addSeries(QAbstract3DSeries *series)
Abstract3DController::addSeries(series);
- if (firstAdded) {
+ if (series->isVisible())
adjustAxisRanges();
+ if (firstAdded) {
handleDataRowLabelsChanged();
handleDataColumnLabelsChanged();
}
@@ -250,14 +271,17 @@ void Bars3DController::removeSeries(QAbstract3DSeries *series)
{
bool firstRemoved = (m_seriesList.size() && m_seriesList.at(0) == series);
+ bool wasVisible = (series && series->d_ptr->m_controller == this && series->isVisible());
+
Abstract3DController::removeSeries(series);
if (m_selectedBarSeries == series)
setSelectedBar(invalidSelectionPosition(), 0);
- if (firstRemoved) {
+ if (wasVisible)
adjustAxisRanges();
+ if (firstRemoved) {
handleDataRowLabelsChanged();
handleDataColumnLabelsChanged();
}
diff --git a/src/datavisualization/engine/scatter3dcontroller.cpp b/src/datavisualization/engine/scatter3dcontroller.cpp
index 58706705..0c991839 100644
--- a/src/datavisualization/engine/scatter3dcontroller.cpp
+++ b/src/datavisualization/engine/scatter3dcontroller.cpp
@@ -80,11 +80,9 @@ void Scatter3DController::addSeries(QAbstract3DSeries *series)
{
Q_ASSERT(series && series->type() == QAbstract3DSeries::SeriesTypeScatter);
- bool firstAdded = !m_seriesList.size();
-
Abstract3DController::addSeries(series);
- if (firstAdded)
+ if (series->isVisible())
adjustValueAxisRange();
QScatter3DSeries *scatterSeries = static_cast<QScatter3DSeries *>(series);
@@ -94,14 +92,14 @@ void Scatter3DController::addSeries(QAbstract3DSeries *series)
void Scatter3DController::removeSeries(QAbstract3DSeries *series)
{
- bool firstRemoved = (m_seriesList.size() && m_seriesList.at(0) == series);
+ bool wasVisible = (series && series->d_ptr->m_controller == this && series->isVisible());
Abstract3DController::removeSeries(series);
if (m_selectedItemSeries == series)
setSelectedItem(invalidSelectionIndex(), 0);
- if (firstRemoved)
+ if (wasVisible)
adjustValueAxisRange();
}
@@ -120,8 +118,11 @@ QList<QScatter3DSeries *> Scatter3DController::scatterSeriesList()
void Scatter3DController::handleArrayReset()
{
- adjustValueAxisRange();
- m_isDataDirty = true;
+ QScatter3DSeries *series = static_cast<QScatterDataProxy *>(sender())->series();
+ if (series->isVisible()) {
+ adjustValueAxisRange();
+ m_isDataDirty = true;
+ }
setSelectedItem(m_selectedItem, m_selectedItemSeries);
emitNeedRender();
}
@@ -131,8 +132,11 @@ void Scatter3DController::handleItemsAdded(int startIndex, int count)
Q_UNUSED(startIndex)
Q_UNUSED(count)
// TODO should dirty only affected values?
- adjustValueAxisRange();
- m_isDataDirty = true;
+ QScatter3DSeries *series = static_cast<QScatterDataProxy *>(sender())->series();
+ if (series->isVisible()) {
+ adjustValueAxisRange();
+ m_isDataDirty = true;
+ }
emitNeedRender();
}
@@ -141,8 +145,11 @@ void Scatter3DController::handleItemsChanged(int startIndex, int count)
Q_UNUSED(startIndex)
Q_UNUSED(count)
// TODO should dirty only affected values?
- adjustValueAxisRange();
- m_isDataDirty = true;
+ QScatter3DSeries *series = static_cast<QScatterDataProxy *>(sender())->series();
+ if (series->isVisible()) {
+ adjustValueAxisRange();
+ m_isDataDirty = true;
+ }
emitNeedRender();
}
@@ -151,8 +158,11 @@ void Scatter3DController::handleItemsRemoved(int startIndex, int count)
Q_UNUSED(startIndex)
Q_UNUSED(count)
// TODO should dirty only affected values?
- adjustValueAxisRange();
- m_isDataDirty = true;
+ QScatter3DSeries *series = static_cast<QScatterDataProxy *>(sender())->series();
+ if (series->isVisible()) {
+ adjustValueAxisRange();
+ m_isDataDirty = true;
+ }
// Clear selection unless it is still valid
setSelectedItem(m_selectedItem, m_selectedItemSeries);
@@ -165,8 +175,11 @@ void Scatter3DController::handleItemsInserted(int startIndex, int count)
Q_UNUSED(startIndex)
Q_UNUSED(count)
// TODO should dirty only affected values?
- adjustValueAxisRange();
- m_isDataDirty = true;
+ QScatter3DSeries *series = static_cast<QScatterDataProxy *>(sender())->series();
+ if (series->isVisible()) {
+ adjustValueAxisRange();
+ m_isDataDirty = true;
+ }
emitNeedRender();
}
@@ -194,6 +207,13 @@ void Scatter3DController::handleAxisRangeChangedBySender(QObject *sender)
setSelectedItem(m_selectedItem, m_selectedItemSeries);
}
+void Scatter3DController::handleSeriesVisibilityChangedBySender(QObject *sender)
+{
+ Abstract3DController::handleSeriesVisibilityChangedBySender(sender);
+
+ adjustValueAxisRange();
+}
+
void Scatter3DController::setSelectionMode(QDataVis::SelectionFlags mode)
{
// We only support single item selection mode and no selection mode
diff --git a/src/datavisualization/engine/scatter3dcontroller_p.h b/src/datavisualization/engine/scatter3dcontroller_p.h
index d484454d..2d0c9a9a 100644
--- a/src/datavisualization/engine/scatter3dcontroller_p.h
+++ b/src/datavisualization/engine/scatter3dcontroller_p.h
@@ -82,6 +82,7 @@ public:
virtual void handleAxisAutoAdjustRangeChangedInOrientation(QAbstract3DAxis::AxisOrientation orientation, bool autoAdjust);
virtual void handleAxisRangeChangedBySender(QObject *sender);
+ virtual void handleSeriesVisibilityChangedBySender(QObject *sender);
public slots:
void handleArrayReset();
diff --git a/src/datavisualization/engine/surface3dcontroller.cpp b/src/datavisualization/engine/surface3dcontroller.cpp
index 7c7b7a90..cf844c0f 100644
--- a/src/datavisualization/engine/surface3dcontroller.cpp
+++ b/src/datavisualization/engine/surface3dcontroller.cpp
@@ -111,6 +111,8 @@ void Surface3DController::handleSeriesVisibilityChangedBySender(QObject *sender)
{
Abstract3DController::handleSeriesVisibilityChangedBySender(sender);
+ adjustValueAxisRange();
+
// Visibility changes may require disabling/enabling slicing,
// so just reset selection to ensure everything is still valid.
setSelectedPoint(m_selectedPoint, m_selectedSeries);
@@ -134,7 +136,8 @@ void Surface3DController::addSeries(QAbstract3DSeries *series)
if (!m_seriesList.size()) {
Abstract3DController::addSeries(series);
- adjustValueAxisRange();
+ if (series->isVisible())
+ adjustValueAxisRange();
} else {
qWarning("Surface graph only supports a single series.");
}
@@ -146,14 +149,15 @@ void Surface3DController::addSeries(QAbstract3DSeries *series)
void Surface3DController::removeSeries(QAbstract3DSeries *series)
{
- if (series && series->d_ptr->m_controller == this) {
- Abstract3DController::removeSeries(series);
+ bool wasVisible = (series && series->d_ptr->m_controller == this && series->isVisible());
+
+ Abstract3DController::removeSeries(series);
- if (m_selectedSeries == series)
- setSelectedPoint(invalidSelectionPosition(), 0);
+ if (m_selectedSeries == series)
+ setSelectedPoint(invalidSelectionPosition(), 0);
+ if (wasVisible)
adjustValueAxisRange();
- }
}
QList<QSurface3DSeries *> Surface3DController::surfaceSeriesList()
@@ -266,8 +270,11 @@ void Surface3DController::setSelectedPoint(const QPoint &position, QSurface3DSer
void Surface3DController::handleArrayReset()
{
- adjustValueAxisRange();
- m_isDataDirty = true;
+ QSurface3DSeries *series = static_cast<QSurfaceDataProxy *>(sender())->series();
+ if (series->isVisible()) {
+ adjustValueAxisRange();
+ m_isDataDirty = true;
+ }
// Clear selection unless still valid
setSelectedPoint(m_selectedPoint, m_selectedSeries);
emitNeedRender();
@@ -299,7 +306,8 @@ void Surface3DController::handleRowsChanged(int startIndex, int count)
if (m_changedRows.size() == 0)
m_changedRows.reserve(sender->rowCount());
- if (static_cast<QSurface3DSeries *>(m_seriesList.at(0)) == sender->series()) {
+ QSurface3DSeries *series = sender->series();
+ if (series->isVisible()) {
// Change is for the visible series, put the change to queue
int oldChangeCount = m_changedRows.size();
for (int i = 0; i < count; i++) {
@@ -328,7 +336,8 @@ void Surface3DController::handleRowsChanged(int startIndex, int count)
void Surface3DController::handleItemChanged(int rowIndex, int columnIndex)
{
QSurfaceDataProxy *sender = static_cast<QSurfaceDataProxy *>(QObject::sender());
- if (static_cast<QSurface3DSeries *>(m_seriesList.at(0)) == sender->series()) {
+ QSurface3DSeries *series = sender->series();
+ if (series->isVisible()) {
// Change is for the visible series, put the change to queue
bool newItem = true;
QPoint candidate(columnIndex, rowIndex);
@@ -354,8 +363,11 @@ void Surface3DController::handleRowsAdded(int startIndex, int count)
{
Q_UNUSED(startIndex)
Q_UNUSED(count)
- adjustValueAxisRange();
- m_isDataDirty = true;
+ QSurface3DSeries *series = static_cast<QSurfaceDataProxy *>(sender())->series();
+ if (series->isVisible()) {
+ adjustValueAxisRange();
+ m_isDataDirty = true;
+ }
emitNeedRender();
}
@@ -363,8 +375,11 @@ void Surface3DController::handleRowsInserted(int startIndex, int count)
{
Q_UNUSED(startIndex)
Q_UNUSED(count)
- adjustValueAxisRange();
- m_isDataDirty = true;
+ QSurface3DSeries *series = static_cast<QSurfaceDataProxy *>(sender())->series();
+ if (series->isVisible()) {
+ adjustValueAxisRange();
+ m_isDataDirty = true;
+ }
emitNeedRender();
}
@@ -372,8 +387,11 @@ void Surface3DController::handleRowsRemoved(int startIndex, int count)
{
Q_UNUSED(startIndex)
Q_UNUSED(count)
- adjustValueAxisRange();
- m_isDataDirty = true;
+ QSurface3DSeries *series = static_cast<QSurfaceDataProxy *>(sender())->series();
+ if (series->isVisible()) {
+ adjustValueAxisRange();
+ m_isDataDirty = true;
+ }
// Clear selection unless still valid
setSelectedPoint(m_selectedPoint, m_selectedSeries);
diff --git a/tests/scattertest/main.cpp b/tests/scattertest/main.cpp
index 26f30beb..d4a6c108 100644
--- a/tests/scattertest/main.cpp
+++ b/tests/scattertest/main.cpp
@@ -106,6 +106,9 @@ int main(int argc, char **argv)
QPushButton *removeSeriesButton = new QPushButton(widget);
removeSeriesButton->setText(QStringLiteral("Remove Series"));
+ QPushButton *toggleSeriesVisibilityButton = new QPushButton(widget);
+ toggleSeriesVisibilityButton->setText(QStringLiteral("Toggle visibility"));
+
QPushButton *startTimerButton = new QPushButton(widget);
startTimerButton->setText(QStringLiteral("Start/stop timer"));
@@ -172,6 +175,7 @@ int main(int argc, char **argv)
vLayout->addWidget(setSelectedItemButton, 0, Qt::AlignTop);
vLayout->addWidget(addSeriesButton, 0, Qt::AlignTop);
vLayout->addWidget(removeSeriesButton, 0, Qt::AlignTop);
+ vLayout->addWidget(toggleSeriesVisibilityButton, 0, Qt::AlignTop);
vLayout->addWidget(startTimerButton, 0, Qt::AlignTop);
vLayout->addWidget(gradientBtoYPB, 0, Qt::AlignTop);
vLayout->addWidget(backgroundCheckBox);
@@ -224,6 +228,8 @@ int main(int argc, char **argv)
&ScatterDataModifier::addSeries);
QObject::connect(removeSeriesButton, &QPushButton::clicked, modifier,
&ScatterDataModifier::removeSeries);
+ QObject::connect(toggleSeriesVisibilityButton, &QPushButton::clicked, modifier,
+ &ScatterDataModifier::toggleSeriesVisibility);
QObject::connect(startTimerButton, &QPushButton::clicked, modifier,
&ScatterDataModifier::startStopTimer);
QObject::connect(gradientBtoYPB, &QPushButton::clicked, modifier,
diff --git a/tests/scattertest/scatterchart.cpp b/tests/scattertest/scatterchart.cpp
index 6b7fd910..58f5b355 100644
--- a/tests/scattertest/scatterchart.cpp
+++ b/tests/scattertest/scatterchart.cpp
@@ -470,6 +470,12 @@ void ScatterDataModifier::removeSeries()
}
}
+void ScatterDataModifier::toggleSeriesVisibility()
+{
+ if (m_targetSeries)
+ m_targetSeries->setVisible(!m_targetSeries->isVisible());
+}
+
void ScatterDataModifier::handleAxisXChanged(QValue3DAxis *axis)
{
qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_chart->axisX());
diff --git a/tests/scattertest/scatterchart.h b/tests/scattertest/scatterchart.h
index 903c6fc0..7906eac0 100644
--- a/tests/scattertest/scatterchart.h
+++ b/tests/scattertest/scatterchart.h
@@ -67,6 +67,7 @@ public slots:
void setGradient();
void addSeries();
void removeSeries();
+ void toggleSeriesVisibility();
void handleAxisXChanged(QValue3DAxis *axis);
void handleAxisYChanged(QValue3DAxis *axis);