##// END OF EJS Templates
QSplineSeries calculateControlPoints moved to splinechartitem. This way we don't need to deal with controlPoints on logaritmic scale
QSplineSeries calculateControlPoints moved to splinechartitem. This way we don't need to deal with controlPoints on logaritmic scale

File last commit:

r2273:1c49aa901cb2
r2372:d6a999e30ac3
Show More
themewidget.cpp
371 lines | 12.5 KiB | text/x-c | CppLexer
Michal Klocek
Updates chartstheme demo, small refactor
r748 /****************************************************************************
Jani Honkonen
Add/modify license headers
r830 **
** Copyright (C) 2012 Digia Plc
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
** This file is part of the Qt Commercial Charts Add-on.
**
** $QT_BEGIN_LICENSE$
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia.
**
** If you have questions regarding the use of this file, please use
** contact form at http://qt.digia.com
** $QT_END_LICENSE$
**
****************************************************************************/
Michal Klocek
Updates chartstheme demo, small refactor
r748
#include "themewidget.h"
#include <QChartView>
#include <QPieSeries>
#include <QPieSlice>
sauimone
renamed barseries files to abstractbarseries
r1586 #include <QAbstractBarSeries>
Michal Klocek
Updates chartstheme demo, small refactor
r748 #include <QPercentBarSeries>
#include <QStackedBarSeries>
sauimone
refactored baranimations
r1673 #include <QBarSeries>
Michal Klocek
Updates chartstheme demo, small refactor
r748 #include <QBarSet>
#include <QLineSeries>
#include <QSplineSeries>
#include <QScatterSeries>
#include <QAreaSeries>
sauimone
legend pos to theme example, legend padding
r803 #include <QLegend>
Michal Klocek
Updates chartstheme demo, small refactor
r748 #include <QGridLayout>
#include <QFormLayout>
#include <QComboBox>
#include <QSpinBox>
#include <QCheckBox>
#include <QGroupBox>
#include <QLabel>
#include <QTime>
Marek Rosa
QBarCategoriesAxis renamed to QBarCategoryAxis
r1809 #include <QBarCategoryAxis>
Michal Klocek
Updates chartstheme demo, small refactor
r748
Jani Honkonen
coding style fixes for demos
r2099 ThemeWidget::ThemeWidget(QWidget *parent) :
Michal Klocek
Updates chartstheme demo, small refactor
r748 QWidget(parent),
m_listCount(3),
Tero Ahola
Better test data for theme demo
r843 m_valueMax(10),
m_valueCount(7),
Jani Honkonen
coding style fixes for demos
r2099 m_dataTable(generateRandomData(m_listCount, m_valueMax, m_valueCount)),
Michal Klocek
Updates chartstheme demo, small refactor
r748 m_themeComboBox(createThemeBox()),
Tero Ahola
Removed default theme, now using light as the default
r853 m_antialiasCheckBox(new QCheckBox("Anti-aliasing")),
sauimone
legend pos to theme example, legend padding
r803 m_animatedComboBox(createAnimationBox()),
m_legendComboBox(createLegendBox())
Michal Klocek
Updates chartstheme demo, small refactor
r748 {
connectSignals();
// create layout
Jani Honkonen
coding style fixes for demos
r2099 QGridLayout *baseLayout = new QGridLayout();
Michal Klocek
Updates chartstheme demo, small refactor
r748 QHBoxLayout *settingsLayout = new QHBoxLayout();
settingsLayout->addWidget(new QLabel("Theme:"));
settingsLayout->addWidget(m_themeComboBox);
settingsLayout->addWidget(new QLabel("Animation:"));
settingsLayout->addWidget(m_animatedComboBox);
Michal Klocek
Refactor qledgend handling...
r855 settingsLayout->addWidget(new QLabel("Legend:"));
sauimone
legend pos to theme example, legend padding
r803 settingsLayout->addWidget(m_legendComboBox);
Michal Klocek
Updates chartstheme demo, small refactor
r748 settingsLayout->addWidget(m_antialiasCheckBox);
settingsLayout->addStretch();
baseLayout->addLayout(settingsLayout, 0, 0, 1, 3);
//create charts
QChartView *chartView;
chartView = new QChartView(createAreaChart());
baseLayout->addWidget(chartView, 1, 0);
m_charts << chartView;
chartView = new QChartView(createBarChart(m_valueCount));
baseLayout->addWidget(chartView, 1, 1);
m_charts << chartView;
chartView = new QChartView(createLineChart());
baseLayout->addWidget(chartView, 1, 2);
m_charts << chartView;
chartView = new QChartView(createPieChart());
chartView->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); // funny things happen if the pie slice labels no not fit the screen...
baseLayout->addWidget(chartView, 2, 0);
m_charts << chartView;
chartView = new QChartView(createSplineChart());
baseLayout->addWidget(chartView, 2, 1);
m_charts << chartView;
Michal Klocek
minor. typo
r754 chartView = new QChartView(createScatterChart());
Michal Klocek
Updates chartstheme demo, small refactor
r748 baseLayout->addWidget(chartView, 2, 2);
m_charts << chartView;
setLayout(baseLayout);
Tero Ahola
Better test data for theme demo
r843
// Set defaults
m_antialiasCheckBox->setChecked(true);
Michal Klocek
Refactor qledgend handling...
r855 updateUI();
Michal Klocek
Updates chartstheme demo, small refactor
r748 }
ThemeWidget::~ThemeWidget()
{
}
void ThemeWidget::connectSignals()
{
connect(m_themeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(updateUI()));
connect(m_antialiasCheckBox, SIGNAL(toggled(bool)), this, SLOT(updateUI()));
connect(m_animatedComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(updateUI()));
sauimone
legend pos to theme example, legend padding
r803 connect(m_legendComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(updateUI()));
Michal Klocek
Updates chartstheme demo, small refactor
r748 }
Jani Honkonen
coding style fixes for demos
r2099 DataTable ThemeWidget::generateRandomData(int listCount, int valueMax, int valueCount) const
Michal Klocek
Updates chartstheme demo, small refactor
r748 {
DataTable dataTable;
// set seed for random stuff
qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
// generate random data
for (int i(0); i < listCount; i++) {
DataList dataList;
Tero Ahola
Better test data for theme demo
r843 qreal yValue(0);
Michal Klocek
Updates chartstheme demo, small refactor
r748 for (int j(0); j < valueCount; j++) {
Jani Honkonen
coding style fixes for demos
r2099 yValue = yValue + (qreal)(qrand() % valueMax) / (qreal) valueCount;
Tero Ahola
Better test data for theme demo
r843 QPointF value((j + (qreal) rand() / (qreal) RAND_MAX) * ((qreal) m_valueMax / (qreal) valueCount),
yValue);
Tero Ahola
Theme example sets and slices renamed (shown if legend enabled)
r945 QString label = "Slice " + QString::number(i) + ":" + QString::number(j);
Michal Klocek
Updates chartstheme demo, small refactor
r748 dataList << Data(value, label);
}
dataTable << dataList;
}
return dataTable;
}
Jani Honkonen
coding style fixes for demos
r2099 QComboBox *ThemeWidget::createThemeBox() const
Michal Klocek
Updates chartstheme demo, small refactor
r748 {
// settings layout
Jani Honkonen
coding style fixes for demos
r2099 QComboBox *themeComboBox = new QComboBox();
Michal Klocek
Updates chartstheme demo, small refactor
r748 themeComboBox->addItem("Light", QChart::ChartThemeLight);
themeComboBox->addItem("Blue Cerulean", QChart::ChartThemeBlueCerulean);
themeComboBox->addItem("Dark", QChart::ChartThemeDark);
themeComboBox->addItem("Brown Sand", QChart::ChartThemeBrownSand);
themeComboBox->addItem("Blue NCS", QChart::ChartThemeBlueNcs);
Tero Ahola
Added Icy Blue and High Contrast theme
r757 themeComboBox->addItem("High Contrast", QChart::ChartThemeHighContrast);
themeComboBox->addItem("Blue Icy", QChart::ChartThemeBlueIcy);
Michal Klocek
Updates chartstheme demo, small refactor
r748 return themeComboBox;
}
Jani Honkonen
coding style fixes for demos
r2099 QComboBox *ThemeWidget::createAnimationBox() const
Michal Klocek
Updates chartstheme demo, small refactor
r748 {
// settings layout
Jani Honkonen
coding style fixes for demos
r2099 QComboBox *animationComboBox = new QComboBox();
Michal Klocek
Updates chartstheme demo, small refactor
r748 animationComboBox->addItem("No Animations", QChart::NoAnimation);
animationComboBox->addItem("GridAxis Animations", QChart::GridAxisAnimations);
animationComboBox->addItem("Series Animations", QChart::SeriesAnimations);
animationComboBox->addItem("All Animations", QChart::AllAnimations);
return animationComboBox;
}
Jani Honkonen
coding style fixes for demos
r2099 QComboBox *ThemeWidget::createLegendBox() const
sauimone
legend pos to theme example, legend padding
r803 {
Jani Honkonen
coding style fixes for demos
r2099 QComboBox *legendComboBox = new QComboBox();
Michal Klocek
Refactor qledgend handling...
r855 legendComboBox->addItem("No Legend ", 0);
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 legendComboBox->addItem("Legend Top", Qt::AlignTop);
legendComboBox->addItem("Legend Bottom", Qt::AlignBottom);
legendComboBox->addItem("Legend Left", Qt::AlignLeft);
legendComboBox->addItem("Legend Right", Qt::AlignRight);
sauimone
legend pos to theme example, legend padding
r803 return legendComboBox;
}
Jani Honkonen
coding style fixes for demos
r2099 QChart *ThemeWidget::createAreaChart() const
Michal Klocek
Updates chartstheme demo, small refactor
r748 {
QChart *chart = new QChart();
chart->setTitle("Area chart");
Tero Ahola
Better test data for theme demo
r843
// The lower series initialized to zero values
Tero Ahola
Simpler area series in the theme demo
r845 QLineSeries *lowerSeries = 0;
Tero Ahola
Removed key zoom/scroll from QChartView
r958 QString name("Series ");
int nameIndex = 0;
Tero Ahola
Better test data for theme demo
r843 for (int i(0); i < m_dataTable.count(); i++) {
QLineSeries *upperSeries = new QLineSeries(chart);
for (int j(0); j < m_dataTable[i].count(); j++) {
Data data = m_dataTable[i].at(j);
Jani Honkonen
coding style fixes for demos
r2099 if (lowerSeries) {
Michal Klocek
Fixes and improvments to series API...
r1057 const QList<QPointF>& points = lowerSeries->points();
upperSeries->append(QPointF(j, points[i].y() + data.first.y()));
Jani Honkonen
coding style fixes for demos
r2099 } else {
Tero Ahola
Simpler area series in the theme demo
r845 upperSeries->append(QPointF(j, data.first.y()));
Jani Honkonen
coding style fixes for demos
r2099 }
Michal Klocek
Updates chartstheme demo, small refactor
r748 }
Tero Ahola
Better test data for theme demo
r843 QAreaSeries *area = new QAreaSeries(upperSeries, lowerSeries);
area->setName(name + QString::number(nameIndex));
nameIndex++;
chart->addSeries(area);
Marek Rosa
Updated chartthemes demo
r1582 chart->createDefaultAxes();
Tero Ahola
Better test data for theme demo
r843 lowerSeries = upperSeries;
Michal Klocek
Updates chartstheme demo, small refactor
r748 }
Tero Ahola
Removed key zoom/scroll from QChartView
r958
Michal Klocek
Updates chartstheme demo, small refactor
r748 return chart;
}
Jani Honkonen
coding style fixes for demos
r2099 QChart *ThemeWidget::createBarChart(int valueCount) const
Michal Klocek
Updates chartstheme demo, small refactor
r748 {
sauimone
removed warning from chartthemes demo
r1675 Q_UNUSED(valueCount);
Jani Honkonen
coding style fixes for demos
r2099 QChart *chart = new QChart();
Michal Klocek
Updates chartstheme demo, small refactor
r748 chart->setTitle("Bar chart");
Tero Ahola
Removed key zoom/scroll from QChartView
r958
Jani Honkonen
coding style fixes for demos
r2099 QStackedBarSeries *series = new QStackedBarSeries(chart);
Tero Ahola
Better test data for theme demo
r843 for (int i(0); i < m_dataTable.count(); i++) {
Tero Ahola
Theme example sets and slices renamed (shown if legend enabled)
r945 QBarSet *set = new QBarSet("Bar set " + QString::number(i));
Tero Ahola
Better test data for theme demo
r843 foreach (Data data, m_dataTable[i])
*set << data.first.y();
sauimone
Renamed appendBarSet to append, removeBarSet to remove
r1194 series->append(set);
Michal Klocek
Updates chartstheme demo, small refactor
r748 }
Tero Ahola
Better test data for theme demo
r843 chart->addSeries(series);
Michal Klocek
Refactor QChart API...
r1577 chart->createDefaultAxes();
Tero Ahola
Removed key zoom/scroll from QChartView
r958
Michal Klocek
Updates chartstheme demo, small refactor
r748 return chart;
}
Jani Honkonen
coding style fixes for demos
r2099 QChart *ThemeWidget::createLineChart() const
Michal Klocek
Updates chartstheme demo, small refactor
r748 {
Jani Honkonen
coding style fixes for demos
r2099 QChart *chart = new QChart();
Michal Klocek
Updates chartstheme demo, small refactor
r748 chart->setTitle("Line chart");
Tero Ahola
Removed key zoom/scroll from QChartView
r958
sauimone
updated theme example. minor fix to legend
r786 QString name("Series ");
int nameIndex = 0;
Michal Klocek
Updates chartstheme demo, small refactor
r748 foreach (DataList list, m_dataTable) {
QLineSeries *series = new QLineSeries(chart);
foreach (Data data, list)
Jani Honkonen
rename functions add() -> append()
r796 series->append(data.first);
sauimone
updated theme example. minor fix to legend
r786 series->setName(name + QString::number(nameIndex));
nameIndex++;
Michal Klocek
Updates chartstheme demo, small refactor
r748 chart->addSeries(series);
}
Michal Klocek
Adds createDefaultAxes logic
r1588 chart->createDefaultAxes();
Tero Ahola
Removed key zoom/scroll from QChartView
r958
Michal Klocek
Updates chartstheme demo, small refactor
r748 return chart;
}
Jani Honkonen
coding style fixes for demos
r2099 QChart *ThemeWidget::createPieChart() const
Michal Klocek
Updates chartstheme demo, small refactor
r748 {
Jani Honkonen
coding style fixes for demos
r2099 QChart *chart = new QChart();
Michal Klocek
Updates chartstheme demo, small refactor
r748 chart->setTitle("Pie chart");
Tero Ahola
Removed key zoom/scroll from QChartView
r958
Michal Klocek
Updates chartstheme demo, small refactor
r748 qreal pieSize = 1.0 / m_dataTable.count();
for (int i = 0; i < m_dataTable.count(); i++) {
QPieSeries *series = new QPieSeries(chart);
foreach (Data data, m_dataTable[i]) {
Jani Honkonen
pie: change the order of parameters when creating slices to be more intuitive
r1206 QPieSlice *slice = series->append(data.second, data.first.y());
Michal Klocek
Updates chartstheme demo, small refactor
r748 if (data == m_dataTable[i].first()) {
slice->setLabelVisible();
slice->setExploded();
}
}
qreal hPos = (pieSize / 2) + (i / (qreal) m_dataTable.count());
series->setPieSize(pieSize);
Tero Ahola
QSeries name and QPieSeries properties to QML api
r884 series->setHorizontalPosition(hPos);
series->setVerticalPosition(0.5);
Michal Klocek
Updates chartstheme demo, small refactor
r748 chart->addSeries(series);
}
return chart;
}
Jani Honkonen
coding style fixes for demos
r2099 QChart *ThemeWidget::createSplineChart() const
{
// spine chart
QChart *chart = new QChart();
Michal Klocek
Updates chartstheme demo, small refactor
r748 chart->setTitle("Spline chart");
sauimone
updated theme example. minor fix to legend
r786 QString name("Series ");
int nameIndex = 0;
Michal Klocek
Updates chartstheme demo, small refactor
r748 foreach (DataList list, m_dataTable) {
QSplineSeries *series = new QSplineSeries(chart);
foreach (Data data, list)
Jani Honkonen
rename functions add() -> append()
r796 series->append(data.first);
sauimone
updated theme example. minor fix to legend
r786 series->setName(name + QString::number(nameIndex));
nameIndex++;
Michal Klocek
Updates chartstheme demo, small refactor
r748 chart->addSeries(series);
}
Michal Klocek
Adds createDefaultAxes logic
r1588 chart->createDefaultAxes();
Michal Klocek
Updates chartstheme demo, small refactor
r748 return chart;
}
Jani Honkonen
coding style fixes for demos
r2099 QChart *ThemeWidget::createScatterChart() const
{
// scatter chart
QChart *chart = new QChart();
Michal Klocek
Updates chartstheme demo, small refactor
r748 chart->setTitle("Scatter chart");
sauimone
updated theme example. minor fix to legend
r786 QString name("Series ");
int nameIndex = 0;
Michal Klocek
Updates chartstheme demo, small refactor
r748 foreach (DataList list, m_dataTable) {
QScatterSeries *series = new QScatterSeries(chart);
foreach (Data data, list)
Jani Honkonen
rename functions add() -> append()
r796 series->append(data.first);
sauimone
updated theme example. minor fix to legend
r786 series->setName(name + QString::number(nameIndex));
nameIndex++;
Michal Klocek
Updates chartstheme demo, small refactor
r748 chart->addSeries(series);
}
Michal Klocek
Adds createDefaultAxes logic
r1588 chart->createDefaultAxes();
Michal Klocek
Updates chartstheme demo, small refactor
r748 return chart;
}
void ThemeWidget::updateUI()
{
QChart::ChartTheme theme = (QChart::ChartTheme) m_themeComboBox->itemData(m_themeComboBox->currentIndex()).toInt();
if (m_charts.at(0)->chart()->theme() != theme) {
foreach (QChartView *chartView, m_charts)
chartView->chart()->setTheme(theme);
QPalette pal = window()->palette();
if (theme == QChart::ChartThemeLight) {
pal.setColor(QPalette::Window, QRgb(0xf0f0f0));
pal.setColor(QPalette::WindowText, QRgb(0x404044));
Tero Ahola
Added Icy Blue and High Contrast theme
r757 } else if (theme == QChart::ChartThemeDark) {
Michal Klocek
Updates chartstheme demo, small refactor
r748 pal.setColor(QPalette::Window, QRgb(0x121218));
pal.setColor(QPalette::WindowText, QRgb(0xd6d6d6));
Tero Ahola
Added Icy Blue and High Contrast theme
r757 } else if (theme == QChart::ChartThemeBlueCerulean) {
Michal Klocek
Updates chartstheme demo, small refactor
r748 pal.setColor(QPalette::Window, QRgb(0x40434a));
pal.setColor(QPalette::WindowText, QRgb(0xd6d6d6));
Tero Ahola
Added Icy Blue and High Contrast theme
r757 } else if (theme == QChart::ChartThemeBrownSand) {
Michal Klocek
Updates chartstheme demo, small refactor
r748 pal.setColor(QPalette::Window, QRgb(0x9e8965));
pal.setColor(QPalette::WindowText, QRgb(0x404044));
Tero Ahola
Added Icy Blue and High Contrast theme
r757 } else if (theme == QChart::ChartThemeBlueNcs) {
Michal Klocek
Updates chartstheme demo, small refactor
r748 pal.setColor(QPalette::Window, QRgb(0x018bba));
pal.setColor(QPalette::WindowText, QRgb(0x404044));
Tero Ahola
Added Icy Blue and High Contrast theme
r757 } else if (theme == QChart::ChartThemeHighContrast) {
pal.setColor(QPalette::Window, QRgb(0xffab03));
pal.setColor(QPalette::WindowText, QRgb(0x181818));
} else if (theme == QChart::ChartThemeBlueIcy) {
pal.setColor(QPalette::Window, QRgb(0xcee7f0));
pal.setColor(QPalette::WindowText, QRgb(0x404044));
} else {
Michal Klocek
Updates chartstheme demo, small refactor
r748 pal.setColor(QPalette::Window, QRgb(0xf0f0f0));
pal.setColor(QPalette::WindowText, QRgb(0x404044));
}
window()->setPalette(pal);
}
bool checked = m_antialiasCheckBox->isChecked();
foreach (QChartView *chart, m_charts)
chart->setRenderHint(QPainter::Antialiasing, checked);
QChart::AnimationOptions options(m_animatedComboBox->itemData(m_animatedComboBox->currentIndex()).toInt());
if (m_charts.at(0)->chart()->animationOptions() != options) {
foreach (QChartView *chartView, m_charts)
chartView->chart()->setAnimationOptions(options);
}
sauimone
legend pos to theme example, legend padding
r803
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 Qt::Alignment alignment(m_legendComboBox->itemData(m_legendComboBox->currentIndex()).toInt());
Michal Klocek
Refactor qledgend handling...
r855
if (!alignment) {
Jani Honkonen
coding style fixes for demos
r2099 foreach (QChartView *chartView, m_charts)
Michal Klocek
Refactor qledgend handling...
r855 chartView->chart()->legend()->hide();
Tero Ahola
Removed key zoom/scroll from QChartView
r958 } else {
Tero Ahola
Added option for disabling legend in chart theme demo
r848 foreach (QChartView *chartView, m_charts) {
Jani Honkonen
Spelling fix QLegend::setAlignmnent -> setAlignment
r907 chartView->chart()->legend()->setAlignment(alignment);
Michal Klocek
Refactor qledgend handling...
r855 chartView->chart()->legend()->show();
Tero Ahola
Added option for disabling legend in chart theme demo
r848 }
Tero Ahola
Removed key zoom/scroll from QChartView
r958 }
Michal Klocek
Updates chartstheme demo, small refactor
r748 }