##// END OF EJS Templates
Bugfix no geometry call when axis removed and added again
Michal Klocek -
r259:dfda127abd04
parent child
Show More
@@ -1,298 +1,299
1 #include "axisitem_p.h"
1 #include "axisitem_p.h"
2 #include "qchartaxis.h"
2 #include "qchartaxis.h"
3 #include <QPainter>
3 #include <QPainter>
4 #include <QDebug>
4 #include <QDebug>
5
5
6 static int label_padding = 5;
6 static int label_padding = 5;
7
7
8 QTCOMMERCIALCHART_BEGIN_NAMESPACE
8 QTCOMMERCIALCHART_BEGIN_NAMESPACE
9
9
10 AxisItem::AxisItem(AxisType type,QGraphicsItem* parent) :
10 AxisItem::AxisItem(AxisType type,QGraphicsItem* parent) :
11 ChartItem(parent),
11 ChartItem(parent),
12 m_type(type),
12 m_type(type),
13 m_labelsAngle(0),
13 m_labelsAngle(0),
14 m_shadesEnabled(true),
14 m_shadesEnabled(true),
15 m_grid(parent),
15 m_grid(parent),
16 m_shades(parent),
16 m_shades(parent),
17 m_labels(parent)
17 m_labels(parent)
18 {
18 {
19 //initial initialization
19 //initial initialization
20 m_shades.setZValue(0);
20 m_shades.setZValue(0);
21 m_grid.setZValue(2);
21 m_grid.setZValue(2);
22 }
22 }
23
23
24 AxisItem::~AxisItem()
24 AxisItem::~AxisItem()
25 {
25 {
26 }
26 }
27
27
28 QRectF AxisItem::boundingRect() const
28 QRectF AxisItem::boundingRect() const
29 {
29 {
30 return m_rect;
30 return m_rect;
31 }
31 }
32
32
33 void AxisItem::createItems(int count)
33 void AxisItem::createItems(int count)
34 {
34 {
35 for (int i = 0; i < count; ++i) {
35 for (int i = 0; i < count; ++i) {
36 m_grid.addToGroup(new QGraphicsLineItem(this));
36 m_grid.addToGroup(new QGraphicsLineItem(this));
37 m_labels.addToGroup(new QGraphicsSimpleTextItem(this));
37 m_labels.addToGroup(new QGraphicsSimpleTextItem(this));
38 if(i%2) m_shades.addToGroup(new QGraphicsRectItem(this));
38 if(i%2) m_shades.addToGroup(new QGraphicsRectItem(this));
39 }
39 }
40 }
40 }
41
41
42 void AxisItem::clear()
42 void AxisItem::clear()
43 {
43 {
44 foreach(QGraphicsItem* item , m_shades.childItems()) {
44 foreach(QGraphicsItem* item , m_shades.childItems()) {
45 delete item;
45 delete item;
46 }
46 }
47
47
48 foreach(QGraphicsItem* item , m_grid.childItems()) {
48 foreach(QGraphicsItem* item , m_grid.childItems()) {
49 delete item;
49 delete item;
50 }
50 }
51
51
52 foreach(QGraphicsItem* item , m_labels.childItems()) {
52 foreach(QGraphicsItem* item , m_labels.childItems()) {
53 delete item;
53 delete item;
54 }
54 }
55
55
56 m_thicksList.clear();
56 m_thicksList.clear();
57
57
58 }
58 }
59
59
60 void AxisItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
60 void AxisItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
61 {
61 {
62
62
63 }
63 }
64
64
65 void AxisItem::updateItem(int count)
65 void AxisItem::updateItem(int count)
66 {
66 {
67
67
68 QList<QGraphicsItem *> lines = m_grid.childItems();
68 QList<QGraphicsItem *> lines = m_grid.childItems();
69 QList<QGraphicsItem *> labels = m_labels.childItems();
69 QList<QGraphicsItem *> labels = m_labels.childItems();
70 QList<QGraphicsItem *> shades = m_shades.childItems();
70 QList<QGraphicsItem *> shades = m_shades.childItems();
71
71
72 switch (m_type)
72 switch (m_type)
73 {
73 {
74 case X_AXIS:
74 case X_AXIS:
75 {
75 {
76 const qreal deltaX = m_rect.width() / (count-1);
76 const qreal deltaX = m_rect.width() / (count-1);
77
77
78 m_axis.setLine(m_rect.left(), m_rect.bottom(), m_rect.right(), m_rect.bottom());
78 m_axis.setLine(m_rect.left(), m_rect.bottom(), m_rect.right(), m_rect.bottom());
79
79
80 for (int i = 0; i < count; ++i) {
80 for (int i = 0; i < count; ++i) {
81 int x = i * deltaX + m_rect.left();
81 int x = i * deltaX + m_rect.left();
82 QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(lines.at(i));
82 QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(lines.at(i));
83 lineItem->setLine(x, m_rect.top(), x, m_rect.bottom());
83 lineItem->setLine(x, m_rect.top(), x, m_rect.bottom());
84 QGraphicsSimpleTextItem *labelItem = static_cast<QGraphicsSimpleTextItem*>(labels.at(i));
84 QGraphicsSimpleTextItem *labelItem = static_cast<QGraphicsSimpleTextItem*>(labels.at(i));
85 labelItem->setText(m_thicksList.at(i));
85 labelItem->setText(m_thicksList.at(i));
86 QPointF center = labelItem->boundingRect().center();
86 QPointF center = labelItem->boundingRect().center();
87 labelItem->setTransformOriginPoint(center.x(), center.y());
87 labelItem->setTransformOriginPoint(center.x(), center.y());
88 labelItem->setPos(x - center.x(), m_rect.bottom() + label_padding);
88 labelItem->setPos(x - center.x(), m_rect.bottom() + label_padding);
89
89
90 if(i%2){
90 if(i%2){
91 QGraphicsRectItem *rectItem = static_cast<QGraphicsRectItem*>(shades.at(i/2));
91 QGraphicsRectItem *rectItem = static_cast<QGraphicsRectItem*>(shades.at(i/2));
92 rectItem->setRect(x,m_rect.top(),deltaX,m_rect.height());
92 rectItem->setRect(x,m_rect.top(),deltaX,m_rect.height());
93 }
93 }
94 }
94 }
95 }
95 }
96 break;
96 break;
97
97
98 case Y_AXIS:
98 case Y_AXIS:
99 {
99 {
100 const qreal deltaY = m_rect.height()/ (count-1);
100 const qreal deltaY = m_rect.height()/ (count-1);
101
101
102 m_axis.setLine(m_rect.left() , m_rect.top(), m_rect.left(), m_rect.bottom());
102 m_axis.setLine(m_rect.left() , m_rect.top(), m_rect.left(), m_rect.bottom());
103
103
104 for (int i = 0; i < count; ++i) {
104 for (int i = 0; i < count; ++i) {
105 int y = i * -deltaY + m_rect.bottom();
105 int y = i * -deltaY + m_rect.bottom();
106 QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(lines.at(i));
106 QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(lines.at(i));
107 lineItem->setLine(m_rect.left() , y, m_rect.right(), y);
107 lineItem->setLine(m_rect.left() , y, m_rect.right(), y);
108 QGraphicsSimpleTextItem *labelItem = static_cast<QGraphicsSimpleTextItem*>(labels.at(i));
108 QGraphicsSimpleTextItem *labelItem = static_cast<QGraphicsSimpleTextItem*>(labels.at(i));
109 labelItem->setText(m_thicksList.at(i));
109 labelItem->setText(m_thicksList.at(i));
110 QPointF center = labelItem->boundingRect().center();
110 QPointF center = labelItem->boundingRect().center();
111 labelItem->setTransformOriginPoint(center.x(), center.y());
111 labelItem->setTransformOriginPoint(center.x(), center.y());
112 labelItem->setPos(m_rect.left() - labelItem->boundingRect().width() - label_padding , y-center.y());
112 labelItem->setPos(m_rect.left() - labelItem->boundingRect().width() - label_padding , y-center.y());
113 if(i%2){
113 if(i%2){
114 QGraphicsRectItem *rectItem = static_cast<QGraphicsRectItem*>(shades.at(i/2));
114 QGraphicsRectItem *rectItem = static_cast<QGraphicsRectItem*>(shades.at(i/2));
115 rectItem->setRect(m_rect.left(),y,m_rect.width(),deltaY);
115 rectItem->setRect(m_rect.left(),y,m_rect.width(),deltaY);
116 }
116 }
117 }
117 }
118 }
118 }
119 break;
119 break;
120 default:
120 default:
121 qDebug()<<"Unknown axis type";
121 qDebug()<<"Unknown axis type";
122 break;
122 break;
123 }
123 }
124 }
124 }
125
125
126 void AxisItem::handleAxisUpdate(QChartAxis* axis)
126 void AxisItem::handleAxisUpdate(QChartAxis* axis)
127 {
127 {
128 if(axis->isAxisVisible()) {
128 if(axis->isAxisVisible()) {
129 setAxisOpacity(100);
129 setAxisOpacity(100);
130 }
130 }
131 else {
131 else {
132 setAxisOpacity(0);
132 setAxisOpacity(0);
133 }
133 }
134
134
135 if(axis->isGridVisible()) {
135 if(axis->isGridVisible()) {
136 setGridOpacity(100);
136 setGridOpacity(100);
137 }
137 }
138 else {
138 else {
139 setGridOpacity(0);
139 setGridOpacity(0);
140 }
140 }
141
141
142 if(axis->isLabelsVisible())
142 if(axis->isLabelsVisible())
143 {
143 {
144 setLabelsOpacity(100);
144 setLabelsOpacity(100);
145 }
145 }
146 else {
146 else {
147 setLabelsOpacity(0);
147 setLabelsOpacity(0);
148 }
148 }
149
149
150 if(axis->isShadesVisible()) {
150 if(axis->isShadesVisible()) {
151 setShadesOpacity(axis->shadesOpacity());
151 setShadesOpacity(axis->shadesOpacity());
152 }
152 }
153 else {
153 else {
154 setShadesOpacity(0);
154 setShadesOpacity(0);
155 }
155 }
156
156
157 setLabelsAngle(axis->labelsAngle());
157 setLabelsAngle(axis->labelsAngle());
158 setAxisPen(axis->axisPen());
158 setAxisPen(axis->axisPen());
159 setLabelsPen(axis->labelsPen());
159 setLabelsPen(axis->labelsPen());
160 setLabelsBrush(axis->labelsBrush());
160 setLabelsBrush(axis->labelsBrush());
161 setLabelsFont(axis->labelFont());
161 setLabelsFont(axis->labelFont());
162 setGridPen(axis->gridPen());
162 setGridPen(axis->gridPen());
163 setShadesPen(axis->shadesPen());
163 setShadesPen(axis->shadesPen());
164 setShadesBrush(axis->shadesBrush());
164 setShadesBrush(axis->shadesBrush());
165 }
165 }
166
166
167 void AxisItem::handleLabelsChanged(QChartAxis* axis,const QStringList& labels)
167 void AxisItem::handleLabelsChanged(QChartAxis* axis,const QStringList& labels)
168 {
168 {
169 m_thicksList=labels;
169 m_thicksList=labels;
170 QList<QGraphicsItem*> items = m_labels.childItems();
170 QList<QGraphicsItem*> items = m_labels.childItems();
171 if(items.size()!=m_thicksList.size()){
171 if(items.size()!=m_thicksList.size()){
172 clear();
172 clear();
173 m_thicksList=labels;
173 m_thicksList=labels;
174 createItems(m_thicksList.size());
174 createItems(m_thicksList.size());
175 updateItem(m_thicksList.size());
175 items = m_labels.childItems();
176 items = m_labels.childItems();
176 handleAxisUpdate(axis);
177 handleAxisUpdate(axis);
177 }
178 }
178
179
179 Q_ASSERT(items.size()==m_thicksList.size());
180 Q_ASSERT(items.size()==m_thicksList.size());
180
181
181 int i=0;
182 int i=0;
182 foreach(QGraphicsItem* item, items){
183 foreach(QGraphicsItem* item, items){
183 static_cast<QGraphicsSimpleTextItem*>(item)->setText(m_thicksList.at(i));
184 static_cast<QGraphicsSimpleTextItem*>(item)->setText(m_thicksList.at(i));
184 i++;
185 i++;
185 }
186 }
186 update();
187 update();
187 }
188 }
188
189
189 void AxisItem::handleGeometryChanged(const QRectF& rect)
190 void AxisItem::handleGeometryChanged(const QRectF& rect)
190 {
191 {
191 m_rect = rect;
192 m_rect = rect;
192 updateItem(m_thicksList.size());
193 updateItem(m_thicksList.size());
193 update();
194 update();
194 }
195 }
195
196
196 void AxisItem::setAxisOpacity(qreal opacity)
197 void AxisItem::setAxisOpacity(qreal opacity)
197 {
198 {
198 m_axis.setOpacity(opacity);
199 m_axis.setOpacity(opacity);
199 }
200 }
200
201
201 qreal AxisItem::axisOpacity() const
202 qreal AxisItem::axisOpacity() const
202 {
203 {
203 return m_axis.opacity();
204 return m_axis.opacity();
204 }
205 }
205
206
206 void AxisItem::setGridOpacity(qreal opacity)
207 void AxisItem::setGridOpacity(qreal opacity)
207 {
208 {
208 m_grid.setOpacity(opacity);
209 m_grid.setOpacity(opacity);
209 }
210 }
210
211
211
212
212 qreal AxisItem::gridOpacity() const
213 qreal AxisItem::gridOpacity() const
213 {
214 {
214 return m_grid.opacity();
215 return m_grid.opacity();
215 }
216 }
216
217
217 void AxisItem::setLabelsOpacity(qreal opacity)
218 void AxisItem::setLabelsOpacity(qreal opacity)
218 {
219 {
219 m_labels.setOpacity(opacity);
220 m_labels.setOpacity(opacity);
220 }
221 }
221
222
222 qreal AxisItem::labelsOpacity() const
223 qreal AxisItem::labelsOpacity() const
223 {
224 {
224 return m_labels.opacity();
225 return m_labels.opacity();
225 }
226 }
226
227
227 void AxisItem::setShadesOpacity(qreal opacity)
228 void AxisItem::setShadesOpacity(qreal opacity)
228 {
229 {
229 m_shades.setOpacity(opacity);
230 m_shades.setOpacity(opacity);
230 }
231 }
231
232
232 qreal AxisItem::shadesOpacity() const
233 qreal AxisItem::shadesOpacity() const
233 {
234 {
234 return m_shades.opacity();
235 return m_shades.opacity();
235 }
236 }
236
237
237 void AxisItem::setLabelsAngle(int angle)
238 void AxisItem::setLabelsAngle(int angle)
238 {
239 {
239 foreach(QGraphicsItem* item , m_labels.childItems()) {
240 foreach(QGraphicsItem* item , m_labels.childItems()) {
240 QPointF center = item->boundingRect().center();
241 QPointF center = item->boundingRect().center();
241 item->setRotation(angle);
242 item->setRotation(angle);
242 }
243 }
243
244
244 m_labelsAngle=angle;
245 m_labelsAngle=angle;
245 }
246 }
246
247
247 void AxisItem::setLabelsPen(const QPen& pen)
248 void AxisItem::setLabelsPen(const QPen& pen)
248 {
249 {
249 foreach(QGraphicsItem* item , m_labels.childItems()) {
250 foreach(QGraphicsItem* item , m_labels.childItems()) {
250 static_cast<QGraphicsSimpleTextItem*>(item)->setPen(pen);
251 static_cast<QGraphicsSimpleTextItem*>(item)->setPen(pen);
251 }
252 }
252 }
253 }
253
254
254 void AxisItem::setLabelsBrush(const QBrush& brush)
255 void AxisItem::setLabelsBrush(const QBrush& brush)
255 {
256 {
256 foreach(QGraphicsItem* item , m_labels.childItems()) {
257 foreach(QGraphicsItem* item , m_labels.childItems()) {
257 static_cast<QGraphicsSimpleTextItem*>(item)->setBrush(brush);
258 static_cast<QGraphicsSimpleTextItem*>(item)->setBrush(brush);
258 }
259 }
259 }
260 }
260
261
261 void AxisItem::setLabelsFont(const QFont& font)
262 void AxisItem::setLabelsFont(const QFont& font)
262 {
263 {
263 foreach(QGraphicsItem* item , m_labels.childItems()) {
264 foreach(QGraphicsItem* item , m_labels.childItems()) {
264 static_cast<QGraphicsSimpleTextItem*>(item)->setFont(font);
265 static_cast<QGraphicsSimpleTextItem*>(item)->setFont(font);
265 }
266 }
266 }
267 }
267
268
268 void AxisItem::setShadesBrush(const QBrush& brush)
269 void AxisItem::setShadesBrush(const QBrush& brush)
269 {
270 {
270 foreach(QGraphicsItem* item , m_shades.childItems()) {
271 foreach(QGraphicsItem* item , m_shades.childItems()) {
271 static_cast<QGraphicsRectItem*>(item)->setBrush(brush);
272 static_cast<QGraphicsRectItem*>(item)->setBrush(brush);
272 }
273 }
273 }
274 }
274
275
275 void AxisItem::setShadesPen(const QPen& pen)
276 void AxisItem::setShadesPen(const QPen& pen)
276 {
277 {
277 foreach(QGraphicsItem* item , m_shades.childItems()) {
278 foreach(QGraphicsItem* item , m_shades.childItems()) {
278 static_cast<QGraphicsRectItem*>(item)->setPen(pen);
279 static_cast<QGraphicsRectItem*>(item)->setPen(pen);
279 }
280 }
280 }
281 }
281
282
282 void AxisItem::setAxisPen(const QPen& pen)
283 void AxisItem::setAxisPen(const QPen& pen)
283 {
284 {
284 m_axis.setPen(pen);
285 m_axis.setPen(pen);
285 }
286 }
286
287
287 void AxisItem::setGridPen(const QPen& pen)
288 void AxisItem::setGridPen(const QPen& pen)
288 {
289 {
289 foreach(QGraphicsItem* item , m_grid.childItems()) {
290 foreach(QGraphicsItem* item , m_grid.childItems()) {
290 static_cast<QGraphicsLineItem*>(item)->setPen(pen);
291 static_cast<QGraphicsLineItem*>(item)->setPen(pen);
291 }
292 }
292 }
293 }
293
294
294
295
295 //TODO "nice numbers algorithm"
296 //TODO "nice numbers algorithm"
296 #include "moc_axisitem_p.cpp"
297 #include "moc_axisitem_p.cpp"
297
298
298 QTCOMMERCIALCHART_END_NAMESPACE
299 QTCOMMERCIALCHART_END_NAMESPACE
@@ -1,223 +1,226
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 "qbarchartseries.h"
7 #include "qbarchartseries.h"
8 #include "qstackedbarchartseries.h"
8 #include "qstackedbarchartseries.h"
9 #include "qpercentbarchartseries.h"
9 #include "qpercentbarchartseries.h"
10 #include "qlinechartseries.h"
10 #include "qlinechartseries.h"
11 #include "qpieseries.h"
11 #include "qpieseries.h"
12 #include "qscatterseries.h"
12 #include "qscatterseries.h"
13 //items
13 //items
14 #include "axisitem_p.h"
14 #include "axisitem_p.h"
15 #include "barpresenter.h"
15 #include "barpresenter.h"
16 #include "stackedbarpresenter.h"
16 #include "stackedbarpresenter.h"
17 #include "linechartitem_p.h"
17 #include "linechartitem_p.h"
18 #include "percentbarpresenter.h"
18 #include "percentbarpresenter.h"
19 #include "linechartanimationitem_p.h"
19 #include "linechartanimationitem_p.h"
20 #include "piepresenter.h"
20 #include "piepresenter.h"
21 #include "scatterpresenter_p.h"
21 #include "scatterpresenter_p.h"
22
22
23 QTCOMMERCIALCHART_BEGIN_NAMESPACE
23 QTCOMMERCIALCHART_BEGIN_NAMESPACE
24
24
25 ChartPresenter::ChartPresenter(QChart* chart,ChartDataSet* dataset):QObject(chart),
25 ChartPresenter::ChartPresenter(QChart* chart,ChartDataSet* dataset):QObject(chart),
26 m_chart(chart),
26 m_chart(chart),
27 m_dataset(dataset),
27 m_dataset(dataset),
28 m_chartTheme(0),
28 m_chartTheme(0),
29 m_marginSize(0),
29 m_marginSize(0),
30 m_rect(QRectF(QPoint(0,0),m_chart->size()))
30 m_rect(QRectF(QPoint(0,0),m_chart->size()))
31 {
31 {
32 createConnections();
32 createConnections();
33 setChartTheme(QChart::ChartThemeDefault);
33 setChartTheme(QChart::ChartThemeDefault);
34
34
35 }
35 }
36
36
37 ChartPresenter::~ChartPresenter()
37 ChartPresenter::~ChartPresenter()
38 {
38 {
39 }
39 }
40
40
41 void ChartPresenter::createConnections()
41 void ChartPresenter::createConnections()
42 {
42 {
43 QObject::connect(m_chart,SIGNAL(geometryChanged()),this,SLOT(handleGeometryChanged()));
43 QObject::connect(m_chart,SIGNAL(geometryChanged()),this,SLOT(handleGeometryChanged()));
44 QObject::connect(m_dataset,SIGNAL(seriesAdded(QChartSeries*)),this,SLOT(handleSeriesAdded(QChartSeries*)));
44 QObject::connect(m_dataset,SIGNAL(seriesAdded(QChartSeries*)),this,SLOT(handleSeriesAdded(QChartSeries*)));
45 QObject::connect(m_dataset,SIGNAL(seriesRemoved(QChartSeries*)),this,SLOT(handleSeriesRemoved(QChartSeries*)));
45 QObject::connect(m_dataset,SIGNAL(seriesRemoved(QChartSeries*)),this,SLOT(handleSeriesRemoved(QChartSeries*)));
46 QObject::connect(m_dataset,SIGNAL(axisAdded(QChartAxis*)),this,SLOT(handleAxisAdded(QChartAxis*)));
46 QObject::connect(m_dataset,SIGNAL(axisAdded(QChartAxis*)),this,SLOT(handleAxisAdded(QChartAxis*)));
47 QObject::connect(m_dataset,SIGNAL(axisRemoved(QChartAxis*)),this,SLOT(handleAxisRemoved(QChartAxis*)));
47 QObject::connect(m_dataset,SIGNAL(axisRemoved(QChartAxis*)),this,SLOT(handleAxisRemoved(QChartAxis*)));
48 QObject::connect(m_dataset,SIGNAL(seriesDomainChanged(QChartSeries*,const Domain&)),this,SLOT(handleSeriesDomainChanged(QChartSeries*,const Domain&)));
48 QObject::connect(m_dataset,SIGNAL(seriesDomainChanged(QChartSeries*,const Domain&)),this,SLOT(handleSeriesDomainChanged(QChartSeries*,const Domain&)));
49 QObject::connect(m_dataset,SIGNAL(axisLabelsChanged(QChartAxis*,const QStringList&)),this,SLOT(handleAxisLabelsChanged(QChartAxis*,const QStringList&)));
49 QObject::connect(m_dataset,SIGNAL(axisLabelsChanged(QChartAxis*,const QStringList&)),this,SLOT(handleAxisLabelsChanged(QChartAxis*,const QStringList&)));
50 }
50 }
51
51
52
52
53 QRectF ChartPresenter::geometry() const
53 QRectF ChartPresenter::geometry() const
54 {
54 {
55 return m_rect;
55 return m_rect;
56 }
56 }
57
57
58 void ChartPresenter::handleGeometryChanged()
58 void ChartPresenter::handleGeometryChanged()
59 {
59 {
60 m_rect = QRectF(QPoint(0,0),m_chart->size());
60 m_rect = QRectF(QPoint(0,0),m_chart->size());
61 m_rect.adjust(m_marginSize,m_marginSize, -m_marginSize, -m_marginSize);
61 m_rect.adjust(m_marginSize,m_marginSize, -m_marginSize, -m_marginSize);
62 Q_ASSERT(m_rect.isValid());
62 Q_ASSERT(m_rect.isValid());
63 emit geometryChanged(m_rect);
63 emit geometryChanged(m_rect);
64 }
64 }
65
65
66 int ChartPresenter::margin() const
66 int ChartPresenter::margin() const
67 {
67 {
68 return m_marginSize;
68 return m_marginSize;
69 }
69 }
70
70
71 void ChartPresenter::setMargin(int margin)
71 void ChartPresenter::setMargin(int margin)
72 {
72 {
73 m_marginSize = margin;
73 m_marginSize = margin;
74 }
74 }
75
75
76 void ChartPresenter::handleAxisAdded(QChartAxis* axis)
76 void ChartPresenter::handleAxisAdded(QChartAxis* axis)
77 {
77 {
78 AxisItem* item ;
78 AxisItem* item ;
79
79
80 if(axis==m_dataset->axisX()){
80 if(axis==m_dataset->axisX()){
81 item = new AxisItem(AxisItem::X_AXIS,m_chart);
81 item = new AxisItem(AxisItem::X_AXIS,m_chart);
82 }else{
82 }else{
83 item = new AxisItem(AxisItem::Y_AXIS,m_chart);
83 item = new AxisItem(AxisItem::Y_AXIS,m_chart);
84 }
84 }
85 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
85 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
86 QObject::connect(axis,SIGNAL(update(QChartAxis*)),item,SLOT(handleAxisUpdate(QChartAxis*)));
86 QObject::connect(axis,SIGNAL(update(QChartAxis*)),item,SLOT(handleAxisUpdate(QChartAxis*)));
87
88 item->handleAxisUpdate(axis);
89 item->handleGeometryChanged(m_rect);
87 m_chartTheme->decorate(axis,item);
90 m_chartTheme->decorate(axis,item);
88 m_axisItems.insert(axis,item);
91 m_axisItems.insert(axis,item);
89 }
92 }
90
93
91 void ChartPresenter::handleAxisRemoved(QChartAxis* axis)
94 void ChartPresenter::handleAxisRemoved(QChartAxis* axis)
92 {
95 {
93 AxisItem* item = m_axisItems.take(axis);
96 AxisItem* item = m_axisItems.take(axis);
94 Q_ASSERT(item);
97 Q_ASSERT(item);
95 delete item;
98 delete item;
96 }
99 }
97
100
98
101
99 void ChartPresenter::handleSeriesAdded(QChartSeries* series)
102 void ChartPresenter::handleSeriesAdded(QChartSeries* series)
100 {
103 {
101 switch(series->type())
104 switch(series->type())
102 {
105 {
103 case QChartSeries::SeriesTypeLine: {
106 case QChartSeries::SeriesTypeLine: {
104 QLineChartSeries* lineSeries = static_cast<QLineChartSeries*>(series);
107 QLineChartSeries* lineSeries = static_cast<QLineChartSeries*>(series);
105 LineChartItem* item = new LineChartAnimationItem(this,lineSeries,m_chart);
108 LineChartItem* item = new LineChartAnimationItem(this,lineSeries,m_chart);
106 m_chartTheme->decorate(item,lineSeries,m_chartItems.count());
109 m_chartTheme->decorate(item,lineSeries,m_chartItems.count());
107 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
110 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
108 QObject::connect(lineSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
111 QObject::connect(lineSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
109 m_chartItems.insert(series,item);
112 m_chartItems.insert(series,item);
110 break;
113 break;
111 }
114 }
112
115
113 case QChartSeries::SeriesTypeBar: {
116 case QChartSeries::SeriesTypeBar: {
114 QBarChartSeries* barSeries = static_cast<QBarChartSeries*>(series);
117 QBarChartSeries* barSeries = static_cast<QBarChartSeries*>(series);
115 BarPresenter* item = new BarPresenter(barSeries->model(),m_chart);
118 BarPresenter* item = new BarPresenter(barSeries->model(),m_chart);
116 m_chartTheme->decorate(item,barSeries,m_chartItems.count());
119 m_chartTheme->decorate(item,barSeries,m_chartItems.count());
117 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
120 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
118 QObject::connect(barSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
121 QObject::connect(barSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
119 m_chartItems.insert(series,item);
122 m_chartItems.insert(series,item);
120 // m_axisXItem->setVisible(false);
123 // m_axisXItem->setVisible(false);
121 break;
124 break;
122 }
125 }
123
126
124 case QChartSeries::SeriesTypeStackedBar: {
127 case QChartSeries::SeriesTypeStackedBar: {
125
128
126 QStackedBarChartSeries* stackedBarSeries = static_cast<QStackedBarChartSeries*>(series);
129 QStackedBarChartSeries* stackedBarSeries = static_cast<QStackedBarChartSeries*>(series);
127 StackedBarPresenter* item = new StackedBarPresenter(stackedBarSeries->model(),m_chart);
130 StackedBarPresenter* item = new StackedBarPresenter(stackedBarSeries->model(),m_chart);
128 m_chartTheme->decorate(item,stackedBarSeries,m_chartItems.count());
131 m_chartTheme->decorate(item,stackedBarSeries,m_chartItems.count());
129 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
132 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
130 QObject::connect(stackedBarSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
133 QObject::connect(stackedBarSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
131 m_chartItems.insert(series,item);
134 m_chartItems.insert(series,item);
132 break;
135 break;
133 }
136 }
134
137
135 case QChartSeries::SeriesTypePercentBar: {
138 case QChartSeries::SeriesTypePercentBar: {
136
139
137 QPercentBarChartSeries* percentBarSeries = static_cast<QPercentBarChartSeries*>(series);
140 QPercentBarChartSeries* percentBarSeries = static_cast<QPercentBarChartSeries*>(series);
138 PercentBarPresenter* item = new PercentBarPresenter(percentBarSeries->model(),m_chart);
141 PercentBarPresenter* item = new PercentBarPresenter(percentBarSeries->model(),m_chart);
139 m_chartTheme->decorate(item,percentBarSeries ,m_chartItems.count());
142 m_chartTheme->decorate(item,percentBarSeries ,m_chartItems.count());
140 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
143 QObject::connect(this,SIGNAL(geometryChanged(const QRectF&)),item,SLOT(handleGeometryChanged(const QRectF&)));
141 QObject::connect(percentBarSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
144 QObject::connect(percentBarSeries,SIGNAL(changed(int)),item,SLOT(handleModelChanged(int)));
142 m_chartItems.insert(series,item);
145 m_chartItems.insert(series,item);
143 break;
146 break;
144 }
147 }
145 case QChartSeries::SeriesTypeScatter: {
148 case QChartSeries::SeriesTypeScatter: {
146 QScatterSeries *scatterSeries = qobject_cast<QScatterSeries *>(series);
149 QScatterSeries *scatterSeries = qobject_cast<QScatterSeries *>(series);
147 ScatterPresenter *scatterPresenter = new ScatterPresenter(scatterSeries, m_chart);
150 ScatterPresenter *scatterPresenter = new ScatterPresenter(scatterSeries, m_chart);
148 QObject::connect(this, SIGNAL(geometryChanged(const QRectF&)),
151 QObject::connect(this, SIGNAL(geometryChanged(const QRectF&)),
149 scatterPresenter, SLOT(handleGeometryChanged(const QRectF&)));
152 scatterPresenter, SLOT(handleGeometryChanged(const QRectF&)));
150 m_chartTheme->decorate(scatterPresenter, scatterSeries, m_chartItems.count());
153 m_chartTheme->decorate(scatterPresenter, scatterSeries, m_chartItems.count());
151 m_chartItems.insert(scatterSeries, scatterPresenter);
154 m_chartItems.insert(scatterSeries, scatterPresenter);
152 break;
155 break;
153 }
156 }
154 case QChartSeries::SeriesTypePie: {
157 case QChartSeries::SeriesTypePie: {
155 QPieSeries *s = qobject_cast<QPieSeries *>(series);
158 QPieSeries *s = qobject_cast<QPieSeries *>(series);
156 PiePresenter* pie = new PiePresenter(m_chart, s);
159 PiePresenter* pie = new PiePresenter(m_chart, s);
157 m_chartTheme->decorate(pie, s, m_chartItems.count());
160 m_chartTheme->decorate(pie, s, m_chartItems.count());
158 QObject::connect(this, SIGNAL(geometryChanged(const QRectF&)), pie, SLOT(handleGeometryChanged(const QRectF&)));
161 QObject::connect(this, SIGNAL(geometryChanged(const QRectF&)), pie, SLOT(handleGeometryChanged(const QRectF&)));
159 m_chartItems.insert(series, pie);
162 m_chartItems.insert(series, pie);
160 break;
163 break;
161 }
164 }
162 default: {
165 default: {
163 qDebug()<< "Series type" << series->type() << "not implemented.";
166 qDebug()<< "Series type" << series->type() << "not implemented.";
164 break;
167 break;
165 }
168 }
166 }
169 }
167
170
168 if(m_rect.isValid()) emit geometryChanged(m_rect);
171 if(m_rect.isValid()) emit geometryChanged(m_rect);
169 }
172 }
170
173
171 void ChartPresenter::handleSeriesRemoved(QChartSeries* series)
174 void ChartPresenter::handleSeriesRemoved(QChartSeries* series)
172 {
175 {
173 ChartItem* item = m_chartItems.take(series);
176 ChartItem* item = m_chartItems.take(series);
174 delete item;
177 delete item;
175 }
178 }
176
179
177 void ChartPresenter::handleSeriesChanged(QChartSeries* series)
180 void ChartPresenter::handleSeriesChanged(QChartSeries* series)
178 {
181 {
179 //TODO:
182 //TODO:
180 }
183 }
181
184
182 void ChartPresenter::handleSeriesDomainChanged(QChartSeries* series, const Domain& domain)
185 void ChartPresenter::handleSeriesDomainChanged(QChartSeries* series, const Domain& domain)
183 {
186 {
184 m_chartItems.value(series)->handleDomainChanged(domain);
187 m_chartItems.value(series)->handleDomainChanged(domain);
185 }
188 }
186
189
187 void ChartPresenter::handleAxisLabelsChanged(QChartAxis* axis,const QStringList& labels)
190 void ChartPresenter::handleAxisLabelsChanged(QChartAxis* axis,const QStringList& labels)
188 {
191 {
189 m_axisItems.value(axis)->handleLabelsChanged(axis,labels);
192 m_axisItems.value(axis)->handleLabelsChanged(axis,labels);
190 }
193 }
191
194
192 void ChartPresenter::setChartTheme(QChart::ChartTheme theme)
195 void ChartPresenter::setChartTheme(QChart::ChartTheme theme)
193 {
196 {
194 delete m_chartTheme;
197 delete m_chartTheme;
195
198
196 m_chartTheme = ChartTheme::createTheme(theme);
199 m_chartTheme = ChartTheme::createTheme(theme);
197
200
198 m_chartTheme->decorate(m_chart);
201 m_chartTheme->decorate(m_chart);
199 QMapIterator<QChartSeries*,ChartItem*> i(m_chartItems);
202 QMapIterator<QChartSeries*,ChartItem*> i(m_chartItems);
200
203
201 int index=0;
204 int index=0;
202 while (i.hasNext()) {
205 while (i.hasNext()) {
203 i.next();
206 i.next();
204 index++;
207 index++;
205 m_chartTheme->decorate(i.value(),i.key(),index);
208 m_chartTheme->decorate(i.value(),i.key(),index);
206 }
209 }
207
210
208 QMapIterator<QChartAxis*,AxisItem*> j(m_axisItems);
211 QMapIterator<QChartAxis*,AxisItem*> j(m_axisItems);
209 while (j.hasNext()) {
212 while (j.hasNext()) {
210 j.next();
213 j.next();
211 m_chartTheme->decorate(j.key(),j.value());
214 m_chartTheme->decorate(j.key(),j.value());
212 }
215 }
213 }
216 }
214
217
215 QChart::ChartTheme ChartPresenter::chartTheme()
218 QChart::ChartTheme ChartPresenter::chartTheme()
216 {
219 {
217 return m_chartTheme->id();
220 return m_chartTheme->id();
218 }
221 }
219
222
220
223
221 #include "moc_chartpresenter_p.cpp"
224 #include "moc_chartpresenter_p.cpp"
222
225
223 QTCOMMERCIALCHART_END_NAMESPACE
226 QTCOMMERCIALCHART_END_NAMESPACE
General Comments 0
You need to be logged in to leave comments. Login now