summaryrefslogtreecommitdiffstats
path: root/examples/widget/chart.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/widget/chart.cpp')
-rw-r--r--examples/widget/chart.cpp286
1 files changed, 17 insertions, 269 deletions
diff --git a/examples/widget/chart.cpp b/examples/widget/chart.cpp
index 106fd2d6..017961cb 100644
--- a/examples/widget/chart.cpp
+++ b/examples/widget/chart.cpp
@@ -28,71 +28,22 @@ const QString celsiusString = QString(QChar(0xB0)) + "C";
ChartModifier::ChartModifier(Q3DBars *barchart)
: m_chart(barchart),
- m_columnCount(21),
- m_rowCount(21),
m_xRotation(0.0f),
m_yRotation(0.0f),
- m_static(true),
- m_barThicknessRatio(1.0),
- m_barSpacingX(0.1f),
- m_barSpacingZ(0.1f),
m_fontSize(20),
m_segments(4),
m_subSegments(3),
m_minval(-20.0), // TODO Barchart Y-axis currently only properly supports zero-centered ranges
m_maxval(20.0),
- m_selectedBarPos(-1, -1),
- m_autoAdjustingAxis(new QValueAxis),
- m_fixedRangeAxis(new QValueAxis),
m_temperatureAxis(new QValueAxis),
m_yearAxis(new QCategoryAxis),
m_monthAxis(new QCategoryAxis),
- m_genericRowAxis(new QCategoryAxis),
- m_genericColumnAxis(new QCategoryAxis),
- m_temperatureData(new QBarDataProxy),
- m_genericData(new QBarDataProxy),
- m_currentAxis(m_fixedRangeAxis)
+ m_temperatureData(new QBarDataProxy)
{
- // Don't set any styles or specifications, start from defaults
- // Generate generic labels
- QStringList genericRowLabels;
- QStringList genericColumnLabels;
- for (int i = 0; i < 200; i++) {
- if (i % 5)
- genericRowLabels << QString();
- else
- genericRowLabels << QStringLiteral("Row %1").arg(i);
- }
- for (int i = 0; i < 200; i++) {
- if (i % 5)
- genericColumnLabels << QString();
- else
- genericColumnLabels << QStringLiteral("Column %1").arg(i);
- }
-
m_months << "January" << "February" << "March" << "April" << "May" << "June" << "July" << "August" << "September" << "October" << "November" << "December";
m_years << "2006" << "2007" << "2008" << "2009" << "2010" << "2011" << "2012";
- QString labelFormat(QStringLiteral("%.3f"));
- QString axisTitle("Generic Value");
-
- m_autoAdjustingAxis->setLabelFormat(labelFormat);
- m_autoAdjustingAxis->setTitle(axisTitle);
- m_autoAdjustingAxis->setSegmentCount(m_segments * 2);
- m_autoAdjustingAxis->setSubSegmentCount(1);
- m_autoAdjustingAxis->setAutoAdjustRange(true);
-
- m_fixedRangeAxis->setLabelFormat(labelFormat);
- m_fixedRangeAxis->setTitle(axisTitle);
- m_fixedRangeAxis->setSegmentCount(m_segments);
- m_fixedRangeAxis->setSubSegmentCount(m_subSegments);
- m_fixedRangeAxis->setRange(0.0, 100.0);
-
- m_genericRowAxis->setTitle("Generic Row");
- m_genericRowAxis->setCategoryLabels(genericRowLabels);
-
- m_genericColumnAxis->setTitle("Generic Column");
- m_genericColumnAxis->setCategoryLabels(genericColumnLabels);
+ m_chart->setBackgroundVisible(false);
m_temperatureAxis->setTitle("Average temperature");
m_temperatureAxis->setSegmentCount(m_segments);
@@ -106,24 +57,20 @@ ChartModifier::ChartModifier(Q3DBars *barchart)
m_monthAxis->setTitle("Month");
m_monthAxis->setCategoryLabels(m_months);
- m_chart->addAxis(m_autoAdjustingAxis);
- m_chart->addAxis(m_fixedRangeAxis);
m_chart->addAxis(m_temperatureAxis);
m_chart->addAxis(m_yearAxis);
m_chart->addAxis(m_monthAxis);
- m_chart->addAxis(m_genericRowAxis);
- m_chart->addAxis(m_genericColumnAxis);
m_chart->setShadowQuality(QDataVis::ShadowSoftMedium);
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));
+ m_chart->setSelectionMode(QDataVis::ModeItem);
+
resetTemperatureData();
}
@@ -134,92 +81,19 @@ ChartModifier::~ChartModifier()
void ChartModifier::start()
{
- restart(false);
-}
-
-void ChartModifier::restart(bool dynamicData)
-{
- m_static = !dynamicData;
-
- if (m_static) {
- m_chart->setActiveDataProxy(m_temperatureData);
-
- m_chart->setTitle(QStringLiteral("Average temperatures in Oulu, Finland (2006-2012)"));
-
- m_chart->setValueAxis(m_temperatureAxis);
- m_chart->setRowAxis(m_yearAxis);
- m_chart->setColumnAxis(m_monthAxis);
-
- m_chart->setDataWindow(m_years.size(), m_months.size());
- m_chart->setSelectionMode(QDataVis::ModeItem);
- } else {
- m_chart->setActiveDataProxy(m_genericData);
-
- m_chart->setTitle(QStringLiteral("Generic data"));
-
- 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);
- }
-}
-
-void ChartModifier::selectBar()
-{
- QPoint targetBar(5, 5);
- QPoint noSelection(-1, -1);
- if (m_selectedBarPos != targetBar)
- m_chart->setSelectedBarPos(targetBar);
- else
- m_chart->setSelectedBarPos(noSelection);
-}
+ m_chart->setActiveDataProxy(m_temperatureData);
-void ChartModifier::swapAxis()
-{
- static int counter = 0;
- int state = ++counter % 3;
-
- if (state == 0) {
- m_currentAxis = m_fixedRangeAxis;
- qDebug() << "Fixed range axis";
- } else if (state == 1) {
- m_currentAxis = m_autoAdjustingAxis;
- qDebug() << "Automatic range axis";
- } else {
- m_currentAxis = 0;
- qDebug() << "default axis";
- }
+ m_chart->setTitle(QStringLiteral("Average temperatures in Oulu, Finland (2006-2012)"));
- m_chart->setValueAxis(m_currentAxis);
-}
+ m_chart->setValueAxis(m_temperatureAxis);
+ m_chart->setRowAxis(m_yearAxis);
+ m_chart->setColumnAxis(m_monthAxis);
-void ChartModifier::releaseAxes()
-{
- // Releases all axes - results in default axes for all dimensions.
- // Axes reset when the graph is switched as set*Axis calls are made, which
- // implicitly add axes.
- m_chart->releaseAxis(m_autoAdjustingAxis);
- m_chart->releaseAxis(m_fixedRangeAxis);
- m_chart->releaseAxis(m_temperatureAxis);
- m_chart->releaseAxis(m_yearAxis);
- m_chart->releaseAxis(m_monthAxis);
- m_chart->releaseAxis(m_genericRowAxis);
- m_chart->releaseAxis(m_genericColumnAxis);
-}
-
-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);
+ m_chart->setDataWindow(m_years.size(), m_months.size());
}
void ChartModifier::resetTemperatureData()
{
-
// Set up data
static const float temp[7][12] = {
{-6.7f, -11.7f, -9.7f, 3.3f, 9.2f, 14.0f, 16.3f, 17.8f, 10.2f, 2.1f, -2.6f, -0.3f}, // 2006
@@ -247,103 +121,13 @@ void ChartModifier::resetTemperatureData()
dataSet->append(dataRow);
}
-
// Add data to chart (chart assumes ownership)
m_temperatureData->resetArray(dataSet);
}
-void ChartModifier::addRow()
-{
- QBarDataRow *dataRow = new QBarDataRow(m_columnCount);
- for (float i = 0; i < m_columnCount; i++) {
- (*dataRow)[i].setValue(((i + 1) / (float)m_columnCount) * (float)(rand() % 100));
- //(*dataRow)[i].setValue(i + m_chart->dataProxy()->rowCount());
- }
-
- // TODO Needs to be changed to account for data window offset once it is implemented.
- int row = qMax(m_selectedBarPos.x(), 0);
- m_chart->activeDataProxy()->insertRow(row, dataRow);
-}
-
-void ChartModifier::addRows()
-{
- QTime timer;
- timer.start();
- QBarDataArray dataArray;
- 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->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->activeDataProxy()->insertRows(row, dataArray);
- qDebug() << "Added" << m_rowCount << "rows, time:" << timer.elapsed();
-}
-
-void ChartModifier::changeItem()
-{
- // TODO Needs to be changed to account for data window offset once it is implemented.
- int row = m_selectedBarPos.x();
- int column = m_selectedBarPos.y();
- if (row >= 0 && column >= 0) {
- QBarDataItem item(qreal(rand() % 100));
- m_chart->activeDataProxy()->setItem(row, column, item);
- }
-}
-
-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->activeDataProxy()->rowAt(row)->size());
- for (int i = 0; i < newRow->size(); i++)
- (*newRow)[i].setValue(qreal(rand() % 100));
- m_chart->activeDataProxy()->setRow(row, newRow);
- }
-}
-
-void ChartModifier::changeRows()
-{
- // TODO Needs to be changed to account for data window offset once it is implemented.
- int row = m_selectedBarPos.x();
- if (row >= 0) {
- int startRow = qMax(row - 2, 0);
- QBarDataArray newArray;
- for (int i = startRow; i <= row; i++ ) {
- 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->activeDataProxy()->setRows(startRow, newArray);
- }
-}
-
-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->activeDataProxy()->removeRows(row, 1);
-}
-
-void ChartModifier::removeRows()
-{
- // TODO Needs to be changed to account for data window offset once it is implemented.
- int row = m_selectedBarPos.x();
- if (row >= 0) {
- int startRow = qMax(row - 2, 0);
- m_chart->activeDataProxy()->removeRows(startRow, 3);
- }
-}
-
void ChartModifier::changeStyle()
{
- static int model = 0;
+ static int model = 9;
switch (model) {
case 0:
m_chart->setBarType(QDataVis::Cylinders, false);
@@ -393,7 +177,7 @@ void ChartModifier::changePresetCamera()
void ChartModifier::changeTheme()
{
- static int theme = QDataVis::ThemeSystem;
+ static int theme = QDataVis::ThemeBlueCerulean;
m_chart->setTheme((QDataVis::ColorTheme)theme);
@@ -408,7 +192,7 @@ void ChartModifier::changeTransparency()
m_chart->setLabelTransparency((QDataVis::LabelTransparency)transparency);
if (++transparency > QDataVis::TransparencyNoBackground)
- transparency = QDataVis::TransparencyFromTheme;
+ transparency = QDataVis::TransparencyNone;
}
void ChartModifier::changeSelectionMode()
@@ -443,12 +227,6 @@ void ChartModifier::shadowQualityUpdatedByVisual(QDataVis::ShadowQuality sq)
emit shadowQualityChanged(quality);
}
-void ChartModifier::handleSelectionChange(const QPoint &position)
-{
- m_selectedBarPos = position;
- qDebug() << "Selected bar position:" << position;
-}
-
void ChartModifier::changeShadowQuality(int quality)
{
QDataVis::ShadowQuality sq = QDataVis::ShadowQuality(quality);
@@ -456,16 +234,6 @@ void ChartModifier::changeShadowQuality(int quality)
emit shadowQualityChanged(quality);
}
-void ChartModifier::setBackgroundEnabled(int enabled)
-{
- m_chart->setBackgroundVisible((bool)enabled);
-}
-
-void ChartModifier::setGridEnabled(int enabled)
-{
- m_chart->setGridVisible((bool)enabled);
-}
-
void ChartModifier::rotateX(int rotation)
{
m_xRotation = rotation;
@@ -478,32 +246,12 @@ void ChartModifier::rotateY(int rotation)
m_chart->setCameraPosition(m_xRotation, m_yRotation);
}
-void ChartModifier::setSpecsRatio(int barwidth)
-{
- m_barThicknessRatio = (float)barwidth / 30.0f;
- m_chart->setBarSpecs(m_barThicknessRatio, QSizeF(m_barSpacingX, m_barSpacingZ));
-}
-
-void ChartModifier::setSpacingSpecsX(int spacing)
-{
- m_barSpacingX = (float)spacing / 100.0f;
- m_chart->setBarSpecs(m_barThicknessRatio, QSizeF(m_barSpacingX, m_barSpacingZ));
-}
-
-void ChartModifier::setSpacingSpecsZ(int spacing)
-{
- m_barSpacingZ = (float)spacing / 100.0f;
- m_chart->setBarSpecs(m_barThicknessRatio, QSizeF(m_barSpacingX, m_barSpacingZ));
-}
-
-void ChartModifier::setSampleCountX(int samples)
+void ChartModifier::setBackgroundEnabled(int enabled)
{
- m_columnCount = samples;
- m_chart->setDataWindow(m_rowCount, m_columnCount);
+ m_chart->setBackgroundVisible((bool)enabled);
}
-void ChartModifier::setSampleCountZ(int samples)
+void ChartModifier::setGridEnabled(int enabled)
{
- m_rowCount = samples;
- m_chart->setDataWindow(m_rowCount, m_columnCount);
+ m_chart->setGridVisible((bool)enabled);
}