##// END OF EJS Templates
domain applied to barcharts. x-axis domain doesn't make sense in this case
sauimone -
r107:d78281b0a001
parent child
Show More
@@ -1,394 +1,423
1 #include "qchart.h"
1 #include "qchart.h"
2 #include "qchartseries.h"
2 #include "qchartseries.h"
3 #include "qscatterseries.h"
3 #include "qscatterseries.h"
4 #include "qscatterseries_p.h"
4 #include "qscatterseries_p.h"
5 #include "qpieseries.h"
5 #include "qpieseries.h"
6 #include "qpieseries_p.h"
6 #include "qpieseries_p.h"
7 #include "qxychartseries.h"
7 #include "qxychartseries.h"
8 #include "qchartaxis.h"
8 #include "qchartaxis.h"
9 #include "barchartseries.h"
9 #include "barchartseries.h"
10 #include "bargroup.h"
10 #include "bargroup.h"
11 #include "stackedbarchartseries.h"
11 #include "stackedbarchartseries.h"
12 #include "stackedbargroup.h"
12 #include "stackedbargroup.h"
13 #include "percentbarchartseries.h"
13 #include "percentbarchartseries.h"
14 #include "percentbargroup.h"
14 #include "percentbargroup.h"
15 #include "charttheme_p.h"
15 #include "charttheme_p.h"
16 #include "chartobjectinterface_p.h"
16 #include "chartobjectinterface_p.h"
17
17
18 #include "xylinechartitem_p.h"
18 #include "xylinechartitem_p.h"
19 #include "plotdomain_p.h"
19 #include "plotdomain_p.h"
20 #include "axisitem_p.h"
20 #include "axisitem_p.h"
21 #include <QGraphicsScene>
21 #include <QGraphicsScene>
22 #include <QDebug>
22 #include <QDebug>
23
23
24 QTCOMMERCIALCHART_BEGIN_NAMESPACE
24 QTCOMMERCIALCHART_BEGIN_NAMESPACE
25
25
26 QChart::QChart(QGraphicsObject* parent) : QGraphicsObject(parent),
26 QChart::QChart(QGraphicsObject* parent) : QGraphicsObject(parent),
27 m_backgroundItem(0),
27 m_backgroundItem(0),
28 m_titleItem(0),
28 m_titleItem(0),
29 m_axisXItem(new AxisItem(AxisItem::X_AXIS,this)),
29 m_axisXItem(new AxisItem(AxisItem::X_AXIS,this)),
30 m_plotDataIndex(0),
30 m_plotDataIndex(0),
31 m_marginSize(0),
31 m_marginSize(0),
32 m_chartTheme(new ChartTheme())
32 m_chartTheme(new ChartTheme())
33 {
33 {
34 // TODO: the default theme?
34 // TODO: the default theme?
35 setTheme(QChart::ChartThemeDefault);
35 setTheme(QChart::ChartThemeDefault);
36
36
37 PlotDomain domain;
37 PlotDomain domain;
38 m_plotDomainList << domain;
38 m_plotDomainList << domain;
39 m_axisYItem << new AxisItem(AxisItem::Y_AXIS,this);
39 m_axisYItem << new AxisItem(AxisItem::Y_AXIS,this);
40 m_chartObjectInterfaces << m_axisXItem;
40 m_chartObjectInterfaces << m_axisXItem;
41 m_chartObjectInterfaces << m_axisYItem.at(0);
41 m_chartObjectInterfaces << m_axisYItem.at(0);
42 }
42 }
43
43
44 QChart::~QChart(){}
44 QChart::~QChart(){}
45
45
46 QRectF QChart::boundingRect() const
46 QRectF QChart::boundingRect() const
47 {
47 {
48 return m_rect;
48 return m_rect;
49 }
49 }
50
50
51 void QChart::addSeries(QChartSeries* series)
51 void QChart::addSeries(QChartSeries* series)
52 {
52 {
53 // TODO: we should check the series not already added
53 // TODO: we should check the series not already added
54
54
55 m_chartSeries << series;
55 m_chartSeries << series;
56
56
57 switch(series->type())
57 switch(series->type())
58 {
58 {
59 case QChartSeries::SeriesTypeLine: {
59 case QChartSeries::SeriesTypeLine: {
60
60
61 QXYChartSeries* xyseries = static_cast<QXYChartSeries*>(series);
61 QXYChartSeries* xyseries = static_cast<QXYChartSeries*>(series);
62 m_plotDataIndex = 0 ;
62 m_plotDataIndex = 0 ;
63 m_plotDomainList.resize(1);
63 m_plotDomainList.resize(1);
64
64
65 PlotDomain& domain = m_plotDomainList[m_plotDataIndex];
65 PlotDomain& domain = m_plotDomainList[m_plotDataIndex];
66
66
67 for (int i = 0 ; i < xyseries->count() ; i++)
67 for (int i = 0 ; i < xyseries->count() ; i++)
68 {
68 {
69 qreal x = xyseries->x(i);
69 qreal x = xyseries->x(i);
70 qreal y = xyseries->y(i);
70 qreal y = xyseries->y(i);
71 domain.m_minX = qMin(domain.m_minX,x);
71 domain.m_minX = qMin(domain.m_minX,x);
72 domain.m_minY = qMin(domain.m_minY,y);
72 domain.m_minY = qMin(domain.m_minY,y);
73 domain.m_maxX = qMax(domain.m_maxX,x);
73 domain.m_maxX = qMax(domain.m_maxX,x);
74 domain.m_maxY = qMax(domain.m_maxY,y);
74 domain.m_maxY = qMax(domain.m_maxY,y);
75 }
75 }
76
76
77 XYLineChartItem* item = new XYLineChartItem(xyseries,this);
77 XYLineChartItem* item = new XYLineChartItem(xyseries,this);
78
78
79 // TODO: combine ChartObjectInterface and ChartItem apis
79 // TODO: combine ChartObjectInterface and ChartItem apis
80 m_chartObjectInterfaces << item;
80 m_chartObjectInterfaces << item;
81 item->setTheme(m_chartTheme);
81 item->setTheme(m_chartTheme);
82
82
83 foreach(ChartObjectInterface* i, m_chartObjectInterfaces)
83 foreach(ChartObjectInterface* i, m_chartObjectInterfaces)
84 i->setPlotDomain(m_plotDomainList.at(m_plotDataIndex));
84 i->setPlotDomain(m_plotDomainList.at(m_plotDataIndex));
85
85
86 break;
86 break;
87 }
87 }
88 case QChartSeries::SeriesTypeBar: {
88 case QChartSeries::SeriesTypeBar: {
89
89
90 qDebug() << "barSeries added";
90 qDebug() << "barSeries added";
91 BarChartSeries* barSeries = static_cast<BarChartSeries*>(series);
91 BarChartSeries* barSeries = static_cast<BarChartSeries*>(series);
92 BarGroup* barGroup = new BarGroup(*barSeries,this);
92 BarGroup* barGroup = new BarGroup(*barSeries,this);
93
93
94 // Add some fugly colors for 5 fist series...
94 // Add some fugly colors for 5 fist series...
95 barGroup->addColor(QColor(255,0,0,128));
95 barGroup->addColor(QColor(255,0,0,128));
96 barGroup->addColor(QColor(255,255,0,128));
96 barGroup->addColor(QColor(255,255,0,128));
97 barGroup->addColor(QColor(0,255,0,128));
97 barGroup->addColor(QColor(0,255,0,128));
98 barGroup->addColor(QColor(0,0,255,128));
98 barGroup->addColor(QColor(0,0,255,128));
99 barGroup->addColor(QColor(255,128,0,128));
99 barGroup->addColor(QColor(255,128,0,128));
100
100
101 m_chartObjectInterfaces << barGroup;
101 m_chartObjectInterfaces << barGroup;
102 childItems().append(barGroup);
102 childItems().append(barGroup);
103 /*
103
104 // TODO: setting of domain should this be somewhere else.
104 m_plotDataIndex = 0 ;
105 m_plotDataIndex = 0 ;
105 m_plotDomainList.resize(1);
106 m_plotDomainList.resize(1);
106
107
108 qreal x = barSeries->countColumns();
109 qreal y = barSeries->max();
110
107 PlotDomain& domain = m_plotDomainList[m_plotDataIndex];
111 PlotDomain& domain = m_plotDomainList[m_plotDataIndex];
108 foreach(ChartItem* i ,m_chartItems)
112
113 domain.m_minX = qMin(domain.m_minX,x);
114 domain.m_minY = qMin(domain.m_minY,y);
115 domain.m_maxX = qMax(domain.m_maxX,x);
116 domain.m_maxY = qMax(domain.m_maxY,y);
117
118 foreach(ChartObjectInterface* i ,m_chartObjectInterfaces)
109 i->setPlotDomain(m_plotDomainList.at(m_plotDataIndex));
119 i->setPlotDomain(m_plotDomainList.at(m_plotDataIndex));
110 */
120
111 break;
121 break;
112 }
122 }
113 case QChartSeries::SeriesTypeStackedBar: {
123 case QChartSeries::SeriesTypeStackedBar: {
114
124
115 qDebug() << "barSeries added";
125 qDebug() << "barSeries added";
116 StackedBarChartSeries* stackedBarSeries = static_cast<StackedBarChartSeries*>(series);
126 StackedBarChartSeries* stackedBarSeries = static_cast<StackedBarChartSeries*>(series);
117 StackedBarGroup* stackedBarGroup = new StackedBarGroup(*stackedBarSeries,this);
127 StackedBarGroup* stackedBarGroup = new StackedBarGroup(*stackedBarSeries,this);
118
128
119 // Add some fugly colors for 5 fist series...
129 // Add some fugly colors for 5 fist series...
120 stackedBarGroup->addColor(QColor(255,0,0,128));
130 stackedBarGroup->addColor(QColor(255,0,0,128));
121 stackedBarGroup->addColor(QColor(255,255,0,128));
131 stackedBarGroup->addColor(QColor(255,255,0,128));
122 stackedBarGroup->addColor(QColor(0,255,0,128));
132 stackedBarGroup->addColor(QColor(0,255,0,128));
123 stackedBarGroup->addColor(QColor(0,0,255,128));
133 stackedBarGroup->addColor(QColor(0,0,255,128));
124 stackedBarGroup->addColor(QColor(255,128,0,128));
134 stackedBarGroup->addColor(QColor(255,128,0,128));
125
135
126 m_chartObjectInterfaces << stackedBarGroup;
136 m_chartObjectInterfaces << stackedBarGroup;
127 childItems().append(stackedBarGroup);
137 childItems().append(stackedBarGroup);
128 /*
138
139 // TODO: setting of domain should this be somewhere else.
129 m_plotDataIndex = 0 ;
140 m_plotDataIndex = 0 ;
130 m_plotDomainList.resize(1);
141 m_plotDomainList.resize(1);
131
142
143 qreal x = stackedBarSeries->countColumns();
144 qreal y = stackedBarSeries->maxColumnSum();
145
132 PlotDomain& domain = m_plotDomainList[m_plotDataIndex];
146 PlotDomain& domain = m_plotDomainList[m_plotDataIndex];
133 foreach(ChartItem* i ,m_chartItems)
147
148 domain.m_minX = qMin(domain.m_minX,x);
149 domain.m_minY = qMin(domain.m_minY,y);
150 domain.m_maxX = qMax(domain.m_maxX,x);
151 domain.m_maxY = qMax(domain.m_maxY,y);
152
153 foreach(ChartObjectInterface* i ,m_chartObjectInterfaces)
134 i->setPlotDomain(m_plotDomainList.at(m_plotDataIndex));
154 i->setPlotDomain(m_plotDomainList.at(m_plotDataIndex));
135 */
155
136 break;
156 break;
137 }
157 }
138 case QChartSeries::SeriesTypePercentBar: {
158 case QChartSeries::SeriesTypePercentBar: {
139
159
140 qDebug() << "barSeries added";
160 qDebug() << "barSeries added";
141 PercentBarChartSeries* percentBarSeries = static_cast<PercentBarChartSeries*>(series);
161 PercentBarChartSeries* percentBarSeries = static_cast<PercentBarChartSeries*>(series);
142 PercentBarGroup* percentBarGroup = new PercentBarGroup(*percentBarSeries,this);
162 PercentBarGroup* percentBarGroup = new PercentBarGroup(*percentBarSeries,this);
143
163
144 // Add some fugly colors for 5 fist series...
164 // Add some fugly colors for 5 fist series...
145 percentBarGroup->addColor(QColor(255,0,0,128));
165 percentBarGroup->addColor(QColor(255,0,0,128));
146 percentBarGroup->addColor(QColor(255,255,0,128));
166 percentBarGroup->addColor(QColor(255,255,0,128));
147 percentBarGroup->addColor(QColor(0,255,0,128));
167 percentBarGroup->addColor(QColor(0,255,0,128));
148 percentBarGroup->addColor(QColor(0,0,255,128));
168 percentBarGroup->addColor(QColor(0,0,255,128));
149 percentBarGroup->addColor(QColor(255,128,0,128));
169 percentBarGroup->addColor(QColor(255,128,0,128));
150
170
151 m_chartObjectInterfaces << percentBarGroup;
171 m_chartObjectInterfaces << percentBarGroup;
152 childItems().append(percentBarGroup);
172 childItems().append(percentBarGroup);
153 /*
173
174 // TODO: setting of domain should this be somewhere else.
154 m_plotDataIndex = 0 ;
175 m_plotDataIndex = 0 ;
155 m_plotDomainList.resize(1);
176 m_plotDomainList.resize(1);
156
177
178 qreal x = percentBarSeries->countColumns();
179
157 PlotDomain& domain = m_plotDomainList[m_plotDataIndex];
180 PlotDomain& domain = m_plotDomainList[m_plotDataIndex];
158 foreach(ChartItem* i ,m_chartItems)
181
182 domain.m_minX = qMin(domain.m_minX,x);
183 domain.m_minY = 0;
184 domain.m_maxX = qMax(domain.m_maxX,x);
185 domain.m_maxY = 100;
186
187 foreach(ChartObjectInterface* i ,m_chartObjectInterfaces)
159 i->setPlotDomain(m_plotDomainList.at(m_plotDataIndex));
188 i->setPlotDomain(m_plotDomainList.at(m_plotDataIndex));
160 */
189
161 break;
190 break;
162 }
191 }
163 case QChartSeries::SeriesTypeScatter: {
192 case QChartSeries::SeriesTypeScatter: {
164 QScatterSeries *scatterSeries = qobject_cast<QScatterSeries *>(series);
193 QScatterSeries *scatterSeries = qobject_cast<QScatterSeries *>(series);
165 scatterSeries->d->m_theme = m_chartTheme->themeForSeries();
194 scatterSeries->d->m_theme = m_chartTheme->themeForSeries();
166 scatterSeries->d->setParentItem(this);
195 scatterSeries->d->setParentItem(this);
167 m_chartObjectInterfaces << scatterSeries->d;
196 m_chartObjectInterfaces << scatterSeries->d;
168 //TODO:? scatterSeries->d->m_themeIndex = m_chartSeries.count() - 1;
197 //TODO:? scatterSeries->d->m_themeIndex = m_chartSeries.count() - 1;
169 break;
198 break;
170 }
199 }
171 case QChartSeries::SeriesTypePie: {
200 case QChartSeries::SeriesTypePie: {
172 QPieSeries *pieSeries = qobject_cast<QPieSeries *>(series);
201 QPieSeries *pieSeries = qobject_cast<QPieSeries *>(series);
173 // for (int i(0); i < pieSeries->sliceCount(); i++) {
202 // for (int i(0); i < pieSeries->sliceCount(); i++) {
174 // if (!pieSeries->sliceColor(i).isValid())
203 // if (!pieSeries->sliceColor(i).isValid())
175 // pieSeries->setSliceColor(i, nextColor());
204 // pieSeries->setSliceColor(i, nextColor());
176 // }
205 // }
177 pieSeries->d->setTheme(m_chartTheme);
206 pieSeries->d->setTheme(m_chartTheme);
178 m_chartObjectInterfaces << pieSeries->d;
207 m_chartObjectInterfaces << pieSeries->d;
179
208
180 // Set pre-defined colors in case the series has no colors defined
209 // Set pre-defined colors in case the series has no colors defined
181 // TODO: how to define the color for all the slices of a pie?
210 // TODO: how to define the color for all the slices of a pie?
182 // for (int (i); i < pieSeries.sliceCount(); i++)
211 // for (int (i); i < pieSeries.sliceCount(); i++)
183 break;
212 break;
184 }
213 }
185 }
214 }
186 }
215 }
187
216
188 QChartSeries* QChart::createSeries(QChartSeries::QChartSeriesType type)
217 QChartSeries* QChart::createSeries(QChartSeries::QChartSeriesType type)
189 {
218 {
190 // TODO: support also other types; not only scatter and pie
219 // TODO: support also other types; not only scatter and pie
191
220
192 QChartSeries *series(0);
221 QChartSeries *series(0);
193
222
194 switch (type) {
223 switch (type) {
195 case QChartSeries::SeriesTypeLine: {
224 case QChartSeries::SeriesTypeLine: {
196 series = QXYChartSeries::create();
225 series = QXYChartSeries::create();
197 break;
226 break;
198 }
227 }
199 case QChartSeries::SeriesTypeBar: {
228 case QChartSeries::SeriesTypeBar: {
200 series = new BarChartSeries(this);
229 series = new BarChartSeries(this);
201 break;
230 break;
202 }
231 }
203 case QChartSeries::SeriesTypeStackedBar: {
232 case QChartSeries::SeriesTypeStackedBar: {
204 series = new StackedBarChartSeries(this);
233 series = new StackedBarChartSeries(this);
205 break;
234 break;
206 }
235 }
207 case QChartSeries::SeriesTypePercentBar: {
236 case QChartSeries::SeriesTypePercentBar: {
208 series = new PercentBarChartSeries(this);
237 series = new PercentBarChartSeries(this);
209 break;
238 break;
210 }
239 }
211 case QChartSeries::SeriesTypeScatter: {
240 case QChartSeries::SeriesTypeScatter: {
212 series = new QScatterSeries(this);
241 series = new QScatterSeries(this);
213 break;
242 break;
214 }
243 }
215 case QChartSeries::SeriesTypePie: {
244 case QChartSeries::SeriesTypePie: {
216 series = new QPieSeries(this);
245 series = new QPieSeries(this);
217 break;
246 break;
218 }
247 }
219 default:
248 default:
220 Q_ASSERT(false);
249 Q_ASSERT(false);
221 break;
250 break;
222 }
251 }
223
252
224 addSeries(series);
253 addSeries(series);
225 return series;
254 return series;
226 }
255 }
227
256
228 void QChart::setSize(const QSize& size)
257 void QChart::setSize(const QSize& size)
229 {
258 {
230 m_rect = QRect(QPoint(0,0),size);
259 m_rect = QRect(QPoint(0,0),size);
231 QRect rect = m_rect.adjusted(margin(),margin(), -margin(), -margin());
260 QRect rect = m_rect.adjusted(margin(),margin(), -margin(), -margin());
232
261
233 // recalculate title position
262 // recalculate title position
234 if (m_titleItem) {
263 if (m_titleItem) {
235 QPointF center = m_rect.center() -m_titleItem->boundingRect().center();
264 QPointF center = m_rect.center() -m_titleItem->boundingRect().center();
236 m_titleItem->setPos(center.x(),m_rect.top()/2 + margin()/2);
265 m_titleItem->setPos(center.x(),m_rect.top()/2 + margin()/2);
237 }
266 }
238
267
239 //recalculate background gradient
268 //recalculate background gradient
240 if (m_backgroundItem) {
269 if (m_backgroundItem) {
241 m_backgroundItem->setRect(rect);
270 m_backgroundItem->setRect(rect);
242 if (m_bacgroundOrinetation == HorizonatlGradientOrientation)
271 if (m_bacgroundOrinetation == HorizonatlGradientOrientation)
243 m_backgroundGradient.setFinalStop(m_backgroundItem->rect().width(), 0);
272 m_backgroundGradient.setFinalStop(m_backgroundItem->rect().width(), 0);
244 else
273 else
245 m_backgroundGradient.setFinalStop(0, m_backgroundItem->rect().height());
274 m_backgroundGradient.setFinalStop(0, m_backgroundItem->rect().height());
246 m_backgroundItem->setBrush(m_backgroundGradient);
275 m_backgroundItem->setBrush(m_backgroundGradient);
247 }
276 }
248
277
249 // resize and reposition childs
278 // resize and reposition childs
250 foreach (ChartObjectInterface *ctrl, m_chartObjectInterfaces) {
279 foreach (ChartObjectInterface *ctrl, m_chartObjectInterfaces) {
251 QGraphicsItem *item = ctrl->graphicsItem();
280 QGraphicsItem *item = ctrl->graphicsItem();
252 if (item)
281 if (item)
253 item->setPos(rect.topLeft());
282 item->setPos(rect.topLeft());
254 ctrl->setSize(rect.size());
283 ctrl->setSize(rect.size());
255 }
284 }
256
285
257 update();
286 update();
258 }
287 }
259
288
260 void QChart::setBackground(const QColor& startColor, const QColor& endColor, GradientOrientation orientation)
289 void QChart::setBackground(const QColor& startColor, const QColor& endColor, GradientOrientation orientation)
261 {
290 {
262
291
263 if(!m_backgroundItem){
292 if(!m_backgroundItem){
264 m_backgroundItem = new QGraphicsRectItem(this);
293 m_backgroundItem = new QGraphicsRectItem(this);
265 m_backgroundItem->setZValue(-1);
294 m_backgroundItem->setZValue(-1);
266 }
295 }
267
296
268 m_bacgroundOrinetation = orientation;
297 m_bacgroundOrinetation = orientation;
269 m_backgroundGradient.setColorAt(0.0, startColor);
298 m_backgroundGradient.setColorAt(0.0, startColor);
270 m_backgroundGradient.setColorAt(1.0, endColor);
299 m_backgroundGradient.setColorAt(1.0, endColor);
271 m_backgroundGradient.setStart(0,0);
300 m_backgroundGradient.setStart(0,0);
272
301
273 if(orientation == VerticalGradientOrientation){
302 if(orientation == VerticalGradientOrientation){
274 m_backgroundGradient.setFinalStop(0,m_rect.height());
303 m_backgroundGradient.setFinalStop(0,m_rect.height());
275 }else{
304 }else{
276 m_backgroundGradient.setFinalStop(m_rect.width(),0);
305 m_backgroundGradient.setFinalStop(m_rect.width(),0);
277 }
306 }
278
307
279 m_backgroundItem->setBrush(m_backgroundGradient);
308 m_backgroundItem->setBrush(m_backgroundGradient);
280 m_backgroundItem->setPen(Qt::NoPen);
309 m_backgroundItem->setPen(Qt::NoPen);
281 m_backgroundItem->update();
310 m_backgroundItem->update();
282 }
311 }
283
312
284 void QChart::setTitle(const QString& title,const QFont& font)
313 void QChart::setTitle(const QString& title,const QFont& font)
285 {
314 {
286 if(!m_titleItem) m_titleItem = new QGraphicsTextItem(this);
315 if(!m_titleItem) m_titleItem = new QGraphicsTextItem(this);
287 m_titleItem->setPlainText(title);
316 m_titleItem->setPlainText(title);
288 m_titleItem->setFont(font);
317 m_titleItem->setFont(font);
289 }
318 }
290
319
291 int QChart::margin() const
320 int QChart::margin() const
292 {
321 {
293 return m_marginSize;
322 return m_marginSize;
294 }
323 }
295
324
296 void QChart::setMargin(int margin)
325 void QChart::setMargin(int margin)
297 {
326 {
298 m_marginSize = margin;
327 m_marginSize = margin;
299 }
328 }
300
329
301 void QChart::setTheme(QChart::ChartThemeId theme)
330 void QChart::setTheme(QChart::ChartThemeId theme)
302 {
331 {
303 if (theme != m_chartTheme->d->m_currentTheme) {
332 if (theme != m_chartTheme->d->m_currentTheme) {
304 m_chartTheme->d->setTheme(theme);
333 m_chartTheme->d->setTheme(theme);
305 setBackground(m_chartTheme->d->m_gradientStartColor,
334 setBackground(m_chartTheme->d->m_gradientStartColor,
306 m_chartTheme->d->m_gradientEndColor,
335 m_chartTheme->d->m_gradientEndColor,
307 m_bacgroundOrinetation);
336 m_bacgroundOrinetation);
308 foreach (ChartObjectInterface *ctrl, m_chartObjectInterfaces)
337 foreach (ChartObjectInterface *ctrl, m_chartObjectInterfaces)
309 ctrl->setTheme(m_chartTheme);
338 ctrl->setTheme(m_chartTheme);
310 update();
339 update();
311 }
340 }
312 }
341 }
313
342
314 void QChart::zoomInToRect(const QRect& rectangle)
343 void QChart::zoomInToRect(const QRect& rectangle)
315 {
344 {
316
345
317 if(!rectangle.isValid()) return;
346 if(!rectangle.isValid()) return;
318
347
319 qreal margin = this->margin();
348 qreal margin = this->margin();
320
349
321 QRect rect = rectangle.normalized();
350 QRect rect = rectangle.normalized();
322 rect.translate(-margin, -margin);
351 rect.translate(-margin, -margin);
323
352
324 PlotDomain& oldDomain = m_plotDomainList[m_plotDataIndex];
353 PlotDomain& oldDomain = m_plotDomainList[m_plotDataIndex];
325
354
326 PlotDomain domain = oldDomain.subDomain(rect,m_rect.width() - 2 * margin,m_rect.height() - 2 * margin);
355 PlotDomain domain = oldDomain.subDomain(rect,m_rect.width() - 2 * margin,m_rect.height() - 2 * margin);
327
356
328 m_plotDomainList.resize(m_plotDataIndex + 1);
357 m_plotDomainList.resize(m_plotDataIndex + 1);
329 m_plotDomainList<<domain;
358 m_plotDomainList<<domain;
330 m_plotDataIndex++;
359 m_plotDataIndex++;
331
360
332 foreach (ChartObjectInterface* ctrl, m_chartObjectInterfaces)
361 foreach (ChartObjectInterface* ctrl, m_chartObjectInterfaces)
333 ctrl->setPlotDomain(m_plotDomainList[m_plotDataIndex]);
362 ctrl->setPlotDomain(m_plotDomainList[m_plotDataIndex]);
334 update();
363 update();
335 }
364 }
336
365
337 void QChart::zoomIn()
366 void QChart::zoomIn()
338 {
367 {
339 if (m_plotDataIndex < m_plotDomainList.count() - 1) {
368 if (m_plotDataIndex < m_plotDomainList.count() - 1) {
340 m_plotDataIndex++;
369 m_plotDataIndex++;
341 foreach (ChartObjectInterface* item, m_chartObjectInterfaces)
370 foreach (ChartObjectInterface* item, m_chartObjectInterfaces)
342 item->setPlotDomain(m_plotDomainList[m_plotDataIndex]);
371 item->setPlotDomain(m_plotDomainList[m_plotDataIndex]);
343 update();
372 update();
344 } else {
373 } else {
345 QRect rect = m_rect.adjusted(margin(),margin(), -margin(), -margin());
374 QRect rect = m_rect.adjusted(margin(),margin(), -margin(), -margin());
346 rect.setWidth(rect.width()/2);
375 rect.setWidth(rect.width()/2);
347 rect.setHeight(rect.height()/2);
376 rect.setHeight(rect.height()/2);
348 rect.moveCenter(m_rect.center());
377 rect.moveCenter(m_rect.center());
349 zoomInToRect(rect);
378 zoomInToRect(rect);
350 }
379 }
351 }
380 }
352
381
353 void QChart::zoomOut()
382 void QChart::zoomOut()
354 {
383 {
355 if (m_plotDataIndex > 0) {
384 if (m_plotDataIndex > 0) {
356 m_plotDataIndex--;
385 m_plotDataIndex--;
357 foreach (ChartObjectInterface* item, m_chartObjectInterfaces)
386 foreach (ChartObjectInterface* item, m_chartObjectInterfaces)
358 item->setPlotDomain(m_plotDomainList[m_plotDataIndex]);
387 item->setPlotDomain(m_plotDomainList[m_plotDataIndex]);
359 update();
388 update();
360 }
389 }
361 }
390 }
362
391
363 void QChart::zoomReset()
392 void QChart::zoomReset()
364 {
393 {
365 if (m_plotDataIndex > 0) {
394 if (m_plotDataIndex > 0) {
366 m_plotDataIndex = 0;
395 m_plotDataIndex = 0;
367 foreach (ChartObjectInterface* item, m_chartObjectInterfaces)
396 foreach (ChartObjectInterface* item, m_chartObjectInterfaces)
368 item->setPlotDomain(m_plotDomainList[m_plotDataIndex]);
397 item->setPlotDomain(m_plotDomainList[m_plotDataIndex]);
369 update();
398 update();
370 }
399 }
371 }
400 }
372
401
373 void QChart::setAxisX(const QChartAxis& axis)
402 void QChart::setAxisX(const QChartAxis& axis)
374 {
403 {
375 setAxis(m_axisXItem,axis);
404 setAxis(m_axisXItem,axis);
376 }
405 }
377 void QChart::setAxisY(const QChartAxis& axis)
406 void QChart::setAxisY(const QChartAxis& axis)
378 {
407 {
379 setAxis(m_axisYItem.at(0),axis);
408 setAxis(m_axisYItem.at(0),axis);
380 }
409 }
381
410
382 void QChart::setAxisY(const QList<QChartAxis>& axis)
411 void QChart::setAxisY(const QList<QChartAxis>& axis)
383 {
412 {
384 //TODO not implemented
413 //TODO not implemented
385 }
414 }
386
415
387 void QChart::setAxis(AxisItem *item, const QChartAxis& axis)
416 void QChart::setAxis(AxisItem *item, const QChartAxis& axis)
388 {
417 {
389 item->setVisible(axis.isAxisVisible());
418 item->setVisible(axis.isAxisVisible());
390 }
419 }
391
420
392 #include "moc_qchart.cpp"
421 #include "moc_qchart.cpp"
393
422
394 QTCOMMERCIALCHART_END_NAMESPACE
423 QTCOMMERCIALCHART_END_NAMESPACE
General Comments 0
You need to be logged in to leave comments. Login now