##// END OF EJS Templates
Fixes shades counter
Michal Klocek -
r551:bd55491f7b0f
parent child
Show More
@@ -1,414 +1,413
1 #include "axisitem_p.h"
1 #include "axisitem_p.h"
2 #include "qchartaxis.h"
2 #include "qchartaxis.h"
3 #include "chartpresenter_p.h"
3 #include "chartpresenter_p.h"
4 #include "chartanimator_p.h"
4 #include "chartanimator_p.h"
5 #include <QPainter>
5 #include <QPainter>
6 #include <QDebug>
6 #include <QDebug>
7
7
8 static int label_padding = 5;
8 static int label_padding = 5;
9
9
10 QTCOMMERCIALCHART_BEGIN_NAMESPACE
10 QTCOMMERCIALCHART_BEGIN_NAMESPACE
11
11
12 AxisItem::AxisItem(QChartAxis* axis,ChartPresenter* presenter,AxisType type,QGraphicsItem* parent) :
12 AxisItem::AxisItem(QChartAxis* axis,ChartPresenter* presenter,AxisType type,QGraphicsItem* parent) :
13 ChartItem(parent),
13 ChartItem(parent),
14 m_presenter(presenter),
14 m_presenter(presenter),
15 m_chartAxis(axis),
15 m_chartAxis(axis),
16 m_type(type),
16 m_type(type),
17 m_labelsAngle(0),
17 m_labelsAngle(0),
18 m_grid(parent),
18 m_grid(parent),
19 m_shades(parent),
19 m_shades(parent),
20 m_labels(parent),
20 m_labels(parent),
21 m_axis(parent),
21 m_axis(parent),
22 m_min(0),
22 m_min(0),
23 m_max(0),
23 m_max(0),
24 m_ticksCount(0)
24 m_ticksCount(0)
25 {
25 {
26 //initial initialization
26 //initial initialization
27 m_axis.setZValue(ChartPresenter::AxisZValue);
27 m_axis.setZValue(ChartPresenter::AxisZValue);
28 m_shades.setZValue(ChartPresenter::ShadesZValue);
28 m_shades.setZValue(ChartPresenter::ShadesZValue);
29 m_grid.setZValue(ChartPresenter::GridZValue);
29 m_grid.setZValue(ChartPresenter::GridZValue);
30 setFlags(QGraphicsItem::ItemHasNoContents);
30 setFlags(QGraphicsItem::ItemHasNoContents);
31
31
32 QObject::connect(m_chartAxis,SIGNAL(updated()),this,SLOT(handleAxisUpdated()));
32 QObject::connect(m_chartAxis,SIGNAL(updated()),this,SLOT(handleAxisUpdated()));
33 QObject::connect(m_chartAxis->categories(),SIGNAL(updated()),this,SLOT(handleAxisCategoriesUpdated()));
33 QObject::connect(m_chartAxis->categories(),SIGNAL(updated()),this,SLOT(handleAxisCategoriesUpdated()));
34
34
35 handleAxisUpdated();
35 handleAxisUpdated();
36 }
36 }
37
37
38 AxisItem::~AxisItem()
38 AxisItem::~AxisItem()
39 {
39 {
40 }
40 }
41
41
42 QRectF AxisItem::boundingRect() const
42 QRectF AxisItem::boundingRect() const
43 {
43 {
44 return QRectF();
44 return QRectF();
45 }
45 }
46
46
47 void AxisItem::createItems(int count)
47 void AxisItem::createItems(int count)
48 {
48 {
49
49
50 if(m_axis.children().size()==0)
50 if(m_axis.children().size()==0)
51 m_axis.addToGroup(new QGraphicsLineItem());
51 m_axis.addToGroup(new QGraphicsLineItem());
52 for (int i = 0; i < count; ++i) {
52 for (int i = 0; i < count; ++i) {
53 m_grid.addToGroup(new QGraphicsLineItem());
53 m_grid.addToGroup(new QGraphicsLineItem());
54 m_labels.addToGroup(new QGraphicsSimpleTextItem());
54 m_labels.addToGroup(new QGraphicsSimpleTextItem());
55 m_axis.addToGroup(new QGraphicsLineItem());
55 m_axis.addToGroup(new QGraphicsLineItem());
56 if((m_grid.childItems().size())%2 && m_grid.childItems().size()>2) m_shades.addToGroup(new QGraphicsRectItem());
56 if((m_grid.childItems().size())%2 && m_grid.childItems().size()>2) m_shades.addToGroup(new QGraphicsRectItem());
57 }
57 }
58 }
58 }
59
59
60 void AxisItem::deleteItems(int count)
60 void AxisItem::deleteItems(int count)
61 {
61 {
62 QList<QGraphicsItem *> lines = m_grid.childItems();
62 QList<QGraphicsItem *> lines = m_grid.childItems();
63 QList<QGraphicsItem *> labels = m_labels.childItems();
63 QList<QGraphicsItem *> labels = m_labels.childItems();
64 QList<QGraphicsItem *> shades = m_shades.childItems();
64 QList<QGraphicsItem *> shades = m_shades.childItems();
65 QList<QGraphicsItem *> axis = m_axis.childItems();
65 QList<QGraphicsItem *> axis = m_axis.childItems();
66
66
67 for (int i = 0; i < count; ++i) {
67 for (int i = 0; i < count; ++i) {
68 if(lines.size()%2 && lines.size()>1) delete(shades.takeLast());
68 if(lines.size()%2 && lines.size()>1) delete(shades.takeLast());
69 delete(lines.takeLast());
69 delete(lines.takeLast());
70 delete(labels.takeLast());
70 delete(labels.takeLast());
71 delete(axis.takeLast());
71 delete(axis.takeLast());
72 }
72 }
73 }
73 }
74
74
75 void AxisItem::updateLayout(QVector<qreal>& layout)
75 void AxisItem::updateLayout(QVector<qreal>& layout)
76 {
76 {
77 if(m_animator){
77 if(m_animator){
78 m_animator->applyLayout(this,layout);
78 m_animator->applyLayout(this,layout);
79 }
79 }
80 else setLayout(layout);
80 else setLayout(layout);
81 }
81 }
82
82
83 QStringList AxisItem::createLabels(int ticks, qreal min, qreal max) const
83 QStringList AxisItem::createLabels(int ticks, qreal min, qreal max) const
84 {
84 {
85 Q_ASSERT(max>=min);
85 Q_ASSERT(max>=min);
86 Q_ASSERT(ticks>0);
86 Q_ASSERT(ticks>0);
87
87
88 QStringList labels;
88 QStringList labels;
89
89
90 QChartAxisCategories* categories = m_chartAxis->categories();
90 QChartAxisCategories* categories = m_chartAxis->categories();
91
91
92 for(int i=0; i< ticks; i++) {
92 for(int i=0; i< ticks; i++) {
93 qreal value = min + (i * (max - min)/ (ticks-1));
93 qreal value = min + (i * (max - min)/ (ticks-1));
94 if(categories->count()==0) {
94 if(categories->count()==0) {
95 labels << QString::number(value);
95 labels << QString::number(value);
96 }
96 }
97 else {
97 else {
98 QString label = categories->label(value);
98 QString label = categories->label(value);
99 labels << label;
99 labels << label;
100 }
100 }
101 }
101 }
102 return labels;
102 return labels;
103 }
103 }
104
104
105 void AxisItem::setAxisOpacity(qreal opacity)
105 void AxisItem::setAxisOpacity(qreal opacity)
106 {
106 {
107 m_axis.setOpacity(opacity);
107 m_axis.setOpacity(opacity);
108 }
108 }
109
109
110 qreal AxisItem::axisOpacity() const
110 qreal AxisItem::axisOpacity() const
111 {
111 {
112 return m_axis.opacity();
112 return m_axis.opacity();
113 }
113 }
114
114
115 void AxisItem::setGridOpacity(qreal opacity)
115 void AxisItem::setGridOpacity(qreal opacity)
116 {
116 {
117 m_grid.setOpacity(opacity);
117 m_grid.setOpacity(opacity);
118 }
118 }
119
119
120 qreal AxisItem::gridOpacity() const
120 qreal AxisItem::gridOpacity() const
121 {
121 {
122 return m_grid.opacity();
122 return m_grid.opacity();
123 }
123 }
124
124
125 void AxisItem::setLabelsOpacity(qreal opacity)
125 void AxisItem::setLabelsOpacity(qreal opacity)
126 {
126 {
127 m_labels.setOpacity(opacity);
127 m_labels.setOpacity(opacity);
128 }
128 }
129
129
130 qreal AxisItem::labelsOpacity() const
130 qreal AxisItem::labelsOpacity() const
131 {
131 {
132 return m_labels.opacity();
132 return m_labels.opacity();
133 }
133 }
134
134
135 void AxisItem::setShadesOpacity(qreal opacity)
135 void AxisItem::setShadesOpacity(qreal opacity)
136 {
136 {
137 m_shades.setOpacity(opacity);
137 m_shades.setOpacity(opacity);
138 }
138 }
139
139
140 qreal AxisItem::shadesOpacity() const
140 qreal AxisItem::shadesOpacity() const
141 {
141 {
142 return m_shades.opacity();
142 return m_shades.opacity();
143 }
143 }
144
144
145 void AxisItem::setLabelsAngle(int angle)
145 void AxisItem::setLabelsAngle(int angle)
146 {
146 {
147 foreach(QGraphicsItem* item , m_labels.childItems()) {
147 foreach(QGraphicsItem* item , m_labels.childItems()) {
148 QPointF center = item->boundingRect().center();
148 QPointF center = item->boundingRect().center();
149 item->setRotation(angle);
149 item->setRotation(angle);
150 }
150 }
151
151
152 m_labelsAngle=angle;
152 m_labelsAngle=angle;
153 }
153 }
154
154
155 void AxisItem::setLabelsPen(const QPen& pen)
155 void AxisItem::setLabelsPen(const QPen& pen)
156 {
156 {
157 foreach(QGraphicsItem* item , m_labels.childItems()) {
157 foreach(QGraphicsItem* item , m_labels.childItems()) {
158 static_cast<QGraphicsSimpleTextItem*>(item)->setPen(pen);
158 static_cast<QGraphicsSimpleTextItem*>(item)->setPen(pen);
159 }
159 }
160 }
160 }
161
161
162 void AxisItem::setLabelsBrush(const QBrush& brush)
162 void AxisItem::setLabelsBrush(const QBrush& brush)
163 {
163 {
164 foreach(QGraphicsItem* item , m_labels.childItems()) {
164 foreach(QGraphicsItem* item , m_labels.childItems()) {
165 static_cast<QGraphicsSimpleTextItem*>(item)->setBrush(brush);
165 static_cast<QGraphicsSimpleTextItem*>(item)->setBrush(brush);
166 }
166 }
167 }
167 }
168
168
169 void AxisItem::setLabelsFont(const QFont& font)
169 void AxisItem::setLabelsFont(const QFont& font)
170 {
170 {
171 foreach(QGraphicsItem* item , m_labels.childItems()) {
171 foreach(QGraphicsItem* item , m_labels.childItems()) {
172 static_cast<QGraphicsSimpleTextItem*>(item)->setFont(font);
172 static_cast<QGraphicsSimpleTextItem*>(item)->setFont(font);
173 }
173 }
174 }
174 }
175
175
176 void AxisItem::setShadesBrush(const QBrush& brush)
176 void AxisItem::setShadesBrush(const QBrush& brush)
177 {
177 {
178 foreach(QGraphicsItem* item , m_shades.childItems()) {
178 foreach(QGraphicsItem* item , m_shades.childItems()) {
179 static_cast<QGraphicsRectItem*>(item)->setBrush(brush);
179 static_cast<QGraphicsRectItem*>(item)->setBrush(brush);
180 }
180 }
181 }
181 }
182
182
183 void AxisItem::setShadesPen(const QPen& pen)
183 void AxisItem::setShadesPen(const QPen& pen)
184 {
184 {
185 foreach(QGraphicsItem* item , m_shades.childItems()) {
185 foreach(QGraphicsItem* item , m_shades.childItems()) {
186 static_cast<QGraphicsRectItem*>(item)->setPen(pen);
186 static_cast<QGraphicsRectItem*>(item)->setPen(pen);
187 }
187 }
188 }
188 }
189
189
190 void AxisItem::setAxisPen(const QPen& pen)
190 void AxisItem::setAxisPen(const QPen& pen)
191 {
191 {
192 foreach(QGraphicsItem* item , m_axis.childItems()) {
192 foreach(QGraphicsItem* item , m_axis.childItems()) {
193 static_cast<QGraphicsLineItem*>(item)->setPen(pen);
193 static_cast<QGraphicsLineItem*>(item)->setPen(pen);
194 }
194 }
195 }
195 }
196
196
197 void AxisItem::setGridPen(const QPen& pen)
197 void AxisItem::setGridPen(const QPen& pen)
198 {
198 {
199 foreach(QGraphicsItem* item , m_grid.childItems()) {
199 foreach(QGraphicsItem* item , m_grid.childItems()) {
200 static_cast<QGraphicsLineItem*>(item)->setPen(pen);
200 static_cast<QGraphicsLineItem*>(item)->setPen(pen);
201 }
201 }
202 }
202 }
203
203
204 QVector<qreal> AxisItem::calculateLayout() const
204 QVector<qreal> AxisItem::calculateLayout() const
205 {
205 {
206 Q_ASSERT(m_ticksCount>=2);
206 Q_ASSERT(m_ticksCount>=2);
207
207
208 QVector<qreal> points;
208 QVector<qreal> points;
209 points.resize(m_ticksCount);
209 points.resize(m_ticksCount);
210
210
211 switch (m_type)
211 switch (m_type)
212 {
212 {
213 case X_AXIS:
213 case X_AXIS:
214 {
214 {
215 const qreal deltaX = m_rect.width()/(m_ticksCount-1);
215 const qreal deltaX = m_rect.width()/(m_ticksCount-1);
216 for (int i = 0; i < m_ticksCount; ++i) {
216 for (int i = 0; i < m_ticksCount; ++i) {
217 int x = i * deltaX + m_rect.left();
217 int x = i * deltaX + m_rect.left();
218 points[i] = x;
218 points[i] = x;
219 }
219 }
220 }
220 }
221 break;
221 break;
222 case Y_AXIS:
222 case Y_AXIS:
223 {
223 {
224 const qreal deltaY = m_rect.height()/(m_ticksCount-1);
224 const qreal deltaY = m_rect.height()/(m_ticksCount-1);
225 for (int i = 0; i < m_ticksCount; ++i) {
225 for (int i = 0; i < m_ticksCount; ++i) {
226 int y = i * -deltaY + m_rect.bottom();
226 int y = i * -deltaY + m_rect.bottom();
227 points[i] = y;
227 points[i] = y;
228 }
228 }
229 }
229 }
230 break;
230 break;
231 }
231 }
232 return points;
232 return points;
233 }
233 }
234
234
235 void AxisItem::setLayout(QVector<qreal>& layout)
235 void AxisItem::setLayout(QVector<qreal>& layout)
236 {
236 {
237 int diff = m_layoutVector.size() - layout.size();
237 int diff = m_layoutVector.size() - layout.size();
238
238
239 if(diff>0) {
239 if(diff>0) {
240 deleteItems(diff);
240 deleteItems(diff);
241 }
241 }
242 else if(diff<0) {
242 else if(diff<0) {
243 createItems(-diff);
243 createItems(-diff);
244 }
244 }
245
245
246 if(diff!=0) handleAxisUpdated();
246 if(diff!=0) handleAxisUpdated();
247
247
248 QStringList ticksList = createLabels(layout.size(),m_min,m_max);
248 QStringList ticksList = createLabels(layout.size(),m_min,m_max);
249
249
250 QList<QGraphicsItem *> lines = m_grid.childItems();
250 QList<QGraphicsItem *> lines = m_grid.childItems();
251 QList<QGraphicsItem *> labels = m_labels.childItems();
251 QList<QGraphicsItem *> labels = m_labels.childItems();
252 QList<QGraphicsItem *> shades = m_shades.childItems();
252 QList<QGraphicsItem *> shades = m_shades.childItems();
253 QList<QGraphicsItem *> axis = m_axis.childItems();
253 QList<QGraphicsItem *> axis = m_axis.childItems();
254
254
255 Q_ASSERT(labels.size() == ticksList.size());
255 Q_ASSERT(labels.size() == ticksList.size());
256 Q_ASSERT(layout.size() == ticksList.size());
256 Q_ASSERT(layout.size() == ticksList.size());
257 Q_ASSERT(layout.size() == m_ticksCount);
258
257
259 switch (m_type)
258 switch (m_type)
260 {
259 {
261 case X_AXIS:
260 case X_AXIS:
262 {
261 {
263 QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(axis.at(0));
262 QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(axis.at(0));
264 lineItem->setLine(m_rect.left(), m_rect.bottom(), m_rect.right(), m_rect.bottom());
263 lineItem->setLine(m_rect.left(), m_rect.bottom(), m_rect.right(), m_rect.bottom());
265
264
266 for (int i = 0; i < layout.size(); ++i) {
265 for (int i = 0; i < layout.size(); ++i) {
267 QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(lines.at(i));
266 QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(lines.at(i));
268 lineItem->setLine(layout[i], m_rect.top(), layout[i], m_rect.bottom());
267 lineItem->setLine(layout[i], m_rect.top(), layout[i], m_rect.bottom());
269 QGraphicsSimpleTextItem *labelItem = static_cast<QGraphicsSimpleTextItem*>(labels.at(i));
268 QGraphicsSimpleTextItem *labelItem = static_cast<QGraphicsSimpleTextItem*>(labels.at(i));
270 labelItem->setText(ticksList.at(i));
269 labelItem->setText(ticksList.at(i));
271 QPointF center = labelItem->boundingRect().center();
270 QPointF center = labelItem->boundingRect().center();
272 labelItem->setTransformOriginPoint(center.x(), center.y());
271 labelItem->setTransformOriginPoint(center.x(), center.y());
273 labelItem->setPos(layout[i] - center.x(), m_rect.bottom() + label_padding);
272 labelItem->setPos(layout[i] - center.x(), m_rect.bottom() + label_padding);
274 if(i%2 && i+1 < layout.size() && i>1) {
273 if((i+1)%2 && i>1) {
275 QGraphicsRectItem *rectItem = static_cast<QGraphicsRectItem*>(shades.at(i/2));
274 QGraphicsRectItem *rectItem = static_cast<QGraphicsRectItem*>(shades.at(i/2-1));
276 rectItem->setRect(layout[i],m_rect.top(),layout[i+1]-layout[i],m_rect.height());
275 rectItem->setRect(layout[i-1],m_rect.top(),layout[i]-layout[i-1],m_rect.height());
277 }
276 }
278 lineItem = static_cast<QGraphicsLineItem*>(axis.at(i+1));
277 lineItem = static_cast<QGraphicsLineItem*>(axis.at(i+1));
279 lineItem->setLine(layout[i],m_rect.bottom(),layout[i],m_rect.bottom()+5);
278 lineItem->setLine(layout[i],m_rect.bottom(),layout[i],m_rect.bottom()+5);
280 }
279 }
281 }
280 }
282 break;
281 break;
283
282
284 case Y_AXIS:
283 case Y_AXIS:
285 {
284 {
286 QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(axis.at(0));
285 QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(axis.at(0));
287 lineItem->setLine(m_rect.left() , m_rect.top(), m_rect.left(), m_rect.bottom());
286 lineItem->setLine(m_rect.left() , m_rect.top(), m_rect.left(), m_rect.bottom());
288
287
289 for (int i = 0; i < layout.size(); ++i) {
288 for (int i = 0; i < layout.size(); ++i) {
290 QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(lines.at(i));
289 QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(lines.at(i));
291 lineItem->setLine(m_rect.left() , layout[i], m_rect.right(), layout[i]);
290 lineItem->setLine(m_rect.left() , layout[i], m_rect.right(), layout[i]);
292 QGraphicsSimpleTextItem *labelItem = static_cast<QGraphicsSimpleTextItem*>(labels.at(i));
291 QGraphicsSimpleTextItem *labelItem = static_cast<QGraphicsSimpleTextItem*>(labels.at(i));
293 labelItem->setText(ticksList.at(i));
292 labelItem->setText(ticksList.at(i));
294 QPointF center = labelItem->boundingRect().center();
293 QPointF center = labelItem->boundingRect().center();
295 labelItem->setTransformOriginPoint(center.x(), center.y());
294 labelItem->setTransformOriginPoint(center.x(), center.y());
296 labelItem->setPos(m_rect.left() - labelItem->boundingRect().width() - label_padding , layout[i]-center.y());
295 labelItem->setPos(m_rect.left() - labelItem->boundingRect().width() - label_padding , layout[i]-center.y());
297 if(i%2 && i+1 < layout.size() && i>1) {
296 if((i+1)%2 && i>1) {
298 QGraphicsRectItem *rectItem = static_cast<QGraphicsRectItem*>(shades.at(i/2));
297 QGraphicsRectItem *rectItem = static_cast<QGraphicsRectItem*>(shades.at(i/2-1));
299 rectItem->setRect(m_rect.left(),layout[i],m_rect.width(),layout[i]-layout[i+1]);
298 rectItem->setRect(m_rect.left(),layout[i-1],m_rect.width(),layout[i-1]-layout[i]);
300 }
299 }
301 lineItem = static_cast<QGraphicsLineItem*>(axis.at(i+1));
300 lineItem = static_cast<QGraphicsLineItem*>(axis.at(i+1));
302 lineItem->setLine(m_rect.left()-5,layout[i],m_rect.left(),layout[i]);
301 lineItem->setLine(m_rect.left()-5,layout[i],m_rect.left(),layout[i]);
303 }
302 }
304 }
303 }
305 break;
304 break;
306 default:
305 default:
307 qDebug()<<"Unknown axis type";
306 qDebug()<<"Unknown axis type";
308 break;
307 break;
309 }
308 }
310
309
311 m_layoutVector=layout;
310 m_layoutVector=layout;
312 }
311 }
313
312
314 bool AxisItem::isEmpty()
313 bool AxisItem::isEmpty()
315 {
314 {
316 return m_rect.isEmpty() || m_min==m_max || m_ticksCount==0;
315 return m_rect.isEmpty() || m_min==m_max || m_ticksCount==0;
317 }
316 }
318
317
319 //handlers
318 //handlers
320
319
321 void AxisItem::handleAxisCategoriesUpdated()
320 void AxisItem::handleAxisCategoriesUpdated()
322 {
321 {
323 if(isEmpty()) return;
322 if(isEmpty()) return;
324 updateLayout(m_layoutVector);
323 updateLayout(m_layoutVector);
325 }
324 }
326
325
327 void AxisItem::handleAxisUpdated()
326 void AxisItem::handleAxisUpdated()
328 {
327 {
329
328
330 if(isEmpty()) return;
329 if(isEmpty()) return;
331
330
332 if(m_chartAxis->isAxisVisible()) {
331 if(m_chartAxis->isAxisVisible()) {
333 setAxisOpacity(100);
332 setAxisOpacity(100);
334 }
333 }
335 else {
334 else {
336 setAxisOpacity(0);
335 setAxisOpacity(0);
337 }
336 }
338
337
339 if(m_chartAxis->isGridLineVisible()) {
338 if(m_chartAxis->isGridLineVisible()) {
340 setGridOpacity(100);
339 setGridOpacity(100);
341 }
340 }
342 else {
341 else {
343 setGridOpacity(0);
342 setGridOpacity(0);
344 }
343 }
345
344
346 if(m_chartAxis->labelsVisible())
345 if(m_chartAxis->labelsVisible())
347 {
346 {
348 setLabelsOpacity(100);
347 setLabelsOpacity(100);
349 }
348 }
350 else {
349 else {
351 setLabelsOpacity(0);
350 setLabelsOpacity(0);
352 }
351 }
353
352
354 if(m_chartAxis->shadesVisible()) {
353 if(m_chartAxis->shadesVisible()) {
355 setShadesOpacity(m_chartAxis->shadesOpacity());
354 setShadesOpacity(m_chartAxis->shadesOpacity());
356 }
355 }
357 else {
356 else {
358 setShadesOpacity(0);
357 setShadesOpacity(0);
359 }
358 }
360
359
361 setLabelsAngle(m_chartAxis->labelsAngle());
360 setLabelsAngle(m_chartAxis->labelsAngle());
362 setAxisPen(m_chartAxis->axisPen());
361 setAxisPen(m_chartAxis->axisPen());
363 setLabelsPen(m_chartAxis->labelsPen());
362 setLabelsPen(m_chartAxis->labelsPen());
364 setLabelsBrush(m_chartAxis->labelsBrush());
363 setLabelsBrush(m_chartAxis->labelsBrush());
365 setLabelsFont(m_chartAxis->labelsFont());
364 setLabelsFont(m_chartAxis->labelsFont());
366 setGridPen(m_chartAxis->gridLinePen());
365 setGridPen(m_chartAxis->gridLinePen());
367 setShadesPen(m_chartAxis->shadesPen());
366 setShadesPen(m_chartAxis->shadesPen());
368 setShadesBrush(m_chartAxis->shadesBrush());
367 setShadesBrush(m_chartAxis->shadesBrush());
369
368
370 }
369 }
371
370
372 void AxisItem::handleRangeChanged(qreal min, qreal max,int tickCount)
371 void AxisItem::handleRangeChanged(qreal min, qreal max,int tickCount)
373 {
372 {
374 m_min = min;
373 m_min = min;
375 m_max = max;
374 m_max = max;
376 m_ticksCount = tickCount;
375 m_ticksCount = tickCount;
377
376
378 /*= qrand()%10;
377 /*= qrand()%10;
379
378
380 while(m_ticksCount<2){
379 while(m_ticksCount<2){
381 m_ticksCount = qrand()%10;
380 m_ticksCount = qrand()%10;
382 }
381 }
383
382
384 qDebug()<<"Warning : This is testing . Simulating new random ticks "<< m_ticksCount;
383 qDebug()<<"Warning : This is testing . Simulating new random ticks "<< m_ticksCount;
385 //m_chartAxis->setTicksCount(m_ticksCount);
384 //m_chartAxis->setTicksCount(m_ticksCount);
386 */
385 */
387
386
388 if(isEmpty()) return;
387 if(isEmpty()) return;
389 QVector<qreal> layout = calculateLayout();
388 QVector<qreal> layout = calculateLayout();
390 updateLayout(layout);
389 updateLayout(layout);
391
390
392 }
391 }
393
392
394 void AxisItem::handleGeometryChanged(const QRectF& rect)
393 void AxisItem::handleGeometryChanged(const QRectF& rect)
395 {
394 {
396 m_rect = rect;
395 m_rect = rect;
397 if(isEmpty()) return;
396 if(isEmpty()) return;
398 QVector<qreal> layout = calculateLayout();
397 QVector<qreal> layout = calculateLayout();
399 updateLayout(layout);
398 updateLayout(layout);
400 }
399 }
401
400
402 //painter
401 //painter
403
402
404 void AxisItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
403 void AxisItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
405 {
404 {
406 Q_UNUSED(painter);
405 Q_UNUSED(painter);
407 Q_UNUSED(option);
406 Q_UNUSED(option);
408 Q_UNUSED(widget);
407 Q_UNUSED(widget);
409 }
408 }
410
409
411 //TODO "nice numbers algorithm"
410 //TODO "nice numbers algorithm"
412 #include "moc_axisitem_p.cpp"
411 #include "moc_axisitem_p.cpp"
413
412
414 QTCOMMERCIALCHART_END_NAMESPACE
413 QTCOMMERCIALCHART_END_NAMESPACE
@@ -1,391 +1,391
1 #include "qchartaxis.h"
1 #include "qchartaxis.h"
2
2
3 QTCOMMERCIALCHART_BEGIN_NAMESPACE
3 QTCOMMERCIALCHART_BEGIN_NAMESPACE
4
4
5 /*!
5 /*!
6 \class QChartAxis
6 \class QChartAxis
7 \brief The QChartAxis class is used for manipulating chart's axis
7 \brief The QChartAxis class is used for manipulating chart's axis
8 and for adding optional axes to the chart.
8 and for adding optional axes to the chart.
9 \mainclass
9 \mainclass
10
10
11 There is only one x Axis, however there can be multiple y axes.
11 There is only one x Axis, however there can be multiple y axes.
12 Each chart series can be bound to exactly one Y axis and the share common X axis.
12 Each chart series can be bound to exactly one Y axis and the share common X axis.
13 Axis can be setup to show axis line with ticks, gird lines and shades.
13 Axis can be setup to show axis line with ticks, gird lines and shades.
14
14
15 */
15 */
16
16
17 /*!
17 /*!
18 \fn bool QChartAxis::isAxisVisible() const
18 \fn bool QChartAxis::isAxisVisible() const
19 \brief Returns if axis is visible
19 \brief Returns if axis is visible
20 \sa setAxisVisible()
20 \sa setAxisVisible()
21 */
21 */
22
22
23 /*!
23 /*!
24 \fn QPen QChartAxis::axisPen() const
24 \fn QPen QChartAxis::axisPen() const
25 \brief Returns pen used to draw axis and ticks.
25 \brief Returns pen used to draw axis and ticks.
26 \sa setAxisPen()
26 \sa setAxisPen()
27 */
27 */
28
28
29
29
30 /*!
30 /*!
31 \fn bool QChartAxis::isGridLineVisible() const
31 \fn bool QChartAxis::isGridLineVisible() const
32 \brief Returns if grid is visible
32 \brief Returns if grid is visible
33 \sa setGridLineVisible()
33 \sa setGridLineVisible()
34 */
34 */
35
35
36 /*!
36 /*!
37 \fn QPen QChartAxis::gridPen() const
37 \fn QPen QChartAxis::gridLinePen() const
38 \brief Returns pen used to draw grid.
38 \brief Returns pen used to draw grid.
39 \sa setGridPen()
39 \sa setGridLinePen()
40 */
40 */
41
41
42 /*!
42 /*!
43 \fn bool QChartAxis::labelsVisible() const
43 \fn bool QChartAxis::labelsVisible() const
44 \brief Returns if grid is visible
44 \brief Returns if grid is visible
45 \sa setLabelsVisible()
45 \sa setLabelsVisible()
46 */
46 */
47
47
48 /*!
48 /*!
49 \fn QPen QChartAxis::labelsPen() const
49 \fn QPen QChartAxis::labelsPen() const
50 \brief Returns the pen used to labels.
50 \brief Returns the pen used to labels.
51 \sa setLabelsPen()
51 \sa setLabelsPen()
52 */
52 */
53
53
54 /*!
54 /*!
55 \fn QBrush QChartAxis::labelsBrush() const
55 \fn QBrush QChartAxis::labelsBrush() const
56 \brief Returns brush used to draw labels.
56 \brief Returns brush used to draw labels.
57 \sa setLabelsBrush()
57 \sa setLabelsBrush()
58 */
58 */
59
59
60 /*!
60 /*!
61 \fn QFont QChartAxis::labelsFont() const
61 \fn QFont QChartAxis::labelsFont() const
62 \brief Returns font used to draw labels.
62 \brief Returns font used to draw labels.
63 \sa setLabelsFont()
63 \sa setLabelsFont()
64 */
64 */
65
65
66 /*!
66 /*!
67 \fn QFont QChartAxis::labelsAngle() const
67 \fn QFont QChartAxis::labelsAngle() const
68 \brief Returns angle used to draw labels.
68 \brief Returns angle used to draw labels.
69 \sa setLabelsAngle()
69 \sa setLabelsAngle()
70 */
70 */
71
71
72 /*!
72 /*!
73 \fn bool QChartAxis::shadesVisible() const
73 \fn bool QChartAxis::shadesVisible() const
74 \brief Returns if shades are visible.
74 \brief Returns if shades are visible.
75 \sa setShadesVisible()
75 \sa setShadesVisible()
76 */
76 */
77
77
78 /*!
78 /*!
79 \fn qreal QChartAxis::shadesOpacity() const
79 \fn qreal QChartAxis::shadesOpacity() const
80 \brief Returns opacity of shades.
80 \brief Returns opacity of shades.
81 */
81 */
82
82
83 /*!
83 /*!
84 \fn QPen QChartAxis::shadesPen() const
84 \fn QPen QChartAxis::shadesPen() const
85 \brief Returns pen used to draw shades.
85 \brief Returns pen used to draw shades.
86 \sa setShadesPen()
86 \sa setShadesPen()
87 */
87 */
88
88
89 /*!
89 /*!
90 \fn QBrush QChartAxis::shadesBrush() const
90 \fn QBrush QChartAxis::shadesBrush() const
91 \brief Returns brush used to draw shades.
91 \brief Returns brush used to draw shades.
92 \sa setShadesBrush()
92 \sa setShadesBrush()
93 */
93 */
94
94
95 /*!
95 /*!
96 \fn qreal QChartAxis::min() const
96 \fn qreal QChartAxis::min() const
97 \brief Returns minimum value on the axis.
97 \brief Returns minimum value on the axis.
98 \sa setMin()
98 \sa setMin()
99 */
99 */
100
100
101 /*!
101 /*!
102 \fn qreal QChartAxis::max() const
102 \fn qreal QChartAxis::max() const
103 \brief Returns maximim value on the axis.
103 \brief Returns maximim value on the axis.
104 \sa setMax()
104 \sa setMax()
105 */
105 */
106
106
107 /*!
107 /*!
108 \fn void QChartAxis::minChanged(qreal min)
108 \fn void QChartAxis::minChanged(qreal min)
109 \brief Axis emits signal when \a min of axis has changed.
109 \brief Axis emits signal when \a min of axis has changed.
110 */
110 */
111
111
112 /*!
112 /*!
113 \fn void QChartAxis::maxChanged(qreal max)
113 \fn void QChartAxis::maxChanged(qreal max)
114 \brief Axis emits signal when \a max of axis has changed.
114 \brief Axis emits signal when \a max of axis has changed.
115 */
115 */
116
116
117 /*!
117 /*!
118 \fn void QChartAxis::rangeChanged(qreal min, qreal max)
118 \fn void QChartAxis::rangeChanged(qreal min, qreal max)
119 \brief Axis emits signal when \a min or \a max of axis has changed.
119 \brief Axis emits signal when \a min or \a max of axis has changed.
120 */
120 */
121
121
122 /*!
122 /*!
123 \fn int QChartAxis::ticksCount() const
123 \fn int QChartAxis::ticksCount() const
124 \brief Return number of ticks on the axis
124 \brief Return number of ticks on the axis
125 \sa setTicksCount()
125 \sa setTicksCount()
126 */
126 */
127
127
128 /*!
128 /*!
129 \fn void QChartAxis::updated()
129 \fn void QChartAxis::updated()
130 \brief \internal
130 \brief \internal
131 */
131 */
132
132
133 /*!
133 /*!
134 \fn void QChartAxis::handleAxisRangeChanged(qreal min, qreal max)
134 \fn void QChartAxis::handleAxisRangeChanged(qreal min, qreal max)
135 \brief \internal \a min \a max
135 \brief \internal \a min \a max
136 */
136 */
137
137
138 /*!
138 /*!
139 Constructs new axis object which is a child of \a parent. Ownership is taken by
139 Constructs new axis object which is a child of \a parent. Ownership is taken by
140 QChatView or QChart when axis added.
140 QChatView or QChart when axis added.
141 */
141 */
142
142
143 QChartAxis::QChartAxis(QObject* parent):QObject(parent),
143 QChartAxis::QChartAxis(QObject* parent):QObject(parent),
144 m_axisVisible(true),
144 m_axisVisible(true),
145 m_gridLineVisible(true),
145 m_gridLineVisible(true),
146 m_labelsVisible(true),
146 m_labelsVisible(true),
147 m_labelsAngle(0),
147 m_labelsAngle(0),
148 m_shadesVisible(true),
148 m_shadesVisible(true),
149 m_shadesOpacity(1.0),
149 m_shadesOpacity(1.0),
150 m_min(0),
150 m_min(0),
151 m_max(0),
151 m_max(0),
152 m_ticksCount(5)
152 m_ticksCount(5)
153 {
153 {
154
154
155 }
155 }
156
156
157 /*!
157 /*!
158 Destructor of the axis object. When axis is added to chart, chart object takes ownership.
158 Destructor of the axis object. When axis is added to chart, chart object takes ownership.
159 */
159 */
160
160
161 QChartAxis::~QChartAxis()
161 QChartAxis::~QChartAxis()
162 {
162 {
163 }
163 }
164
164
165 /*!
165 /*!
166 Sets \a pen used to draw axis line and ticks.
166 Sets \a pen used to draw axis line and ticks.
167 */
167 */
168 void QChartAxis::setAxisPen(const QPen& pen)
168 void QChartAxis::setAxisPen(const QPen& pen)
169 {
169 {
170 if (pen != m_axisPen) {
170 if (pen != m_axisPen) {
171 m_axisPen=pen;
171 m_axisPen=pen;
172 emit updated();
172 emit updated();
173 }
173 }
174 }
174 }
175
175
176 /*!
176 /*!
177 Sets if axis and ticks are \a visible.
177 Sets if axis and ticks are \a visible.
178 */
178 */
179 void QChartAxis::setAxisVisible(bool visible)
179 void QChartAxis::setAxisVisible(bool visible)
180 {
180 {
181 if (m_axisVisible!=visible) {
181 if (m_axisVisible!=visible) {
182 m_axisVisible=visible;
182 m_axisVisible=visible;
183 emit updated();
183 emit updated();
184 }
184 }
185 }
185 }
186
186
187 /*!
187 /*!
188 Sets if grid line is \a visible.
188 Sets if grid line is \a visible.
189 */
189 */
190 void QChartAxis::setGridLineVisible(bool visible)
190 void QChartAxis::setGridLineVisible(bool visible)
191 {
191 {
192 if (m_gridLineVisible!=visible) {
192 if (m_gridLineVisible!=visible) {
193 m_gridLineVisible=visible;
193 m_gridLineVisible=visible;
194 emit updated();
194 emit updated();
195 }
195 }
196 }
196 }
197
197
198 /*!
198 /*!
199 Sets \a pen used to draw grid line.
199 Sets \a pen used to draw grid line.
200 */
200 */
201 void QChartAxis::setGridLinePen(const QPen& pen)
201 void QChartAxis::setGridLinePen(const QPen& pen)
202 {
202 {
203 if (m_gridLinePen!=pen) {
203 if (m_gridLinePen!=pen) {
204 m_gridLinePen=pen;
204 m_gridLinePen=pen;
205 emit updated();
205 emit updated();
206 }
206 }
207 }
207 }
208
208
209 /*!
209 /*!
210 Sets if axis' labels are \a visible.
210 Sets if axis' labels are \a visible.
211 */
211 */
212 void QChartAxis::setLabelsVisible(bool visible)
212 void QChartAxis::setLabelsVisible(bool visible)
213 {
213 {
214 if(m_labelsVisible!=visible) {
214 if(m_labelsVisible!=visible) {
215 m_labelsVisible=visible;
215 m_labelsVisible=visible;
216 emit updated();
216 emit updated();
217 }
217 }
218 }
218 }
219
219
220 /*!
220 /*!
221 Sets \a pen used to draw labels.
221 Sets \a pen used to draw labels.
222 */
222 */
223 void QChartAxis::setLabelsPen(const QPen& pen)
223 void QChartAxis::setLabelsPen(const QPen& pen)
224 {
224 {
225 if(m_labelsPen!=pen) {
225 if(m_labelsPen!=pen) {
226 m_labelsPen=pen;
226 m_labelsPen=pen;
227 emit updated();
227 emit updated();
228 }
228 }
229 }
229 }
230
230
231 /*!
231 /*!
232 Sets \a brush used to draw labels.
232 Sets \a brush used to draw labels.
233 */
233 */
234 void QChartAxis::setLabelsBrush(const QBrush& brush)
234 void QChartAxis::setLabelsBrush(const QBrush& brush)
235 {
235 {
236 if(m_labelsBrush!=brush) {
236 if(m_labelsBrush!=brush) {
237 m_labelsBrush=brush;
237 m_labelsBrush=brush;
238 emit updated();
238 emit updated();
239 }
239 }
240 }
240 }
241
241
242 /*!
242 /*!
243 Sets \a font used to draw labels.
243 Sets \a font used to draw labels.
244 */
244 */
245 void QChartAxis::setLabelsFont(const QFont& font)
245 void QChartAxis::setLabelsFont(const QFont& font)
246 {
246 {
247 if(m_labelsFont!=font) {
247 if(m_labelsFont!=font) {
248 m_labelsFont=font;
248 m_labelsFont=font;
249 emit updated();
249 emit updated();
250 }
250 }
251 }
251 }
252
252
253 /*!
253 /*!
254 Sets \a angle for all the labels on given axis.
254 Sets \a angle for all the labels on given axis.
255 */
255 */
256 void QChartAxis::setLabelsAngle(int angle)
256 void QChartAxis::setLabelsAngle(int angle)
257 {
257 {
258 if(m_labelsAngle!=angle) {
258 if(m_labelsAngle!=angle) {
259 m_labelsAngle=angle;
259 m_labelsAngle=angle;
260 emit updated();
260 emit updated();
261 }
261 }
262 }
262 }
263
263
264 /*!
264 /*!
265 Sets if shades are \a visible.
265 Sets if shades are \a visible.
266 */
266 */
267 void QChartAxis::setShadesVisible(bool visible)
267 void QChartAxis::setShadesVisible(bool visible)
268 {
268 {
269 if(m_shadesVisible!=visible) {
269 if(m_shadesVisible!=visible) {
270 m_shadesVisible=visible;
270 m_shadesVisible=visible;
271 emit updated();
271 emit updated();
272 }
272 }
273 }
273 }
274
274
275 /*!
275 /*!
276 Sets \a pen used to draw shades.
276 Sets \a pen used to draw shades.
277 */
277 */
278 void QChartAxis::setShadesPen(const QPen& pen)
278 void QChartAxis::setShadesPen(const QPen& pen)
279 {
279 {
280 if(m_shadesPen!=pen) {
280 if(m_shadesPen!=pen) {
281 m_shadesPen=pen;
281 m_shadesPen=pen;
282 emit updated();
282 emit updated();
283 }
283 }
284 }
284 }
285
285
286 /*!
286 /*!
287 Sets \a brush used to draw shades.
287 Sets \a brush used to draw shades.
288 */
288 */
289 void QChartAxis::setShadesBrush(const QBrush& brush)
289 void QChartAxis::setShadesBrush(const QBrush& brush)
290 {
290 {
291 if(m_shadesBrush!=brush) {
291 if(m_shadesBrush!=brush) {
292 m_shadesBrush=brush;
292 m_shadesBrush=brush;
293 emit updated();
293 emit updated();
294 }
294 }
295 }
295 }
296
296
297 /*!
297 /*!
298 Sets \a opacity of the shades.
298 Sets \a opacity of the shades.
299 */
299 */
300 void QChartAxis::setShadesOpacity(qreal opacity)
300 void QChartAxis::setShadesOpacity(qreal opacity)
301 {
301 {
302 if(m_shadesOpacity!=opacity) {
302 if(m_shadesOpacity!=opacity) {
303 m_shadesOpacity=opacity;
303 m_shadesOpacity=opacity;
304 emit updated();
304 emit updated();
305 }
305 }
306 }
306 }
307
307
308 /*!
308 /*!
309 Sets \a min value on the axis.
309 Sets \a min value on the axis.
310 */
310 */
311 void QChartAxis::setMin(qreal min)
311 void QChartAxis::setMin(qreal min)
312 {
312 {
313 setRange(min,m_max);
313 setRange(min,m_max);
314 }
314 }
315
315
316 /*!
316 /*!
317 Sets \a max value on the axis.
317 Sets \a max value on the axis.
318 */
318 */
319 void QChartAxis::setMax(qreal max)
319 void QChartAxis::setMax(qreal max)
320 {
320 {
321 setRange(m_min,max);
321 setRange(m_min,max);
322 }
322 }
323
323
324 /*!
324 /*!
325 Sets range from \a min to \a max on the axis.
325 Sets range from \a min to \a max on the axis.
326 */
326 */
327 void QChartAxis::setRange(qreal min, qreal max)
327 void QChartAxis::setRange(qreal min, qreal max)
328 {
328 {
329
329
330
330
331 bool changed = false;
331 bool changed = false;
332 if(m_min!=min) {
332 if(m_min!=min) {
333 m_min=min;
333 m_min=min;
334 changed=true;
334 changed=true;
335 emit minChanged(min);
335 emit minChanged(min);
336 }
336 }
337
337
338 if(m_max!=max) {
338 if(m_max!=max) {
339 m_max=max;
339 m_max=max;
340 changed=true;
340 changed=true;
341 emit maxChanged(max);
341 emit maxChanged(max);
342 }
342 }
343
343
344 if(changed) {
344 if(changed) {
345 emit rangeChanged(m_min,m_max,m_ticksCount);
345 emit rangeChanged(m_min,m_max,m_ticksCount);
346 }
346 }
347 }
347 }
348
348
349 void QChartAxis::handleAxisRangeChanged(qreal min, qreal max)
349 void QChartAxis::handleAxisRangeChanged(qreal min, qreal max)
350 {
350 {
351 setRange(min,max);
351 setRange(min,max);
352 }
352 }
353
353
354 /*!
354 /*!
355 Sets \a count for ticks on the axis.
355 Sets \a count for ticks on the axis.
356 */
356 */
357 void QChartAxis::setTicksCount(int count)
357 void QChartAxis::setTicksCount(int count)
358 {
358 {
359 if(m_ticksCount!=count) {
359 if(m_ticksCount!=count) {
360 m_ticksCount=count;
360 m_ticksCount=count;
361 emit rangeChanged(m_min,m_max,m_ticksCount);
361 emit rangeChanged(m_min,m_max,m_ticksCount);
362 }
362 }
363 }
363 }
364
364
365 /*!
365 /*!
366 Sets axis, shades, labels and grid lines to be visible.
366 Sets axis, shades, labels and grid lines to be visible.
367 */
367 */
368 void QChartAxis::show()
368 void QChartAxis::show()
369 {
369 {
370 m_axisVisible=true;
370 m_axisVisible=true;
371 m_gridLineVisible=true;
371 m_gridLineVisible=true;
372 m_labelsVisible=true;
372 m_labelsVisible=true;
373 m_shadesVisible=true;
373 m_shadesVisible=true;
374 emit updated();
374 emit updated();
375 }
375 }
376
376
377 /*!
377 /*!
378 Sets axis, shades, labels and grid lines to not be visible.
378 Sets axis, shades, labels and grid lines to not be visible.
379 */
379 */
380 void QChartAxis::hide()
380 void QChartAxis::hide()
381 {
381 {
382 m_axisVisible=false;
382 m_axisVisible=false;
383 m_gridLineVisible=false;
383 m_gridLineVisible=false;
384 m_labelsVisible=false;
384 m_labelsVisible=false;
385 m_shadesVisible=false;
385 m_shadesVisible=false;
386 emit updated();
386 emit updated();
387 }
387 }
388
388
389 #include "moc_qchartaxis.cpp"
389 #include "moc_qchartaxis.cpp"
390
390
391 QTCOMMERCIALCHART_END_NAMESPACE
391 QTCOMMERCIALCHART_END_NAMESPACE
General Comments 0
You need to be logged in to leave comments. Login now