summaryrefslogtreecommitdiffstats
path: root/plugins/declarative/declarativechart.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/declarative/declarativechart.cpp')
-rw-r--r--plugins/declarative/declarativechart.cpp1080
1 files changed, 0 insertions, 1080 deletions
diff --git a/plugins/declarative/declarativechart.cpp b/plugins/declarative/declarativechart.cpp
deleted file mode 100644
index fec441d5..00000000
--- a/plugins/declarative/declarativechart.cpp
+++ /dev/null
@@ -1,1080 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 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 Enterprise Charts Add-on.
-**
-** $QT_BEGIN_LICENSE$
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise 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$
-**
-****************************************************************************/
-
-#include "declarativechart.h"
-#include <QPainter>
-#include "declarativelineseries.h"
-#include "declarativeareaseries.h"
-#include "declarativebarseries.h"
-#include "declarativepieseries.h"
-#include "declarativesplineseries.h"
-#include "declarativeboxplotseries.h"
-#include "declarativescatterseries.h"
-#include "qbarcategoryaxis.h"
-#include "qvalueaxis.h"
-#include "qlogvalueaxis.h"
-#include "qcategoryaxis.h"
-#include "qabstractseries_p.h"
-#include "declarativemargins.h"
-#include "chartdataset_p.h"
-#include "declarativeaxes.h"
-#include "qchart_p.h"
-#include "qpolarchart.h"
-
-#ifndef QT_ON_ARM
- #include "qdatetimeaxis.h"
-#endif
-
-#ifdef CHARTS_FOR_QUICK2
-#include <QGraphicsSceneMouseEvent>
-#include <QGraphicsSceneHoverEvent>
-#include <QApplication>
-#include <QTimer>
-#include <QThread>
-#endif
-
-QTCOMMERCIALCHART_BEGIN_NAMESPACE
-
-#ifdef QDOC_QT5
-/*!
- \qmltype ChartView
- \instantiates DeclarativeChart
- \inqmlmodule QtCommercial.Chart
-
- \include doc/src/chartview.qdocinc
-*/
-#else
-/*!
- \qmlclass ChartView DeclarativeChart
-
- \include ../doc/src/chartview.qdocinc
-*/
-#endif
-
-/*!
- \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::animationOptions
- Animation configuration of the chart. One of ChartView.NoAnimation, ChartView.GridAxisAnimations,
- ChartView.SeriesAnimations or ChartView.AllAnimations.
-*/
-
-/*!
- \qmlproperty Font ChartView::titleFont
- The title font of the chart.
-
- See the Qt documentation for more details of Font.
-*/
-
-/*!
- \qmlproperty string ChartView::title
- The title of the chart, shown on top of the chart.
- \sa ChartView::titleColor
-*/
-
-/*!
- \qmlproperty color ChartView::titleColor
- The color of the title text.
-*/
-
-/*!
- \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 real ChartView::backgroundRoundness
- The diameter of the rounding cirle at the corners of the chart background.
-*/
-
-/*!
- \qmlproperty color ChartView::plotAreaColor
- The color of the background of the chart's plot area. By default plot area background uses chart's
- background color.
- \sa ChartView::backgroundColor
-*/
-
-/*!
- \qmlproperty bool ChartView::dropShadowEnabled
- The chart's border drop shadow. Set to true to enable drop shadow.
-*/
-
-/*!
- \qmlproperty real ChartView::topMargin
- Deprecated; use margins instead.
-*/
-
-/*!
- \qmlproperty real ChartView::bottomMargin
- Deprecated; use margins instead.
-*/
-
-/*!
- \qmlproperty real ChartView::leftMargin
- Deprecated; use margins instead.
-*/
-
-/*!
- \qmlproperty real ChartView::rightMargin
- Deprecated; use margins instead.
-*/
-
-/*!
- \qmlproperty Margins ChartView::minimumMargins
- Deprecated; use margins instead.
- The minimum margins allowed between the outer bounds and the plotArea of the ChartView. Margins
- area of ChartView is used for drawing title, axes and legend. Please note that setting the
- properties of minimumMargins may be bigger than the defined value, depending on other ChartView
- properties that affect it's layout. If you need to know the actual plotting area used at any
- given time, you can check ChartView::plotArea instead.
-*/
-
-/*!
- \qmlproperty rect ChartView::plotArea
- The area on the ChartView that is used for drawing series. This is the ChartView rect without the
- margins.
- \sa ChartView::minimumMargins
-*/
-
-/*!
- \qmlproperty Margins ChartView::margins
- The minimum margins allowed between the outer bounds and the plotArea of the ChartView. Margins
- area of ChartView is used for drawing title, axes and legend.
-*/
-
-/*!
- \qmlproperty bool ChartView::localizeNumbers
- \since QtCharts 2.0
- When \c{true}, all generated numbers appearing in various series and axis labels will be
- localized using the default QLocale of the application, which defaults to the system locale.
- When \c{false}, the "C" locale is always used.
- Defaults to \c{false}.
-
- \sa locale
-*/
-
-/*!
- \qmlproperty locale ChartView::locale
- \since QtCharts 2.0
- Sets the locale used to format various chart labels when localizeNumbers is \c{true}.
- This also determines the locale used to format DateTimeAxis labels regardless of
- localizeNumbers property.
- Defaults to application default locale at the time the chart is constructed.
-
- \sa localizeNumbers
-*/
-
-/*!
- \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, AbstractAxis axisX, AbstractAxis axisY)
- Creates a series object of \a type to the chart with name \a name, optional axis \a axisX and
- optional axis \a axisY. For example:
- \code
- // lineSeries is a LineSeries object that has already been added to the ChartView; re-use it's axes
- var myAxisX = chartView.axisX(lineSeries);
- var myAxisY = chartView.axisY(lineSeries);
- var scatter = chartView.createSeries(ChartView.SeriesTypeScatter, "scatter series", myAxisX, myAxisY);
- \endcode
-*/
-
-/*!
- \qmlmethod ChartView::removeSeries(AbstractSeries series)
- Removes the \a series from the chart. The series object is also destroyed.
-*/
-
-/*!
- \qmlmethod ChartView::removeAllSeries()
- Removes all series from the chart. All the series objects are also destroyed.
-*/
-
-/*!
- \qmlmethod Axis ChartView::axisX(AbstractSeries series)
- The x-axis of the series.
-*/
-
-/*!
- \qmlmethod Axis ChartView::axisY(AbstractSeries series)
- The y-axis of the series.
-*/
-
-/*!
- \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.
-*/
-
-/*!
- \qmlmethod ChartView::scrollRight(real pixels)
- Scrolls to right by \a pixels. This is a convenience function that suits for example for key navigation.
-*/
-
-/*!
- \qmlmethod ChartView::scrollUp(real pixels)
- Scrolls up by \a pixels. This is a convenience function that suits for example for key navigation.
-*/
-
-/*!
- \qmlmethod ChartView::scrollDown(real pixels)
- Scrolls down by \a pixels. This is a convenience function that suits for example for key navigation.
-*/
-
-/*!
- \qmlsignal ChartView::onPlotAreaChanged(rect plotArea)
- The plot area of the chart has changed. This may happen for example, if you modify minimumMargins
- or if you resize the chart, or if you modify font size related properties of the legend or chart
- title.
-*/
-
-/*!
- \qmlsignal ChartView::seriesAdded(AbstractSeries series)
- The \a series has been added to the chart.
-*/
-
-/*!
- \qmlsignal ChartView::seriesRemoved(AbstractSeries series)
- The \a series has been removed from the chart. Please note that \a series is no longer a valid
- object after the signal handler has completed.
-*/
-
-DeclarativeChart::DeclarativeChart(QDECLARATIVE_ITEM *parent)
- : QDECLARATIVE_PAINTED_ITEM(parent)
-{
- initChart(QChart::ChartTypeCartesian);
-}
-
-DeclarativeChart::DeclarativeChart(QChart::ChartType type, QDECLARATIVE_ITEM *parent)
- : QDECLARATIVE_PAINTED_ITEM(parent)
-{
- initChart(type);
-}
-
-void DeclarativeChart::initChart(QChart::ChartType type)
-{
-#ifdef CHARTS_FOR_QUICK2
- m_currentSceneImage = 0;
- m_guiThreadId = QThread::currentThreadId();
- m_paintThreadId = 0;
- m_updatePending = false;
-
- if (type == QChart::ChartTypePolar)
- m_chart = new QPolarChart();
- else
- m_chart = new QChart();
-
- m_scene = new QGraphicsScene(this);
- m_scene->addItem(m_chart);
-
- setAntialiasing(QQuickItem::antialiasing());
- connect(m_scene, SIGNAL(changed(QList<QRectF>)), this, SLOT(sceneChanged(QList<QRectF>)));
- connect(this, SIGNAL(antialiasingChanged(bool)), this, SLOT(handleAntialiasingChanged(bool)));
-
- setAcceptedMouseButtons(Qt::AllButtons);
- setAcceptHoverEvents(true);
-#else
- if (type == QChart::ChartTypePolar)
- m_chart = new QPolarChart(this);
- else
- m_chart = new QChart(this);
-
- setFlag(QGraphicsItem::ItemHasNoContents, false);
-#endif
-
- m_margins = new DeclarativeMargins(this);
- m_margins->setTop(m_chart->margins().top());
- m_margins->setLeft(m_chart->margins().left());
- m_margins->setRight(m_chart->margins().right());
- m_margins->setBottom(m_chart->margins().bottom());
- connect(m_margins, SIGNAL(topChanged(int,int,int,int)), this, SLOT(changeMinimumMargins(int,int,int,int)));
- connect(m_margins, SIGNAL(bottomChanged(int,int,int,int)), this, SLOT(changeMinimumMargins(int,int,int,int)));
- connect(m_margins, SIGNAL(leftChanged(int,int,int,int)), this, SLOT(changeMinimumMargins(int,int,int,int)));
- connect(m_margins, SIGNAL(rightChanged(int,int,int,int)), this, SLOT(changeMinimumMargins(int,int,int,int)));
- connect(m_chart->d_ptr->m_dataset, SIGNAL(seriesAdded(QAbstractSeries*)), this, SLOT(handleSeriesAdded(QAbstractSeries*)));
- connect(m_chart->d_ptr->m_dataset, SIGNAL(seriesRemoved(QAbstractSeries*)), this, SIGNAL(seriesRemoved(QAbstractSeries*)));
-}
-
-void DeclarativeChart::handleSeriesAdded(QAbstractSeries *series)
-{
- emit seriesAdded(series);
-}
-
-void DeclarativeChart::changeMinimumMargins(int top, int bottom, int left, int right)
-{
- m_chart->setMargins(QMargins(left, top, right, bottom));
- emit minimumMarginsChanged();
- emit plotAreaChanged(m_chart->plotArea());
-}
-
-DeclarativeChart::~DeclarativeChart()
-{
- delete m_chart;
-#ifdef CHARTS_FOR_QUICK2
- m_sceneImageLock.lock();
- delete m_currentSceneImage;
- m_currentSceneImage = 0;
- m_sceneImageLock.unlock();
-#endif
-}
-
-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)) {
- // Add series to the chart
- QAbstractSeries *series = qobject_cast<QAbstractSeries *>(child);
- m_chart->addSeries(series);
-
- // Connect to axis changed signals (unless this is a pie series)
- if (!qobject_cast<DeclarativePieSeries *>(series)) {
- connect(series, SIGNAL(axisXChanged(QAbstractAxis*)), this, SLOT(handleAxisXSet(QAbstractAxis*)));
- connect(series, SIGNAL(axisXTopChanged(QAbstractAxis*)), this, SLOT(handleAxisXTopSet(QAbstractAxis*)));
- connect(series, SIGNAL(axisYChanged(QAbstractAxis*)), this, SLOT(handleAxisYSet(QAbstractAxis*)));
- connect(series, SIGNAL(axisYRightChanged(QAbstractAxis*)), this, SLOT(handleAxisYRightSet(QAbstractAxis*)));
- }
-
- initializeAxes(series);
- }
- }
-
- QDECLARATIVE_ITEM::componentComplete();
-}
-
-void DeclarativeChart::handleAxisXSet(QAbstractAxis *axis)
-{
- QAbstractSeries *s = qobject_cast<QAbstractSeries *>(sender());
- if (axis && s) {
- if (!m_chart->axes(Qt::Horizontal).contains(axis))
- m_chart->setAxisX(axis, s);
- if (!s->attachedAxes().contains(axis))
- s->attachAxis(axis);
- } else {
- qWarning() << "Trying to set axisX to null.";
- }
-}
-
-void DeclarativeChart::handleAxisXTopSet(QAbstractAxis *axis)
-{
- QAbstractSeries *s = qobject_cast<QAbstractSeries *>(sender());
- if (axis && s) {
- if (!m_chart->axes(Qt::Horizontal).contains(axis)) {
- QList<QAbstractAxis *> oldAxes = m_chart->axes(Qt::Horizontal, s);
- foreach (QAbstractAxis* a, oldAxes) {
- m_chart->removeAxis(a);
- delete a;
- }
- m_chart->addAxis(axis, Qt::AlignTop);
- }
- if (!s->attachedAxes().contains(axis))
- s->attachAxis(axis);
- } else {
- qWarning() << "Trying to set axisXTop to null.";
- }
-}
-
-void DeclarativeChart::handleAxisYSet(QAbstractAxis *axis)
-{
- QAbstractSeries *s = qobject_cast<QAbstractSeries *>(sender());
- if (axis && s) {
- if (!m_chart->axes(Qt::Vertical).contains(axis))
- m_chart->setAxisY(axis, s);
- if (!s->attachedAxes().contains(axis))
- s->attachAxis(axis);
- } else {
- qWarning() << "Trying to set axisY to null.";
- }
-}
-
-void DeclarativeChart::handleAxisYRightSet(QAbstractAxis *axis)
-{
- QAbstractSeries *s = qobject_cast<QAbstractSeries *>(sender());
- if (axis && s) {
- if (!m_chart->axes(Qt::Vertical).contains(axis)) {
- QList<QAbstractAxis *> oldAxes = m_chart->axes((Qt::Vertical), s);
- foreach (QAbstractAxis* a, oldAxes) {
- m_chart->removeAxis(a);
- delete a;
- }
- m_chart->addAxis(axis, Qt::AlignRight);
- }
- if (!s->attachedAxes().contains(axis))
- s->attachAxis(axis);
- } else {
- qWarning() << "Trying to set axisYRight to null.";
- }
-}
-
-void DeclarativeChart::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
-{
- if (newGeometry.isValid()) {
- if (newGeometry.width() > 0 && newGeometry.height() > 0) {
- m_chart->resize(newGeometry.width(), newGeometry.height());
- }
- }
- QDECLARATIVE_ITEM::geometryChanged(newGeometry, oldGeometry);
-
- // It would be better to trigger the plotAreaChanged signal from QChart::plotAreaChanged or
- // similar. Since that kind of a signal is not clearly needed in the C++ API the work-around is
- // to implement it here for the QML API purposes.
- emit plotAreaChanged(m_chart->plotArea());
-}
-
-#ifdef CHARTS_FOR_QUICK2
-void DeclarativeChart::sceneChanged(QList<QRectF> region)
-{
- Q_UNUSED(region);
-
- if (m_guiThreadId == m_paintThreadId) {
- // Rendering in gui thread, no need for shenannigans, just update
- update();
- } else {
- // Multi-threaded rendering, need to ensure scene is actually rendered in gui thread
- if (!m_updatePending) {
- m_updatePending = true;
- // Do async render to avoid some unnecessary renders.
- QTimer::singleShot(0, this, SLOT(renderScene()));
- }
- }
-}
-
-void DeclarativeChart::renderScene()
-{
- m_updatePending = false;
- m_sceneImageLock.lock();
- delete m_currentSceneImage;
- m_currentSceneImage = new QImage(m_chart->size().toSize(), QImage::Format_ARGB32);
- m_currentSceneImage->fill(Qt::transparent);
- QPainter painter(m_currentSceneImage);
- if (antialiasing())
- painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform);
- QRect renderRect(QPoint(0, 0), m_chart->size().toSize());
- m_scene->render(&painter, renderRect, renderRect);
- m_sceneImageLock.unlock();
-
- update();
-}
-
-void DeclarativeChart::paint(QPainter *painter)
-{
- if (!m_paintThreadId) {
- m_paintThreadId = QThread::currentThreadId();
- if (m_guiThreadId == m_paintThreadId) {
- // No need for scene image in single threaded rendering, so delete
- // the one that got made by default before the rendering type was
- // detected.
- delete m_currentSceneImage;
- m_currentSceneImage = 0;
- }
- }
-
- if (m_guiThreadId == m_paintThreadId) {
- QRectF renderRect(QPointF(0, 0), m_chart->size());
- m_scene->render(painter, renderRect, renderRect);
- } else {
- m_sceneImageLock.lock();
- if (m_currentSceneImage) {
- QRect imageRect(QPoint(0, 0), m_currentSceneImage->size());
- QRect itemRect(QPoint(0, 0), QSize(width(), height()));
- painter->drawImage(itemRect, *m_currentSceneImage, imageRect);
- }
- m_sceneImageLock.unlock();
- }
-}
-
-void DeclarativeChart::mousePressEvent(QMouseEvent *event)
-{
- m_mousePressScenePoint = event->pos();
- m_mousePressScreenPoint = event->globalPos();
- m_lastMouseMoveScenePoint = m_mousePressScenePoint;
- m_lastMouseMoveScreenPoint = m_mousePressScreenPoint;
- m_mousePressButton = event->button();
- m_mousePressButtons = event->buttons();
-
- QGraphicsSceneMouseEvent mouseEvent(QEvent::GraphicsSceneMousePress);
- mouseEvent.setWidget(0);
- mouseEvent.setButtonDownScenePos(m_mousePressButton, m_mousePressScenePoint);
- mouseEvent.setButtonDownScreenPos(m_mousePressButton, m_mousePressScreenPoint);
- mouseEvent.setScenePos(m_mousePressScenePoint);
- mouseEvent.setScreenPos(m_mousePressScreenPoint);
- mouseEvent.setLastScenePos(m_lastMouseMoveScenePoint);
- mouseEvent.setLastScreenPos(m_lastMouseMoveScreenPoint);
- mouseEvent.setButtons(m_mousePressButtons);
- mouseEvent.setButton(m_mousePressButton);
- mouseEvent.setModifiers(event->modifiers());
- mouseEvent.setAccepted(false);
-
- QApplication::sendEvent(m_scene, &mouseEvent);
-}
-
-void DeclarativeChart::mouseReleaseEvent(QMouseEvent *event)
-{
- QGraphicsSceneMouseEvent mouseEvent(QEvent::GraphicsSceneMouseRelease);
- mouseEvent.setWidget(0);
- mouseEvent.setButtonDownScenePos(m_mousePressButton, m_mousePressScenePoint);
- mouseEvent.setButtonDownScreenPos(m_mousePressButton, m_mousePressScreenPoint);
- mouseEvent.setScenePos(event->pos());
- mouseEvent.setScreenPos(event->globalPos());
- mouseEvent.setLastScenePos(m_lastMouseMoveScenePoint);
- mouseEvent.setLastScreenPos(m_lastMouseMoveScreenPoint);
- mouseEvent.setButtons(event->buttons());
- mouseEvent.setButton(event->button());
- mouseEvent.setModifiers(event->modifiers());
- mouseEvent.setAccepted(false);
-
- QApplication::sendEvent(m_scene, &mouseEvent);
-
- m_mousePressButtons = event->buttons();
- m_mousePressButton = Qt::NoButton;
-}
-
-void DeclarativeChart::hoverMoveEvent(QHoverEvent *event)
-{
- // Convert hover move to mouse move, since we don't seem to get actual mouse move events.
- // QGraphicsScene generates hover events from mouse move events, so we don't need
- // to pass hover events there.
- QGraphicsSceneMouseEvent mouseEvent(QEvent::GraphicsSceneMouseMove);
- mouseEvent.setWidget(0);
- mouseEvent.setButtonDownScenePos(m_mousePressButton, m_mousePressScenePoint);
- mouseEvent.setButtonDownScreenPos(m_mousePressButton, m_mousePressScreenPoint);
- mouseEvent.setScenePos(event->pos());
- // Hover events do not have global pos in them, and the screen position doesn't seem to
- // matter anyway in this use case, so just pass event pos instead of trying to
- // calculate the real screen position.
- mouseEvent.setScreenPos(event->pos());
- mouseEvent.setLastScenePos(m_lastMouseMoveScenePoint);
- mouseEvent.setLastScreenPos(m_lastMouseMoveScreenPoint);
- mouseEvent.setButtons(m_mousePressButtons);
- mouseEvent.setButton(m_mousePressButton);
- mouseEvent.setModifiers(event->modifiers());
- m_lastMouseMoveScenePoint = mouseEvent.scenePos();
- m_lastMouseMoveScreenPoint = mouseEvent.screenPos();
- mouseEvent.setAccepted(false);
-
- QApplication::sendEvent(m_scene, &mouseEvent);
-}
-
-void DeclarativeChart::handleAntialiasingChanged(bool enable)
-{
- setAntialiasing(enable);
-}
-#endif
-
-void DeclarativeChart::setTheme(DeclarativeChart::Theme theme)
-{
- QChart::ChartTheme chartTheme = (QChart::ChartTheme) theme;
- if (chartTheme != m_chart->theme())
- m_chart->setTheme(chartTheme);
-}
-
-DeclarativeChart::Theme DeclarativeChart::theme()
-{
- return (DeclarativeChart::Theme) m_chart->theme();
-}
-
-void DeclarativeChart::setAnimationOptions(DeclarativeChart::Animation animations)
-{
- QChart::AnimationOption animationOptions = (QChart::AnimationOption) animations;
- if (animationOptions != m_chart->animationOptions())
- m_chart->setAnimationOptions(animationOptions);
-}
-
-DeclarativeChart::Animation DeclarativeChart::animationOptions()
-{
- if (m_chart->animationOptions().testFlag(QChart::AllAnimations))
- return DeclarativeChart::AllAnimations;
- else if (m_chart->animationOptions().testFlag(QChart::GridAxisAnimations))
- return DeclarativeChart::GridAxisAnimations;
- else if (m_chart->animationOptions().testFlag(QChart::SeriesAnimations))
- return DeclarativeChart::SeriesAnimations;
- else
- return DeclarativeChart::NoAnimation;
-}
-
-void DeclarativeChart::setTitle(QString title)
-{
- if (title != m_chart->title())
- m_chart->setTitle(title);
-}
-QString DeclarativeChart::title()
-{
- return m_chart->title();
-}
-
-QAbstractAxis *DeclarativeChart::axisX(QAbstractSeries *series)
-{
- QList<QAbstractAxis *> axes = m_chart->axes(Qt::Horizontal, series);
- if (axes.count())
- return axes[0];
- return 0;
-}
-
-QAbstractAxis *DeclarativeChart::axisY(QAbstractSeries *series)
-{
- QList<QAbstractAxis *> axes = m_chart->axes(Qt::Vertical, series);
- if (axes.count())
- return axes[0];
- return 0;
-}
-
-QLegend *DeclarativeChart::legend()
-{
- return m_chart->legend();
-}
-
-void DeclarativeChart::setTitleColor(QColor color)
-{
- QBrush b = m_chart->titleBrush();
- if (color != b.color()) {
- b.setColor(color);
- m_chart->setTitleBrush(b);
- emit titleColorChanged(color);
- }
-}
-
-QFont DeclarativeChart::titleFont() const
-{
- return m_chart->titleFont();
-}
-
-void DeclarativeChart::setTitleFont(const QFont &font)
-{
- m_chart->setTitleFont(font);
-}
-
-QColor DeclarativeChart::titleColor()
-{
- return m_chart->titleBrush().color();
-}
-
-void DeclarativeChart::setBackgroundColor(QColor color)
-{
- QBrush b = m_chart->backgroundBrush();
- if (b.style() != Qt::SolidPattern || color != b.color()) {
- b.setStyle(Qt::SolidPattern);
- b.setColor(color);
- m_chart->setBackgroundBrush(b);
- emit backgroundColorChanged();
- }
-}
-
-QColor DeclarativeChart::backgroundColor()
-{
- return m_chart->backgroundBrush().color();
-}
-
-void QtCommercialChart::DeclarativeChart::setPlotAreaColor(QColor color)
-{
- QBrush b = m_chart->plotAreaBackgroundBrush();
- if (b.style() != Qt::SolidPattern || color != b.color()) {
- b.setStyle(Qt::SolidPattern);
- b.setColor(color);
- m_chart->setPlotAreaBackgroundBrush(b);
- m_chart->setPlotAreaBackgroundVisible(true);
- emit plotAreaColorChanged();
- }
-}
-
-QColor QtCommercialChart::DeclarativeChart::plotAreaColor()
-{
- return m_chart->plotAreaBackgroundBrush().color();
-}
-
-void DeclarativeChart::setLocalizeNumbers(bool localize)
-{
- if (m_chart->localizeNumbers() != localize) {
- m_chart->setLocalizeNumbers(localize);
- emit localizeNumbersChanged();
- }
-}
-
-bool DeclarativeChart::localizeNumbers() const
-{
- return m_chart->localizeNumbers();
-}
-
-void QtCommercialChart::DeclarativeChart::setLocale(const QLocale &locale)
-{
- if (m_chart->locale() != locale) {
- m_chart->setLocale(locale);
- emit localeChanged();
- }
-}
-
-QLocale QtCommercialChart::DeclarativeChart::locale() const
-{
- return m_chart->locale();
-}
-
-int DeclarativeChart::count()
-{
- return m_chart->series().count();
-}
-
-void DeclarativeChart::setDropShadowEnabled(bool enabled)
-{
- if (enabled != m_chart->isDropShadowEnabled()) {
- m_chart->setDropShadowEnabled(enabled);
- dropShadowEnabledChanged(enabled);
- }
-}
-
-bool DeclarativeChart::dropShadowEnabled()
-{
- return m_chart->isDropShadowEnabled();
-}
-
-qreal DeclarativeChart::backgroundRoundness() const
-{
- return m_chart->backgroundRoundness();
-}
-
-void DeclarativeChart::setBackgroundRoundness(qreal diameter)
-{
- if (m_chart->backgroundRoundness() != diameter) {
- m_chart->setBackgroundRoundness(diameter);
- emit backgroundRoundnessChanged(diameter);
- }
-}
-
-qreal DeclarativeChart::topMargin()
-{
- qWarning() << "ChartView.topMargin is deprecated. Use margins instead.";
- return m_chart->margins().top();
-}
-
-qreal DeclarativeChart::bottomMargin()
-{
- qWarning() << "ChartView.bottomMargin is deprecated. Use margins instead.";
- return m_chart->margins().bottom();
-}
-
-qreal DeclarativeChart::leftMargin()
-{
- qWarning() << "ChartView.leftMargin is deprecated. Use margins instead.";
- return m_chart->margins().left();
-}
-
-qreal DeclarativeChart::rightMargin()
-{
- qWarning() << "ChartView.rightMargin is deprecated. Use margins instead.";
- return m_chart->margins().right();
-}
-
-void DeclarativeChart::zoom(qreal factor)
-{
- m_chart->zoom(factor);
-}
-
-void DeclarativeChart::scrollLeft(qreal pixels)
-{
- m_chart->scroll(-pixels, 0);
-}
-
-void DeclarativeChart::scrollRight(qreal pixels)
-{
- m_chart->scroll(pixels, 0);
-}
-
-void DeclarativeChart::scrollUp(qreal pixels)
-{
- m_chart->scroll(0, pixels);
-}
-
-void DeclarativeChart::scrollDown(qreal pixels)
-{
- m_chart->scroll(0, -pixels);
-}
-
-QDECLARATIVE_LIST_PROPERTY<QAbstractAxis> DeclarativeChart::axes()
-{
- return QDECLARATIVE_LIST_PROPERTY<QAbstractAxis>(this, 0,
- &DeclarativeChart::axesAppendFunc,
- &DeclarativeChart::axesCountFunc,
-#ifdef CHARTS_FOR_QUICK2
- &DeclarativeChart::axesAtFunc,
- &DeclarativeChart::axesClearFunc);
-#else
- &DeclarativeChart::axesAtFunc);
-#endif
-}
-
-void DeclarativeChart::axesAppendFunc(QDECLARATIVE_LIST_PROPERTY<QAbstractAxis> *list, QAbstractAxis *element)
-{
- // Empty implementation
- Q_UNUSED(list);
- Q_UNUSED(element);
-}
-
-int DeclarativeChart::axesCountFunc(QDECLARATIVE_LIST_PROPERTY<QAbstractAxis> *list)
-{
- if (qobject_cast<DeclarativeChart *>(list->object)) {
- DeclarativeChart *chart = qobject_cast<DeclarativeChart *>(list->object);
- return chart->m_chart->axes(Qt::Horizontal | Qt::Vertical).count();
- }
- return 0;
-}
-
-QAbstractAxis *DeclarativeChart::axesAtFunc(QDECLARATIVE_LIST_PROPERTY<QAbstractAxis> *list, int index)
-{
- if (qobject_cast<DeclarativeChart *>(list->object)) {
- DeclarativeChart *chart = qobject_cast<DeclarativeChart *>(list->object);
- QList<QAbstractAxis *> axes = chart->m_chart->axes(Qt::Horizontal | Qt::Vertical, chart->m_chart->series()[0]);
- return axes.at(index);
- }
- return 0;
-}
-
-void DeclarativeChart::axesClearFunc(QDECLARATIVE_LIST_PROPERTY<QAbstractAxis> *list)
-{
- // Empty implementation
- Q_UNUSED(list);
-}
-
-
-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(int type, QString name, QAbstractAxis *axisX, QAbstractAxis *axisY)
-{
- QAbstractSeries *series = 0;
-
- switch (type) {
- case DeclarativeChart::SeriesTypeLine:
- series = new DeclarativeLineSeries();
- break;
- case DeclarativeChart::SeriesTypeArea: {
- DeclarativeAreaSeries *area = new DeclarativeAreaSeries();
- area->setUpperSeries(new DeclarativeLineSeries());
- series = area;
- break;
- }
- case DeclarativeChart::SeriesTypeStackedBar:
- series = new DeclarativeStackedBarSeries();
- break;
- case DeclarativeChart::SeriesTypePercentBar:
- series = new DeclarativePercentBarSeries();
- break;
- case DeclarativeChart::SeriesTypeBar:
- series = new DeclarativeBarSeries();
- break;
- case DeclarativeChart::SeriesTypeHorizontalBar:
- series = new DeclarativeHorizontalBarSeries();
- break;
- case DeclarativeChart::SeriesTypeHorizontalPercentBar:
- series = new DeclarativeHorizontalPercentBarSeries();
- break;
- case DeclarativeChart::SeriesTypeHorizontalStackedBar:
- series = new DeclarativeHorizontalStackedBarSeries();
- break;
- case DeclarativeChart::SeriesTypeBoxPlot:
- series = new DeclarativeBoxPlotSeries();
- 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";
- }
-
- if (series) {
- // Connect to axis changed signals (unless this is a pie series)
- if (!qobject_cast<DeclarativePieSeries *>(series)) {
- connect(series, SIGNAL(axisXChanged(QAbstractAxis*)), this, SLOT(handleAxisXSet(QAbstractAxis*)));
- connect(series, SIGNAL(axisXTopChanged(QAbstractAxis*)), this, SLOT(handleAxisXSet(QAbstractAxis*)));
- connect(series, SIGNAL(axisYChanged(QAbstractAxis*)), this, SLOT(handleAxisYSet(QAbstractAxis*)));
- connect(series, SIGNAL(axisYRightChanged(QAbstractAxis*)), this, SLOT(handleAxisYRightSet(QAbstractAxis*)));
- }
-
- series->setName(name);
- m_chart->addSeries(series);
-
- if (axisX)
- setAxisX(axisX, series);
- if (axisY)
- setAxisY(axisY, series);
-
- if (series->attachedAxes().count() < 2)
- initializeAxes(series);
- }
-
- return series;
-}
-
-void DeclarativeChart::removeSeries(QAbstractSeries *series)
-{
- if (series)
- m_chart->removeSeries(series);
- else
- qWarning("removeSeries: cannot remove null");
-}
-
-void DeclarativeChart::setAxisX(QAbstractAxis *axis, QAbstractSeries *series)
-{
- if (axis)
- m_chart->setAxisX(axis, series);
-}
-
-void DeclarativeChart::setAxisY(QAbstractAxis *axis, QAbstractSeries *series)
-{
- if (axis)
- m_chart->setAxisY(axis, series);
-}
-
-void DeclarativeChart::createDefaultAxes()
-{
- qWarning() << "ChartView.createDefaultAxes() is deprecated. Axes are created automatically.";
-}
-
-QAbstractAxis *DeclarativeChart::defaultAxis(Qt::Orientation orientation, QAbstractSeries *series)
-{
- if (!series) {
- qWarning() << "No axis type defined for null series";
- return 0;
- }
-
- foreach (QAbstractAxis *existingAxis, m_chart->axes(orientation)) {
- if (existingAxis->type() == series->d_ptr->defaultAxisType(orientation))
- return existingAxis;
- }
-
- switch (series->d_ptr->defaultAxisType(orientation)) {
- case QAbstractAxis::AxisTypeValue:
- return new QValueAxis(this);
- case QAbstractAxis::AxisTypeBarCategory:
- return new QBarCategoryAxis(this);
- case QAbstractAxis::AxisTypeCategory:
- return new QCategoryAxis(this);
-#ifndef QT_ON_ARM
- case QAbstractAxis::AxisTypeDateTime:
- return new QDateTimeAxis(this);
-#endif
- case QAbstractAxis::AxisTypeLogValue:
- return new QLogValueAxis(this);
- default:
- // assume AxisTypeNoAxis
- return 0;
- }
-}
-
-void DeclarativeChart::initializeAxes(QAbstractSeries *series)
-{
- if (qobject_cast<DeclarativeLineSeries *>(series))
- doInitializeAxes(series, qobject_cast<DeclarativeLineSeries *>(series)->m_axes);
- else if (qobject_cast<DeclarativeScatterSeries *>(series))
- doInitializeAxes(series, qobject_cast<DeclarativeScatterSeries *>(series)->m_axes);
- else if (qobject_cast<DeclarativeSplineSeries *>(series))
- doInitializeAxes(series, qobject_cast<DeclarativeSplineSeries *>(series)->m_axes);
- else if (qobject_cast<DeclarativeAreaSeries *>(series))
- doInitializeAxes(series, qobject_cast<DeclarativeAreaSeries *>(series)->m_axes);
- else if (qobject_cast<DeclarativeBarSeries *>(series))
- doInitializeAxes(series, qobject_cast<DeclarativeBarSeries *>(series)->m_axes);
- else if (qobject_cast<DeclarativeStackedBarSeries *>(series))
- doInitializeAxes(series, qobject_cast<DeclarativeStackedBarSeries *>(series)->m_axes);
- else if (qobject_cast<DeclarativePercentBarSeries *>(series))
- doInitializeAxes(series, qobject_cast<DeclarativePercentBarSeries *>(series)->m_axes);
- else if (qobject_cast<DeclarativeHorizontalBarSeries *>(series))
- doInitializeAxes(series, qobject_cast<DeclarativeHorizontalBarSeries *>(series)->m_axes);
- else if (qobject_cast<DeclarativeHorizontalStackedBarSeries *>(series))
- doInitializeAxes(series, qobject_cast<DeclarativeHorizontalStackedBarSeries *>(series)->m_axes);
- else if (qobject_cast<DeclarativeHorizontalPercentBarSeries *>(series))
- doInitializeAxes(series, qobject_cast<DeclarativeHorizontalPercentBarSeries *>(series)->m_axes);
- else if (qobject_cast<DeclarativeBoxPlotSeries *>(series))
- doInitializeAxes(series, qobject_cast<DeclarativeBoxPlotSeries *>(series)->m_axes);
- // else: do nothing
-}
-
-void DeclarativeChart::doInitializeAxes(QAbstractSeries *series, DeclarativeAxes *axes)
-{
- // Initialize axis X
- if (axes->axisX())
- axes->emitAxisXChanged();
- else if (axes->axisXTop())
- axes->emitAxisXTopChanged();
- else
- axes->setAxisX(defaultAxis(Qt::Horizontal, series));
-
- // Initialize axis Y
- if (axes->axisY())
- axes->emitAxisYChanged();
- else if (axes->axisYRight())
- axes->emitAxisYRightChanged();
- else
- axes->setAxisY(defaultAxis(Qt::Vertical, series));
-}
-
-#include "moc_declarativechart.cpp"
-
-QTCOMMERCIALCHART_END_NAMESPACE