@@ -22,7 +22,9 | |||||
22 | #include "bar_p.h" |
|
22 | #include "bar_p.h" | |
23 | #include "barlabel_p.h" |
|
23 | #include "barlabel_p.h" | |
24 | #include "qbarset.h" |
|
24 | #include "qbarset.h" | |
|
25 | #include "qbarset_p.h" | |||
25 | #include "qbarseries.h" |
|
26 | #include "qbarseries.h" | |
|
27 | #include "qbarseries_p.h" | |||
26 | #include "qchart.h" |
|
28 | #include "qchart.h" | |
27 | #include "qchartaxis.h" |
|
29 | #include "qchartaxis.h" | |
28 | #include "qchartaxiscategories.h" |
|
30 | #include "qchartaxiscategories.h" | |
@@ -40,9 +42,9 BarChartItem::BarChartItem(QBarSeries *series, ChartPresenter *presenter) : | |||||
40 | m_series(series) |
|
42 | m_series(series) | |
41 | { |
|
43 | { | |
42 | setFlag(ItemClipsChildrenToShape); |
|
44 | setFlag(ItemClipsChildrenToShape); | |
43 | connect(series, SIGNAL(showToolTip(QPoint,QString)), this, SLOT(showToolTip(QPoint,QString))); |
|
45 | connect(series->d_func(), SIGNAL(showToolTip(QPoint,QString)), this, SLOT(showToolTip(QPoint,QString))); | |
44 | connect(series, SIGNAL(updatedBars()), this, SLOT(handleLayoutChanged())); |
|
46 | connect(series->d_func(), SIGNAL(updatedBars()), this, SLOT(handleLayoutChanged())); | |
45 | connect(series, SIGNAL(restructuredBars()), this, SLOT(handleModelChanged())); |
|
47 | connect(series->d_func(), SIGNAL(restructuredBars()), this, SLOT(handleModelChanged())); | |
46 | setZValue(ChartPresenter::BarSeriesZValue); |
|
48 | setZValue(ChartPresenter::BarSeriesZValue); | |
47 | dataChanged(); |
|
49 | dataChanged(); | |
48 | } |
|
50 | } | |
@@ -77,14 +79,14 void BarChartItem::dataChanged() | |||||
77 |
|
79 | |||
78 | // Create new graphic items for bars |
|
80 | // Create new graphic items for bars | |
79 | for (int c = 0; c < m_series->categoryCount(); c++) { |
|
81 | for (int c = 0; c < m_series->categoryCount(); c++) { | |
80 | QString category = m_series->categoryName(c); |
|
82 | QString category = m_series->d_func()->categoryName(c); | |
81 | for (int s = 0; s < m_series->barsetCount(); s++) { |
|
83 | for (int s = 0; s < m_series->barsetCount(); s++) { | |
82 | QBarSet *set = m_series->barsetAt(s); |
|
84 | QBarSet *set = m_series->d_func()->barsetAt(s); | |
83 | Bar *bar = new Bar(category,this); |
|
85 | Bar *bar = new Bar(category,this); | |
84 | m_bars.append(bar); |
|
86 | m_bars.append(bar); | |
85 | connect(bar, SIGNAL(clicked(QString,Qt::MouseButtons)), set, SIGNAL(clicked(QString,Qt::MouseButtons))); |
|
87 | connect(bar, SIGNAL(clicked(QString,Qt::MouseButtons)), set, SIGNAL(clicked(QString,Qt::MouseButtons))); | |
86 | connect(bar, SIGNAL(hoverEntered(QPoint)), set, SLOT(barHoverEnterEvent(QPoint))); |
|
88 | connect(bar, SIGNAL(hoverEntered(QPoint)), set->d_ptr.data(), SLOT(barHoverEnterEvent(QPoint))); | |
87 | connect(bar, SIGNAL(hoverLeaved()), set, SLOT(barHoverLeaveEvent())); |
|
89 | connect(bar, SIGNAL(hoverLeaved()), set->d_ptr.data(), SLOT(barHoverLeaveEvent())); | |
88 | m_layout.append(QRectF(0, 0, 0, 0)); |
|
90 | m_layout.append(QRectF(0, 0, 0, 0)); | |
89 | } |
|
91 | } | |
90 | } |
|
92 | } | |
@@ -92,7 +94,7 void BarChartItem::dataChanged() | |||||
92 | // Create labels |
|
94 | // Create labels | |
93 | for (int category = 0; category < m_series->categoryCount(); category++) { |
|
95 | for (int category = 0; category < m_series->categoryCount(); category++) { | |
94 | for (int s = 0; s < m_series->barsetCount(); s++) { |
|
96 | for (int s = 0; s < m_series->barsetCount(); s++) { | |
95 | QBarSet *set = m_series->barsetAt(s); |
|
97 | QBarSet *set = m_series->d_func()->barsetAt(s); | |
96 | BarLabel *value = new BarLabel(*set, this); |
|
98 | BarLabel *value = new BarLabel(*set, this); | |
97 | m_labels.append(value); |
|
99 | m_labels.append(value); | |
98 | connect(set,SIGNAL(labelsVisibleChanged(bool)),value,SLOT(labelsVisibleChanged(bool))); |
|
100 | connect(set,SIGNAL(labelsVisibleChanged(bool)),value,SLOT(labelsVisibleChanged(bool))); | |
@@ -121,7 +123,7 QVector<QRectF> BarChartItem::calculateLayout() | |||||
121 | qreal xPos = categoryWidth * category + barWidth / 2; |
|
123 | qreal xPos = categoryWidth * category + barWidth / 2; | |
122 | qreal yPos = height + scale * m_domainMinY; |
|
124 | qreal yPos = height + scale * m_domainMinY; | |
123 | for (int set = 0; set < setCount; set++) { |
|
125 | for (int set = 0; set < setCount; set++) { | |
124 | QBarSet* barSet = m_series->barsetAt(set); |
|
126 | QBarSet* barSet = m_series->d_func()->barsetAt(set); | |
125 |
|
127 | |||
126 | qreal barHeight = barSet->valueAt(category) * scale; |
|
128 | qreal barHeight = barSet->valueAt(category) * scale; | |
127 | Bar* bar = m_bars.at(itemIndex); |
|
129 | Bar* bar = m_bars.at(itemIndex); |
@@ -21,6 +21,7 | |||||
21 | #include "percentbarchartitem_p.h" |
|
21 | #include "percentbarchartitem_p.h" | |
22 | #include "bar_p.h" |
|
22 | #include "bar_p.h" | |
23 | #include "barlabel_p.h" |
|
23 | #include "barlabel_p.h" | |
|
24 | #include "qbarseries_p.h" | |||
24 | #include "qbarset.h" |
|
25 | #include "qbarset.h" | |
25 | #include <QDebug> |
|
26 | #include <QDebug> | |
26 |
|
27 | |||
@@ -49,11 +50,11 QVector<QRectF> PercentBarChartItem::calculateLayout() | |||||
49 |
|
50 | |||
50 | int itemIndex(0); |
|
51 | int itemIndex(0); | |
51 | for (int category = 0; category < categoryCount; category++) { |
|
52 | for (int category = 0; category < categoryCount; category++) { | |
52 | qreal colSum = m_series->categorySum(category); |
|
53 | qreal colSum = m_series->d_func()->categorySum(category); | |
53 | qreal percentage = (100 / colSum); |
|
54 | qreal percentage = (100 / colSum); | |
54 | qreal yPos = height + domainScale * m_domainMinY; |
|
55 | qreal yPos = height + domainScale * m_domainMinY; | |
55 | for (int set=0; set < m_series->barsetCount(); set++) { |
|
56 | for (int set=0; set < m_series->barsetCount(); set++) { | |
56 | QBarSet* barSet = m_series->barsetAt(set); |
|
57 | QBarSet* barSet = m_series->d_func()->barsetAt(set); | |
57 | qreal barHeight = barSet->valueAt(category) * percentage * domainScale; |
|
58 | qreal barHeight = barSet->valueAt(category) * percentage * domainScale; | |
58 | Bar* bar = m_bars.at(itemIndex); |
|
59 | Bar* bar = m_bars.at(itemIndex); | |
59 | bar->setPen(barSet->pen()); |
|
60 | bar->setPen(barSet->pen()); | |
@@ -63,8 +64,8 QVector<QRectF> PercentBarChartItem::calculateLayout() | |||||
63 |
|
64 | |||
64 | BarLabel* label = m_labels.at(itemIndex); |
|
65 | BarLabel* label = m_labels.at(itemIndex); | |
65 |
|
66 | |||
66 | if (!qFuzzyIsNull(m_series->valueAt(set,category))) { |
|
67 | if (!qFuzzyIsNull(m_series->d_func()->valueAt(set,category))) { | |
67 | int p = m_series->percentageAt(set,category) * 100; |
|
68 | int p = m_series->d_func()->percentageAt(set,category) * 100; | |
68 | QString vString(QString::number(p)); |
|
69 | QString vString(QString::number(p)); | |
69 | vString.truncate(3); |
|
70 | vString.truncate(3); | |
70 | vString.append("%"); |
|
71 | vString.append("%"); |
@@ -176,12 +176,6 void QBarSeries::removeCategory(int i) | |||||
176 | int QBarSeries::barsetCount() const |
|
176 | int QBarSeries::barsetCount() const | |
177 | { |
|
177 | { | |
178 | Q_D(const QBarSeries); |
|
178 | Q_D(const QBarSeries); | |
179 | /* |
|
|||
180 | // if(m_model) |
|
|||
181 | // return m_mapBarTop - m_mapBarBottom; |
|
|||
182 | // else |
|
|||
183 |
|
||||
184 | */ |
|
|||
185 | return d->m_internalModel->barsetCount(); |
|
179 | return d->m_internalModel->barsetCount(); | |
186 | } |
|
180 | } | |
187 |
|
181 | |||
@@ -204,26 +198,6 QList<QBarSet*> QBarSeries::barSets() const | |||||
204 | } |
|
198 | } | |
205 |
|
199 | |||
206 | /*! |
|
200 | /*! | |
207 | \internal \a index |
|
|||
208 | */ |
|
|||
209 | QBarSet* QBarSeries::barsetAt(int index) |
|
|||
210 | { |
|
|||
211 | Q_D(QBarSeries); |
|
|||
212 | return d->barsetAt(index); |
|
|||
213 | // return m_internalModel->barsetAt(index); |
|
|||
214 | } |
|
|||
215 |
|
||||
216 | /*! |
|
|||
217 | \internal \a category |
|
|||
218 | */ |
|
|||
219 | QString QBarSeries::categoryName(int category) |
|
|||
220 | { |
|
|||
221 | Q_D(QBarSeries); |
|
|||
222 | return d->categoryName(category); |
|
|||
223 | // return m_internalModel->categoryName(category); |
|
|||
224 | } |
|
|||
225 |
|
||||
226 | /*! |
|
|||
227 | Enables or disables tooltip depending on parameter \a enabled. |
|
201 | Enables or disables tooltip depending on parameter \a enabled. | |
228 | Tooltip shows the name of set, when mouse is hovering on top of bar. |
|
202 | Tooltip shows the name of set, when mouse is hovering on top of bar. | |
229 | Calling without parameter \a enabled, enables the tooltip |
|
203 | Calling without parameter \a enabled, enables the tooltip | |
@@ -232,111 +206,6 void QBarSeries::setToolTipEnabled(bool enabled) | |||||
232 | { |
|
206 | { | |
233 | Q_D(QBarSeries); |
|
207 | Q_D(QBarSeries); | |
234 | d->setToolTipEnabled(enabled); |
|
208 | d->setToolTipEnabled(enabled); | |
235 | /* |
|
|||
236 | // TODO: what if we add sets after call to this function? Those sets won't have tooltip enabled. |
|
|||
237 | if (enabled) { |
|
|||
238 | for (int i=0; i<m_internalModel->barsetCount(); i++) { |
|
|||
239 | QBarSet *set = m_internalModel->barsetAt(i); |
|
|||
240 | connect(set, SIGNAL(showToolTip(QPoint,QString)), this, SIGNAL(showToolTip(QPoint,QString))); |
|
|||
241 | } |
|
|||
242 | } else { |
|
|||
243 | for (int i=0; i<m_internalModel->barsetCount(); i++) { |
|
|||
244 | QBarSet *set = m_internalModel->barsetAt(i); |
|
|||
245 | disconnect(set, SIGNAL(showToolTip(QPoint,QString)), this, SIGNAL(showToolTip(QPoint,QString))); |
|
|||
246 | } |
|
|||
247 | } |
|
|||
248 | */ |
|
|||
249 | } |
|
|||
250 |
|
||||
251 |
|
||||
252 | /*! |
|
|||
253 | \internal \a category |
|
|||
254 | */ |
|
|||
255 | void QBarSeries::barsetClicked(QString category, Qt::MouseButtons button) |
|
|||
256 | { |
|
|||
257 | Q_D(QBarSeries); |
|
|||
258 | d->barsetClicked(category,button); |
|
|||
259 | // emit clicked(qobject_cast<QBarSet*>(sender()), category, button); |
|
|||
260 | } |
|
|||
261 |
|
||||
262 | /*! |
|
|||
263 | \internal |
|
|||
264 | */ |
|
|||
265 | qreal QBarSeries::min() |
|
|||
266 | { |
|
|||
267 | Q_D(QBarSeries); |
|
|||
268 | return d->min(); |
|
|||
269 | //return m_internalModel->min(); |
|
|||
270 | } |
|
|||
271 |
|
||||
272 | /*! |
|
|||
273 | \internal |
|
|||
274 | */ |
|
|||
275 | qreal QBarSeries::max() |
|
|||
276 | { |
|
|||
277 | Q_D(QBarSeries); |
|
|||
278 | return d->max(); |
|
|||
279 | // return m_internalModel->max(); |
|
|||
280 | } |
|
|||
281 |
|
||||
282 | /*! |
|
|||
283 | \internal \a set \a category |
|
|||
284 | */ |
|
|||
285 | qreal QBarSeries::valueAt(int set, int category) |
|
|||
286 | { |
|
|||
287 | Q_D(QBarSeries); |
|
|||
288 | return d->valueAt(set,category); |
|
|||
289 | // return m_internalModel->valueAt(set, category); |
|
|||
290 | } |
|
|||
291 |
|
||||
292 | /*! |
|
|||
293 | \internal \a set \a category |
|
|||
294 | */ |
|
|||
295 | qreal QBarSeries::percentageAt(int set, int category) |
|
|||
296 | { |
|
|||
297 | Q_D(QBarSeries); |
|
|||
298 | return d->percentageAt(set,category); |
|
|||
299 | // return m_internalModel->percentageAt(set, category); |
|
|||
300 | } |
|
|||
301 |
|
||||
302 | /*! |
|
|||
303 | \internal \a category |
|
|||
304 | */ |
|
|||
305 | qreal QBarSeries::categorySum(int category) |
|
|||
306 | { |
|
|||
307 | Q_D(QBarSeries); |
|
|||
308 | return d->categorySum(category); |
|
|||
309 | // return m_internalModel->categorySum(category); |
|
|||
310 | } |
|
|||
311 |
|
||||
312 | /*! |
|
|||
313 | \internal \a category |
|
|||
314 | */ |
|
|||
315 | qreal QBarSeries::absoluteCategorySum(int category) |
|
|||
316 | { |
|
|||
317 | Q_D(QBarSeries); |
|
|||
318 | return d->absoluteCategorySum(category); |
|
|||
319 | // return m_internalModel->absoluteCategorySum(category); |
|
|||
320 | } |
|
|||
321 |
|
||||
322 | /*! |
|
|||
323 | \internal |
|
|||
324 | */ |
|
|||
325 | qreal QBarSeries::maxCategorySum() |
|
|||
326 | { |
|
|||
327 | Q_D(QBarSeries); |
|
|||
328 | return d->maxCategorySum(); |
|
|||
329 | // return m_internalModel->maxCategorySum(); |
|
|||
330 | } |
|
|||
331 |
|
||||
332 | /*! |
|
|||
333 | \internal |
|
|||
334 | */ |
|
|||
335 | BarChartModel& QBarSeries::modelInternal() |
|
|||
336 | { |
|
|||
337 | Q_D(QBarSeries); |
|
|||
338 | return d->modelInternal(); |
|
|||
339 | // return *m_internalModel; |
|
|||
340 | } |
|
209 | } | |
341 |
|
210 | |||
342 | /*! |
|
211 | /*! | |
@@ -347,31 +216,6 bool QBarSeries::setModel(QAbstractItemModel *model) | |||||
347 | { |
|
216 | { | |
348 | Q_D(QBarSeries); |
|
217 | Q_D(QBarSeries); | |
349 | return d->setModel(model); |
|
218 | return d->setModel(model); | |
350 | /* |
|
|||
351 | // disconnect signals from old model |
|
|||
352 | if(m_model) |
|
|||
353 | { |
|
|||
354 | disconnect(m_model, 0, this, 0); |
|
|||
355 | m_mapCategories = -1; |
|
|||
356 | m_mapBarBottom = -1; |
|
|||
357 | m_mapBarTop = -1; |
|
|||
358 | m_mapFirst = 0; |
|
|||
359 | m_mapCount = 0; |
|
|||
360 | m_mapOrientation = Qt::Vertical; |
|
|||
361 | } |
|
|||
362 |
|
||||
363 | // set new model |
|
|||
364 | if(model) |
|
|||
365 | { |
|
|||
366 | m_model = model; |
|
|||
367 | return true; |
|
|||
368 | } |
|
|||
369 | else |
|
|||
370 | { |
|
|||
371 | m_model = 0; |
|
|||
372 | return false; |
|
|||
373 | } |
|
|||
374 | */ |
|
|||
375 | } |
|
219 | } | |
376 |
|
220 | |||
377 | /*! |
|
221 | /*! | |
@@ -386,138 +230,6 void QBarSeries::setModelMapping(int categories, int bottomBoundary, int topBoun | |||||
386 | { |
|
230 | { | |
387 | Q_D(QBarSeries); |
|
231 | Q_D(QBarSeries); | |
388 | d->setModelMapping(categories,bottomBoundary,topBoundary,orientation); |
|
232 | d->setModelMapping(categories,bottomBoundary,topBoundary,orientation); | |
389 | /* |
|
|||
390 | if (!m_model) |
|
|||
391 | return; |
|
|||
392 |
|
||||
393 | m_mapCategories = categories; |
|
|||
394 | m_mapBarBottom = bottomBoundry; |
|
|||
395 | m_mapBarTop = topBoundry; |
|
|||
396 | // m_mapFirst = 1; |
|
|||
397 | m_mapOrientation = orientation; |
|
|||
398 |
|
||||
399 | // connect the signals |
|
|||
400 | if (m_mapOrientation == Qt::Vertical) { |
|
|||
401 | m_mapCount = m_model->rowCount() - m_mapFirst; |
|
|||
402 | connect(m_model,SIGNAL(dataChanged(QModelIndex,QModelIndex)), |
|
|||
403 | this, SLOT(modelUpdated(QModelIndex, QModelIndex))); |
|
|||
404 | connect(m_model,SIGNAL(rowsInserted(QModelIndex, int, int)), |
|
|||
405 | this, SLOT(modelDataAdded(QModelIndex,int,int))); |
|
|||
406 | connect(m_model, SIGNAL(rowsRemoved(QModelIndex, int, int)), |
|
|||
407 | this, SLOT(modelDataRemoved(QModelIndex,int,int))); |
|
|||
408 | } else { |
|
|||
409 | m_mapCount = m_model->columnCount() - m_mapFirst; |
|
|||
410 | connect(m_model,SIGNAL(dataChanged(QModelIndex,QModelIndex)), |
|
|||
411 | this, SLOT(modelUpdated(QModelIndex, QModelIndex))); |
|
|||
412 | connect(m_model,SIGNAL(columnsInserted(QModelIndex, int, int)), |
|
|||
413 | this, SLOT(modelDataAdded(QModelIndex,int,int))); |
|
|||
414 | connect(m_model, SIGNAL(columnsRemoved(QModelIndex, int, int)), |
|
|||
415 | this, SLOT(modelDataRemoved(QModelIndex,int,int))); |
|
|||
416 | } |
|
|||
417 |
|
||||
418 | // create the initial bars |
|
|||
419 | delete m_internalModel; |
|
|||
420 | if (m_mapOrientation == Qt::Vertical) { |
|
|||
421 | QStringList categories; |
|
|||
422 | for (int k = m_mapFirst; k < m_mapFirst + m_mapCount; k++) |
|
|||
423 | categories << m_model->data(m_model->index(k, m_mapCategories), Qt::DisplayRole).toString(); |
|
|||
424 | m_internalModel = new BarChartModel(categories, this); |
|
|||
425 |
|
||||
426 | for (int i = m_mapBarBottom; i <= m_mapBarTop; i++) { |
|
|||
427 | QBarSet* barSet = new QBarSet(QString("Column: %1").arg(i + 1)); |
|
|||
428 | for(int m = m_mapFirst; m < m_mapFirst + m_mapCount; m++) |
|
|||
429 | *barSet << m_model->data(m_model->index(m, i), Qt::DisplayRole).toDouble(); |
|
|||
430 | appendBarSet(barSet); |
|
|||
431 | } |
|
|||
432 | } else { |
|
|||
433 | QStringList categories; |
|
|||
434 | for (int k = m_mapFirst; k < m_mapFirst + m_mapCount; k++) |
|
|||
435 | categories << m_model->data(m_model->index(m_mapCategories, k), Qt::DisplayRole).toString(); |
|
|||
436 | m_internalModel = new BarChartModel(categories, this); |
|
|||
437 |
|
||||
438 | for (int i = m_mapBarBottom; i <= m_mapBarTop; i++) { |
|
|||
439 | QBarSet* barSet = new QBarSet(QString("Row: %1").arg(i + 1)); |
|
|||
440 | for(int m = m_mapFirst; m < m_mapFirst + m_mapCount; m++) |
|
|||
441 | *barSet << m_model->data(m_model->index(i, m), Qt::DisplayRole).toDouble(); |
|
|||
442 | appendBarSet(barSet); |
|
|||
443 | } |
|
|||
444 | } |
|
|||
445 | */ |
|
|||
446 | } |
|
|||
447 |
|
||||
448 | /*! |
|
|||
449 | \internal |
|
|||
450 | */ |
|
|||
451 | void QBarSeries::modelUpdated(QModelIndex topLeft, QModelIndex bottomRight) |
|
|||
452 | { |
|
|||
453 | Q_D(QBarSeries); |
|
|||
454 | d->modelUpdated(topLeft,bottomRight); |
|
|||
455 | /* |
|
|||
456 | Q_UNUSED(bottomRight) |
|
|||
457 |
|
||||
458 | if (m_mapOrientation == Qt::Vertical) |
|
|||
459 | { |
|
|||
460 | // model update is relevant to BarSeries if the change was made to the part of the model that was mapped to BarSeries |
|
|||
461 | if (topLeft.column() >= m_mapBarBottom && topLeft.column() <= m_mapBarTop && topLeft.row() >= m_mapFirst && topLeft.row() < m_mapFirst + m_mapCount) |
|
|||
462 | barsetAt(topLeft.column() - m_mapBarBottom)->setValue(topLeft.row() - m_mapFirst, m_model->data(topLeft, Qt::DisplayRole).toDouble()); |
|
|||
463 | } |
|
|||
464 | else |
|
|||
465 | { |
|
|||
466 | // model update is relevant to BarSeries if the change was made to the part of the model that was mapped to BarSeries |
|
|||
467 | if (topLeft.row() >= m_mapBarBottom && topLeft.row() <= m_mapBarTop && topLeft.column() >= m_mapFirst && topLeft.column() < m_mapFirst + m_mapCount) |
|
|||
468 | barsetAt(topLeft.row() - m_mapBarBottom)->setValue(topLeft.column() - m_mapFirst, m_model->data(topLeft, Qt::DisplayRole).toDouble()); |
|
|||
469 | } |
|
|||
470 | */ |
|
|||
471 | } |
|
|||
472 |
|
||||
473 | /*! |
|
|||
474 | \internal |
|
|||
475 | */ |
|
|||
476 | void QBarSeries::modelDataAdded(QModelIndex parent, int start, int end) |
|
|||
477 | { |
|
|||
478 | Q_D(QBarSeries); |
|
|||
479 | d->modelDataAdded(parent,start,end); |
|
|||
480 | /* |
|
|||
481 | if (m_mapOrientation == Qt::Vertical) { |
|
|||
482 | insertCategory(start - m_mapFirst, QString("Row: %1").arg(start + 1)); |
|
|||
483 | for (int i = 0; i <= m_mapBarTop - m_mapBarBottom; i++) { |
|
|||
484 | barsetAt(i)->insertValue(start - m_mapFirst, m_model->data(m_model->index(start, i), Qt::DisplayRole).toDouble()); |
|
|||
485 | } |
|
|||
486 | } else { |
|
|||
487 | insertCategory(start - m_mapFirst, QString("Column: %1").arg(start + 1)); |
|
|||
488 | for (int i = 0; i <= m_mapBarTop - m_mapBarBottom; i++) { |
|
|||
489 | barsetAt(i)->insertValue(start - m_mapFirst, m_model->data(m_model->index(i, start), Qt::DisplayRole).toDouble()); |
|
|||
490 | } |
|
|||
491 | } |
|
|||
492 | emit restructuredBars(); |
|
|||
493 | */ |
|
|||
494 | } |
|
|||
495 |
|
||||
496 | /*! |
|
|||
497 | \internal |
|
|||
498 | */ |
|
|||
499 | void QBarSeries::modelDataRemoved(QModelIndex parent, int start, int end) |
|
|||
500 | { |
|
|||
501 | Q_D(QBarSeries); |
|
|||
502 | d->modelDataRemoved(parent,start,end); |
|
|||
503 | /* |
|
|||
504 | Q_UNUSED(parent) |
|
|||
505 | Q_UNUSED(end) |
|
|||
506 |
|
||||
507 | removeCategory(start - m_mapFirst); |
|
|||
508 | for (int i = 0; i <= m_mapBarTop - m_mapBarBottom; i++) |
|
|||
509 | { |
|
|||
510 | barsetAt(i)->removeValue(start - m_mapFirst); |
|
|||
511 | } |
|
|||
512 | emit restructuredBars(); |
|
|||
513 | */ |
|
|||
514 | } |
|
|||
515 |
|
||||
516 | void QBarSeries::barsetChanged() |
|
|||
517 | { |
|
|||
518 | Q_D(QBarSeries); |
|
|||
519 | d->barsetChanged(); |
|
|||
520 | // emit updatedBars(); |
|
|||
521 | } |
|
233 | } | |
522 |
|
234 | |||
523 | QBarCategories QBarSeries::categories() const |
|
235 | QBarCategories QBarSeries::categories() const | |
@@ -773,7 +485,6 void QBarSeriesPrivate::barsetChanged() | |||||
773 |
|
485 | |||
774 | void QBarSeriesPrivate::scaleDomain(Domain& domain) |
|
486 | void QBarSeriesPrivate::scaleDomain(Domain& domain) | |
775 | { |
|
487 | { | |
776 | Q_Q(QBarSeries); |
|
|||
777 | qreal minX(domain.minX()); |
|
488 | qreal minX(domain.minX()); | |
778 | qreal minY(domain.minY()); |
|
489 | qreal minY(domain.minY()); | |
779 | qreal maxX(domain.maxX()); |
|
490 | qreal maxX(domain.maxX()); | |
@@ -781,8 +492,8 void QBarSeriesPrivate::scaleDomain(Domain& domain) | |||||
781 | int tickXCount(domain.tickXCount()); |
|
492 | int tickXCount(domain.tickXCount()); | |
782 | int tickYCount(domain.tickYCount()); |
|
493 | int tickYCount(domain.tickYCount()); | |
783 |
|
494 | |||
784 |
qreal x = |
|
495 | qreal x = m_internalModel->categoryCount(); | |
785 |
qreal y = |
|
496 | qreal y = max(); | |
786 | minX = qMin(minX, x); |
|
497 | minX = qMin(minX, x); | |
787 | minY = qMin(minY, y); |
|
498 | minY = qMin(minY, y); | |
788 | maxX = qMax(maxX, x); |
|
499 | maxX = qMax(maxX, x); |
@@ -61,65 +61,21 public: | |||||
61 | bool setModel(QAbstractItemModel *model); |
|
61 | bool setModel(QAbstractItemModel *model); | |
62 | void setModelMapping(int categories, int bottomBoundary, int topBoundary, Qt::Orientation orientation = Qt::Vertical); |
|
62 | void setModelMapping(int categories, int bottomBoundary, int topBoundary, Qt::Orientation orientation = Qt::Vertical); | |
63 |
|
63 | |||
64 | public: |
|
|||
65 | // TODO: Functions below this are not part of api and will be moved |
|
|||
66 | // to private implementation, when we start using it |
|
|||
67 | // TODO: TO PIMPL ---> |
|
|||
68 | QBarSet* barsetAt(int index); |
|
|||
69 | QString categoryName(int category); |
|
|||
70 | qreal min(); |
|
|||
71 | qreal max(); |
|
|||
72 | qreal valueAt(int set, int category); |
|
|||
73 | qreal percentageAt(int set, int category); |
|
|||
74 | qreal categorySum(int category); |
|
|||
75 | qreal absoluteCategorySum(int category); |
|
|||
76 | qreal maxCategorySum(); |
|
|||
77 | BarChartModel& modelInternal(); |
|
|||
78 | // <--- TO PIMPL |
|
|||
79 |
|
||||
80 | protected: |
|
64 | protected: | |
81 | explicit QBarSeries(QBarSeriesPrivate &d,QObject *parent = 0); |
|
65 | explicit QBarSeries(QBarSeriesPrivate &d,QObject *parent = 0); | |
82 |
|
66 | |||
83 | Q_SIGNALS: |
|
67 | Q_SIGNALS: | |
84 |
void clicked(QBarSet *barset, QString category, Qt::MouseButtons button); |
|
68 | void clicked(QBarSet *barset, QString category, Qt::MouseButtons button); | |
85 | void selected(); |
|
69 | void selected(); | |
86 | // |
|
|||
87 | void updatedBars(); |
|
|||
88 | void restructuredBars(); |
|
|||
89 |
|
||||
90 | // TODO: internal signals, these to private implementation. |
|
|||
91 | // TODO: TO PIMPL ---> |
|
|||
92 | // void showToolTip(QPoint pos, QString tip); |
|
|||
93 | // <--- TO PIMPL |
|
|||
94 |
|
70 | |||
95 | public Q_SLOTS: |
|
71 | public Q_SLOTS: | |
96 | void setToolTipEnabled(bool enabled = true); // enables tooltips |
|
72 | void setToolTipEnabled(bool enabled = true); // enables tooltips | |
97 |
|
73 | |||
98 | // TODO: TO PIMPL ---> |
|
|||
99 | void barsetClicked(QString category, Qt::MouseButtons button); |
|
|||
100 | // <--- TO PIMPL |
|
|||
101 |
|
||||
102 | private Q_SLOTS: |
|
|||
103 | // slots for updating bars when data in model changes |
|
|||
104 | void modelUpdated(QModelIndex topLeft, QModelIndex bottomRight); |
|
|||
105 | void modelDataAdded(QModelIndex parent, int start, int end); |
|
|||
106 | void modelDataRemoved(QModelIndex parent, int start, int end); |
|
|||
107 | void barsetChanged(); |
|
|||
108 |
|
||||
109 | protected: |
|
74 | protected: | |
110 | Q_DECLARE_PRIVATE(QBarSeries) |
|
75 | Q_DECLARE_PRIVATE(QBarSeries) | |
111 |
|
76 | friend class BarChartItem; | ||
112 | /* |
|
77 | friend class PercentBarChartItem; | |
113 | BarChartModel *m_internalModel; // TODO: this may change... current "2 models" situation doesn't look good. |
|
78 | friend class StackedBarChartItem; | |
114 |
|
||||
115 | // QAbstractItemModel* m_model; |
|
|||
116 | int m_mapCategories; |
|
|||
117 | int m_mapBarBottom; |
|
|||
118 | int m_mapBarTop; |
|
|||
119 | int m_mapFirst; |
|
|||
120 | int m_mapCount; |
|
|||
121 | Qt::Orientation m_mapOrientation; |
|
|||
122 | */ |
|
|||
123 | }; |
|
79 | }; | |
124 |
|
80 | |||
125 | QTCOMMERCIALCHART_END_NAMESPACE |
|
81 | QTCOMMERCIALCHART_END_NAMESPACE |
@@ -73,6 +73,7 private: | |||||
73 | Q_DISABLE_COPY(QBarSet) |
|
73 | Q_DISABLE_COPY(QBarSet) | |
74 | friend class QBarSeries; |
|
74 | friend class QBarSeries; | |
75 | friend class BarLegendMarker; |
|
75 | friend class BarLegendMarker; | |
|
76 | friend class BarChartItem; | |||
76 | }; |
|
77 | }; | |
77 |
|
78 | |||
78 | QTCOMMERCIALCHART_END_NAMESPACE |
|
79 | QTCOMMERCIALCHART_END_NAMESPACE |
@@ -21,6 +21,7 | |||||
21 | #include "qstackedbarseries.h" |
|
21 | #include "qstackedbarseries.h" | |
22 | #include "qstackedbarseries_p.h" |
|
22 | #include "qstackedbarseries_p.h" | |
23 | #include "stackedbarchartitem_p.h" |
|
23 | #include "stackedbarchartitem_p.h" | |
|
24 | #include "barchartmodel_p.h" | |||
24 | #include "chartdataset_p.h" |
|
25 | #include "chartdataset_p.h" | |
25 | #include "charttheme_p.h" |
|
26 | #include "charttheme_p.h" | |
26 | #include "chartanimator_p.h" |
|
27 | #include "chartanimator_p.h" | |
@@ -69,7 +70,6 QStackedBarSeriesPrivate::QStackedBarSeriesPrivate(QBarCategories categories, QS | |||||
69 |
|
70 | |||
70 | void QStackedBarSeriesPrivate::scaleDomain(Domain& domain) |
|
71 | void QStackedBarSeriesPrivate::scaleDomain(Domain& domain) | |
71 | { |
|
72 | { | |
72 | Q_Q(QStackedBarSeries); |
|
|||
73 | qreal minX(domain.minX()); |
|
73 | qreal minX(domain.minX()); | |
74 | qreal minY(domain.minY()); |
|
74 | qreal minY(domain.minY()); | |
75 | qreal maxX(domain.maxX()); |
|
75 | qreal maxX(domain.maxX()); | |
@@ -77,8 +77,8 void QStackedBarSeriesPrivate::scaleDomain(Domain& domain) | |||||
77 | int tickXCount(domain.tickXCount()); |
|
77 | int tickXCount(domain.tickXCount()); | |
78 | int tickYCount(domain.tickYCount()); |
|
78 | int tickYCount(domain.tickYCount()); | |
79 |
|
79 | |||
80 |
qreal x = |
|
80 | qreal x = m_internalModel->categoryCount(); | |
81 |
qreal y = |
|
81 | qreal y = maxCategorySum(); | |
82 | minX = qMin(minX, x); |
|
82 | minX = qMin(minX, x); | |
83 | minY = qMin(minY, y); |
|
83 | minY = qMin(minY, y); | |
84 | maxX = qMax(maxX, x); |
|
84 | maxX = qMax(maxX, x); |
@@ -21,6 +21,8 | |||||
21 | #include "stackedbarchartitem_p.h" |
|
21 | #include "stackedbarchartitem_p.h" | |
22 | #include "bar_p.h" |
|
22 | #include "bar_p.h" | |
23 | #include "barlabel_p.h" |
|
23 | #include "barlabel_p.h" | |
|
24 | #include "qbarset_p.h" | |||
|
25 | #include "qbarseries_p.h" | |||
24 | #include "qbarset.h" |
|
26 | #include "qbarset.h" | |
25 |
|
27 | |||
26 | QTCOMMERCIALCHART_BEGIN_NAMESPACE |
|
28 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | |
@@ -49,7 +51,7 QVector<QRectF> StackedBarChartItem::calculateLayout() | |||||
49 | for (int category = 0; category < categotyCount; category++) { |
|
51 | for (int category = 0; category < categotyCount; category++) { | |
50 | qreal yPos = height + scale * m_domainMinY; |
|
52 | qreal yPos = height + scale * m_domainMinY; | |
51 | for (int set=0; set < m_series->barsetCount(); set++) { |
|
53 | for (int set=0; set < m_series->barsetCount(); set++) { | |
52 | QBarSet* barSet = m_series->barsetAt(set); |
|
54 | QBarSet* barSet = m_series->d_func()->barsetAt(set); | |
53 |
|
55 | |||
54 | qreal barHeight = barSet->valueAt(category) * scale; |
|
56 | qreal barHeight = barSet->valueAt(category) * scale; | |
55 | Bar* bar = m_bars.at(itemIndex); |
|
57 | Bar* bar = m_bars.at(itemIndex); |
@@ -314,8 +314,9 void TableWidget::updateChartType(bool toggle) | |||||
314 | barSeries->setModelMapping(5, 2, 4, Qt::Vertical); |
|
314 | barSeries->setModelMapping(5, 2, 4, Qt::Vertical); | |
315 | barSeries->setToolTipEnabled(true); |
|
315 | barSeries->setToolTipEnabled(true); | |
316 | m_chart->addSeries(barSeries); |
|
316 | m_chart->addSeries(barSeries); | |
317 |
|
|
317 | QList<QBarSet*> barsets = barSeries->barSets(); | |
318 | seriesColorHex = "#" + QString::number(barSeries->barsetAt(i)->brush().color().rgb(), 16).right(6).toUpper(); |
|
318 | for (int i = 0; i < barsets.count(); i++) { | |
|
319 | seriesColorHex = "#" + QString::number(barsets.at(i)->brush().color().rgb(), 16).right(6).toUpper(); | |||
319 | m_model->addMapping(seriesColorHex, QRect(2 + i, 0, 1, 1000)); |
|
320 | m_model->addMapping(seriesColorHex, QRect(2 + i, 0, 1, 1000)); | |
320 | } |
|
321 | } | |
321 | } |
|
322 | } |
General Comments 0
You need to be logged in to leave comments.
Login now