mirror of https://github.com/qt/qtcharts.git
Refactor to use qseries private for implmentation interface
* adds missing headers private stacked, percent bar series * refactors dataset switch case -> scaleDomain * refactors presenter switch case -> createGraphics
This commit is contained in:
parent
b4a64675ba
commit
d79a954416
|
@ -21,6 +21,11 @@
|
|||
#include "qareaseries.h"
|
||||
#include "qareaseries_p.h"
|
||||
#include "qlineseries.h"
|
||||
#include "areachartitem_p.h"
|
||||
#include "domain_p.h"
|
||||
#include "chartdataset_p.h"
|
||||
#include "charttheme_p.h"
|
||||
#include "chartanimator_p.h"
|
||||
|
||||
QTCOMMERCIALCHART_BEGIN_NAMESPACE
|
||||
|
||||
|
@ -205,6 +210,57 @@ QAreaSeriesPrivate::QAreaSeriesPrivate(QLineSeries *upperSeries, QLineSeries *lo
|
|||
|
||||
};
|
||||
|
||||
void QAreaSeriesPrivate::scaleDomain(Domain& domain)
|
||||
{
|
||||
Q_Q(QAreaSeries);
|
||||
|
||||
qreal minX(domain.minX());
|
||||
qreal minY(domain.minY());
|
||||
qreal maxX(domain.maxX());
|
||||
qreal maxY(domain.maxY());
|
||||
int tickXCount(domain.tickXCount());
|
||||
int tickYCount(domain.tickYCount());
|
||||
|
||||
QLineSeries* upperSeries = q->upperSeries();
|
||||
QLineSeries* lowerSeries = q->lowerSeries();
|
||||
|
||||
for (int i = 0; i < upperSeries->count(); i++)
|
||||
{
|
||||
qreal x = upperSeries->x(i);
|
||||
qreal y = upperSeries->y(i);
|
||||
minX = qMin(minX, x);
|
||||
minY = qMin(minY, y);
|
||||
maxX = qMax(maxX, x);
|
||||
maxY = qMax(maxY, y);
|
||||
}
|
||||
if(lowerSeries) {
|
||||
for (int i = 0; i < lowerSeries->count(); i++)
|
||||
{
|
||||
qreal x = lowerSeries->x(i);
|
||||
qreal y = lowerSeries->y(i);
|
||||
minX = qMin(minX, x);
|
||||
minY = qMin(minY, y);
|
||||
maxX = qMax(maxX, x);
|
||||
maxY = qMax(maxY, y);
|
||||
}}
|
||||
|
||||
domain.setRangeX(minX,maxX,tickXCount);
|
||||
domain.setRangeY(minY,maxY,tickYCount);
|
||||
}
|
||||
|
||||
Chart* QAreaSeriesPrivate::createGraphics(ChartPresenter* presenter)
|
||||
{
|
||||
Q_Q(QAreaSeries);
|
||||
|
||||
AreaChartItem* area = new AreaChartItem(q,presenter);
|
||||
if(presenter->animationOptions().testFlag(QChart::SeriesAnimations)) {
|
||||
presenter->animator()->addAnimation(area->upperLineItem());
|
||||
if(q->lowerSeries()) presenter->animator()->addAnimation(area->lowerLineItem());
|
||||
}
|
||||
presenter->chartTheme()->decorate(q, presenter->dataSet()->seriesIndex(q));
|
||||
return area;
|
||||
}
|
||||
|
||||
#include "moc_qareaseries.cpp"
|
||||
#include "moc_qareaseries_p.cpp"
|
||||
|
||||
|
|
|
@ -43,17 +43,20 @@ class QAreaSeriesPrivate: public QSeriesPrivate
|
|||
public:
|
||||
QAreaSeriesPrivate(QLineSeries *upperSeries, QLineSeries *lowerSeries,QAreaSeries* q);
|
||||
|
||||
void scaleDomain(Domain& domain);
|
||||
Chart* createGraphics(ChartPresenter* presenter);
|
||||
|
||||
Q_SIGNALS:
|
||||
void updated();
|
||||
|
||||
public:
|
||||
protected:
|
||||
QBrush m_brush;
|
||||
QPen m_pen;
|
||||
QLineSeries* m_upperSeries;
|
||||
QLineSeries* m_lowerSeries;
|
||||
bool m_pointsVisible;
|
||||
|
||||
friend class QAreaSeries;
|
||||
private:
|
||||
Q_DECLARE_PUBLIC(QAreaSeries);
|
||||
};
|
||||
|
||||
QTCOMMERCIALCHART_END_NAMESPACE
|
||||
|
|
|
@ -21,7 +21,9 @@ PRIVATE_HEADERS += \
|
|||
$$PWD/stackedbarchartitem_p.h \
|
||||
$$PWD/barlabel_p.h \
|
||||
$$PWD/qbarset_p.h \
|
||||
$$PWD/qbarseries_p.h
|
||||
$$PWD/qbarseries_p.h \
|
||||
$$PWD/qstackedbarseries_p.h\
|
||||
$$PWD/qpercentbarseries_p.h
|
||||
|
||||
PUBLIC_HEADERS += \
|
||||
$$PWD/qbarseries.h \
|
||||
|
|
|
@ -23,6 +23,10 @@
|
|||
#include "qbarset.h"
|
||||
#include "qbarset_p.h"
|
||||
#include "barchartmodel_p.h"
|
||||
#include "domain_p.h"
|
||||
#include "chartdataset_p.h"
|
||||
#include "charttheme_p.h"
|
||||
#include "chartanimator_p.h"
|
||||
|
||||
#include <QAbstractItemModel>
|
||||
#include <QModelIndex>
|
||||
|
@ -63,6 +67,11 @@ QBarSeries::QBarSeries(QBarCategories categories, QObject *parent) : QSeries(*ne
|
|||
|
||||
}
|
||||
|
||||
QBarSeries::QBarSeries(QBarSeriesPrivate &d,QObject *parent) : QSeries(d,parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
QSeries::QSeriesType QBarSeries::type() const
|
||||
{
|
||||
return QSeries::SeriesTypeBar;
|
||||
|
@ -761,6 +770,41 @@ void QBarSeriesPrivate::barsetChanged()
|
|||
emit updatedBars();
|
||||
}
|
||||
|
||||
void QBarSeriesPrivate::scaleDomain(Domain& domain)
|
||||
{
|
||||
Q_Q(QBarSeries);
|
||||
qreal minX(domain.minX());
|
||||
qreal minY(domain.minY());
|
||||
qreal maxX(domain.maxX());
|
||||
qreal maxY(domain.maxY());
|
||||
int tickXCount(domain.tickXCount());
|
||||
int tickYCount(domain.tickYCount());
|
||||
|
||||
qreal x = q->categoryCount();
|
||||
qreal y = q->max();
|
||||
minX = qMin(minX, x);
|
||||
minY = qMin(minY, y);
|
||||
maxX = qMax(maxX, x);
|
||||
maxY = qMax(maxY, y);
|
||||
tickXCount = x+1;
|
||||
|
||||
domain.setRangeX(minX,maxX,tickXCount);
|
||||
domain.setRangeY(minY,maxY,tickYCount);
|
||||
}
|
||||
|
||||
Chart* QBarSeriesPrivate::createGraphics(ChartPresenter* presenter)
|
||||
{
|
||||
Q_Q(QBarSeries);
|
||||
|
||||
BarChartItem* bar = new BarChartItem(q,presenter);
|
||||
if(presenter->animationOptions().testFlag(QChart::SeriesAnimations)) {
|
||||
presenter->animator()->addAnimation(bar);
|
||||
}
|
||||
presenter->chartTheme()->decorate(q, presenter->dataSet()->seriesIndex(q));
|
||||
return bar;
|
||||
|
||||
}
|
||||
|
||||
#include "moc_qbarseries.cpp"
|
||||
#include "moc_qbarseries_p.cpp"
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ class QTCOMMERCIALCHART_EXPORT QBarSeries : public QSeries
|
|||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
QBarSeries(QStringList categories, QObject *parent = 0);
|
||||
QBarSeries(QBarCategories categories, QObject *parent = 0);
|
||||
|
||||
QSeries::QSeriesType type() const;
|
||||
|
||||
|
@ -77,6 +77,9 @@ public:
|
|||
BarChartModel& modelInternal();
|
||||
// <--- TO PIMPL
|
||||
|
||||
protected:
|
||||
explicit QBarSeries(QBarSeriesPrivate &d,QObject *parent = 0);
|
||||
|
||||
Q_SIGNALS:
|
||||
void clicked(QBarSet *barset, QString category, Qt::MouseButtons button); // Up to user of api, what to do with these signals
|
||||
void selected();
|
||||
|
|
|
@ -17,6 +17,9 @@ class QBarSeriesPrivate : public QSeriesPrivate
|
|||
public:
|
||||
QBarSeriesPrivate(QBarCategories categories, QBarSeries *parent);
|
||||
|
||||
void scaleDomain(Domain& domain);
|
||||
Chart* createGraphics(ChartPresenter* presenter);
|
||||
|
||||
bool setModel(QAbstractItemModel *model);
|
||||
void setModelMapping(int categories, int bottomBoundry, int topBoundry, Qt::Orientation orientation = Qt::Vertical);
|
||||
|
||||
|
|
|
@ -19,6 +19,12 @@
|
|||
****************************************************************************/
|
||||
|
||||
#include "qpercentbarseries.h"
|
||||
#include "qpercentbarseries_p.h"
|
||||
#include "percentbarchartitem_p.h"
|
||||
#include "chartdataset_p.h"
|
||||
#include "charttheme_p.h"
|
||||
#include "chartanimator_p.h"
|
||||
|
||||
|
||||
QTCOMMERCIALCHART_BEGIN_NAMESPACE
|
||||
|
||||
|
@ -45,8 +51,8 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE
|
|||
Constructs empty QPercentBarSeries. Parameter \a categories defines the categories for chart.
|
||||
QPercentBarSeries is QObject which is a child of a \a parent.
|
||||
*/
|
||||
QPercentBarSeries::QPercentBarSeries(QStringList categories, QObject *parent)
|
||||
: QBarSeries(categories, parent)
|
||||
QPercentBarSeries::QPercentBarSeries(QBarCategories categories, QObject *parent)
|
||||
: QBarSeries(*new QPercentBarSeriesPrivate(categories,this), parent)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -55,6 +61,47 @@ QSeries::QSeriesType QPercentBarSeries::type() const
|
|||
return QSeries::SeriesTypePercentBar;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
QPercentBarSeriesPrivate::QPercentBarSeriesPrivate(QBarCategories categories, QPercentBarSeries *q) : QBarSeriesPrivate(categories,q)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void QPercentBarSeriesPrivate::scaleDomain(Domain& domain)
|
||||
{
|
||||
Q_Q(QPercentBarSeries);
|
||||
qreal minX(domain.minX());
|
||||
qreal minY(domain.minY());
|
||||
qreal maxX(domain.maxX());
|
||||
qreal maxY(domain.maxY());
|
||||
int tickXCount(domain.tickXCount());
|
||||
int tickYCount(domain.tickYCount());
|
||||
|
||||
qreal x = q->categoryCount();
|
||||
minX = qMin(minX, x);
|
||||
maxX = qMax(maxX, x);
|
||||
minY = 0;
|
||||
maxY = 100;
|
||||
tickXCount = x+1;
|
||||
|
||||
domain.setRangeX(minX,maxX,tickXCount);
|
||||
domain.setRangeY(minY,maxY,tickYCount);
|
||||
}
|
||||
|
||||
|
||||
Chart* QPercentBarSeriesPrivate::createGraphics(ChartPresenter* presenter)
|
||||
{
|
||||
Q_Q(QPercentBarSeries);
|
||||
|
||||
PercentBarChartItem* bar = new PercentBarChartItem(q,presenter);
|
||||
if(presenter->animationOptions().testFlag(QChart::SeriesAnimations)) {
|
||||
presenter->animator()->addAnimation(bar);
|
||||
}
|
||||
presenter->chartTheme()->decorate(q, presenter->dataSet()->seriesIndex(q));
|
||||
return bar;
|
||||
}
|
||||
|
||||
#include "moc_qpercentbarseries.cpp"
|
||||
|
||||
QTCOMMERCIALCHART_END_NAMESPACE
|
||||
|
|
|
@ -30,7 +30,7 @@ class QTCOMMERCIALCHART_EXPORT QPercentBarSeries : public QBarSeries
|
|||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
QPercentBarSeries(QStringList categories, QObject *parent = 0);
|
||||
QPercentBarSeries(QBarCategories categories, QObject *parent = 0);
|
||||
QSeries::QSeriesType type() const;
|
||||
};
|
||||
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** 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$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
// W A R N I N G
|
||||
// -------------
|
||||
//
|
||||
// This file is not part of the QtCommercial Chart API. It exists purely as an
|
||||
// implementation detail. This header file may change from version to
|
||||
// version without notice, or even be removed.
|
||||
//
|
||||
// We mean it.
|
||||
|
||||
#ifndef QPERCENTBARSERIES_P_H_
|
||||
#define QPERCENTBARSERIES_P_H_
|
||||
|
||||
#include "qbarseries_p.h"
|
||||
#include "domain_p.h"
|
||||
|
||||
QTCOMMERCIALCHART_BEGIN_NAMESPACE
|
||||
|
||||
|
||||
class QPercentBarSeriesPrivate: public QBarSeriesPrivate
|
||||
{
|
||||
public:
|
||||
QPercentBarSeriesPrivate(QBarCategories categories,QPercentBarSeries* q);
|
||||
void scaleDomain(Domain& domain);
|
||||
Chart* createGraphics(ChartPresenter* presenter);
|
||||
|
||||
private:
|
||||
Q_DECLARE_PUBLIC(QPercentBarSeries)
|
||||
};
|
||||
|
||||
QTCOMMERCIALCHART_END_NAMESPACE
|
||||
|
||||
#endif
|
|
@ -19,6 +19,11 @@
|
|||
****************************************************************************/
|
||||
|
||||
#include "qstackedbarseries.h"
|
||||
#include "qstackedbarseries_p.h"
|
||||
#include "stackedbarchartitem_p.h"
|
||||
#include "chartdataset_p.h"
|
||||
#include "charttheme_p.h"
|
||||
#include "chartanimator_p.h"
|
||||
|
||||
QTCOMMERCIALCHART_BEGIN_NAMESPACE
|
||||
|
||||
|
@ -45,8 +50,8 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE
|
|||
Constructs empty QStackedBarSeries. Parameter \a categories defines the categories for chart.
|
||||
QStackedBarSeries is QObject which is a child of a \a parent.
|
||||
*/
|
||||
QStackedBarSeries::QStackedBarSeries(QStringList categories, QObject *parent)
|
||||
: QBarSeries(categories, parent)
|
||||
QStackedBarSeries::QStackedBarSeries(QBarCategories categories, QObject *parent)
|
||||
: QBarSeries(*new QStackedBarSeriesPrivate(categories,this), parent)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -55,6 +60,48 @@ QSeries::QSeriesType QStackedBarSeries::type() const
|
|||
return QSeries::SeriesTypeStackedBar;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
QStackedBarSeriesPrivate::QStackedBarSeriesPrivate(QBarCategories categories, QStackedBarSeries *q) : QBarSeriesPrivate(categories,q)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void QStackedBarSeriesPrivate::scaleDomain(Domain& domain)
|
||||
{
|
||||
Q_Q(QStackedBarSeries);
|
||||
qreal minX(domain.minX());
|
||||
qreal minY(domain.minY());
|
||||
qreal maxX(domain.maxX());
|
||||
qreal maxY(domain.maxY());
|
||||
int tickXCount(domain.tickXCount());
|
||||
int tickYCount(domain.tickYCount());
|
||||
|
||||
qreal x = q->categoryCount();
|
||||
qreal y = q->maxCategorySum();
|
||||
minX = qMin(minX, x);
|
||||
minY = qMin(minY, y);
|
||||
maxX = qMax(maxX, x);
|
||||
maxY = qMax(maxY, y);
|
||||
tickXCount = x+1;
|
||||
|
||||
domain.setRangeX(minX,maxX,tickXCount);
|
||||
domain.setRangeY(minY,maxY,tickYCount);
|
||||
}
|
||||
|
||||
|
||||
Chart* QStackedBarSeriesPrivate::createGraphics(ChartPresenter* presenter)
|
||||
{
|
||||
Q_Q(QStackedBarSeries);
|
||||
|
||||
StackedBarChartItem* bar = new StackedBarChartItem(q,presenter);
|
||||
if(presenter->animationOptions().testFlag(QChart::SeriesAnimations)) {
|
||||
presenter->animator()->addAnimation(bar);
|
||||
}
|
||||
presenter->chartTheme()->decorate(q, presenter->dataSet()->seriesIndex(q));
|
||||
return bar;
|
||||
}
|
||||
|
||||
#include "moc_qstackedbarseries.cpp"
|
||||
|
||||
QTCOMMERCIALCHART_END_NAMESPACE
|
||||
|
|
|
@ -30,7 +30,7 @@ class QTCOMMERCIALCHART_EXPORT QStackedBarSeries : public QBarSeries
|
|||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
QStackedBarSeries(QStringList categories, QObject *parent = 0);
|
||||
QStackedBarSeries(QBarCategories categories, QObject *parent = 0);
|
||||
QSeries::QSeriesType type() const;
|
||||
};
|
||||
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** 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$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
// W A R N I N G
|
||||
// -------------
|
||||
//
|
||||
// This file is not part of the QtCommercial Chart API. It exists purely as an
|
||||
// implementation detail. This header file may change from version to
|
||||
// version without notice, or even be removed.
|
||||
//
|
||||
// We mean it.
|
||||
|
||||
#ifndef QSTACKEDBARSERIES_P_H_
|
||||
#define QSTACKEDBARSERIES_P_H_
|
||||
|
||||
#include "qbarseries_p.h"
|
||||
#include "domain_p.h"
|
||||
|
||||
QTCOMMERCIALCHART_BEGIN_NAMESPACE
|
||||
|
||||
|
||||
class QStackedBarSeriesPrivate: public QBarSeriesPrivate
|
||||
{
|
||||
public:
|
||||
QStackedBarSeriesPrivate(QBarCategories categories,QStackedBarSeries* q);
|
||||
Chart* createGraphics(ChartPresenter* presenter);
|
||||
void scaleDomain(Domain& domain);
|
||||
|
||||
private:
|
||||
Q_DECLARE_PUBLIC(QStackedBarSeries)
|
||||
};
|
||||
|
||||
QTCOMMERCIALCHART_END_NAMESPACE
|
||||
|
||||
#endif
|
|
@ -21,6 +21,7 @@
|
|||
#include "chartdataset_p.h"
|
||||
#include "qchartaxis.h"
|
||||
//series
|
||||
#include "qseries_p.h"
|
||||
#include "qlineseries.h"
|
||||
#include "qareaseries.h"
|
||||
#include "qbarseries.h"
|
||||
|
@ -81,7 +82,19 @@ void ChartDataSet::addSeries(QSeries* series, QChartAxis *axisY)
|
|||
m_axisXInitialized=true;
|
||||
}
|
||||
|
||||
calculateDomain(series,domain);
|
||||
series->d_ptr->scaleDomain(*domain);
|
||||
|
||||
if(series->type() == QSeries::SeriesTypeBar || series->type() == QSeries::SeriesTypeStackedBar || series->type() == QSeries::SeriesTypePercentBar)
|
||||
{
|
||||
QBarSeries* barSeries = static_cast<QBarSeries*>(series);
|
||||
setupCategories(barSeries);
|
||||
}
|
||||
|
||||
if (series->type()== QSeries::SeriesTypePie && m_seriesAxisMap.count()==0)
|
||||
{
|
||||
axisX()->hide();
|
||||
this->axisY()->hide();
|
||||
}
|
||||
|
||||
m_seriesAxisMap.insert(series,axisY);
|
||||
|
||||
|
@ -160,122 +173,6 @@ void ChartDataSet::removeAllSeries()
|
|||
|
||||
}
|
||||
|
||||
//to be removed with PIMPL
|
||||
void ChartDataSet::calculateDomain(QSeries* series,Domain* domain)
|
||||
{
|
||||
qreal minX(domain->minX());
|
||||
qreal minY(domain->minY());
|
||||
qreal maxX(domain->maxX());
|
||||
qreal maxY(domain->maxY());
|
||||
int tickXCount(domain->tickXCount());
|
||||
int tickYCount(domain->tickYCount());
|
||||
|
||||
|
||||
switch(series->type())
|
||||
{
|
||||
case QSeries::SeriesTypeLine:
|
||||
case QSeries::SeriesTypeSpline:
|
||||
case QSeries::SeriesTypeScatter:
|
||||
{
|
||||
|
||||
QXYSeries* xySeries = static_cast<QXYSeries*>(series);
|
||||
|
||||
for (int i = 0; i < xySeries->count(); i++)
|
||||
{
|
||||
qreal x = xySeries->x(i);
|
||||
qreal y = xySeries->y(i);
|
||||
minX = qMin(minX, x);
|
||||
minY = qMin(minY, y);
|
||||
maxX = qMax(maxX, x);
|
||||
maxY = qMax(maxY, y);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case QSeries::SeriesTypeArea: {
|
||||
|
||||
QAreaSeries* areaSeries = static_cast<QAreaSeries*>(series);
|
||||
QLineSeries* upperSeries = areaSeries->upperSeries();
|
||||
QLineSeries* lowerSeries = areaSeries->lowerSeries();
|
||||
|
||||
for (int i = 0; i < upperSeries->count(); i++)
|
||||
{
|
||||
qreal x = upperSeries->x(i);
|
||||
qreal y = upperSeries->y(i);
|
||||
minX = qMin(minX, x);
|
||||
minY = qMin(minY, y);
|
||||
maxX = qMax(maxX, x);
|
||||
maxY = qMax(maxY, y);
|
||||
}
|
||||
if(lowerSeries) {
|
||||
for (int i = 0; i < lowerSeries->count(); i++)
|
||||
{
|
||||
qreal x = lowerSeries->x(i);
|
||||
qreal y = lowerSeries->y(i);
|
||||
minX = qMin(minX, x);
|
||||
minY = qMin(minY, y);
|
||||
maxX = qMax(maxX, x);
|
||||
maxY = qMax(maxY, y);
|
||||
}}
|
||||
break;
|
||||
}
|
||||
case QSeries::SeriesTypeBar: {
|
||||
|
||||
QBarSeries* barSeries = static_cast<QBarSeries*>(series);
|
||||
qreal x = barSeries->categoryCount();
|
||||
qreal y = barSeries->max();
|
||||
minX = qMin(minX, x);
|
||||
minY = qMin(minY, y);
|
||||
maxX = qMax(maxX, x);
|
||||
maxY = qMax(maxY, y);
|
||||
tickXCount = x+1;
|
||||
setupCategories(barSeries);
|
||||
break;
|
||||
}
|
||||
case QSeries::SeriesTypeStackedBar: {
|
||||
|
||||
QStackedBarSeries* stackedBarSeries = static_cast<QStackedBarSeries*>(series);
|
||||
qreal x = stackedBarSeries->categoryCount();
|
||||
qreal y = stackedBarSeries->maxCategorySum();
|
||||
minX = qMin(minX, x);
|
||||
minY = qMin(minY, y);
|
||||
maxX = qMax(maxX, x);
|
||||
maxY = qMax(maxY, y);
|
||||
tickXCount = x+1;
|
||||
setupCategories(stackedBarSeries);
|
||||
break;
|
||||
}
|
||||
case QSeries::SeriesTypePercentBar: {
|
||||
|
||||
QPercentBarSeries* percentBarSeries = static_cast<QPercentBarSeries*>(series);
|
||||
qreal x = percentBarSeries->categoryCount();
|
||||
minX = qMin(minX, x);
|
||||
maxX = qMax(maxX, x);
|
||||
minY = 0;
|
||||
maxY = 100;
|
||||
tickXCount = x+1;
|
||||
setupCategories(percentBarSeries);
|
||||
break;
|
||||
}
|
||||
|
||||
case QSeries::SeriesTypePie: {
|
||||
//QPieSeries *pieSeries = static_cast<QPieSeries *>(series);
|
||||
// TODO: domain stuff
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
default: {
|
||||
qDebug()<<__FUNCTION__<<"type" << series->type()<<"not supported";
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
domain->setRangeX(minX,maxX,tickXCount);
|
||||
domain->setRangeY(minY,maxY,tickYCount);
|
||||
}
|
||||
|
||||
|
||||
void ChartDataSet::setupCategories(QBarSeries* series)
|
||||
{
|
||||
QChartAxisCategories* categories = axisX()->categories();
|
||||
|
|
|
@ -25,25 +25,10 @@
|
|||
#include "chartdataset_p.h"
|
||||
#include "charttheme_p.h"
|
||||
#include "chartanimator_p.h"
|
||||
//series
|
||||
#include "qbarseries.h"
|
||||
#include "qstackedbarseries.h"
|
||||
#include "qpercentbarseries.h"
|
||||
#include "qlineseries.h"
|
||||
#include "qseries_p.h"
|
||||
#include "qareaseries.h"
|
||||
#include "qpieseries.h"
|
||||
#include "qscatterseries.h"
|
||||
#include "qsplineseries.h"
|
||||
//items
|
||||
#include "axisitem_p.h"
|
||||
#include "areachartitem_p.h"
|
||||
#include "barchartitem_p.h"
|
||||
#include "stackedbarchartitem_p.h"
|
||||
#include "percentbarchartitem_p.h"
|
||||
#include "linechartitem_p.h"
|
||||
#include "piechartitem_p.h"
|
||||
#include "scatterchartitem_p.h"
|
||||
#include "splinechartitem_p.h"
|
||||
|
||||
QTCOMMERCIALCHART_BEGIN_NAMESPACE
|
||||
|
||||
|
@ -54,7 +39,6 @@ ChartPresenter::ChartPresenter(QChart* chart,ChartDataSet* dataset):QObject(char
|
|||
m_chartTheme(0),
|
||||
m_chartRect(QRectF(QPoint(0,0),m_chart->size())),
|
||||
m_options(QChart::NoAnimation),
|
||||
m_themeForce(false),
|
||||
m_minLeftMargin(0),
|
||||
m_minBottomMargin(0),
|
||||
m_backgroundItem(0),
|
||||
|
@ -135,14 +119,14 @@ void ChartPresenter::handleAxisAdded(QChartAxis* axis,Domain* domain)
|
|||
}
|
||||
|
||||
if(axis==m_dataset->axisX()){
|
||||
m_chartTheme->decorate(axis,true,m_themeForce);
|
||||
m_chartTheme->decorate(axis,true);
|
||||
QObject::connect(domain,SIGNAL(rangeXChanged(qreal,qreal,int)),item,SLOT(handleRangeChanged(qreal,qreal,int)));
|
||||
//initialize
|
||||
item->handleRangeChanged(domain->minX(),domain->maxX(),domain->tickXCount());
|
||||
|
||||
}
|
||||
else{
|
||||
m_chartTheme->decorate(axis,false,m_themeForce);
|
||||
m_chartTheme->decorate(axis,false);
|
||||
QObject::connect(domain,SIGNAL(rangeYChanged(qreal,qreal,int)),item,SLOT(handleRangeChanged(qreal,qreal,int)));
|
||||
//initialize
|
||||
item->handleRangeChanged(domain->minY(),domain->maxY(),domain->tickYCount());
|
||||
|
@ -165,133 +149,14 @@ void ChartPresenter::handleAxisRemoved(QChartAxis* axis)
|
|||
|
||||
void ChartPresenter::handleSeriesAdded(QSeries* series,Domain* domain)
|
||||
{
|
||||
Chart *item = 0 ;
|
||||
|
||||
switch(series->type())
|
||||
{
|
||||
case QSeries::SeriesTypeLine: {
|
||||
|
||||
QLineSeries* lineSeries = static_cast<QLineSeries*>(series);
|
||||
LineChartItem* line = new LineChartItem(lineSeries,this);
|
||||
if(m_options.testFlag(QChart::SeriesAnimations)) {
|
||||
m_animator->addAnimation(line);
|
||||
}
|
||||
m_chartTheme->decorate(lineSeries, m_dataset->seriesIndex(series),m_themeForce);
|
||||
QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),line,SLOT(handleGeometryChanged(const QRectF&)));
|
||||
QObject::connect(domain,SIGNAL(domainChanged(qreal,qreal,qreal,qreal)),line,SLOT(handleDomainChanged(qreal,qreal,qreal,qreal)));
|
||||
item = line;
|
||||
break;
|
||||
}
|
||||
|
||||
case QSeries::SeriesTypeArea: {
|
||||
|
||||
QAreaSeries* areaSeries = static_cast<QAreaSeries*>(series);
|
||||
AreaChartItem* area = new AreaChartItem(areaSeries,this);
|
||||
if(m_options.testFlag(QChart::SeriesAnimations)) {
|
||||
m_animator->addAnimation(area->upperLineItem());
|
||||
if(areaSeries->lowerSeries()) m_animator->addAnimation(area->lowerLineItem());
|
||||
}
|
||||
m_chartTheme->decorate(areaSeries, m_dataset->seriesIndex(series),m_themeForce);
|
||||
QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),area,SLOT(handleGeometryChanged(const QRectF&)));
|
||||
QObject::connect(domain,SIGNAL(domainChanged(qreal,qreal,qreal,qreal)),area,SLOT(handleDomainChanged(qreal,qreal,qreal,qreal)));
|
||||
item=area;
|
||||
break;
|
||||
}
|
||||
|
||||
case QSeries::SeriesTypeBar: {
|
||||
QBarSeries* barSeries = static_cast<QBarSeries*>(series);
|
||||
BarChartItem* bar = new BarChartItem(barSeries,this);
|
||||
if(m_options.testFlag(QChart::SeriesAnimations)) {
|
||||
m_animator->addAnimation(bar);
|
||||
}
|
||||
m_chartTheme->decorate(barSeries, m_dataset->seriesIndex(barSeries),m_themeForce);
|
||||
QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),bar,SLOT(handleGeometryChanged(const QRectF&)));
|
||||
QObject::connect(domain,SIGNAL(domainChanged(qreal,qreal,qreal,qreal)),bar,SLOT(handleDomainChanged(qreal,qreal,qreal,qreal)));
|
||||
item=bar;
|
||||
break;
|
||||
}
|
||||
|
||||
case QSeries::SeriesTypeStackedBar: {
|
||||
QStackedBarSeries* stackedBarSeries = static_cast<QStackedBarSeries*>(series);
|
||||
StackedBarChartItem* bar = new StackedBarChartItem(stackedBarSeries,this);
|
||||
if(m_options.testFlag(QChart::SeriesAnimations)) {
|
||||
m_animator->addAnimation(bar);
|
||||
}
|
||||
m_chartTheme->decorate(stackedBarSeries, m_dataset->seriesIndex(stackedBarSeries),m_themeForce);
|
||||
QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),bar,SLOT(handleGeometryChanged(const QRectF&)));
|
||||
QObject::connect(domain,SIGNAL(domainChanged(qreal,qreal,qreal,qreal)),bar,SLOT(handleDomainChanged(qreal,qreal,qreal,qreal)));
|
||||
item=bar;
|
||||
break;
|
||||
}
|
||||
|
||||
case QSeries::SeriesTypePercentBar: {
|
||||
QPercentBarSeries* percentBarSeries = static_cast<QPercentBarSeries*>(series);
|
||||
PercentBarChartItem* bar = new PercentBarChartItem(percentBarSeries,this);
|
||||
if(m_options.testFlag(QChart::SeriesAnimations)) {
|
||||
m_animator->addAnimation(bar);
|
||||
}
|
||||
m_chartTheme->decorate(percentBarSeries, m_dataset->seriesIndex(percentBarSeries),m_themeForce);
|
||||
QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),bar,SLOT(handleGeometryChanged(const QRectF&)));
|
||||
QObject::connect(domain,SIGNAL(domainChanged(qreal,qreal,qreal,qreal)),bar,SLOT(handleDomainChanged(qreal,qreal,qreal,qreal)));
|
||||
item=bar;
|
||||
break;
|
||||
}
|
||||
|
||||
case QSeries::SeriesTypeScatter: {
|
||||
|
||||
QScatterSeries *scatterSeries = static_cast<QScatterSeries *>(series);
|
||||
ScatterChartItem *scatter = new ScatterChartItem(scatterSeries,this);
|
||||
if(m_options.testFlag(QChart::SeriesAnimations)) {
|
||||
m_animator->addAnimation(scatter);
|
||||
}
|
||||
m_chartTheme->decorate(scatterSeries, m_dataset->seriesIndex(series),m_themeForce);
|
||||
QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),scatter,SLOT(handleGeometryChanged(const QRectF&)));
|
||||
QObject::connect(domain,SIGNAL(domainChanged(qreal,qreal,qreal,qreal)),scatter,SLOT(handleDomainChanged(qreal,qreal,qreal,qreal)));
|
||||
item = scatter;
|
||||
break;
|
||||
}
|
||||
|
||||
case QSeries::SeriesTypePie: {
|
||||
QPieSeries *pieSeries = static_cast<QPieSeries *>(series);
|
||||
PieChartItem* pie = new PieChartItem(pieSeries, this);
|
||||
if(m_options.testFlag(QChart::SeriesAnimations)) {
|
||||
m_animator->addAnimation(pie);
|
||||
}
|
||||
m_chartTheme->decorate(pieSeries, m_dataset->seriesIndex(series),m_themeForce);
|
||||
QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),pie,SLOT(handleGeometryChanged(const QRectF&)));
|
||||
QObject::connect(domain,SIGNAL(domainChanged(qreal,qreal,qreal,qreal)),pie,SLOT(handleDomainChanged(qreal,qreal,qreal,qreal)));
|
||||
// Hide all from background when there is only piechart
|
||||
// TODO: refactor this ugly code... should be one setting for this
|
||||
if (m_chartItems.count() == 0) {
|
||||
m_chart->axisX()->hide();
|
||||
m_chart->axisY()->hide();
|
||||
}
|
||||
item=pie;
|
||||
break;
|
||||
}
|
||||
|
||||
case QSeries::SeriesTypeSpline: {
|
||||
QSplineSeries* splineSeries = static_cast<QSplineSeries*>(series);
|
||||
SplineChartItem* spline = new SplineChartItem(splineSeries, this);
|
||||
if(m_options.testFlag(QChart::SeriesAnimations)) {
|
||||
m_animator->addAnimation(spline);
|
||||
}
|
||||
m_chartTheme->decorate(splineSeries, m_dataset->seriesIndex(series),m_themeForce);
|
||||
QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),spline,SLOT(handleGeometryChanged(const QRectF&)));
|
||||
QObject::connect(domain,SIGNAL(domainChanged(qreal,qreal,qreal,qreal)),spline,SLOT(handleDomainChanged(qreal,qreal,qreal,qreal)));
|
||||
item=spline;
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
qDebug()<< "Series type" << series->type() << "not implemented.";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//initialize
|
||||
item->handleDomainChanged(domain->minX(),domain->maxX(),domain->minY(),domain->maxY());
|
||||
if(m_chartRect.isValid()) item->handleGeometryChanged(m_chartRect);
|
||||
m_chartItems.insert(series,item);
|
||||
Chart *item = series->d_ptr->createGraphics(this);
|
||||
Q_ASSERT(item);
|
||||
QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
|
||||
QObject::connect(domain,SIGNAL(domainChanged(qreal,qreal,qreal,qreal)),item,SLOT(handleDomainChanged(qreal,qreal,qreal,qreal)));
|
||||
//initialize
|
||||
item->handleDomainChanged(domain->minX(),domain->maxX(),domain->minY(),domain->maxY());
|
||||
if(m_chartRect.isValid()) item->handleGeometryChanged(m_chartRect);
|
||||
m_chartItems.insert(series,item);
|
||||
}
|
||||
|
||||
void ChartPresenter::handleSeriesRemoved(QSeries* series)
|
||||
|
@ -315,10 +180,10 @@ void ChartPresenter::setTheme(QChart::ChartTheme theme,bool force)
|
|||
{
|
||||
if(m_chartTheme && m_chartTheme->id() == theme) return;
|
||||
delete m_chartTheme;
|
||||
m_themeForce = force;
|
||||
m_chartTheme = ChartTheme::createTheme(theme);
|
||||
m_chartTheme->decorate(m_chart,m_themeForce);
|
||||
m_chartTheme->decorate(m_chart->legend(),m_themeForce);
|
||||
m_chartTheme->setForced(force);
|
||||
m_chartTheme->decorate(m_chart);
|
||||
m_chartTheme->decorate(m_chart->legend());
|
||||
resetAllElements();
|
||||
}
|
||||
|
||||
|
|
|
@ -107,7 +107,6 @@ private:
|
|||
QRectF m_rect;
|
||||
QRectF m_chartRect;
|
||||
QChart::AnimationOptions m_options;
|
||||
bool m_themeForce;
|
||||
qreal m_minLeftMargin;
|
||||
qreal m_minBottomMargin;
|
||||
public: //TODO: fixme
|
||||
|
|
|
@ -69,7 +69,8 @@ ChartTheme::ChartTheme(QChart::ChartTheme id) :
|
|||
m_backgroundShadesPen(Qt::NoPen),
|
||||
m_backgroundShadesBrush(Qt::NoBrush),
|
||||
m_backgroundShades(BackgroundShadesNone),
|
||||
m_gridLinePen(QPen(QRgb(0x000000)))
|
||||
m_gridLinePen(QPen(QRgb(0x000000))),
|
||||
m_force(false)
|
||||
{
|
||||
m_id = id;
|
||||
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
|
||||
|
@ -98,60 +99,60 @@ ChartTheme* ChartTheme::createTheme(QChart::ChartTheme theme)
|
|||
}
|
||||
}
|
||||
|
||||
void ChartTheme::decorate(QChart* chart,bool force)
|
||||
void ChartTheme::decorate(QChart* chart)
|
||||
{
|
||||
QBrush brush;
|
||||
|
||||
if(brush == chart->backgroundBrush() || force)
|
||||
if(brush == chart->backgroundBrush() || m_force)
|
||||
chart->setBackgroundBrush(m_chartBackgroundGradient);
|
||||
chart->setTitleFont(m_masterFont);
|
||||
chart->setTitleBrush(m_titleBrush);
|
||||
}
|
||||
|
||||
void ChartTheme::decorate(QLegend* legend,bool force)
|
||||
void ChartTheme::decorate(QLegend* legend)
|
||||
{
|
||||
QPen pen;
|
||||
QBrush brush;
|
||||
|
||||
if (pen == legend->pen() || force){
|
||||
if (pen == legend->pen() || m_force){
|
||||
legend->setPen(Qt::NoPen);
|
||||
}
|
||||
|
||||
|
||||
if (brush == legend->brush() || force) {
|
||||
if (brush == legend->brush() || m_force) {
|
||||
legend->setBrush(m_chartBackgroundGradient);
|
||||
}
|
||||
}
|
||||
|
||||
void ChartTheme::decorate(QAreaSeries* series, int index,bool force)
|
||||
void ChartTheme::decorate(QAreaSeries* series, int index)
|
||||
{
|
||||
QPen pen;
|
||||
QBrush brush;
|
||||
|
||||
if (pen == series->pen() || force){
|
||||
if (pen == series->pen() || m_force){
|
||||
pen.setColor(colorAt(m_seriesGradients.at(index % m_seriesGradients.size()), 0.0));
|
||||
pen.setWidthF(2);
|
||||
series->setPen(pen);
|
||||
}
|
||||
|
||||
if (brush == series->brush() || force) {
|
||||
if (brush == series->brush() || m_force) {
|
||||
QBrush brush(m_seriesColors.at(index % m_seriesColors.size()));
|
||||
series->setBrush(brush);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ChartTheme::decorate(QLineSeries* series,int index,bool force)
|
||||
void ChartTheme::decorate(QLineSeries* series,int index)
|
||||
{
|
||||
QPen pen;
|
||||
if(pen == series->pen() || force ){
|
||||
if(pen == series->pen() || m_force ){
|
||||
pen.setColor(m_seriesColors.at(index%m_seriesColors.size()));
|
||||
pen.setWidthF(2);
|
||||
series->setPen(pen);
|
||||
}
|
||||
}
|
||||
|
||||
void ChartTheme::decorate(QBarSeries* series, int index, bool force)
|
||||
void ChartTheme::decorate(QBarSeries* series, int index)
|
||||
{
|
||||
QBrush brush;
|
||||
QPen pen;
|
||||
|
@ -176,7 +177,7 @@ void ChartTheme::decorate(QBarSeries* series, int index, bool force)
|
|||
takeAtPos += step;
|
||||
takeAtPos -= (int) takeAtPos;
|
||||
}
|
||||
if (brush == sets.at(i)->brush() || force )
|
||||
if (brush == sets.at(i)->brush() || m_force )
|
||||
sets.at(i)->setBrush(colorAt(m_seriesGradients.at(colorIndex), takeAtPos));
|
||||
|
||||
// Pick label color from the opposite end of the gradient.
|
||||
|
@ -186,31 +187,31 @@ void ChartTheme::decorate(QBarSeries* series, int index, bool force)
|
|||
else
|
||||
sets.at(i)->setLabelBrush(colorAt(m_seriesGradients.at(index % m_seriesGradients.size()), 0));
|
||||
|
||||
if (pen == sets.at(i)->pen() || force) {
|
||||
if (pen == sets.at(i)->pen() || m_force) {
|
||||
QColor c = colorAt(m_seriesGradients.at(index % m_seriesGradients.size()), 0.0);
|
||||
sets.at(i)->setPen(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ChartTheme::decorate(QScatterSeries* series, int index,bool force)
|
||||
void ChartTheme::decorate(QScatterSeries* series, int index)
|
||||
{
|
||||
QPen pen;
|
||||
QBrush brush;
|
||||
|
||||
if (pen == series->pen() || force) {
|
||||
if (pen == series->pen() || m_force) {
|
||||
pen.setColor(colorAt(m_seriesGradients.at(index % m_seriesGradients.size()), 0.0));
|
||||
pen.setWidthF(2);
|
||||
series->setPen(pen);
|
||||
}
|
||||
|
||||
if (brush == series->brush() || force) {
|
||||
if (brush == series->brush() || m_force) {
|
||||
QBrush brush(m_seriesColors.at(index % m_seriesColors.size()));
|
||||
series->setBrush(brush);
|
||||
}
|
||||
}
|
||||
|
||||
void ChartTheme::decorate(QPieSeries* series, int index, bool force)
|
||||
void ChartTheme::decorate(QPieSeries* series, int index)
|
||||
{
|
||||
|
||||
for (int i(0); i < series->slices().count(); i++) {
|
||||
|
@ -224,22 +225,22 @@ void ChartTheme::decorate(QPieSeries* series, int index, bool force)
|
|||
QPieSlice *s = series->slices().at(i);
|
||||
PieSliceData data = PieSliceData::data(s);
|
||||
|
||||
if (data.m_slicePen.isThemed() || force) {
|
||||
if (data.m_slicePen.isThemed() || m_force) {
|
||||
data.m_slicePen = penColor;
|
||||
data.m_slicePen.setThemed(true);
|
||||
}
|
||||
|
||||
if (data.m_sliceBrush.isThemed() || force) {
|
||||
if (data.m_sliceBrush.isThemed() || m_force) {
|
||||
data.m_sliceBrush = brushColor;
|
||||
data.m_sliceBrush.setThemed(true);
|
||||
}
|
||||
|
||||
if (data.m_labelPen.isThemed() || force) {
|
||||
if (data.m_labelPen.isThemed() || m_force) {
|
||||
data.m_labelPen = QPen(m_titleBrush.color());
|
||||
data.m_labelPen.setThemed(true);
|
||||
}
|
||||
|
||||
if (data.m_labelFont.isThemed() || force) {
|
||||
if (data.m_labelFont.isThemed() || m_force) {
|
||||
data.m_labelFont = m_labelFont;
|
||||
data.m_labelFont.setThemed(true);
|
||||
}
|
||||
|
@ -251,17 +252,17 @@ void ChartTheme::decorate(QPieSeries* series, int index, bool force)
|
|||
}
|
||||
}
|
||||
|
||||
void ChartTheme::decorate(QSplineSeries* series, int index, bool force)
|
||||
void ChartTheme::decorate(QSplineSeries* series, int index)
|
||||
{
|
||||
QPen pen;
|
||||
if(pen == series->pen() || force){
|
||||
if(pen == series->pen() || m_force){
|
||||
pen.setColor(m_seriesColors.at(index%m_seriesColors.size()));
|
||||
pen.setWidthF(2);
|
||||
series->setPen(pen);
|
||||
}
|
||||
}
|
||||
|
||||
void ChartTheme::decorate(QChartAxis* axis,bool axisX, bool force)
|
||||
void ChartTheme::decorate(QChartAxis* axis,bool axisX)
|
||||
{
|
||||
QPen pen;
|
||||
QBrush brush;
|
||||
|
@ -269,25 +270,25 @@ void ChartTheme::decorate(QChartAxis* axis,bool axisX, bool force)
|
|||
|
||||
if (axis->isAxisVisible()) {
|
||||
|
||||
if(brush == axis->labelsBrush() || force){
|
||||
if(brush == axis->labelsBrush() || m_force){
|
||||
axis->setLabelsBrush(m_axisLabelBrush);
|
||||
}
|
||||
if(pen == axis->labelsPen() || force){
|
||||
if(pen == axis->labelsPen() || m_force){
|
||||
axis->setLabelsPen(Qt::NoPen); // NoPen for performance reasons
|
||||
}
|
||||
|
||||
|
||||
if (axis->shadesVisible() || force) {
|
||||
if (axis->shadesVisible() || m_force) {
|
||||
|
||||
if(brush == axis->shadesBrush() || force){
|
||||
if(brush == axis->shadesBrush() || m_force){
|
||||
axis->setShadesBrush(m_backgroundShadesBrush);
|
||||
}
|
||||
|
||||
if(pen == axis->shadesPen() || force){
|
||||
if(pen == axis->shadesPen() || m_force){
|
||||
axis->setShadesPen(m_backgroundShadesPen);
|
||||
}
|
||||
|
||||
if(force && (m_backgroundShades == BackgroundShadesBoth
|
||||
if( m_force && (m_backgroundShades == BackgroundShadesBoth
|
||||
|| (m_backgroundShades == BackgroundShadesVertical && axisX)
|
||||
|| (m_backgroundShades == BackgroundShadesHorizontal && !axisX))){
|
||||
axis->setShadesVisible(true);
|
||||
|
@ -295,15 +296,15 @@ void ChartTheme::decorate(QChartAxis* axis,bool axisX, bool force)
|
|||
}
|
||||
}
|
||||
|
||||
if(pen == axis->axisPen() || force){
|
||||
if(pen == axis->axisPen() || m_force){
|
||||
axis->setAxisPen(m_axisLinePen);
|
||||
}
|
||||
|
||||
if(pen == axis->gridLinePen() || force){
|
||||
if(pen == axis->gridLinePen() || m_force){
|
||||
axis->setGridLinePen(m_gridLinePen);
|
||||
}
|
||||
|
||||
if(font == axis->labelsFont() || force){
|
||||
if(font == axis->labelsFont() || m_force){
|
||||
axis->setLabelsFont(m_labelFont);
|
||||
}
|
||||
}
|
||||
|
@ -389,4 +390,9 @@ QColor ChartTheme::colorAt(const QGradient &gradient, qreal pos)
|
|||
return colorAt(prev.second, next.second, relativePos);
|
||||
}
|
||||
|
||||
void ChartTheme::setForced(bool enabled)
|
||||
{
|
||||
m_force=enabled;
|
||||
}
|
||||
|
||||
QTCOMMERCIALCHART_END_NAMESPACE
|
||||
|
|
|
@ -62,15 +62,17 @@ protected:
|
|||
public:
|
||||
static ChartTheme* createTheme(QChart::ChartTheme theme);
|
||||
QChart::ChartTheme id() const {return m_id;}
|
||||
void decorate(QChart* chart,bool force = true);
|
||||
void decorate(QLegend* legend,bool force = true);
|
||||
void decorate(QBarSeries* series, int index,bool force = true);
|
||||
void decorate(QLineSeries* series, int index,bool force = true);
|
||||
void decorate(QAreaSeries* series, int index,bool force = true);
|
||||
void decorate(QScatterSeries* series, int index,bool force = true);
|
||||
void decorate(QPieSeries* series, int index,bool force = true);
|
||||
void decorate(QSplineSeries* series, int index,bool force = true);
|
||||
void decorate(QChartAxis* axis, bool axisX,bool force = true);
|
||||
void decorate(QChart* chart);
|
||||
void decorate(QLegend* legend);
|
||||
void decorate(QBarSeries* series, int index);
|
||||
void decorate(QLineSeries* series, int index);
|
||||
void decorate(QAreaSeries* series, int index);
|
||||
void decorate(QScatterSeries* series, int index);
|
||||
void decorate(QPieSeries* series, int index);
|
||||
void decorate(QSplineSeries* series, int index);
|
||||
void decorate(QChartAxis* axis, bool axisX);
|
||||
void setForced(bool enabled);
|
||||
bool isForced() { return m_force; }
|
||||
|
||||
public: // utils
|
||||
void generateSeriesGradients();
|
||||
|
@ -92,6 +94,7 @@ protected:
|
|||
QBrush m_backgroundShadesBrush;
|
||||
BackgroundShadesMode m_backgroundShades;
|
||||
QPen m_gridLinePen;
|
||||
bool m_force;
|
||||
};
|
||||
|
||||
QTCOMMERCIALCHART_END_NAMESPACE
|
||||
|
|
|
@ -20,6 +20,10 @@
|
|||
|
||||
#include "qlineseries.h"
|
||||
#include "qlineseries_p.h"
|
||||
#include "linechartitem_p.h"
|
||||
#include "chartdataset_p.h"
|
||||
#include "charttheme_p.h"
|
||||
#include "chartanimator_p.h"
|
||||
|
||||
QTCOMMERCIALCHART_BEGIN_NAMESPACE
|
||||
|
||||
|
@ -101,4 +105,15 @@ QLineSeriesPrivate::QLineSeriesPrivate(QLineSeries* q):QXYSeriesPrivate(q)
|
|||
|
||||
};
|
||||
|
||||
Chart* QLineSeriesPrivate::createGraphics(ChartPresenter* presenter)
|
||||
{
|
||||
Q_Q(QLineSeries);
|
||||
LineChartItem* line = new LineChartItem(q,presenter);
|
||||
if(presenter->animationOptions().testFlag(QChart::SeriesAnimations)) {
|
||||
presenter->animator()->addAnimation(line);
|
||||
}
|
||||
presenter->chartTheme()->decorate(q, presenter->dataSet()->seriesIndex(q));
|
||||
return line;
|
||||
}
|
||||
|
||||
QTCOMMERCIALCHART_END_NAMESPACE
|
||||
|
|
|
@ -35,9 +35,13 @@
|
|||
QTCOMMERCIALCHART_BEGIN_NAMESPACE
|
||||
|
||||
|
||||
struct QLineSeriesPrivate: public QXYSeriesPrivate
|
||||
class QLineSeriesPrivate: public QXYSeriesPrivate
|
||||
{
|
||||
public:
|
||||
QLineSeriesPrivate(QLineSeries* q);
|
||||
Chart* createGraphics(ChartPresenter* presenter);
|
||||
private:
|
||||
Q_DECLARE_PUBLIC(QLineSeries);
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ void PieChartItem::handleSlicesAdded(QList<QPieSlice*> slices)
|
|||
{
|
||||
bool isEmpty = m_slices.isEmpty();
|
||||
|
||||
presenter()->chartTheme()->decorate(m_series, presenter()->dataSet()->seriesIndex(m_series), false);
|
||||
presenter()->chartTheme()->decorate(m_series, presenter()->dataSet()->seriesIndex(m_series));
|
||||
|
||||
foreach (QPieSlice *s, slices) {
|
||||
PieSliceItem* item = new PieSliceItem(this);
|
||||
|
@ -91,7 +91,7 @@ void PieChartItem::handleSlicesAdded(QList<QPieSlice*> slices)
|
|||
|
||||
void PieChartItem::handleSlicesRemoved(QList<QPieSlice*> slices)
|
||||
{
|
||||
presenter()->chartTheme()->decorate(m_series, presenter()->dataSet()->seriesIndex(m_series), false);
|
||||
presenter()->chartTheme()->decorate(m_series, presenter()->dataSet()->seriesIndex(m_series));
|
||||
|
||||
foreach (QPieSlice *s, slices) {
|
||||
if (animator())
|
||||
|
|
|
@ -22,6 +22,9 @@
|
|||
#include "qpieseries_p.h"
|
||||
#include "qpieslice.h"
|
||||
#include "pieslicedata_p.h"
|
||||
#include "chartdataset_p.h"
|
||||
#include "charttheme_p.h"
|
||||
#include "chartanimator_p.h"
|
||||
#include <QAbstractItemModel>
|
||||
#include <QDebug>
|
||||
|
||||
|
@ -694,6 +697,24 @@ bool QPieSeriesPrivate::setRealValue(qreal &value, qreal newValue, qreal max, qr
|
|||
return false;
|
||||
}
|
||||
|
||||
void QPieSeriesPrivate::scaleDomain(Domain& domain)
|
||||
{
|
||||
Q_UNUSED(domain);
|
||||
#ifndef QT_NO_DEBUG
|
||||
qWarning() << __FILE__<<__FUNCTION__<<"not implemented";
|
||||
#endif
|
||||
}
|
||||
|
||||
Chart* QPieSeriesPrivate::createGraphics(ChartPresenter* presenter)
|
||||
{
|
||||
Q_Q(QPieSeries);
|
||||
PieChartItem* pie = new PieChartItem(q,presenter);
|
||||
if(presenter->animationOptions().testFlag(QChart::SeriesAnimations)) {
|
||||
presenter->animator()->addAnimation(pie);
|
||||
}
|
||||
presenter->chartTheme()->decorate(q, presenter->dataSet()->seriesIndex(q));
|
||||
return pie;
|
||||
}
|
||||
|
||||
#include "moc_qpieseries.cpp"
|
||||
#include "moc_qpieseries_p.cpp"
|
||||
|
|
|
@ -36,6 +36,9 @@ public:
|
|||
QPieSeriesPrivate(QPieSeries *parent);
|
||||
~QPieSeriesPrivate();
|
||||
|
||||
void scaleDomain(Domain& domain);
|
||||
Chart* createGraphics(ChartPresenter* presenter);
|
||||
|
||||
void updateDerivativeData();
|
||||
|
||||
public Q_SLOTS:
|
||||
|
|
|
@ -96,12 +96,6 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE
|
|||
\sa setName()
|
||||
*/
|
||||
|
||||
QSeries::QSeries(QObject *parent) : QObject(parent),
|
||||
d_ptr(new QSeriesPrivate(this))
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
QSeries::QSeries(QSeriesPrivate &d,QObject *parent) : QObject(parent),
|
||||
d_ptr(&d)
|
||||
{
|
||||
|
|
|
@ -50,7 +50,6 @@ public:
|
|||
};
|
||||
|
||||
protected:
|
||||
QSeries(QObject *parent = 0);
|
||||
QSeries(QSeriesPrivate &d,QObject *parent = 0);
|
||||
|
||||
public:
|
||||
|
@ -64,6 +63,8 @@ public:
|
|||
|
||||
protected:
|
||||
QScopedPointer<QSeriesPrivate> d_ptr;
|
||||
friend class ChartDataSet;
|
||||
friend class ChartPresenter;
|
||||
};
|
||||
|
||||
QTCOMMERCIALCHART_END_NAMESPACE
|
||||
|
|
|
@ -36,13 +36,25 @@ class QAbstractItemModel;
|
|||
|
||||
QTCOMMERCIALCHART_BEGIN_NAMESPACE
|
||||
|
||||
struct QSeriesPrivate : public QObject
|
||||
class Domain;
|
||||
class ChartPresenter;
|
||||
class Chart;
|
||||
|
||||
class QSeriesPrivate : public QObject
|
||||
{
|
||||
public:
|
||||
QSeriesPrivate(QSeries *q);
|
||||
virtual ~QSeriesPrivate();
|
||||
~QSeriesPrivate();
|
||||
|
||||
virtual void scaleDomain(Domain& domain) = 0;
|
||||
virtual Chart* createGraphics(ChartPresenter* presenter) = 0;
|
||||
|
||||
protected:
|
||||
QSeries *q_ptr;
|
||||
QAbstractItemModel* m_model;
|
||||
QAbstractItemModel *m_model;
|
||||
QString m_name;
|
||||
|
||||
friend class QSeries;
|
||||
};
|
||||
|
||||
QTCOMMERCIALCHART_END_NAMESPACE
|
||||
|
|
|
@ -20,6 +20,10 @@
|
|||
|
||||
#include "qscatterseries.h"
|
||||
#include "qscatterseries_p.h"
|
||||
#include "scatterchartitem_p.h"
|
||||
#include "chartdataset_p.h"
|
||||
#include "charttheme_p.h"
|
||||
#include "chartanimator_p.h"
|
||||
|
||||
/*!
|
||||
\class QScatterSeries
|
||||
|
@ -131,5 +135,16 @@ QScatterSeriesPrivate::QScatterSeriesPrivate(QScatterSeries* q):QXYSeriesPrivate
|
|||
|
||||
};
|
||||
|
||||
Chart* QScatterSeriesPrivate::createGraphics(ChartPresenter* presenter)
|
||||
{
|
||||
Q_Q(QScatterSeries);
|
||||
ScatterChartItem *scatter = new ScatterChartItem(q,presenter);
|
||||
if(presenter->animationOptions().testFlag(QChart::SeriesAnimations)) {
|
||||
presenter->animator()->addAnimation(scatter);
|
||||
}
|
||||
presenter->chartTheme()->decorate(q, presenter->dataSet()->seriesIndex(q));
|
||||
return scatter;
|
||||
}
|
||||
|
||||
|
||||
QTCOMMERCIALCHART_END_NAMESPACE
|
||||
|
|
|
@ -34,12 +34,16 @@
|
|||
|
||||
QTCOMMERCIALCHART_BEGIN_NAMESPACE
|
||||
|
||||
struct QScatterSeriesPrivate: public QXYSeriesPrivate
|
||||
class QScatterSeriesPrivate: public QXYSeriesPrivate
|
||||
{
|
||||
public:
|
||||
QScatterSeriesPrivate(QScatterSeries* q);
|
||||
Chart* createGraphics(ChartPresenter* presenter);
|
||||
|
||||
private:
|
||||
QScatterSeries::MarkerShape m_shape;
|
||||
qreal m_size;
|
||||
Q_DECLARE_PUBLIC(QScatterSeries);
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -20,6 +20,10 @@
|
|||
|
||||
#include "qsplineseries.h"
|
||||
#include "qsplineseries_p.h"
|
||||
#include "splinechartitem_p.h"
|
||||
#include "chartdataset_p.h"
|
||||
#include "charttheme_p.h"
|
||||
#include "chartanimator_p.h"
|
||||
|
||||
/*!
|
||||
\class QSplineSeries
|
||||
|
@ -215,6 +219,17 @@ void QSplineSeriesPrivate::updateControlPoints()
|
|||
\sa setModel(), setModelMapping()
|
||||
*/
|
||||
|
||||
Chart* QSplineSeriesPrivate::createGraphics(ChartPresenter* presenter)
|
||||
{
|
||||
Q_Q(QSplineSeries);
|
||||
SplineChartItem* spline = new SplineChartItem(q,presenter);
|
||||
if(presenter->animationOptions().testFlag(QChart::SeriesAnimations)) {
|
||||
presenter->animator()->addAnimation(spline);
|
||||
}
|
||||
presenter->chartTheme()->decorate(q, presenter->dataSet()->seriesIndex(q));
|
||||
return spline;
|
||||
}
|
||||
|
||||
#include "moc_qsplineseries.cpp"
|
||||
#include "moc_qsplineseries_p.cpp"
|
||||
|
||||
|
|
|
@ -39,6 +39,7 @@ class QSplineSeriesPrivate: public QLineSeriesPrivate
|
|||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
Chart* createGraphics(ChartPresenter* presenter);
|
||||
QSplineSeriesPrivate(QSplineSeries* q);
|
||||
void calculateControlPoints();
|
||||
QList<qreal> getFirstControlPoints(QList<qreal> rhs);
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
|
||||
#include "qxyseries.h"
|
||||
#include "qxyseries_p.h"
|
||||
#include "domain_p.h"
|
||||
#include <QAbstractItemModel>
|
||||
|
||||
QTCOMMERCIALCHART_BEGIN_NAMESPACE
|
||||
|
@ -83,11 +84,6 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE
|
|||
Constructs empty series object which is a child of \a parent.
|
||||
When series object is added to QChartView or QChart instance ownerships is transfered.
|
||||
*/
|
||||
QXYSeries::QXYSeries(QObject *parent):QSeries(*new QXYSeriesPrivate(this),parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
QXYSeries::QXYSeries(QXYSeriesPrivate &d,QObject *parent):QSeries(d,parent)
|
||||
{
|
||||
|
||||
|
@ -626,6 +622,30 @@ m_pointsVisible(false)
|
|||
|
||||
}
|
||||
|
||||
void QXYSeriesPrivate::scaleDomain(Domain& domain)
|
||||
{
|
||||
qreal minX(domain.minX());
|
||||
qreal minY(domain.minY());
|
||||
qreal maxX(domain.maxX());
|
||||
qreal maxY(domain.maxY());
|
||||
int tickXCount(domain.tickXCount());
|
||||
int tickYCount(domain.tickYCount());
|
||||
|
||||
Q_Q(QXYSeries);
|
||||
for (int i = 0; i < q->count(); i++)
|
||||
{
|
||||
qreal x = q->x(i);
|
||||
qreal y = q->y(i);
|
||||
minX = qMin(minX, x);
|
||||
minY = qMin(minY, y);
|
||||
maxX = qMax(maxX, x);
|
||||
maxY = qMax(maxY, y);
|
||||
}
|
||||
|
||||
domain.setRangeX(minX,maxX,tickXCount);
|
||||
domain.setRangeY(minY,maxY,tickYCount);
|
||||
}
|
||||
|
||||
#include "moc_qxyseries.cpp"
|
||||
#include "moc_qxyseries_p.cpp"
|
||||
|
||||
|
|
|
@ -36,7 +36,6 @@ class QTCOMMERCIALCHART_EXPORT QXYSeries : public QSeries
|
|||
{
|
||||
Q_OBJECT
|
||||
protected:
|
||||
explicit QXYSeries(QObject *parent = 0);
|
||||
explicit QXYSeries(QXYSeriesPrivate &d,QObject *parent = 0);
|
||||
~QXYSeries();
|
||||
|
||||
|
|
|
@ -43,12 +43,15 @@ class QXYSeriesPrivate: public QSeriesPrivate
|
|||
public:
|
||||
QXYSeriesPrivate(QXYSeries* q);
|
||||
|
||||
void scaleDomain(Domain& domain);
|
||||
|
||||
Q_SIGNALS:
|
||||
void updated();
|
||||
void pointReplaced(int index);
|
||||
void pointRemoved(int index);
|
||||
void pointAdded(int index);
|
||||
public:
|
||||
|
||||
protected:
|
||||
QVector<qreal> m_x;
|
||||
QVector<qreal> m_y;
|
||||
|
||||
|
@ -64,8 +67,10 @@ public:
|
|||
int tempItemsRemoved;
|
||||
bool m_pointsVisible;
|
||||
|
||||
private:
|
||||
Q_DECLARE_PUBLIC(QXYSeries);
|
||||
friend class QScatterSeries;
|
||||
friend class QXYSeries;
|
||||
|
||||
};
|
||||
|
||||
QTCOMMERCIALCHART_END_NAMESPACE
|
||||
|
|
Loading…
Reference in New Issue