##// END OF EJS Templates
Old QAxisCategories removed
Old QAxisCategories removed

File last commit:

r1541:88a7b44ee136
r1548:f40a9cdaafd3
Show More
declarativechart.cpp
543 lines | 14.9 KiB | text/x-c | CppLexer
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$
**
****************************************************************************/
Jani Honkonen
First draft of project structure
r1 #include "declarativechart.h"
Jani Honkonen
Removing garbage from declarativechart
r660 #include <QPainter>
Tero Ahola
QML demo with dynamic data
r1240 #include "declarativelineseries.h"
#include "declarativeareaseries.h"
#include "declarativebarseries.h"
#include "declarativepieseries.h"
#include "declarativesplineseries.h"
#include "declarativescatterseries.h"
Michal Klocek
Refactors QAxis to QAbstractAxis...
r1541 #include "qcategoriesaxis.h"
Jani Honkonen
First draft of project structure
r1
Tero Ahola
Proof-of-concept for QML api...
r120 QTCOMMERCIALCHART_BEGIN_NAMESPACE
Tero Ahola
Began documenting the QML api
r1443 /*!
\qmlclass ChartView DeclarativeChart
ChartView element is the parent that is responsible for showing different chart series types.
Tero Ahola
Documenting xy-series
r1491 The following QML shows how to create a simple chart with one pie series:
\snippet ../examples/qmlpiechart/qml/qmlpiechart/main.qml 1
\snippet ../examples/qmlpiechart/qml/qmlpiechart/main.qml 2
\snippet ../examples/qmlpiechart/qml/qmlpiechart/main.qml 3
Tero Ahola
Began documenting the QML api
r1443
\beginfloatleft
Tero Ahola
Documenting xy-series
r1491 \image examples_qmlpiechart.png
Tero Ahola
Began documenting the QML api
r1443 \endfloat
\clearfloat
*/
Tero Ahola
Minor modifications to properties of abstract, area and bar series
r1462 /*!
\qmlproperty Theme ChartView::theme
Theme defines the visual appearance of the chart, including for example colors, fonts, line
widths and chart background.
*/
/*!
\qmlproperty Animation ChartView::animation
Animation configuration of the chart. One of ChartView.NoAnimation, ChartView.GridAxisAnimations,
ChartView.SeriesAnimations or ChartView.AllAnimations.
*/
Jani Honkonen
Add qml Font properties & docs
r1517 /*!
\qmlproperty Font ChartView::titleFont
The title font of the chart
See the \l {Font} {QML Font Element} for detailed documentation.
*/
Tero Ahola
Minor modifications to properties of abstract, area and bar series
r1462 /*!
\qmlproperty string ChartView::title
The title of the chart, shown on top of the chart.
Tero Ahola
Fixed QML ChartView background color property
r1473 \sa ChartView::titleColor
Tero Ahola
Minor modifications to properties of abstract, area and bar series
r1462 */
/*!
\qmlproperty string ChartView::titleColor
The color of the title text.
*/
/*!
\qmlproperty Axis ChartView::axisX
The x-axis of the chart.
*/
/*!
\qmlproperty Axis ChartView::axisY
The default y-axis of the chart.
*/
Tero Ahola
Fixed QML ChartView background color property
r1473 /*!
\qmlproperty Legend ChartView::legend
The legend of the chart. Legend lists all the series, pie slices and bar sets added on the chart.
*/
/*!
\qmlproperty int ChartView::count
The count of series added to the chart.
*/
/*!
\qmlproperty color ChartView::backgroundColor
The color of the chart's background. By default background color is defined by chart theme.
\sa ChartView::theme
*/
/*!
\qmlproperty bool ChartView::dropShadowEnabled
The chart's border drop shadow. Set to true to enable drop shadow.
*/
Tero Ahola
Added property definitions to QChart
r1524 /*!
\qmlproperty real ChartView::topMargin
The space between the top of chart view and the top of the plot area. The title (if non-empty) is drawn on top margin
area of the chart view. Top margin area is also used by legend, if aligned to top.
*/
/*!
\qmlproperty real ChartView::bottomMargin
The space between the bottom of chart view and the bottom of the plot area. The bottom margin area may be used by
legend (if aligned to bottom), x-axis, x-axis labels and x-axis tick marks.
*/
/*!
\qmlproperty real ChartView::leftMargin
The space between the left side of chart view and the left side of the plot area. The left margin area may be used by
legend (if aligned to left), y-axis, y-axis labels and y-axis tick marks.
*/
/*!
\qmlproperty real ChartView::rightMargin
The space between the right side of chart view and the right side of the plot area. The right margin area may be used
by legend (if aligned to right).
*/
Tero Ahola
QML methods of series: several fixes and documentation
r1521 /*!
\qmlmethod AbstractSeries ChartView::series(int index)
Returns the series with \a index on the chart. This allows you to loop through the series of a chart together with
the count property of the chart.
*/
/*!
\qmlmethod AbstractSeries ChartView::series(string name)
Returns the first series on the chart with \a name. If there is no series with that name, returns null.
*/
/*!
\qmlmethod AbstractSeries ChartView::createSeries(SeriesType type, string name)
Creates a series object of \a type to the chart. For example:
\code
var scatter = chartView.createSeries(ChartView.SeriesTypeScatter, "scatter series");
scatter.markerSize = 22;
scatter.append(1.1, 2.0);
\endcode
*/
Tero Ahola
Minor modifications to properties of abstract, area and bar series
r1462 /*!
\qmlmethod Axis ChartView::axisY(QAbstractSeries *series)
Tero Ahola
QML methods of series: several fixes and documentation
r1521 The y-axis of the series. This is the same as the default y-axis of the chart as multiple y-axes are not yet supported.
*/
/*!
\qmlmethod ChartView::zoomY(real factor)
Zooms in by \a factor on the center of the chart.
*/
/*!
\qmlmethod ChartView::scrollLeft(real pixels)
Scrolls to left by \a pixels. This is a convenience function that suits for example for key navigation.
\sa Axis::min, Axis::max
*/
/*!
\qmlmethod ChartView::scrollRight(real pixels)
Scrolls to right by \a pixels. This is a convenience function that suits for example for key navigation.
\sa Axis::min, Axis::max
*/
/*!
\qmlmethod ChartView::scrollUp(real pixels)
Scrolls up by \a pixels. This is a convenience function that suits for example for key navigation.
\sa Axis::min, Axis::max
*/
/*!
\qmlmethod ChartView::scrollDown(real pixels)
Scrolls down by \a pixels. This is a convenience function that suits for example for key navigation.
\sa Axis::min, Axis::max
Tero Ahola
Minor modifications to properties of abstract, area and bar series
r1462 */
Tero Ahola
QML signals documentation
r1531 /*!
\qmlsignal ChartView::onTopMarginChanged(real margin)
The top margin of the chart view has changed to \a margin. This may happen for example if you modify font size
related properties of the legend or chart title.
*/
/*!
\qmlsignal ChartView::onBottomMarginChanged(real margin)
The bottom margin of the chart view has changed to \a margin. This may happen for example if you modify font size
related properties of the legend or chart title.
*/
/*!
\qmlsignal ChartView::onLeftMarginChanged(real margin)
The left margin of the chart view has changed to \a margin. This may happen for example if you modify font size
related properties of the legend or chart title.
*/
/*!
\qmlsignal ChartView::onRightMarginChanged(real margin)
The right margin of the chart view has changed to \a margin. This may happen for example if you modify font size
related properties of the legend or chart title.
*/
Jani Honkonen
First draft of project structure
r1 DeclarativeChart::DeclarativeChart(QDeclarativeItem *parent)
Tero Ahola
Proof-of-concept for QML api...
r120 : QDeclarativeItem(parent),
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 m_chart(new QChart(this))
Jani Honkonen
First draft of project structure
r1 {
setFlag(QGraphicsItem::ItemHasNoContents, false);
Tero Ahola
XY model mappers to QML api
r1278 // m_chart->axisX()->setNiceNumbersEnabled(false);
Tero Ahola
Added property definitions to QChart
r1524 m_chartMargins = m_chart->margins();
connect(m_chart, SIGNAL(marginsChanged(QRectF)), this, SLOT(handleMarginsChanged(QRectF)));
}
void DeclarativeChart::handleMarginsChanged(QRectF newMargins)
{
if (m_chartMargins.top() != newMargins.top())
topMarginChanged(m_chart->margins().top());
if (m_chartMargins.bottom() != newMargins.bottom())
bottomMarginChanged(m_chart->margins().bottom());
if (m_chartMargins.left() != newMargins.left())
leftMarginChanged(m_chart->margins().left());
if (m_chartMargins.right() != newMargins.right())
rightMarginChanged(m_chart->margins().right());
m_chartMargins = m_chart->margins();
Jani Honkonen
First draft of project structure
r1 }
Tero Ahola
d
r722 DeclarativeChart::~DeclarativeChart()
{
delete m_chart;
}
Tero Ahola
Simplified declarative implementation
r1117 void DeclarativeChart::childEvent(QChildEvent *event)
{
if (event->type() == QEvent::ChildAdded) {
if (qobject_cast<QAbstractSeries *>(event->child())) {
m_chart->addSeries(qobject_cast<QAbstractSeries *>(event->child()));
}
}
}
void DeclarativeChart::componentComplete()
{
foreach(QObject *child, children()) {
if (qobject_cast<QAbstractSeries *>(child)) {
Tero Ahola
App for demonstrating QML customization apis
r1259 // qDebug() << "DeclarativeChart::componentComplete(), add: " << child;
Tero Ahola
Minor modifications to properties of abstract, area and bar series
r1462 // TODO: how about optional y-axis?
Tero Ahola
Simplified declarative implementation
r1117 m_chart->addSeries(qobject_cast<QAbstractSeries *>(child));
}
}
QDeclarativeItem::componentComplete();
}
Tero Ahola
Proof-of-concept for QML api...
r120 void DeclarativeChart::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
Jani Honkonen
First draft of project structure
r1 {
Tero Ahola
Draft for QML demo that shows weather forecasts
r1139 // qDebug() << "DeclarativeChart::geometryChanged" << newGeometry.width() << newGeometry.height();
Tero Ahola
Set margins to 30 on QML impl
r200 if (newGeometry.isValid()) {
if (newGeometry.width() > 0 && newGeometry.height() > 0) {
Tero Ahola
Fixed build issue with margin related funcs
r642 m_chart->resize(newGeometry.width(), newGeometry.height());
Tero Ahola
Set margins to 30 on QML impl
r200 }
}
Tero Ahola
Added test app for testing QML properties
r1298 QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
Jani Honkonen
First draft of project structure
r1 }
Tero Ahola
Added QML api for bar series
r646 void DeclarativeChart::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option)
Q_UNUSED(widget)
// TODO: optimized?
painter->setRenderHint(QPainter::Antialiasing, true);
}
Tero Ahola
QML demo with dynamic data
r1240 void DeclarativeChart::setTheme(DeclarativeChart::Theme theme)
Tero Ahola
Added animation configuration to QML chart api
r1094 {
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 QChart::ChartTheme chartTheme = (QChart::ChartTheme) theme;
Tero Ahola
color and borderColor properties to XY charts; removed unnecessary signals
r1481 if (chartTheme != m_chart->theme())
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 m_chart->setTheme(chartTheme);
Tero Ahola
Added animation configuration to QML chart api
r1094 }
Tero Ahola
QML demo with dynamic data
r1240 DeclarativeChart::Theme DeclarativeChart::theme()
{
return (DeclarativeChart::Theme) m_chart->theme();
}
void DeclarativeChart::setAnimationOptions(DeclarativeChart::Animation animations)
{
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 QChart::AnimationOption animationOptions = (QChart::AnimationOption) animations;
Tero Ahola
color and borderColor properties to XY charts; removed unnecessary signals
r1481 if (animationOptions != m_chart->animationOptions())
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 m_chart->setAnimationOptions(animationOptions);
Tero Ahola
QML demo with dynamic data
r1240 }
DeclarativeChart::Animation DeclarativeChart::animationOptions()
Tero Ahola
Added animation configuration to QML chart api
r1094 {
if (m_chart->animationOptions().testFlag(QChart::AllAnimations))
Tero Ahola
QML demo with dynamic data
r1240 return DeclarativeChart::AllAnimations;
Tero Ahola
Added animation configuration to QML chart api
r1094 else if (m_chart->animationOptions().testFlag(QChart::GridAxisAnimations))
Tero Ahola
QML demo with dynamic data
r1240 return DeclarativeChart::GridAxisAnimations;
Tero Ahola
Added animation configuration to QML chart api
r1094 else if (m_chart->animationOptions().testFlag(QChart::SeriesAnimations))
Tero Ahola
QML demo with dynamic data
r1240 return DeclarativeChart::SeriesAnimations;
Tero Ahola
Added animation configuration to QML chart api
r1094 else
Tero Ahola
QML demo with dynamic data
r1240 return DeclarativeChart::NoAnimation;
Tero Ahola
Added animation configuration to QML chart api
r1094 }
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 void DeclarativeChart::setTitle(QString title)
{
Tero Ahola
color and borderColor properties to XY charts; removed unnecessary signals
r1481 if (title != m_chart->title())
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 m_chart->setTitle(title);
Tero Ahola
Legend to QML API
r1095 }
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 QString DeclarativeChart::title()
Tero Ahola
Legend to QML API
r1095 {
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 return m_chart->title();
Tero Ahola
Legend to QML API
r1095 }
Michal Klocek
Refactors QAxis to QAbstractAxis...
r1541 QAbstractAxis *DeclarativeChart::axisX()
Tero Ahola
Draft for QML demo that shows weather forecasts
r1139 {
return m_chart->axisX();
}
Michal Klocek
Refactors QAxis to QAbstractAxis...
r1541 QAbstractAxis *DeclarativeChart::axisY(QAbstractSeries *series)
Tero Ahola
Draft for QML demo that shows weather forecasts
r1139 {
Tero Ahola
Minor modifications to properties of abstract, area and bar series
r1462 return m_chart->axisY(series);
Tero Ahola
Draft for QML demo that shows weather forecasts
r1139 }
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 QLegend *DeclarativeChart::legend()
{
return m_chart->legend();
}
Tero Ahola
Initial support for x-axis labels in QML api
r1157 QVariantList DeclarativeChart::axisXLabels()
{
QVariantList labels;
Michal Klocek
Refactors QAxis to QAbstractAxis...
r1541
if(m_chart->axisX()->type()==QAbstractAxis::AxisTypeCategories) {
QCategoriesAxis* axis = static_cast<QCategoriesAxis*>(m_chart->axisX());
for(int i=0;i<axis->count();i++){
labels.append(i);
labels.append(axis->at(i));
}
Tero Ahola
Initial support for x-axis labels in QML api
r1157 }
return labels;
Michal Klocek
Refactors QAxis to QAbstractAxis...
r1541
Tero Ahola
Initial support for x-axis labels in QML api
r1157 }
void DeclarativeChart::setAxisXLabels(QVariantList list)
{
QVariant value(QVariant::Invalid);
Michal Klocek
Refactors QAxis to QAbstractAxis...
r1541
if(m_chart->axisX()->type()==QAbstractAxis::AxisTypeCategories) {
QCategoriesAxis* axis = static_cast<QCategoriesAxis*>(m_chart->axisX());
foreach (QVariant element, list) {
if (value.isValid() && element.type() == QVariant::String) {
axis->append(element.toString());
value = QVariant(QVariant::Invalid);
}
else {
if (element.canConvert(QVariant::Double))
Tero Ahola
Initial support for x-axis labels in QML api
r1157 value = element;
Michal Klocek
Refactors QAxis to QAbstractAxis...
r1541 }
Tero Ahola
Initial support for x-axis labels in QML api
r1157 }
Michal Klocek
Refactors QAxis to QAbstractAxis...
r1541 emit axisLabelsChanged();
Tero Ahola
Initial support for x-axis labels in QML api
r1157 }
Michal Klocek
Refactors QAxis to QAbstractAxis...
r1541
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 }
void DeclarativeChart::setTitleColor(QColor color)
{
QBrush b = m_chart->titleBrush();
if (color != b.color()) {
b.setColor(color);
m_chart->setTitleBrush(b);
Tero Ahola
Added property definitions to QChart
r1524 emit titleColorChanged(color);
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 }
}
Jani Honkonen
Add qml Font properties & docs
r1517 QFont DeclarativeChart::titleFont() const
{
return m_chart->titleFont();
}
void DeclarativeChart::setTitleFont(const QFont& font)
{
m_chart->setTitleFont(font);
}
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 QColor DeclarativeChart::titleColor()
{
return m_chart->titleBrush().color();
}
void DeclarativeChart::setBackgroundColor(QColor color)
{
QBrush b = m_chart->backgroundBrush();
Tero Ahola
Fixed QML ChartView background color property
r1473 if (b.style() != Qt::SolidPattern || color != b.color()) {
b.setStyle(Qt::SolidPattern);
Tero Ahola
Qml ChartView properties; legend to use Qt alignments
r1357 b.setColor(color);
m_chart->setBackgroundBrush(b);
emit backgroundColorChanged();
}
}
QColor DeclarativeChart::backgroundColor()
{
return m_chart->backgroundBrush().color();
Tero Ahola
Initial support for x-axis labels in QML api
r1157 }
Tero Ahola
QML demo with dynamic data
r1240 int DeclarativeChart::count()
{
return m_chart->series().count();
}
Tero Ahola
QML ChartView scrolling, zooming, drop shadow
r1461 void DeclarativeChart::setDropShadowEnabled(bool enabled)
{
Tero Ahola
Minor modifications to properties of abstract, area and bar series
r1462 if (enabled != m_chart->isDropShadowEnabled()) {
m_chart->setDropShadowEnabled(enabled);
Tero Ahola
QML ChartView scrolling, zooming, drop shadow
r1461 dropShadowEnabledChanged(enabled);
}
}
bool DeclarativeChart::dropShadowEnabled()
{
Tero Ahola
Minor modifications to properties of abstract, area and bar series
r1462 return m_chart->isDropShadowEnabled();
Tero Ahola
QML ChartView scrolling, zooming, drop shadow
r1461 }
Tero Ahola
Added property definitions to QChart
r1524 qreal DeclarativeChart::topMargin()
{
return m_chart->margins().top();
}
qreal DeclarativeChart::bottomMargin()
{
return m_chart->margins().bottom();
}
qreal DeclarativeChart::leftMargin()
{
return m_chart->margins().left();
}
qreal DeclarativeChart::rightMargin()
{
return m_chart->margins().right();
}
Tero Ahola
QML ChartView scrolling, zooming, drop shadow
r1461 void DeclarativeChart::zoom(qreal factor)
{
m_chart->zoom(factor);
}
void DeclarativeChart::scrollLeft(qreal pixels)
{
m_chart->scroll(QPointF(pixels, 0));
}
void DeclarativeChart::scrollRight(qreal pixels)
{
m_chart->scroll(QPointF(-pixels, 0));
}
void DeclarativeChart::scrollUp(qreal pixels)
{
m_chart->scroll(QPointF(0, pixels));
}
void DeclarativeChart::scrollDown(qreal pixels)
{
m_chart->scroll(QPointF(0, -pixels));
}
Tero Ahola
QML demo with dynamic data
r1240 QAbstractSeries *DeclarativeChart::series(int index)
{
if (index < m_chart->series().count()) {
return m_chart->series().at(index);
}
return 0;
}
QAbstractSeries *DeclarativeChart::series(QString seriesName)
{
foreach(QAbstractSeries *series, m_chart->series()) {
if (series->name() == seriesName)
return series;
}
return 0;
}
QAbstractSeries *DeclarativeChart::createSeries(DeclarativeChart::SeriesType type, QString name)
{
QAbstractSeries *series = 0;
switch (type) {
case DeclarativeChart::SeriesTypeLine:
series = new DeclarativeLineSeries();
break;
case DeclarativeChart::SeriesTypeArea:
series = new DeclarativeAreaSeries();
break;
case DeclarativeChart::SeriesTypeBar:
series = new DeclarativeBarSeries();
break;
case DeclarativeChart::SeriesTypeStackedBar:
// TODO
break;
case DeclarativeChart::SeriesTypePercentBar:
// TODO
break;
case DeclarativeChart::SeriesTypeGroupedBar:
series = new DeclarativeGroupedBarSeries();
break;
case DeclarativeChart::SeriesTypePie:
series = new DeclarativePieSeries();
break;
case DeclarativeChart::SeriesTypeScatter:
series = new DeclarativeScatterSeries();
break;
case DeclarativeChart::SeriesTypeSpline:
series = new DeclarativeSplineSeries();
break;
default:
qWarning() << "Illegal series type";
}
series->setName(name);
m_chart->addSeries(series);
return series;
}
Tero Ahola
Proof-of-concept for QML api...
r120 #include "moc_declarativechart.cpp"
QTCOMMERCIALCHART_END_NAMESPACE