##// END OF EJS Templates
Renamed SplinePresenter to SplineChartItem
Marek Rosa -
r460:c1b7acf3f56f
parent child
Show More
@@ -1,108 +1,102
1 #include "splinewidget.h"
1 #include "splinewidget.h"
2 #include "qchartview.h"
2 #include "qchartview.h"
3 #include "qlineseries.h"
3 #include "qlineseries.h"
4 #include <QGridLayout>
4 #include <QGridLayout>
5 #include <QPushButton>
5 #include <QPushButton>
6 #include "qchartaxis.h"
6 #include "qchartaxis.h"
7 #include <qmath.h>
7 #include <qmath.h>
8
8
9 QTCOMMERCIALCHART_USE_NAMESPACE
9 QTCOMMERCIALCHART_USE_NAMESPACE
10
10
11 SplineWidget::SplineWidget(QWidget *parent)
11 SplineWidget::SplineWidget(QWidget *parent)
12 : QWidget(parent)
12 : QWidget(parent)
13 {
13 {
14 // qsrand(time(NULL));
14 // qsrand(time(NULL));
15 //! [1]
15 //! [1]
16 //create QSplineSeries
16 //create QSplineSeries
17 series = new QSplineSeries;
17 series = new QSplineSeries;
18 //! [1]
18 //! [1]
19
19
20 //! [2]
20 //! [2]
21 // customize the series presentation settings
21 // customize the series presentation settings
22 QPen seriesPen(Qt::blue);
22 QPen seriesPen(Qt::blue);
23 seriesPen.setWidth(3);
23 seriesPen.setWidth(3);
24 series->setPen(seriesPen);
24 series->setPen(seriesPen);
25 //! [2]
25 //! [2]
26
26
27 //! [add points to series]
27 //! [add points to series]
28 //add data points to the series
28 //add data points to the series
29 series->add(QPointF(150, 100));
29 series->add(QPointF(150, 100));
30 series->add(QPointF(200, 130));
30 series->add(QPointF(200, 130));
31 series->add(QPointF(250, 120));
31 series->add(QPointF(250, 120));
32 series->add(QPointF(300, 140));
32 series->add(QPointF(300, 140));
33 series->add(QPointF(350, 160));
33 series->add(QPointF(350, 160));
34 //! [add points to series]
34 //! [add points to series]
35 // series->add(QPointF(400, 120));
35 // series->add(QPointF(400, 120));
36 // series->add(QPointF(450, 150));
36 // series->add(QPointF(450, 150));
37 // series->add(QPointF(500, 145));
37 // series->add(QPointF(500, 145));
38 // series->add(QPointF(550, 170));
38 // series->add(QPointF(550, 170));
39 // series->add(QPointF(600, 190));
39 // series->add(QPointF(600, 190));
40 // series->add(QPointF(650, 210));
40 // series->add(QPointF(650, 210));
41 // series->add(QPointF(700, 190));
41 // series->add(QPointF(700, 190));
42 // series->add(QPointF(750, 180));
42 // series->add(QPointF(750, 180));
43 // series->add(QPointF(800, 170));
43 // series->add(QPointF(800, 170));
44
44
45 //! [3]
45 //! [3]
46 // create chart view
46 // create chart view
47 QChartView* chart = new QChartView;
47 QChartView* chart = new QChartView;
48 chart->addSeries(series);
48 chart->addSeries(series);
49
49
50 chart->setChartTitle("Spline chart example");
50 chart->setChartTitle("Spline chart example");
51
52 // chart->setMinimumSize(800,600);
53 // chart->axisX()->setRange(0, 1500);
54
55 // chart->axisX()->setMax(1500);
56 // chart->axisY()->setRange(0, 400);
57 chart->axisX()->setMax(1500);
51 chart->axisX()->setMax(1500);
58 // chart->
52 chart->axisY()->setMax(500);
59
53
60 chart->setMinimumSize(800,600);
54 chart->setMinimumSize(800,600);
61 //! [3]
55 //! [3]
62
56
63 //! [4]
57 //! [4]
64 //add new data point button
58 //add new data point button
65 QPushButton* addButton = new QPushButton("Add new point");
59 QPushButton* addButton = new QPushButton("Add new point");
66 connect(addButton, SIGNAL(clicked()), this, SLOT(addNewPoint()));
60 connect(addButton, SIGNAL(clicked()), this, SLOT(addNewPoint()));
67
61
68 // remove the last data point in the series
62 // remove the last data point in the series
69 QPushButton* removeButton = new QPushButton("Remove point");
63 QPushButton* removeButton = new QPushButton("Remove point");
70 connect(removeButton, SIGNAL(clicked()), this, SLOT(removePoint()));
64 connect(removeButton, SIGNAL(clicked()), this, SLOT(removePoint()));
71 //! [4]
65 //! [4]
72
66
73 //! [5]
67 //! [5]
74 //butttons layout
68 //butttons layout
75 QVBoxLayout* buttonsLayout = new QVBoxLayout;
69 QVBoxLayout* buttonsLayout = new QVBoxLayout;
76 buttonsLayout->addWidget(addButton);
70 buttonsLayout->addWidget(addButton);
77 buttonsLayout->addWidget(removeButton);
71 buttonsLayout->addWidget(removeButton);
78 buttonsLayout->addStretch();
72 buttonsLayout->addStretch();
79
73
80 QGridLayout* mainLayout = new QGridLayout;
74 QGridLayout* mainLayout = new QGridLayout;
81 mainLayout->addWidget(chart, 1, 0);
75 mainLayout->addWidget(chart, 1, 0);
82 mainLayout->addLayout(buttonsLayout, 1, 1);
76 mainLayout->addLayout(buttonsLayout, 1, 1);
83 setLayout(mainLayout);
77 setLayout(mainLayout);
84 //! [5]
78 //! [5]
85 }
79 }
86
80
87 //! [add point]
81 //! [add point]
88 void SplineWidget::addNewPoint()
82 void SplineWidget::addNewPoint()
89 {
83 {
90 if (series->count() > 0)
84 if (series->count() > 0)
91 series->add(QPointF(series->x(series->count() - 1) + 20 + qrand()%40, qAbs(series->y(series->count() - 1) - 50 + qrand()%100)));
85 series->add(QPointF(series->x(series->count() - 1) + 40 + qrand()%40, qAbs(series->y(series->count() - 1) - 50 + qrand()%100)));
92 else
86 else
93 series->add(QPointF(50, 50 + qrand()%50));
87 series->add(QPointF(50, 50 + qrand()%50));
94 }
88 }
95 //! [add point]
89 //! [add point]
96
90
97 //! [remove point]
91 //! [remove point]
98 void SplineWidget::removePoint()
92 void SplineWidget::removePoint()
99 {
93 {
100 if (series->count() > 0)
94 if (series->count() > 0)
101 series->remove(QPointF(series->x(series->count() - 1), series->y(series->count() - 1)));
95 series->remove(QPointF(series->x(series->count() - 1), series->y(series->count() - 1)));
102 }
96 }
103 //! [remove point]
97 //! [remove point]
104
98
105 SplineWidget::~SplineWidget()
99 SplineWidget::~SplineWidget()
106 {
100 {
107
101
108 }
102 }
@@ -1,373 +1,373
1 #include "qchart.h"
1 #include "qchart.h"
2 #include "qchartaxis.h"
2 #include "qchartaxis.h"
3 #include "chartpresenter_p.h"
3 #include "chartpresenter_p.h"
4 #include "chartdataset_p.h"
4 #include "chartdataset_p.h"
5 #include "charttheme_p.h"
5 #include "charttheme_p.h"
6 //series
6 //series
7 #include "qbarseries.h"
7 #include "qbarseries.h"
8 #include "qstackedbarseries.h"
8 #include "qstackedbarseries.h"
9 #include "qpercentbarseries.h"
9 #include "qpercentbarseries.h"
10 #include "qlineseries.h"
10 #include "qlineseries.h"
11 #include "qareaseries.h"
11 #include "qareaseries.h"
12 #include "qpieseries.h"
12 #include "qpieseries.h"
13 #include "qscatterseries.h"
13 #include "qscatterseries.h"
14 #include "qsplineseries.h"
14 #include "qsplineseries.h"
15 //items
15 //items
16 #include "axisitem_p.h"
16 #include "axisitem_p.h"
17 #include "axisanimationitem_p.h"
17 #include "axisanimationitem_p.h"
18 #include "areachartitem_p.h"
18 #include "areachartitem_p.h"
19 #include "barpresenter_p.h"
19 #include "barpresenter_p.h"
20 #include "stackedbarpresenter_p.h"
20 #include "stackedbarpresenter_p.h"
21 #include "percentbarpresenter_p.h"
21 #include "percentbarpresenter_p.h"
22 #include "linechartitem_p.h"
22 #include "linechartitem_p.h"
23 #include "linechartanimationitem_p.h"
23 #include "linechartanimationitem_p.h"
24 #include "piepresenter_p.h"
24 #include "piepresenter_p.h"
25 #include "scatterpresenter_p.h"
25 #include "scatterpresenter_p.h"
26 #include "splinepresenter_p.h"
26 #include "splinechartitem_p.h"
27
27
28 QTCOMMERCIALCHART_BEGIN_NAMESPACE
28 QTCOMMERCIALCHART_BEGIN_NAMESPACE
29
29
30 ChartPresenter::ChartPresenter(QChart* chart,ChartDataSet* dataset):QObject(chart),
30 ChartPresenter::ChartPresenter(QChart* chart,ChartDataSet* dataset):QObject(chart),
31 m_chart(chart),
31 m_chart(chart),
32 m_dataset(dataset),
32 m_dataset(dataset),
33 m_chartTheme(0),
33 m_chartTheme(0),
34 m_zoomIndex(0),
34 m_zoomIndex(0),
35 m_marginSize(0),
35 m_marginSize(0),
36 m_rect(QRectF(QPoint(0,0),m_chart->size())),
36 m_rect(QRectF(QPoint(0,0),m_chart->size())),
37 m_options(QChart::NoAnimation)
37 m_options(QChart::NoAnimation)
38 {
38 {
39 createConnections();
39 createConnections();
40 setChartTheme(QChart::ChartThemeDefault);
40 setChartTheme(QChart::ChartThemeDefault);
41 }
41 }
42
42
43 ChartPresenter::~ChartPresenter()
43 ChartPresenter::~ChartPresenter()
44 {
44 {
45 }
45 }
46
46
47 void ChartPresenter::createConnections()
47 void ChartPresenter::createConnections()
48 {
48 {
49 QObject::connect(m_chart,SIGNAL(geometryChanged()),this,SLOT(handleGeometryChanged()));
49 QObject::connect(m_chart,SIGNAL(geometryChanged()),this,SLOT(handleGeometryChanged()));
50 QObject::connect(m_dataset,SIGNAL(seriesAdded(QSeries*,Domain*)),this,SLOT(handleSeriesAdded(QSeries*,Domain*)));
50 QObject::connect(m_dataset,SIGNAL(seriesAdded(QSeries*,Domain*)),this,SLOT(handleSeriesAdded(QSeries*,Domain*)));
51 QObject::connect(m_dataset,SIGNAL(seriesRemoved(QSeries*)),this,SLOT(handleSeriesRemoved(QSeries*)));
51 QObject::connect(m_dataset,SIGNAL(seriesRemoved(QSeries*)),this,SLOT(handleSeriesRemoved(QSeries*)));
52 QObject::connect(m_dataset,SIGNAL(axisAdded(QChartAxis*,Domain*)),this,SLOT(handleAxisAdded(QChartAxis*,Domain*)));
52 QObject::connect(m_dataset,SIGNAL(axisAdded(QChartAxis*,Domain*)),this,SLOT(handleAxisAdded(QChartAxis*,Domain*)));
53 QObject::connect(m_dataset,SIGNAL(axisRemoved(QChartAxis*)),this,SLOT(handleAxisRemoved(QChartAxis*)));
53 QObject::connect(m_dataset,SIGNAL(axisRemoved(QChartAxis*)),this,SLOT(handleAxisRemoved(QChartAxis*)));
54 }
54 }
55
55
56
56
57 QRectF ChartPresenter::geometry() const
57 QRectF ChartPresenter::geometry() const
58 {
58 {
59 return m_rect;
59 return m_rect;
60 }
60 }
61
61
62 void ChartPresenter::handleGeometryChanged()
62 void ChartPresenter::handleGeometryChanged()
63 {
63 {
64 QRectF rect(QPoint(0,0),m_chart->size());
64 QRectF rect(QPoint(0,0),m_chart->size());
65 rect.adjust(m_marginSize,m_marginSize, -m_marginSize, -m_marginSize);
65 rect.adjust(m_marginSize,m_marginSize, -m_marginSize, -m_marginSize);
66
66
67 //rewrite zoom stack
67 //rewrite zoom stack
68 for(int i=0;i<m_zoomStack.count();i++){
68 for(int i=0;i<m_zoomStack.count();i++){
69 QRectF r = m_zoomStack[i];
69 QRectF r = m_zoomStack[i];
70 qreal w = rect.width()/m_rect.width();
70 qreal w = rect.width()/m_rect.width();
71 qreal h = rect.height()/m_rect.height();
71 qreal h = rect.height()/m_rect.height();
72 QPointF tl = r.topLeft();
72 QPointF tl = r.topLeft();
73 tl.setX(tl.x()*w);
73 tl.setX(tl.x()*w);
74 tl.setY(tl.y()*h);
74 tl.setY(tl.y()*h);
75 QPointF br = r.bottomRight();
75 QPointF br = r.bottomRight();
76 br.setX(br.x()*w);
76 br.setX(br.x()*w);
77 br.setY(br.y()*h);
77 br.setY(br.y()*h);
78 r.setTopLeft(tl);
78 r.setTopLeft(tl);
79 r.setBottomRight(br);
79 r.setBottomRight(br);
80 m_zoomStack[i]=r;
80 m_zoomStack[i]=r;
81 }
81 }
82
82
83 m_rect = rect;
83 m_rect = rect;
84 Q_ASSERT(m_rect.isValid());
84 Q_ASSERT(m_rect.isValid());
85 emit geometryChanged(m_rect);
85 emit geometryChanged(m_rect);
86 }
86 }
87
87
88 int ChartPresenter::margin() const
88 int ChartPresenter::margin() const
89 {
89 {
90 return m_marginSize;
90 return m_marginSize;
91 }
91 }
92
92
93 void ChartPresenter::setMargin(int margin)
93 void ChartPresenter::setMargin(int margin)
94 {
94 {
95 m_marginSize = margin;
95 m_marginSize = margin;
96 }
96 }
97
97
98 void ChartPresenter::handleAxisAdded(QChartAxis* axis,Domain* domain)
98 void ChartPresenter::handleAxisAdded(QChartAxis* axis,Domain* domain)
99 {
99 {
100
100
101 AxisItem* item ;
101 AxisItem* item ;
102
102
103 if(!m_options.testFlag(QChart::GridAxisAnimations))
103 if(!m_options.testFlag(QChart::GridAxisAnimations))
104 {
104 {
105 item = new AxisItem(axis,axis==m_dataset->axisX()?AxisItem::X_AXIS : AxisItem::Y_AXIS,m_chart);
105 item = new AxisItem(axis,axis==m_dataset->axisX()?AxisItem::X_AXIS : AxisItem::Y_AXIS,m_chart);
106 }else{
106 }else{
107 item = new AxisAnimationItem(axis,axis==m_dataset->axisX()?AxisItem::X_AXIS : AxisItem::Y_AXIS,m_chart);
107 item = new AxisAnimationItem(axis,axis==m_dataset->axisX()?AxisItem::X_AXIS : AxisItem::Y_AXIS,m_chart);
108 }
108 }
109 if(axis==m_dataset->axisX()){
109 if(axis==m_dataset->axisX()){
110 QObject::connect(domain,SIGNAL(rangeXChanged(qreal,qreal)),item,SLOT(handleRangeChanged(qreal,qreal)));
110 QObject::connect(domain,SIGNAL(rangeXChanged(qreal,qreal)),item,SLOT(handleRangeChanged(qreal,qreal)));
111 //initialize
111 //initialize
112 item->handleRangeChanged(domain->minX(),domain->maxX());
112 item->handleRangeChanged(domain->minX(),domain->maxX());
113 item->handleTicksCountChanged(4);
113 item->handleTicksCountChanged(4);
114 }
114 }
115 else{
115 else{
116 QObject::connect(domain,SIGNAL(rangeYChanged(qreal,qreal)),item,SLOT(handleRangeChanged(qreal,qreal)));
116 QObject::connect(domain,SIGNAL(rangeYChanged(qreal,qreal)),item,SLOT(handleRangeChanged(qreal,qreal)));
117 //initialize
117 //initialize
118 item->handleRangeChanged(domain->minY(),domain->maxY());
118 item->handleRangeChanged(domain->minY(),domain->maxY());
119 item->handleTicksCountChanged(4);
119 item->handleTicksCountChanged(4);
120 }
120 }
121
121
122 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
122 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
123 //initialize
123 //initialize
124 item->handleGeometryChanged(m_rect);
124 item->handleGeometryChanged(m_rect);
125 m_chartTheme->decorate(axis,item);
125 m_chartTheme->decorate(axis,item);
126 m_axisItems.insert(axis,item);
126 m_axisItems.insert(axis,item);
127 }
127 }
128
128
129 void ChartPresenter::handleAxisRemoved(QChartAxis* axis)
129 void ChartPresenter::handleAxisRemoved(QChartAxis* axis)
130 {
130 {
131 AxisItem* item = m_axisItems.take(axis);
131 AxisItem* item = m_axisItems.take(axis);
132 Q_ASSERT(item);
132 Q_ASSERT(item);
133 delete item;
133 delete item;
134 }
134 }
135
135
136
136
137 void ChartPresenter::handleSeriesAdded(QSeries* series,Domain* domain)
137 void ChartPresenter::handleSeriesAdded(QSeries* series,Domain* domain)
138 {
138 {
139 switch(series->type())
139 switch(series->type())
140 {
140 {
141 case QSeries::SeriesTypeLine: {
141 case QSeries::SeriesTypeLine: {
142
142
143 QLineSeries* lineSeries = static_cast<QLineSeries*>(series);
143 QLineSeries* lineSeries = static_cast<QLineSeries*>(series);
144 LineChartItem* item;
144 LineChartItem* item;
145 if(m_options.testFlag(QChart::SeriesAnimations)){
145 if(m_options.testFlag(QChart::SeriesAnimations)){
146 item = new LineChartAnimationItem(lineSeries,m_chart);
146 item = new LineChartAnimationItem(lineSeries,m_chart);
147 }else{
147 }else{
148 item = new LineChartItem(lineSeries,m_chart);
148 item = new LineChartItem(lineSeries,m_chart);
149 }
149 }
150 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
150 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
151 QObject::connect(domain,SIGNAL(domainChanged(qreal,qreal,qreal,qreal)),item,SLOT(handleDomainChanged(qreal,qreal,qreal,qreal)));
151 QObject::connect(domain,SIGNAL(domainChanged(qreal,qreal,qreal,qreal)),item,SLOT(handleDomainChanged(qreal,qreal,qreal,qreal)));
152 //initialize
152 //initialize
153 item->handleDomainChanged(domain->minX(),domain->maxX(),domain->minY(),domain->maxY());
153 item->handleDomainChanged(domain->minX(),domain->maxX(),domain->minY(),domain->maxY());
154 if(m_rect.isValid()) item->handleGeometryChanged(m_rect);
154 if(m_rect.isValid()) item->handleGeometryChanged(m_rect);
155 //decorate
155 //decorate
156 m_chartTheme->decorate(item,lineSeries,m_chartItems.count());
156 m_chartTheme->decorate(item,lineSeries,m_chartItems.count());
157 m_chartItems.insert(series,item);
157 m_chartItems.insert(series,item);
158 break;
158 break;
159 }
159 }
160
160
161 case QSeries::SeriesTypeArea: {
161 case QSeries::SeriesTypeArea: {
162
162
163 QAreaSeries* areaSeries = static_cast<QAreaSeries*>(series);
163 QAreaSeries* areaSeries = static_cast<QAreaSeries*>(series);
164 AreaChartItem* item;
164 AreaChartItem* item;
165 if(m_options.testFlag(QChart::SeriesAnimations)) {
165 if(m_options.testFlag(QChart::SeriesAnimations)) {
166 item = new AreaChartItem(areaSeries,m_chart);
166 item = new AreaChartItem(areaSeries,m_chart);
167 }
167 }
168 else {
168 else {
169 item = new AreaChartItem(areaSeries,m_chart);
169 item = new AreaChartItem(areaSeries,m_chart);
170 }
170 }
171 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
171 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
172 QObject::connect(domain,SIGNAL(domainChanged(qreal,qreal,qreal,qreal)),item,SLOT(handleDomainChanged(qreal,qreal,qreal,qreal)));
172 QObject::connect(domain,SIGNAL(domainChanged(qreal,qreal,qreal,qreal)),item,SLOT(handleDomainChanged(qreal,qreal,qreal,qreal)));
173 //initialize
173 //initialize
174 item->handleDomainChanged(domain->minX(),domain->maxX(),domain->minY(),domain->maxY());
174 item->handleDomainChanged(domain->minX(),domain->maxX(),domain->minY(),domain->maxY());
175 if(m_rect.isValid()) item->handleGeometryChanged(m_rect);
175 if(m_rect.isValid()) item->handleGeometryChanged(m_rect);
176 //decorate
176 //decorate
177 m_chartTheme->decorate(item,areaSeries,m_chartItems.count());
177 m_chartTheme->decorate(item,areaSeries,m_chartItems.count());
178 m_chartItems.insert(series,item);
178 m_chartItems.insert(series,item);
179 break;
179 break;
180 }
180 }
181
181
182 case QSeries::SeriesTypeBar: {
182 case QSeries::SeriesTypeBar: {
183 QBarSeries* barSeries = static_cast<QBarSeries*>(series);
183 QBarSeries* barSeries = static_cast<QBarSeries*>(series);
184 BarPresenter* item = new BarPresenter(barSeries,m_chart);
184 BarPresenter* item = new BarPresenter(barSeries,m_chart);
185 m_chartTheme->decorate(item,barSeries,m_chartItems.count());
185 m_chartTheme->decorate(item,barSeries,m_chartItems.count());
186 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
186 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
187 // QObject::connect(barSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
187 // QObject::connect(barSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
188 m_chartItems.insert(series,item);
188 m_chartItems.insert(series,item);
189 // m_axisXItem->setVisible(false);
189 // m_axisXItem->setVisible(false);
190 if(m_rect.isValid()) item->handleGeometryChanged(m_rect);
190 if(m_rect.isValid()) item->handleGeometryChanged(m_rect);
191 break;
191 break;
192 }
192 }
193
193
194 case QSeries::SeriesTypeStackedBar: {
194 case QSeries::SeriesTypeStackedBar: {
195
195
196 QStackedBarSeries* stackedBarSeries = static_cast<QStackedBarSeries*>(series);
196 QStackedBarSeries* stackedBarSeries = static_cast<QStackedBarSeries*>(series);
197 StackedBarPresenter* item = new StackedBarPresenter(stackedBarSeries,m_chart);
197 StackedBarPresenter* item = new StackedBarPresenter(stackedBarSeries,m_chart);
198 m_chartTheme->decorate(item,stackedBarSeries,m_chartItems.count());
198 m_chartTheme->decorate(item,stackedBarSeries,m_chartItems.count());
199 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
199 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
200 // QObject::connect(stackedBarSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
200 // QObject::connect(stackedBarSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
201 m_chartItems.insert(series,item);
201 m_chartItems.insert(series,item);
202 if(m_rect.isValid()) item->handleGeometryChanged(m_rect);
202 if(m_rect.isValid()) item->handleGeometryChanged(m_rect);
203 break;
203 break;
204 }
204 }
205
205
206 case QSeries::SeriesTypePercentBar: {
206 case QSeries::SeriesTypePercentBar: {
207
207
208 QPercentBarSeries* percentBarSeries = static_cast<QPercentBarSeries*>(series);
208 QPercentBarSeries* percentBarSeries = static_cast<QPercentBarSeries*>(series);
209 PercentBarPresenter* item = new PercentBarPresenter(percentBarSeries,m_chart);
209 PercentBarPresenter* item = new PercentBarPresenter(percentBarSeries,m_chart);
210 m_chartTheme->decorate(item,percentBarSeries ,m_chartItems.count());
210 m_chartTheme->decorate(item,percentBarSeries ,m_chartItems.count());
211 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
211 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
212 // QObject::connect(percentBarSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
212 // QObject::connect(percentBarSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
213 m_chartItems.insert(series,item);
213 m_chartItems.insert(series,item);
214 if(m_rect.isValid()) item->handleGeometryChanged(m_rect);
214 if(m_rect.isValid()) item->handleGeometryChanged(m_rect);
215 break;
215 break;
216 }
216 }
217 case QSeries::SeriesTypeScatter: {
217 case QSeries::SeriesTypeScatter: {
218 QScatterSeries *scatterSeries = qobject_cast<QScatterSeries *>(series);
218 QScatterSeries *scatterSeries = qobject_cast<QScatterSeries *>(series);
219 ScatterPresenter *scatterPresenter = new ScatterPresenter(scatterSeries, m_chart);
219 ScatterPresenter *scatterPresenter = new ScatterPresenter(scatterSeries, m_chart);
220 QObject::connect(scatterPresenter, SIGNAL(clicked(QPointF)),
220 QObject::connect(scatterPresenter, SIGNAL(clicked(QPointF)),
221 scatterSeries, SIGNAL(clicked(QPointF)));
221 scatterSeries, SIGNAL(clicked(QPointF)));
222 QObject::connect(this, SIGNAL(geometryChanged(const QRectF&)),
222 QObject::connect(this, SIGNAL(geometryChanged(const QRectF&)),
223 scatterPresenter, SLOT(handleGeometryChanged(const QRectF&)));
223 scatterPresenter, SLOT(handleGeometryChanged(const QRectF&)));
224 QObject::connect(domain, SIGNAL(domainChanged(qreal,qreal,qreal,qreal)),
224 QObject::connect(domain, SIGNAL(domainChanged(qreal,qreal,qreal,qreal)),
225 scatterPresenter, SLOT(handleDomainChanged(qreal,qreal,qreal,qreal)));
225 scatterPresenter, SLOT(handleDomainChanged(qreal,qreal,qreal,qreal)));
226 m_chartTheme->decorate(scatterPresenter, scatterSeries, m_chartItems.count());
226 m_chartTheme->decorate(scatterPresenter, scatterSeries, m_chartItems.count());
227 m_chartItems.insert(scatterSeries, scatterPresenter);
227 m_chartItems.insert(scatterSeries, scatterPresenter);
228 if (m_rect.isValid())
228 if (m_rect.isValid())
229 scatterPresenter->handleGeometryChanged(m_rect);
229 scatterPresenter->handleGeometryChanged(m_rect);
230 scatterPresenter->handleDomainChanged(domain->minX(), domain->maxX(), domain->minY(), domain->maxY());
230 scatterPresenter->handleDomainChanged(domain->minX(), domain->maxX(), domain->minY(), domain->maxY());
231 break;
231 break;
232 }
232 }
233 case QSeries::SeriesTypePie: {
233 case QSeries::SeriesTypePie: {
234 QPieSeries *s = qobject_cast<QPieSeries *>(series);
234 QPieSeries *s = qobject_cast<QPieSeries *>(series);
235 PiePresenter* pie = new PiePresenter(m_chart, s);
235 PiePresenter* pie = new PiePresenter(m_chart, s);
236 m_chartTheme->decorate(pie, s, m_chartItems.count());
236 m_chartTheme->decorate(pie, s, m_chartItems.count());
237 QObject::connect(this, SIGNAL(geometryChanged(const QRectF&)), pie, SLOT(handleGeometryChanged(const QRectF&)));
237 QObject::connect(this, SIGNAL(geometryChanged(const QRectF&)), pie, SLOT(handleGeometryChanged(const QRectF&)));
238
238
239 // Hide all from background when there is only piechart
239 // Hide all from background when there is only piechart
240 // TODO: refactor this ugly code... should be one setting for this
240 // TODO: refactor this ugly code... should be one setting for this
241 if (m_chartItems.count() == 0) {
241 if (m_chartItems.count() == 0) {
242 m_chart->axisX()->setAxisVisible(false);
242 m_chart->axisX()->setAxisVisible(false);
243 m_chart->axisY()->setAxisVisible(false);
243 m_chart->axisY()->setAxisVisible(false);
244 m_chart->axisX()->setGridVisible(false);
244 m_chart->axisX()->setGridVisible(false);
245 m_chart->axisY()->setGridVisible(false);
245 m_chart->axisY()->setGridVisible(false);
246 m_chart->axisX()->setLabelsVisible(false);
246 m_chart->axisX()->setLabelsVisible(false);
247 m_chart->axisY()->setLabelsVisible(false);
247 m_chart->axisY()->setLabelsVisible(false);
248 m_chart->axisX()->setShadesVisible(false);
248 m_chart->axisX()->setShadesVisible(false);
249 m_chart->axisY()->setShadesVisible(false);
249 m_chart->axisY()->setShadesVisible(false);
250 m_chart->setChartBackgroundBrush(Qt::transparent);
250 m_chart->setChartBackgroundBrush(Qt::transparent);
251 }
251 }
252
252
253 m_chartItems.insert(series, pie);
253 m_chartItems.insert(series, pie);
254 pie->handleGeometryChanged(m_rect);
254 pie->handleGeometryChanged(m_rect);
255 break;
255 break;
256 }
256 }
257
257
258 case QSeries::SeriesTypeSpline: {
258 case QSeries::SeriesTypeSpline: {
259 QSplineSeries* splineSeries = qobject_cast<QSplineSeries*>(series);
259 QSplineSeries* splineSeries = qobject_cast<QSplineSeries*>(series);
260 SplinePresenter* splinePresenter = new SplinePresenter(splineSeries, m_chart);
260 SplineChartItem* splinePresenter = new SplineChartItem(splineSeries, m_chart);
261 QObject::connect(this, SIGNAL(geometryChanged(const QRectF&)), splinePresenter, SLOT(handleGeometryChanged(const QRectF&)));
261 QObject::connect(this, SIGNAL(geometryChanged(const QRectF&)), splinePresenter, SLOT(handleGeometryChanged(const QRectF&)));
262 QObject::connect(domain,SIGNAL(domainChanged(qreal,qreal,qreal,qreal)),splinePresenter,SLOT(handleDomainChanged(qreal,qreal,qreal,qreal)));
262 QObject::connect(domain,SIGNAL(domainChanged(qreal,qreal,qreal,qreal)),splinePresenter,SLOT(handleDomainChanged(qreal,qreal,qreal,qreal)));
263 //initialize
263 //initialize
264 splinePresenter->handleDomainChanged(domain->minX(),domain->maxX(),domain->minY(),domain->maxY());
264 splinePresenter->handleDomainChanged(domain->minX(),domain->maxX(),domain->minY(),domain->maxY());
265 m_chartTheme->decorate(splinePresenter, splineSeries, m_chartItems.count());
265 m_chartTheme->decorate(splinePresenter, splineSeries, m_chartItems.count());
266 m_chartItems.insert(splineSeries, splinePresenter);
266 m_chartItems.insert(splineSeries, splinePresenter);
267 break;
267 break;
268 }
268 }
269 default: {
269 default: {
270 qDebug()<< "Series type" << series->type() << "not implemented.";
270 qDebug()<< "Series type" << series->type() << "not implemented.";
271 break;
271 break;
272 }
272 }
273 }
273 }
274
274
275 zoomReset();
275 zoomReset();
276 }
276 }
277
277
278 void ChartPresenter::handleSeriesRemoved(QSeries* series)
278 void ChartPresenter::handleSeriesRemoved(QSeries* series)
279 {
279 {
280 ChartItem* item = m_chartItems.take(series);
280 ChartItem* item = m_chartItems.take(series);
281 delete item;
281 delete item;
282 }
282 }
283
283
284 void ChartPresenter::setChartTheme(QChart::ChartTheme theme)
284 void ChartPresenter::setChartTheme(QChart::ChartTheme theme)
285 {
285 {
286 delete m_chartTheme;
286 delete m_chartTheme;
287
287
288 m_chartTheme = ChartTheme::createTheme(theme);
288 m_chartTheme = ChartTheme::createTheme(theme);
289
289
290 m_chartTheme->decorate(m_chart);
290 m_chartTheme->decorate(m_chart);
291 QMapIterator<QSeries*,ChartItem*> i(m_chartItems);
291 QMapIterator<QSeries*,ChartItem*> i(m_chartItems);
292
292
293 int index=0;
293 int index=0;
294 while (i.hasNext()) {
294 while (i.hasNext()) {
295 i.next();
295 i.next();
296 m_chartTheme->decorate(i.value(),i.key(),index);
296 m_chartTheme->decorate(i.value(),i.key(),index);
297 index++;
297 index++;
298 }
298 }
299
299
300 QMapIterator<QChartAxis*,AxisItem*> j(m_axisItems);
300 QMapIterator<QChartAxis*,AxisItem*> j(m_axisItems);
301 while (j.hasNext()) {
301 while (j.hasNext()) {
302 j.next();
302 j.next();
303 m_chartTheme->decorate(j.key(),j.value());
303 m_chartTheme->decorate(j.key(),j.value());
304 }
304 }
305 }
305 }
306
306
307 QChart::ChartTheme ChartPresenter::chartTheme()
307 QChart::ChartTheme ChartPresenter::chartTheme()
308 {
308 {
309 return m_chartTheme->id();
309 return m_chartTheme->id();
310 }
310 }
311
311
312 void ChartPresenter::setAnimationOptions(QChart::AnimationOptions options)
312 void ChartPresenter::setAnimationOptions(QChart::AnimationOptions options)
313 {
313 {
314 if(m_options!=options) {
314 if(m_options!=options) {
315
315
316 m_options=options;
316 m_options=options;
317
317
318 //recreate elements
318 //recreate elements
319 QList<QChartAxis*> axisList = m_axisItems.uniqueKeys();
319 QList<QChartAxis*> axisList = m_axisItems.uniqueKeys();
320 QList<QSeries*> seriesList = m_chartItems.uniqueKeys();
320 QList<QSeries*> seriesList = m_chartItems.uniqueKeys();
321
321
322 foreach(QChartAxis* axis, axisList) {
322 foreach(QChartAxis* axis, axisList) {
323 handleAxisRemoved(axis);
323 handleAxisRemoved(axis);
324 handleAxisAdded(axis,m_dataset->domain(axis));
324 handleAxisAdded(axis,m_dataset->domain(axis));
325 }
325 }
326 foreach(QSeries* series, seriesList) {
326 foreach(QSeries* series, seriesList) {
327 handleSeriesRemoved(series);
327 handleSeriesRemoved(series);
328 handleSeriesAdded(series,m_dataset->domain(series));
328 handleSeriesAdded(series,m_dataset->domain(series));
329 }
329 }
330 }
330 }
331 }
331 }
332
332
333 void ChartPresenter::zoomIn()
333 void ChartPresenter::zoomIn()
334 {
334 {
335 QRectF rect = geometry();
335 QRectF rect = geometry();
336 rect.setWidth(rect.width()/2);
336 rect.setWidth(rect.width()/2);
337 rect.setHeight(rect.height()/2);
337 rect.setHeight(rect.height()/2);
338 rect.moveCenter(geometry().center());
338 rect.moveCenter(geometry().center());
339 zoomIn(rect);
339 zoomIn(rect);
340 }
340 }
341
341
342 void ChartPresenter::zoomIn(const QRectF& rect)
342 void ChartPresenter::zoomIn(const QRectF& rect)
343 {
343 {
344 QRectF r = rect.normalized();
344 QRectF r = rect.normalized();
345 r.translate(-m_marginSize, -m_marginSize);
345 r.translate(-m_marginSize, -m_marginSize);
346 m_dataset->zoomInDomain(r,geometry().size());
346 m_dataset->zoomInDomain(r,geometry().size());
347 m_zoomStack<<r;
347 m_zoomStack<<r;
348 m_zoomIndex++;
348 m_zoomIndex++;
349 }
349 }
350
350
351 void ChartPresenter::zoomOut()
351 void ChartPresenter::zoomOut()
352 {
352 {
353 if(m_zoomIndex==0) return;
353 if(m_zoomIndex==0) return;
354 m_dataset->zoomOutDomain(m_zoomStack[m_zoomIndex-1],geometry().size());
354 m_dataset->zoomOutDomain(m_zoomStack[m_zoomIndex-1],geometry().size());
355 m_zoomIndex--;
355 m_zoomIndex--;
356 m_zoomStack.resize(m_zoomIndex);
356 m_zoomStack.resize(m_zoomIndex);
357 }
357 }
358
358
359 void ChartPresenter::zoomReset()
359 void ChartPresenter::zoomReset()
360 {
360 {
361 m_zoomIndex=0;
361 m_zoomIndex=0;
362 m_zoomStack.resize(m_zoomIndex);
362 m_zoomStack.resize(m_zoomIndex);
363 }
363 }
364
364
365 QChart::AnimationOptions ChartPresenter::animationOptions() const
365 QChart::AnimationOptions ChartPresenter::animationOptions() const
366 {
366 {
367 return m_options;
367 return m_options;
368 }
368 }
369
369
370
370
371 #include "moc_chartpresenter_p.cpp"
371 #include "moc_chartpresenter_p.cpp"
372
372
373 QTCOMMERCIALCHART_END_NAMESPACE
373 QTCOMMERCIALCHART_END_NAMESPACE
@@ -1,328 +1,328
1 #include "charttheme_p.h"
1 #include "charttheme_p.h"
2 #include "qchart.h"
2 #include "qchart.h"
3 #include "qchartaxis.h"
3 #include "qchartaxis.h"
4 #include <QTime>
4 #include <QTime>
5
5
6 //series
6 //series
7 #include "qbarset.h"
7 #include "qbarset.h"
8 #include "qbarseries.h"
8 #include "qbarseries.h"
9 #include "qstackedbarseries.h"
9 #include "qstackedbarseries.h"
10 #include "qpercentbarseries.h"
10 #include "qpercentbarseries.h"
11 #include "qlineseries.h"
11 #include "qlineseries.h"
12 #include "qareaseries.h"
12 #include "qareaseries.h"
13 #include "qscatterseries.h"
13 #include "qscatterseries.h"
14 #include "qpieseries.h"
14 #include "qpieseries.h"
15 #include "qpieslice.h"
15 #include "qpieslice.h"
16 #include "qsplineseries.h"
16 #include "qsplineseries.h"
17
17
18 //items
18 //items
19 #include "axisitem_p.h"
19 #include "axisitem_p.h"
20 #include "barpresenter_p.h"
20 #include "barpresenter_p.h"
21 #include "stackedbarpresenter_p.h"
21 #include "stackedbarpresenter_p.h"
22 #include "percentbarpresenter_p.h"
22 #include "percentbarpresenter_p.h"
23 #include "linechartitem_p.h"
23 #include "linechartitem_p.h"
24 #include "areachartitem_p.h"
24 #include "areachartitem_p.h"
25 #include "scatterpresenter_p.h"
25 #include "scatterpresenter_p.h"
26 #include "piepresenter_p.h"
26 #include "piepresenter_p.h"
27 #include "splinepresenter_p.h"
27 #include "splinechartitem_p.h"
28
28
29 //themes
29 //themes
30 #include "chartthemevanilla_p.h"
30 #include "chartthemevanilla_p.h"
31 #include "chartthemeicy_p.h"
31 #include "chartthemeicy_p.h"
32 #include "chartthemegrayscale_p.h"
32 #include "chartthemegrayscale_p.h"
33 #include "chartthemescientific_p.h"
33 #include "chartthemescientific_p.h"
34
34
35
35
36 QTCOMMERCIALCHART_BEGIN_NAMESPACE
36 QTCOMMERCIALCHART_BEGIN_NAMESPACE
37
37
38 /* TODO
38 /* TODO
39 case QChart::ChartThemeUnnamed1:
39 case QChart::ChartThemeUnnamed1:
40 m_seriesThemes.append(SeriesTheme(QColor(QRgb(0xff3fa9f5)), 2));
40 m_seriesThemes.append(SeriesTheme(QColor(QRgb(0xff3fa9f5)), 2));
41 m_seriesThemes.append(SeriesTheme(QColor(QRgb(0xff7AC943)), 2));
41 m_seriesThemes.append(SeriesTheme(QColor(QRgb(0xff7AC943)), 2));
42 m_seriesThemes.append(SeriesTheme(QColor(QRgb(0xffFF931E)), 2));
42 m_seriesThemes.append(SeriesTheme(QColor(QRgb(0xffFF931E)), 2));
43 m_seriesThemes.append(SeriesTheme(QColor(QRgb(0xffFF1D25)), 2));
43 m_seriesThemes.append(SeriesTheme(QColor(QRgb(0xffFF1D25)), 2));
44 m_seriesThemes.append(SeriesTheme(QColor(QRgb(0xffFF7BAC)), 2));
44 m_seriesThemes.append(SeriesTheme(QColor(QRgb(0xffFF7BAC)), 2));
45
45
46 m_gradientStartColor = QColor(QRgb(0xfff3dc9e));
46 m_gradientStartColor = QColor(QRgb(0xfff3dc9e));
47 m_gradientEndColor = QColor(QRgb(0xffafafaf));
47 m_gradientEndColor = QColor(QRgb(0xffafafaf));
48 */
48 */
49
49
50 ChartTheme::ChartTheme(QChart::ChartTheme id)
50 ChartTheme::ChartTheme(QChart::ChartTheme id)
51 {
51 {
52 m_id = id;
52 m_id = id;
53 m_seriesColor.append(QRgb(0xff000000));
53 m_seriesColor.append(QRgb(0xff000000));
54 m_seriesColor.append(QRgb(0xff707070));
54 m_seriesColor.append(QRgb(0xff707070));
55 m_gradientStartColor = QColor(QRgb(0xffffffff));
55 m_gradientStartColor = QColor(QRgb(0xffffffff));
56 m_gradientEndColor = QColor(QRgb(0xffafafaf));
56 m_gradientEndColor = QColor(QRgb(0xffafafaf));
57
57
58 qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
58 qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
59 }
59 }
60
60
61
61
62 ChartTheme* ChartTheme::createTheme(QChart::ChartTheme theme)
62 ChartTheme* ChartTheme::createTheme(QChart::ChartTheme theme)
63 {
63 {
64 switch(theme) {
64 switch(theme) {
65 case QChart::ChartThemeDefault:
65 case QChart::ChartThemeDefault:
66 return new ChartTheme();
66 return new ChartTheme();
67 case QChart::ChartThemeVanilla:
67 case QChart::ChartThemeVanilla:
68 return new ChartThemeVanilla();
68 return new ChartThemeVanilla();
69 case QChart::ChartThemeIcy:
69 case QChart::ChartThemeIcy:
70 return new ChartThemeIcy();
70 return new ChartThemeIcy();
71 case QChart::ChartThemeGrayscale:
71 case QChart::ChartThemeGrayscale:
72 return new ChartThemeGrayscale();
72 return new ChartThemeGrayscale();
73 case QChart::ChartThemeScientific:
73 case QChart::ChartThemeScientific:
74 return new ChartThemeScientific();
74 return new ChartThemeScientific();
75 }
75 }
76 }
76 }
77
77
78 void ChartTheme::decorate(QChart* chart)
78 void ChartTheme::decorate(QChart* chart)
79 {
79 {
80 QLinearGradient backgroundGradient;
80 QLinearGradient backgroundGradient;
81 backgroundGradient.setColorAt(0.0, m_gradientStartColor);
81 backgroundGradient.setColorAt(0.0, m_gradientStartColor);
82 backgroundGradient.setColorAt(1.0, m_gradientEndColor);
82 backgroundGradient.setColorAt(1.0, m_gradientEndColor);
83 backgroundGradient.setCoordinateMode(QGradient::ObjectBoundingMode);
83 backgroundGradient.setCoordinateMode(QGradient::ObjectBoundingMode);
84 chart->setChartBackgroundBrush(backgroundGradient);
84 chart->setChartBackgroundBrush(backgroundGradient);
85 }
85 }
86 //TODO helper to by removed later
86 //TODO helper to by removed later
87 void ChartTheme::decorate(ChartItem* item, QSeries* series,int count)
87 void ChartTheme::decorate(ChartItem* item, QSeries* series,int count)
88 {
88 {
89 switch(series->type())
89 switch(series->type())
90 {
90 {
91 case QSeries::SeriesTypeLine: {
91 case QSeries::SeriesTypeLine: {
92 QLineSeries* s = static_cast<QLineSeries*>(series);
92 QLineSeries* s = static_cast<QLineSeries*>(series);
93 LineChartItem* i = static_cast<LineChartItem*>(item);
93 LineChartItem* i = static_cast<LineChartItem*>(item);
94 decorate(i,s,count);
94 decorate(i,s,count);
95 break;
95 break;
96 }
96 }
97 case QSeries::SeriesTypeArea: {
97 case QSeries::SeriesTypeArea: {
98 QAreaSeries* s = static_cast<QAreaSeries*>(series);
98 QAreaSeries* s = static_cast<QAreaSeries*>(series);
99 AreaChartItem* i = static_cast<AreaChartItem*>(item);
99 AreaChartItem* i = static_cast<AreaChartItem*>(item);
100 decorate(i,s,count);
100 decorate(i,s,count);
101 break;
101 break;
102 }
102 }
103 case QSeries::SeriesTypeBar: {
103 case QSeries::SeriesTypeBar: {
104 QBarSeries* b = static_cast<QBarSeries*>(series);
104 QBarSeries* b = static_cast<QBarSeries*>(series);
105 BarPresenter* i = static_cast<BarPresenter*>(item);
105 BarPresenter* i = static_cast<BarPresenter*>(item);
106 decorate(i,b,count);
106 decorate(i,b,count);
107 break;
107 break;
108 }
108 }
109 case QSeries::SeriesTypeStackedBar: {
109 case QSeries::SeriesTypeStackedBar: {
110 QStackedBarSeries* s = static_cast<QStackedBarSeries*>(series);
110 QStackedBarSeries* s = static_cast<QStackedBarSeries*>(series);
111 StackedBarPresenter* i = static_cast<StackedBarPresenter*>(item);
111 StackedBarPresenter* i = static_cast<StackedBarPresenter*>(item);
112 decorate(i,s,count);
112 decorate(i,s,count);
113 break;
113 break;
114 }
114 }
115 case QSeries::SeriesTypePercentBar: {
115 case QSeries::SeriesTypePercentBar: {
116 QPercentBarSeries* s = static_cast<QPercentBarSeries*>(series);
116 QPercentBarSeries* s = static_cast<QPercentBarSeries*>(series);
117 PercentBarPresenter* i = static_cast<PercentBarPresenter*>(item);
117 PercentBarPresenter* i = static_cast<PercentBarPresenter*>(item);
118 decorate(i,s,count);
118 decorate(i,s,count);
119 break;
119 break;
120 }
120 }
121 case QSeries::SeriesTypeScatter: {
121 case QSeries::SeriesTypeScatter: {
122 QScatterSeries* s = qobject_cast<QScatterSeries*>(series);
122 QScatterSeries* s = qobject_cast<QScatterSeries*>(series);
123 Q_ASSERT(s);
123 Q_ASSERT(s);
124 ScatterPresenter* i = static_cast<ScatterPresenter*>(item);
124 ScatterPresenter* i = static_cast<ScatterPresenter*>(item);
125 Q_ASSERT(i);
125 Q_ASSERT(i);
126 decorate(i, s, count);
126 decorate(i, s, count);
127 break;
127 break;
128 }
128 }
129 case QSeries::SeriesTypePie: {
129 case QSeries::SeriesTypePie: {
130 QPieSeries* s = static_cast<QPieSeries*>(series);
130 QPieSeries* s = static_cast<QPieSeries*>(series);
131 PiePresenter* i = static_cast<PiePresenter*>(item);
131 PiePresenter* i = static_cast<PiePresenter*>(item);
132 decorate(i,s,count);
132 decorate(i,s,count);
133 break;
133 break;
134 }
134 }
135 default:
135 default:
136 qDebug()<<"Wrong item to be decorated by theme";
136 qDebug()<<"Wrong item to be decorated by theme";
137 break;
137 break;
138 }
138 }
139
139
140 }
140 }
141
141
142 void ChartTheme::decorate(AreaChartItem* item, QAreaSeries* series,int count)
142 void ChartTheme::decorate(AreaChartItem* item, QAreaSeries* series,int count)
143 {
143 {
144 QPen pen;
144 QPen pen;
145 QBrush brush;
145 QBrush brush;
146
146
147 if(pen != series->pen()){
147 if(pen != series->pen()){
148 item->setPen(series->pen());
148 item->setPen(series->pen());
149 }else{
149 }else{
150 pen.setColor(m_seriesColor.at(count%m_seriesColor.size()));
150 pen.setColor(m_seriesColor.at(count%m_seriesColor.size()));
151 pen.setWidthF(2);
151 pen.setWidthF(2);
152 item->setPen(pen);
152 item->setPen(pen);
153 }
153 }
154
154
155 if(brush != series->brush()){
155 if(brush != series->brush()){
156 item->setBrush(series->brush());
156 item->setBrush(series->brush());
157 }else{
157 }else{
158 QBrush brush(m_seriesColor.at(count%m_seriesColor.size()));
158 QBrush brush(m_seriesColor.at(count%m_seriesColor.size()));
159 item->setBrush(brush);
159 item->setBrush(brush);
160 }
160 }
161 }
161 }
162
162
163
163
164 void ChartTheme::decorate(LineChartItem* item, QLineSeries* series,int count)
164 void ChartTheme::decorate(LineChartItem* item, QLineSeries* series,int count)
165 {
165 {
166 QPen pen;
166 QPen pen;
167 if(pen != series->pen()){
167 if(pen != series->pen()){
168 item->setPen(series->pen());
168 item->setPen(series->pen());
169 return;
169 return;
170 }
170 }
171 pen.setColor(m_seriesColor.at(count%m_seriesColor.size()));
171 pen.setColor(m_seriesColor.at(count%m_seriesColor.size()));
172 pen.setWidthF(2);
172 pen.setWidthF(2);
173 item->setPen(pen);
173 item->setPen(pen);
174 }
174 }
175
175
176 void ChartTheme::decorate(BarPresenter* item, QBarSeries* series,int count)
176 void ChartTheme::decorate(BarPresenter* item, QBarSeries* series,int count)
177 {
177 {
178 QList<QBarSet*> sets = series->barSets();
178 QList<QBarSet*> sets = series->barSets();
179 for (int i=0; i<series->barsetCount(); i++) {
179 for (int i=0; i<series->barsetCount(); i++) {
180 sets.at(i)->setBrush(QBrush(m_seriesColor.at(i%m_seriesColor.count())));
180 sets.at(i)->setBrush(QBrush(m_seriesColor.at(i%m_seriesColor.count())));
181 }
181 }
182 }
182 }
183
183
184 void ChartTheme::decorate(StackedBarPresenter* item, QStackedBarSeries* series,int count)
184 void ChartTheme::decorate(StackedBarPresenter* item, QStackedBarSeries* series,int count)
185 {
185 {
186 QList<QBarSet*> sets = series->barSets();
186 QList<QBarSet*> sets = series->barSets();
187 for (int i=0; i<series->barsetCount(); i++) {
187 for (int i=0; i<series->barsetCount(); i++) {
188 sets.at(i)->setBrush(QBrush(m_seriesColor.at(i%m_seriesColor.count())));
188 sets.at(i)->setBrush(QBrush(m_seriesColor.at(i%m_seriesColor.count())));
189 }
189 }
190 }
190 }
191
191
192 void ChartTheme::decorate(PercentBarPresenter* item, QPercentBarSeries* series,int count)
192 void ChartTheme::decorate(PercentBarPresenter* item, QPercentBarSeries* series,int count)
193 {
193 {
194 QList<QBarSet*> sets = series->barSets();
194 QList<QBarSet*> sets = series->barSets();
195 for (int i=0; i<series->barsetCount(); i++) {
195 for (int i=0; i<series->barsetCount(); i++) {
196 sets.at(i)->setBrush(QBrush(m_seriesColor.at(i%m_seriesColor.count())));
196 sets.at(i)->setBrush(QBrush(m_seriesColor.at(i%m_seriesColor.count())));
197 }
197 }
198 }
198 }
199
199
200 void ChartTheme::decorate(ScatterPresenter* presenter, QScatterSeries* series, int count)
200 void ChartTheme::decorate(ScatterPresenter* presenter, QScatterSeries* series, int count)
201 {
201 {
202 Q_ASSERT(presenter);
202 Q_ASSERT(presenter);
203 Q_ASSERT(series);
203 Q_ASSERT(series);
204
204
205 QColor color = m_seriesColor.at(count % m_seriesColor.size());
205 QColor color = m_seriesColor.at(count % m_seriesColor.size());
206 // TODO: define alpha in the theme? or in the series?
206 // TODO: define alpha in the theme? or in the series?
207 //color.setAlpha(120);
207 //color.setAlpha(120);
208
208
209 QBrush brush(color, Qt::SolidPattern);
209 QBrush brush(color, Qt::SolidPattern);
210 presenter->m_markerBrush = brush;
210 presenter->m_markerBrush = brush;
211
211
212 QPen pen(brush, 3);
212 QPen pen(brush, 3);
213 pen.setColor(color);
213 pen.setColor(color);
214 presenter->m_markerPen = pen;
214 presenter->m_markerPen = pen;
215 }
215 }
216
216
217 void ChartTheme::decorate(PiePresenter* item, QPieSeries* series, int /*count*/)
217 void ChartTheme::decorate(PiePresenter* item, QPieSeries* series, int /*count*/)
218 {
218 {
219 // create a list of slice colors based on current theme
219 // create a list of slice colors based on current theme
220 int i = 0;
220 int i = 0;
221 QList<QColor> colors;
221 QList<QColor> colors;
222 while (colors.count() < series->count()) {
222 while (colors.count() < series->count()) {
223
223
224 // get base color
224 // get base color
225 QColor c = m_seriesColor[i++];
225 QColor c = m_seriesColor[i++];
226 i = i % m_seriesColor.count();
226 i = i % m_seriesColor.count();
227
227
228 // dont use black colors... looks bad
228 // dont use black colors... looks bad
229 if (c == Qt::black)
229 if (c == Qt::black)
230 continue;
230 continue;
231
231
232 // by default use the "raw" theme color
232 // by default use the "raw" theme color
233 if (!colors.contains(c)) {
233 if (!colors.contains(c)) {
234 colors << c;
234 colors << c;
235 continue;
235 continue;
236 }
236 }
237 // ...ok we need to generate something that looks like the same color
237 // ...ok we need to generate something that looks like the same color
238 // but different lightness
238 // but different lightness
239
239
240 int tryCount = 0;
240 int tryCount = 0;
241 while (tryCount++ < 100) {
241 while (tryCount++ < 100) {
242
242
243 // find maximum value we can raise the lightness
243 // find maximum value we can raise the lightness
244 int lMax = 255;
244 int lMax = 255;
245 if (lMax > 255 - c.red())
245 if (lMax > 255 - c.red())
246 lMax = 255 - c.red();
246 lMax = 255 - c.red();
247 if (lMax > 255 - c.green())
247 if (lMax > 255 - c.green())
248 lMax = 255 - c.green();
248 lMax = 255 - c.green();
249 if (lMax > 255 - c.blue())
249 if (lMax > 255 - c.blue())
250 lMax = 255 - c.blue();
250 lMax = 255 - c.blue();
251
251
252 // find maximum value we can make it darker
252 // find maximum value we can make it darker
253 int dMax = 255;
253 int dMax = 255;
254 if (dMax > c.red())
254 if (dMax > c.red())
255 dMax = c.red();
255 dMax = c.red();
256 if (dMax > c.green())
256 if (dMax > c.green())
257 dMax = c.green();
257 dMax = c.green();
258 if (dMax > c.blue())
258 if (dMax > c.blue())
259 dMax = c.blue();
259 dMax = c.blue();
260
260
261 int max = dMax + lMax;
261 int max = dMax + lMax;
262 if (max == 0) {
262 if (max == 0) {
263 // no room to make color lighter or darker...
263 // no room to make color lighter or darker...
264 qDebug() << "cannot generate a color for pie!";
264 qDebug() << "cannot generate a color for pie!";
265 break;
265 break;
266 }
266 }
267
267
268 // generate random color
268 // generate random color
269 int r = c.red() - dMax;
269 int r = c.red() - dMax;
270 int g = c.green() - dMax;
270 int g = c.green() - dMax;
271 int b = c.blue() - dMax;
271 int b = c.blue() - dMax;
272 int d = qrand() % max;
272 int d = qrand() % max;
273 c.setRgb(r+d, g+d, b+d);
273 c.setRgb(r+d, g+d, b+d);
274
274
275 // found a unique color?
275 // found a unique color?
276 if (!colors.contains(c))
276 if (!colors.contains(c))
277 break;
277 break;
278 }
278 }
279
279
280 qDebug() << "generated a color for pie" << c;
280 qDebug() << "generated a color for pie" << c;
281 colors << c;
281 colors << c;
282 }
282 }
283
283
284 // finally update colors
284 // finally update colors
285 foreach (QPieSlice* s, series->slices()) {
285 foreach (QPieSlice* s, series->slices()) {
286 QColor c = colors.takeFirst();
286 QColor c = colors.takeFirst();
287 s->setPen(c);
287 s->setPen(c);
288 s->setBrush(c);
288 s->setBrush(c);
289 }
289 }
290 }
290 }
291
291
292
292
293 void ChartTheme::decorate(QChartAxis* axis,AxisItem* item)
293 void ChartTheme::decorate(QChartAxis* axis,AxisItem* item)
294 {
294 {
295 //TODO: dummy defults for now
295 //TODO: dummy defults for now
296 axis->setLabelsBrush(Qt::black);
296 axis->setLabelsBrush(Qt::black);
297 axis->setLabelsPen(Qt::NoPen);
297 axis->setLabelsPen(Qt::NoPen);
298 axis->setShadesPen(Qt::NoPen);
298 axis->setShadesPen(Qt::NoPen);
299 axis->setShadesOpacity(0.5);
299 axis->setShadesOpacity(0.5);
300 }
300 }
301
301
302 void ChartTheme::decorate(SplinePresenter* presenter, QSplineSeries* series, int count)
302 void ChartTheme::decorate(SplineChartItem* item, QSplineSeries* series, int count)
303 {
303 {
304 Q_ASSERT(presenter);
304 Q_ASSERT(item);
305 Q_ASSERT(series);
305 Q_ASSERT(series);
306
306
307 QPen pen;
307 QPen pen;
308 if(pen != series->pen()){
308 if(pen != series->pen()){
309 presenter->setPen(series->pen());
309 item->setPen(series->pen());
310 return;
310 return;
311 }
311 }
312 pen.setColor(m_seriesColor.at(count%m_seriesColor.size()));
312 pen.setColor(m_seriesColor.at(count%m_seriesColor.size()));
313 pen.setWidthF(series->pen().widthF());
313 pen.setWidthF(series->pen().widthF());
314 presenter->setPen(pen);
314 item->setPen(pen);
315
315
316 // QColor color = m_seriesColor.at(count % m_seriesColor.size());
316 // QColor color = m_seriesColor.at(count % m_seriesColor.size());
317 // TODO: define alpha in the theme? or in the series?
317 // TODO: define alpha in the theme? or in the series?
318 //color.setAlpha(120);
318 //color.setAlpha(120);
319
319
320 // QBrush brush(color, Qt::SolidPattern);
320 // QBrush brush(color, Qt::SolidPattern);
321 // presenter->m_markerBrush = brush;
321 // presenter->m_markerBrush = brush;
322
322
323 // QPen pen(brush, 3);
323 // QPen pen(brush, 3);
324 // pen.setColor(color);
324 // pen.setColor(color);
325 // presenter->m_markerPen = pen;
325 // presenter->m_markerPen = pen;
326 }
326 }
327
327
328 QTCOMMERCIALCHART_END_NAMESPACE
328 QTCOMMERCIALCHART_END_NAMESPACE
@@ -1,58 +1,58
1 #ifndef CHARTTHEME_H
1 #ifndef CHARTTHEME_H
2 #define CHARTTHEME_H
2 #define CHARTTHEME_H
3
3
4 #include "qchartglobal.h"
4 #include "qchartglobal.h"
5 #include "qchart.h"
5 #include "qchart.h"
6 #include <QColor>
6 #include <QColor>
7
7
8 QTCOMMERCIALCHART_BEGIN_NAMESPACE
8 QTCOMMERCIALCHART_BEGIN_NAMESPACE
9
9
10 class ChartItem;
10 class ChartItem;
11 class QSeries;
11 class QSeries;
12 class LineChartItem;
12 class LineChartItem;
13 class QLineSeries;
13 class QLineSeries;
14 class BarPresenter;
14 class BarPresenter;
15 class QBarSeries;
15 class QBarSeries;
16 class StackedBarPresenter;
16 class StackedBarPresenter;
17 class QStackedBarSeries;
17 class QStackedBarSeries;
18 class QPercentBarSeries;
18 class QPercentBarSeries;
19 class PercentBarPresenter;
19 class PercentBarPresenter;
20 class QScatterSeries;
20 class QScatterSeries;
21 class ScatterPresenter;
21 class ScatterPresenter;
22 class PiePresenter;
22 class PiePresenter;
23 class QPieSeries;
23 class QPieSeries;
24 class SplinePresenter;
24 class SplineChartItem;
25 class QSplineSeries;
25 class QSplineSeries;
26 class AreaChartItem;
26 class AreaChartItem;
27 class QAreaSeries;
27 class QAreaSeries;
28
28
29 class ChartTheme
29 class ChartTheme
30 {
30 {
31 protected:
31 protected:
32 explicit ChartTheme(QChart::ChartTheme id = QChart::ChartThemeDefault);
32 explicit ChartTheme(QChart::ChartTheme id = QChart::ChartThemeDefault);
33 public:
33 public:
34 static ChartTheme* createTheme(QChart::ChartTheme theme);
34 static ChartTheme* createTheme(QChart::ChartTheme theme);
35 QChart::ChartTheme id() const {return m_id;}
35 QChart::ChartTheme id() const {return m_id;}
36 void decorate(QChart* chart);
36 void decorate(QChart* chart);
37 void decorate(ChartItem* item, QSeries* series,int count);
37 void decorate(ChartItem* item, QSeries* series,int count);
38 void decorate(BarPresenter* item, QBarSeries* series,int count);
38 void decorate(BarPresenter* item, QBarSeries* series,int count);
39 void decorate(StackedBarPresenter* item, QStackedBarSeries* series,int count);
39 void decorate(StackedBarPresenter* item, QStackedBarSeries* series,int count);
40 void decorate(PercentBarPresenter* item, QPercentBarSeries* series,int count);
40 void decorate(PercentBarPresenter* item, QPercentBarSeries* series,int count);
41 void decorate(LineChartItem* item, QLineSeries* series,int count);
41 void decorate(LineChartItem* item, QLineSeries* series,int count);
42 void decorate(AreaChartItem* item, QAreaSeries* series,int count);
42 void decorate(AreaChartItem* item, QAreaSeries* series,int count);
43 void decorate(ScatterPresenter* presenter, QScatterSeries* series, int count);
43 void decorate(ScatterPresenter* presenter, QScatterSeries* series, int count);
44 void decorate(PiePresenter* item, QPieSeries* series, int count);
44 void decorate(PiePresenter* item, QPieSeries* series, int count);
45 void decorate(QChartAxis* axis,AxisItem* item);
45 void decorate(QChartAxis* axis,AxisItem* item);
46 void decorate(SplinePresenter* presenter, QSplineSeries* series, int count);
46 void decorate(SplineChartItem* presenter, QSplineSeries* series, int count);
47
47
48 protected:
48 protected:
49 QChart::ChartTheme m_id;
49 QChart::ChartTheme m_id;
50 QColor m_gradientStartColor;
50 QColor m_gradientStartColor;
51 QColor m_gradientEndColor;
51 QColor m_gradientEndColor;
52 QList<QColor> m_seriesColor;
52 QList<QColor> m_seriesColor;
53
53
54 };
54 };
55
55
56 QTCOMMERCIALCHART_END_NAMESPACE
56 QTCOMMERCIALCHART_END_NAMESPACE
57
57
58 #endif // CHARTTHEME_H
58 #endif // CHARTTHEME_H
@@ -1,12 +1,12
1 INCLUDEPATH += $$PWD
1 INCLUDEPATH += $$PWD
2 DEPENDPATH += $$PWD
2 DEPENDPATH += $$PWD
3
3
4 SOURCES += \
4 SOURCES += \
5 $$PWD/qsplineseries.cpp \
5 $$PWD/qsplineseries.cpp \
6 $$PWD/splinepresenter.cpp
6 $$PWD/splinechartitem.cpp
7
7
8 PRIVATE_HEADERS += \
8 PRIVATE_HEADERS += \
9 $$PWD/splinepresenter_p.h
9 $$PWD/splinechartitem_p.h
10
10
11 PUBLIC_HEADERS += \
11 PUBLIC_HEADERS += \
12 $$PWD/qsplineseries.h
12 $$PWD/qsplineseries.h
@@ -1,75 +1,75
1 #include "splinepresenter_p.h"
1 #include "splinechartitem_p.h"
2 #include <QPainter>
2 #include <QPainter>
3
3
4 QTCOMMERCIALCHART_BEGIN_NAMESPACE
4 QTCOMMERCIALCHART_BEGIN_NAMESPACE
5
5
6 SplinePresenter::SplinePresenter(QSplineSeries* series, QGraphicsObject *parent) :
6 SplineChartItem::SplineChartItem(QSplineSeries* series, QGraphicsObject *parent) :
7 LineChartItem(series, parent)//,m_boundingRect()
7 LineChartItem(series, parent)//,m_boundingRect()
8 {
8 {
9 //
9 //
10 }
10 }
11
11
12
12
13
13
14 QPointF SplinePresenter::calculateGeometryControlPoint(int index) const
14 QPointF SplineChartItem::calculateGeometryControlPoint(int index) const
15 {
15 {
16 QSplineSeries* splineSeries = qobject_cast<QSplineSeries*>(m_series);
16 QSplineSeries* splineSeries = qobject_cast<QSplineSeries*>(m_series);
17 const qreal deltaX = m_size.width()/(m_maxX-m_minX);
17 const qreal deltaX = m_size.width()/(m_maxX-m_minX);
18 const qreal deltaY = m_size.height()/(m_maxY-m_minY);
18 const qreal deltaY = m_size.height()/(m_maxY-m_minY);
19 qreal x = (splineSeries->controlPoint(index).x() - m_minX)* deltaX;
19 qreal x = (splineSeries->controlPoint(index).x() - m_minX)* deltaX;
20 qreal y = (splineSeries->controlPoint(index).y() - m_minY)*-deltaY + m_size.height();
20 qreal y = (splineSeries->controlPoint(index).y() - m_minY)*-deltaY + m_size.height();
21 return QPointF(x,y);
21 return QPointF(x,y);
22 }
22 }
23
23
24 void SplinePresenter::applyGeometry(QVector<QPointF>& points)
24 void SplineChartItem::applyGeometry(QVector<QPointF>& points)
25 {
25 {
26 if(points.size()==0) return;
26 if(points.size()==0) return;
27
27
28 QPainterPath splinePath;
28 QPainterPath splinePath;
29 const QPointF& point = points.at(0);
29 const QPointF& point = points.at(0);
30 splinePath.moveTo(point);
30 splinePath.moveTo(point);
31
31
32 // QSplineSeries* splineSeries = qobject_cast<QSplineSeries*>(m_series);
32 // QSplineSeries* splineSeries = qobject_cast<QSplineSeries*>(m_series);
33 for (int i = 0; i < points.size() - 1; i++)
33 for (int i = 0; i < points.size() - 1; i++)
34 {
34 {
35 const QPointF& point = points.at(i + 1);
35 const QPointF& point = points.at(i + 1);
36 splinePath.cubicTo(calculateGeometryControlPoint(2 * i), calculateGeometryControlPoint(2 * i + 1), point);
36 splinePath.cubicTo(calculateGeometryControlPoint(2 * i), calculateGeometryControlPoint(2 * i + 1), point);
37 }
37 }
38
38
39 prepareGeometryChange();
39 prepareGeometryChange();
40 m_path = splinePath;
40 m_path = splinePath;
41 m_rect = splinePath.boundingRect();
41 m_rect = splinePath.boundingRect();
42 }
42 }
43
43
44 void SplinePresenter::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
44 void SplineChartItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
45 {
45 {
46 Q_UNUSED(widget);
46 Q_UNUSED(widget);
47 Q_UNUSED(option);
47 Q_UNUSED(option);
48 painter->save();
48 painter->save();
49 painter->setPen(m_pen);
49 painter->setPen(m_pen);
50 painter->setClipRect(m_clipRect);
50 painter->setClipRect(m_clipRect);
51 painter->drawPath(m_path);
51 painter->drawPath(m_path);
52
52
53 QSplineSeries* splineSeries = qobject_cast<QSplineSeries*>(m_series);
53 QSplineSeries* splineSeries = qobject_cast<QSplineSeries*>(m_series);
54 for (int i = 0; i < m_points.size() - 1; i++)
54 for (int i = 0; i < m_points.size() - 1; i++)
55 {
55 {
56 painter->setPen(Qt::red);
56 painter->setPen(Qt::red);
57 painter->drawEllipse(m_points[i], 2, 2);
57 painter->drawEllipse(m_points[i], 2, 2);
58
58
59 painter->setPen(Qt::blue);
59 painter->setPen(Qt::blue);
60 // painter->drawLine(m_series->at(i), m_series->controlPoint(2 * i));
60 // painter->drawLine(m_series->at(i), m_series->controlPoint(2 * i));
61 // painter->drawLine(m_series->at(i + 1), m_series->controlPoint(2 * i + 1));
61 // painter->drawLine(m_series->at(i + 1), m_series->controlPoint(2 * i + 1));
62 // painter->drawEllipse(calculateGeometryControlPoint(2 * i), 4, 4);
62 // painter->drawEllipse(calculateGeometryControlPoint(2 * i), 4, 4);
63 // painter->drawEllipse(calculateGeometryControlPoint(2 * i + 1), 4, 4);
63 // painter->drawEllipse(calculateGeometryControlPoint(2 * i + 1), 4, 4);
64 }
64 }
65 if (m_points.count() > 0)
65 if (m_points.count() > 0)
66 {
66 {
67 painter->setPen(Qt::red);
67 painter->setPen(Qt::red);
68 painter->drawEllipse(m_points[m_points.count() - 1], 2, 2);
68 painter->drawEllipse(m_points[m_points.count() - 1], 2, 2);
69 }
69 }
70 painter->restore();
70 painter->restore();
71 }
71 }
72
72
73 #include "moc_splinepresenter_p.cpp"
73 #include "moc_splinechartitem_p.cpp"
74
74
75 QTCOMMERCIALCHART_END_NAMESPACE
75 QTCOMMERCIALCHART_END_NAMESPACE
@@ -1,28 +1,28
1 #ifndef SPLINEPRESENTER_P_H
1 #ifndef SPLINECHARTITEM_P_H
2 #define SPLINEPRESENTER_P_H
2 #define SPLINECHARTITEM_P_H
3
3
4 #include "chartitem_p.h"
4 #include "chartitem_p.h"
5 #include <QObject>
5 #include <QObject>
6 #include "qsplineseries.h"
6 #include "qsplineseries.h"
7 #include "linechartitem_p.h"
7 #include "linechartitem_p.h"
8
8
9 QTCOMMERCIALCHART_BEGIN_NAMESPACE
9 QTCOMMERCIALCHART_BEGIN_NAMESPACE
10
10
11 class SplinePresenter : public LineChartItem
11 class SplineChartItem : public LineChartItem
12 {
12 {
13 Q_OBJECT
13 Q_OBJECT
14 public:
14 public:
15 SplinePresenter(QSplineSeries* series, QGraphicsObject *parent = 0);
15 SplineChartItem(QSplineSeries* series, QGraphicsObject *parent = 0);
16
16
17 void updateGeometry();
17 void updateGeometry();
18
18
19 void applyGeometry(QVector<QPointF>& points);
19 void applyGeometry(QVector<QPointF>& points);
20
20
21 QPointF calculateGeometryControlPoint(int index) const;
21 QPointF calculateGeometryControlPoint(int index) const;
22
22
23 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
23 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
24 };
24 };
25
25
26 QTCOMMERCIALCHART_END_NAMESPACE
26 QTCOMMERCIALCHART_END_NAMESPACE
27
27
28 #endif // SPLINEPRESENTER_P_H
28 #endif // SPLINECHARTITEM_P_H
General Comments 0
You need to be logged in to leave comments. Login now