summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-08-29 15:51:57 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-08-30 07:52:05 +0300
commita88922ed813f6f0510fc13c6a5ff999a4e51b4d3 (patch)
tree918519ba9895e3e30b7e50f89e5c0abe5d9fa0f5 /examples
parent1f9a6ca62c282658ae1f76a59e521cd99a280ba5 (diff)
Improved the ownership handling of data proxies and axes.
Task-number: QTRD-2212 Change-Id: Ie55e5c2765e28f1b31915f12eb952dbb5260047f Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'examples')
-rw-r--r--examples/barchart/main.cpp5
-rw-r--r--examples/rainfall/rainfallchart.cpp5
-rw-r--r--examples/scatterchart/scatterchart.cpp44
-rw-r--r--examples/spectrum/spectrumapp/main.cpp7
-rw-r--r--examples/surfacechart/chartmodifier.cpp3
-rw-r--r--examples/widget/chart.cpp71
-rw-r--r--examples/widget/chart.h6
-rw-r--r--examples/widget/main.cpp7
8 files changed, 80 insertions, 68 deletions
diff --git a/examples/barchart/main.cpp b/examples/barchart/main.cpp
index c51aa12f..0f1a8252 100644
--- a/examples/barchart/main.cpp
+++ b/examples/barchart/main.cpp
@@ -70,9 +70,6 @@ ChartDataGenerator::ChartDataGenerator(Q3DBars *barchart, QTableWidget *tableWid
m_rowCount(50),
m_tableWidget(tableWidget)
{
- m_chart->setRowAxis(new QCategoryAxis);
- m_chart->setColumnAxis(new QCategoryAxis);
- m_chart->setValueAxis(new QValueAxis);
// Set up bar specifications; make the bars as wide as they are deep,
// and add a small space between the bars
m_chart->setBarSpecs(1.0, QSizeF(0.2, 0.2));
@@ -301,7 +298,7 @@ int main(int argc, char **argv)
// to row/column support and uses the Qt::DisplayRole role for value role by default.
QItemModelBarDataMapping mapping;
QItemModelBarDataProxy *proxy = new QItemModelBarDataProxy(tableWidget->model(), &mapping);
- chart->setDataProxy(proxy);
+ chart->setActiveDataProxy(proxy);
ChartDataGenerator *generator = new ChartDataGenerator(chart, tableWidget);
generator->start();
diff --git a/examples/rainfall/rainfallchart.cpp b/examples/rainfall/rainfallchart.cpp
index 5b0d5dd9..3b51afba 100644
--- a/examples/rainfall/rainfallchart.cpp
+++ b/examples/rainfall/rainfallchart.cpp
@@ -40,7 +40,7 @@ RainfallChart::RainfallChart(Q3DBars *rainfall)
m_columnCount = m_numericMonths.size();
m_proxy = new VariantBarDataProxy;
- m_chart->setDataProxy(m_proxy);
+ m_chart->setActiveDataProxy(m_proxy);
updateYearsList(2000, 2012);
@@ -51,9 +51,6 @@ RainfallChart::RainfallChart(Q3DBars *rainfall)
// Set axis labels and titles
QStringList months;
months << "January" << "February" << "March" << "April" << "May" << "June" << "July" << "August" << "September" << "October" << "November" << "December";
- m_chart->setRowAxis(new QCategoryAxis);
- m_chart->setColumnAxis(new QCategoryAxis);
- m_chart->setValueAxis(new QValueAxis);
m_chart->rowAxis()->setTitle("Year");
m_chart->columnAxis()->setTitle("Month");
m_chart->valueAxis()->setTitle(QString("rainfall in city %1").arg(m_city - 1));
diff --git a/examples/scatterchart/scatterchart.cpp b/examples/scatterchart/scatterchart.cpp
index 3379de50..92b99652 100644
--- a/examples/scatterchart/scatterchart.cpp
+++ b/examples/scatterchart/scatterchart.cpp
@@ -44,7 +44,7 @@ ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter)
QScatterDataProxy *proxy = new QScatterDataProxy;
proxy->setItemLabelFormat("@xTitle: @xLabel @yTitle: @yLabel @zTitle: @zLabel");
- m_chart->setDataProxy(proxy);
+ m_chart->setActiveDataProxy(proxy);
connect(&m_timer, &QTimer::timeout, this, &ScatterDataModifier::timeout);
}
@@ -88,7 +88,7 @@ void ScatterDataModifier::addData()
}
#endif
- static_cast<QScatterDataProxy *>(m_chart->dataProxy())->resetArray(dataArray);
+ static_cast<QScatterDataProxy *>(m_chart->activeDataProxy())->resetArray(dataArray);
}
void ScatterDataModifier::changeStyle()
@@ -179,15 +179,15 @@ void ScatterDataModifier::shadowQualityUpdatedByVisual(QDataVis::ShadowQuality s
void ScatterDataModifier::clear()
{
- m_chart->dataProxy()->resetArray(0);
+ m_chart->activeDataProxy()->resetArray(0);
qDebug() << m_loopCounter << "Cleared array";
}
void ScatterDataModifier::addOne()
{
QScatterDataItem item(randVector());
- int addIndex = m_chart->dataProxy()->addItem(item);
- qDebug() << m_loopCounter << "added one to index:" << addIndex << "array size:" << m_chart->dataProxy()->array()->size();
+ int addIndex = m_chart->activeDataProxy()->addItem(item);
+ qDebug() << m_loopCounter << "added one to index:" << addIndex << "array size:" << m_chart->activeDataProxy()->array()->size();
}
void ScatterDataModifier::addBunch()
@@ -195,15 +195,15 @@ void ScatterDataModifier::addBunch()
QScatterDataArray items(100);
for (int i = 0; i < items.size(); i++)
items[i].setPosition(randVector());
- int addIndex = m_chart->dataProxy()->addItems(items);
- qDebug() << m_loopCounter << "added bunch to index:" << addIndex << "array size:" << m_chart->dataProxy()->array()->size();
+ int addIndex = m_chart->activeDataProxy()->addItems(items);
+ qDebug() << m_loopCounter << "added bunch to index:" << addIndex << "array size:" << m_chart->activeDataProxy()->array()->size();
}
void ScatterDataModifier::insertOne()
{
QScatterDataItem item(randVector());
- m_chart->dataProxy()->insertItem(0, item);
- qDebug() << m_loopCounter << "Inserted one, array size:" << m_chart->dataProxy()->array()->size();
+ m_chart->activeDataProxy()->insertItem(0, item);
+ qDebug() << m_loopCounter << "Inserted one, array size:" << m_chart->activeDataProxy()->array()->size();
}
void ScatterDataModifier::insertBunch()
@@ -211,43 +211,43 @@ void ScatterDataModifier::insertBunch()
QScatterDataArray items(100);
for (int i = 0; i < items.size(); i++)
items[i].setPosition(randVector());
- m_chart->dataProxy()->insertItems(0, items);
- qDebug() << m_loopCounter << "Inserted bunch, array size:" << m_chart->dataProxy()->array()->size();
+ m_chart->activeDataProxy()->insertItems(0, items);
+ qDebug() << m_loopCounter << "Inserted bunch, array size:" << m_chart->activeDataProxy()->array()->size();
}
void ScatterDataModifier::changeOne()
{
- if (m_selectedItem >= 0 && m_chart->dataProxy()->array()->size()) {
+ if (m_selectedItem >= 0 && m_chart->activeDataProxy()->array()->size()) {
QScatterDataItem item(randVector());
- m_chart->dataProxy()->setItem(m_selectedItem, item);
- qDebug() << m_loopCounter << "Changed one, array size:" << m_chart->dataProxy()->array()->size();
+ m_chart->activeDataProxy()->setItem(m_selectedItem, item);
+ qDebug() << m_loopCounter << "Changed one, array size:" << m_chart->activeDataProxy()->array()->size();
}
}
void ScatterDataModifier::changeBunch()
{
- if (m_chart->dataProxy()->array()->size()) {
- int amount = qMin(m_chart->dataProxy()->array()->size(), 100);
+ if (m_chart->activeDataProxy()->array()->size()) {
+ int amount = qMin(m_chart->activeDataProxy()->array()->size(), 100);
QScatterDataArray items(amount);
for (int i = 0; i < items.size(); i++)
items[i].setPosition(randVector());
- m_chart->dataProxy()->setItems(0, items);
- qDebug() << m_loopCounter << "Changed bunch, array size:" << m_chart->dataProxy()->array()->size();
+ m_chart->activeDataProxy()->setItems(0, items);
+ qDebug() << m_loopCounter << "Changed bunch, array size:" << m_chart->activeDataProxy()->array()->size();
}
}
void ScatterDataModifier::removeOne()
{
if (m_selectedItem >= 0) {
- m_chart->dataProxy()->removeItems(m_selectedItem, 1);
- qDebug() << m_loopCounter << "Removed one, array size:" << m_chart->dataProxy()->array()->size();
+ m_chart->activeDataProxy()->removeItems(m_selectedItem, 1);
+ qDebug() << m_loopCounter << "Removed one, array size:" << m_chart->activeDataProxy()->array()->size();
}
}
void ScatterDataModifier::removeBunch()
{
- m_chart->dataProxy()->removeItems(0, 100);
- qDebug() << m_loopCounter << "Removed bunch, array size:" << m_chart->dataProxy()->array()->size();
+ m_chart->activeDataProxy()->removeItems(0, 100);
+ qDebug() << m_loopCounter << "Removed bunch, array size:" << m_chart->activeDataProxy()->array()->size();
}
void ScatterDataModifier::timeout()
diff --git a/examples/spectrum/spectrumapp/main.cpp b/examples/spectrum/spectrumapp/main.cpp
index e5994b20..32076b88 100644
--- a/examples/spectrum/spectrumapp/main.cpp
+++ b/examples/spectrum/spectrumapp/main.cpp
@@ -70,9 +70,6 @@ MainApp::MainApp(Q3DBars *window)
// Disable grid
m_chart->setGridVisible(false);
// Disable auto-scaling of height by defining explicit range
- // By setting count to 0 we avoid getting any grid
- m_chart->setValueAxis(new QValueAxis);
- m_chart->valueAxis()->setSegmentCount(0);
m_chart->valueAxis()->setRange(0.0, 1.0);
// Disable shadows
m_chart->setShadowQuality(QDataVis::ShadowNone);
@@ -103,7 +100,7 @@ MainApp::MainApp(Q3DBars *window)
QObject::connect(m_restartTimer, &QTimer::timeout, this, &MainApp::restart);
QBarDataProxy *proxy = new QBarDataProxy;
- m_chart->setDataProxy(proxy);
+ m_chart->setActiveDataProxy(proxy);
}
MainApp::~MainApp()
@@ -140,7 +137,7 @@ void MainApp::spectrumChanged(qint64 position, qint64 length, const FrequencySpe
(*data)[barIndex(e.frequency)].setValue(qMax(data->at(barIndex(e.frequency)).value(), qreal(e.amplitude)));
}
}
- static_cast<QBarDataProxy *>(m_chart->dataProxy())->insertRow(0, data);
+ static_cast<QBarDataProxy *>(m_chart->activeDataProxy())->insertRow(0, data);
}
void MainApp::stateChanged(QAudio::Mode mode, QAudio::State state)
diff --git a/examples/surfacechart/chartmodifier.cpp b/examples/surfacechart/chartmodifier.cpp
index 0b4fb98d..3def79c4 100644
--- a/examples/surfacechart/chartmodifier.cpp
+++ b/examples/surfacechart/chartmodifier.cpp
@@ -30,9 +30,6 @@ ChartModifier::ChartModifier(Q3DSurface *chart)
m_xCount(10),
m_zCount(10)
{
- m_chart->setAxisX(new QValueAxis);
- m_chart->setAxisY(new QValueAxis);
- m_chart->setAxisZ(new QValueAxis);
}
ChartModifier::~ChartModifier()
diff --git a/examples/widget/chart.cpp b/examples/widget/chart.cpp
index 62b35c2e..7468ec0d 100644
--- a/examples/widget/chart.cpp
+++ b/examples/widget/chart.cpp
@@ -48,7 +48,10 @@ ChartModifier::ChartModifier(Q3DBars *barchart)
m_yearAxis(new QCategoryAxis),
m_monthAxis(new QCategoryAxis),
m_genericRowAxis(new QCategoryAxis),
- m_genericColumnAxis(new QCategoryAxis)
+ m_genericColumnAxis(new QCategoryAxis),
+ m_temperatureData(new QBarDataProxy),
+ m_genericData(new QBarDataProxy),
+ m_currentAxis(m_fixedRangeAxis)
{
// Don't set any styles or specifications, start from defaults
// Generate generic labels
@@ -110,6 +113,16 @@ ChartModifier::ChartModifier(Q3DBars *barchart)
m_chart->addAxis(m_monthAxis);
m_chart->addAxis(m_genericRowAxis);
m_chart->addAxis(m_genericColumnAxis);
+
+ m_temperatureData->setItemLabelFormat(QStringLiteral("@valueTitle for @colLabel @rowLabel: @valueLabel"));
+ m_genericData->setItemLabelFormat(QStringLiteral("@valueTitle for (@rowIdx, @colIdx): @valueLabel"));
+
+ m_chart->addDataProxy(m_temperatureData);
+ m_chart->addDataProxy(m_genericData);
+
+ m_chart->setFont(QFont("Times Roman", 20));
+
+ resetTemperatureData();
}
ChartModifier::~ChartModifier()
@@ -119,8 +132,6 @@ ChartModifier::~ChartModifier()
void ChartModifier::start()
{
- m_chart->setFont(QFont("Times Roman", 20));
-
restart(false);
}
@@ -129,7 +140,7 @@ void ChartModifier::restart(bool dynamicData)
m_static = !dynamicData;
if (m_static) {
- resetData();
+ m_chart->setActiveDataProxy(m_temperatureData);
m_chart->setTitle(QStringLiteral("Average temperatures in Oulu, Finland (2006-2012)"));
@@ -139,22 +150,17 @@ void ChartModifier::restart(bool dynamicData)
m_chart->setDataWindow(m_years.size(), m_months.size());
m_chart->setSelectionMode(QDataVis::ModeItem);
- m_chart->dataProxy()->setItemLabelFormat(QStringLiteral("@valueTitle for @colLabel @rowLabel: @valueLabel"));
-
} else {
-
- m_chart->dataProxy()->resetArray(0);
+ m_chart->setActiveDataProxy(m_genericData);
m_chart->setTitle(QStringLiteral("Generic data"));
- m_chart->setValueAxis(m_fixedRangeAxis);
+ m_chart->setValueAxis(m_currentAxis);
m_chart->setRowAxis(m_genericRowAxis);
m_chart->setColumnAxis(m_genericColumnAxis);
m_chart->setDataWindow(m_rowCount, m_columnCount);
m_chart->setSelectionMode(QDataVis::ModeItem);
- m_chart->dataProxy()->setItemLabelFormat(QStringLiteral("@valueTitle for (@rowIdx, @colIdx): @valueLabel"));
-
}
}
@@ -174,15 +180,17 @@ void ChartModifier::swapAxis()
int state = ++counter % 3;
if (state == 0) {
- m_chart->setValueAxis(m_fixedRangeAxis);
+ m_currentAxis = m_fixedRangeAxis;
qDebug() << "Fixed range axis";
} else if (state == 1) {
- m_chart->setValueAxis(m_autoAdjustingAxis);
+ m_currentAxis = m_autoAdjustingAxis;
qDebug() << "Automatic range axis";
} else {
- m_chart->setValueAxis(0);
+ m_currentAxis = 0;
qDebug() << "default axis";
}
+
+ m_chart->setValueAxis(m_currentAxis);
}
void ChartModifier::releaseAxes()
@@ -199,7 +207,15 @@ void ChartModifier::releaseAxes()
m_chart->releaseAxis(m_genericColumnAxis);
}
-void ChartModifier::resetData()
+void ChartModifier::releaseProxies()
+{
+ // Releases all proxies - results in default proxy.
+ // Proxies will get readded back when graph is switched as setDataProxy call is made.
+ m_chart->releaseDataProxy(m_temperatureData);
+ m_chart->releaseDataProxy(m_genericData);
+}
+
+void ChartModifier::resetTemperatureData()
{
// Set up data
@@ -213,9 +229,6 @@ void ChartModifier::resetData()
{-8.7f, -11.3f, -2.3f, 0.4f, 7.5f, 12.2f, 16.4f, 14.1f, 9.2f, 3.1f, 0.3f, -12.1f} // 2012
};
- // Use default data proxy to feed data directly in expected format
- QBarDataProxy *proxy = m_chart->dataProxy();
-
// Create data rows
QBarDataArray *dataSet = new QBarDataArray;
QBarDataRow *dataRow;
@@ -234,7 +247,7 @@ void ChartModifier::resetData()
// Add data to chart (chart assumes ownership)
- proxy->resetArray(dataSet);
+ m_temperatureData->resetArray(dataSet);
}
void ChartModifier::addRow()
@@ -247,7 +260,7 @@ void ChartModifier::addRow()
// TODO Needs to be changed to account for data window offset once it is implemented.
int row = qMax(m_selectedBarPos.x(), 0);
- m_chart->dataProxy()->insertRow(row, dataRow);
+ m_chart->activeDataProxy()->insertRow(row, dataRow);
}
void ChartModifier::addRows()
@@ -258,13 +271,13 @@ void ChartModifier::addRows()
for (int i = 0; i < m_rowCount; i++) {
QBarDataRow *dataRow = new QBarDataRow(m_columnCount);
for (int j = 0; j < m_columnCount; j++)
- (*dataRow)[j].setValue(qreal(j + i + m_chart->dataProxy()->rowCount()));
+ (*dataRow)[j].setValue(qreal(j + i + m_chart->activeDataProxy()->rowCount()));
dataArray.append(dataRow);
}
// TODO Needs to be changed to account for data window offset once it is implemented.
int row = qMax(m_selectedBarPos.x(), 0);
- m_chart->dataProxy()->insertRows(row, dataArray);
+ m_chart->activeDataProxy()->insertRows(row, dataArray);
qDebug() << "Added" << m_rowCount << "rows, time:" << timer.elapsed();
}
@@ -275,7 +288,7 @@ void ChartModifier::changeItem()
int column = m_selectedBarPos.y();
if (row >= 0 && column >= 0) {
QBarDataItem item(qreal(rand() % 100));
- m_chart->dataProxy()->setItem(row, column, item);
+ m_chart->activeDataProxy()->setItem(row, column, item);
}
}
@@ -284,10 +297,10 @@ void ChartModifier::changeRow()
// TODO Needs to be changed to account for data window offset once it is implemented.
int row = m_selectedBarPos.x();
if (row >= 0) {
- QBarDataRow *newRow = new QBarDataRow(m_chart->dataProxy()->rowAt(row)->size());
+ QBarDataRow *newRow = new QBarDataRow(m_chart->activeDataProxy()->rowAt(row)->size());
for (int i = 0; i < newRow->size(); i++)
(*newRow)[i].setValue(qreal(rand() % 100));
- m_chart->dataProxy()->setRow(row, newRow);
+ m_chart->activeDataProxy()->setRow(row, newRow);
}
}
@@ -299,12 +312,12 @@ void ChartModifier::changeRows()
int startRow = qMax(row - 2, 0);
QBarDataArray newArray;
for (int i = startRow; i <= row; i++ ) {
- QBarDataRow *newRow = new QBarDataRow(m_chart->dataProxy()->rowAt(i)->size());
+ QBarDataRow *newRow = new QBarDataRow(m_chart->activeDataProxy()->rowAt(i)->size());
for (int j = 0; j < newRow->size(); j++)
(*newRow)[j].setValue(qreal(rand() % 100));
newArray.append(newRow);
}
- m_chart->dataProxy()->setRows(startRow, newArray);
+ m_chart->activeDataProxy()->setRows(startRow, newArray);
}
}
@@ -313,7 +326,7 @@ void ChartModifier::removeRow()
// TODO Needs to be changed to account for data window offset once it is implemented.
int row = m_selectedBarPos.x();
if (row >= 0)
- m_chart->dataProxy()->removeRows(row, 1);
+ m_chart->activeDataProxy()->removeRows(row, 1);
}
void ChartModifier::removeRows()
@@ -322,7 +335,7 @@ void ChartModifier::removeRows()
int row = m_selectedBarPos.x();
if (row >= 0) {
int startRow = qMax(row - 2, 0);
- m_chart->dataProxy()->removeRows(startRow, 3);
+ m_chart->activeDataProxy()->removeRows(startRow, 3);
}
}
diff --git a/examples/widget/chart.h b/examples/widget/chart.h
index a4b6d78d..3319df06 100644
--- a/examples/widget/chart.h
+++ b/examples/widget/chart.h
@@ -35,7 +35,7 @@ public:
explicit ChartModifier(Q3DBars *barchart);
~ChartModifier();
- void resetData();
+ void resetTemperatureData();
void addRow();
void addRows();
void changeItem();
@@ -65,6 +65,7 @@ public:
void selectBar();
void swapAxis();
void releaseAxes();
+ void releaseProxies();
public slots:
void changeShadowQuality(int quality);
@@ -99,6 +100,9 @@ private:
QCategoryAxis *m_monthAxis;
QCategoryAxis *m_genericRowAxis;
QCategoryAxis *m_genericColumnAxis;
+ QBarDataProxy *m_temperatureData;
+ QBarDataProxy *m_genericData;
+ QValueAxis *m_currentAxis;
};
#endif
diff --git a/examples/widget/main.cpp b/examples/widget/main.cpp
index 628fc453..a774c0e8 100644
--- a/examples/widget/main.cpp
+++ b/examples/widget/main.cpp
@@ -106,6 +106,10 @@ int main(int argc, char **argv)
releaseAxesButton->setText(QStringLiteral("Release all axes"));
releaseAxesButton->setEnabled(true);
+ QPushButton *releaseProxiesButton = new QPushButton(widget);
+ releaseProxiesButton->setText(QStringLiteral("Release all proxies"));
+ releaseProxiesButton->setEnabled(true);
+
QCheckBox *backgroundCheckBox = new QCheckBox(widget);
backgroundCheckBox->setText(QStringLiteral("Show background"));
backgroundCheckBox->setChecked(true);
@@ -206,6 +210,7 @@ int main(int argc, char **argv)
vLayout->addWidget(setSelectedBarButton, 0, Qt::AlignTop);
vLayout->addWidget(swapAxisButton, 0, Qt::AlignTop);
vLayout->addWidget(releaseAxesButton, 0, Qt::AlignTop);
+ vLayout->addWidget(releaseProxiesButton, 0, Qt::AlignTop);
vLayout->addWidget(backgroundCheckBox);
vLayout->addWidget(gridCheckBox);
vLayout->addWidget(new QLabel(QStringLiteral("Adjust shadow quality")));
@@ -268,6 +273,8 @@ int main(int argc, char **argv)
&ChartModifier::swapAxis);
QObject::connect(releaseAxesButton, &QPushButton::clicked, modifier,
&ChartModifier::releaseAxes);
+ QObject::connect(releaseProxiesButton, &QPushButton::clicked, modifier,
+ &ChartModifier::releaseProxies);
QObject::connect(fontList, &QFontComboBox::currentFontChanged, modifier,
&ChartModifier::changeFont);