diff options
Diffstat (limited to 'examples/widget/chart.cpp')
-rw-r--r-- | examples/widget/chart.cpp | 286 |
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); } |