##// END OF EJS Templates
Fix assert failure with percent bar series...
Fix assert failure with percent bar series Category groups with zero values are not drawn. Task-number: QTRD-3087 Change-Id: Ie6f85e48398e751213b11d88c0c6a8de2ce8247a Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>

File last commit:

r2690:6c409268c150
r2690:6c409268c150
Show More
percentbarchartitem.cpp
171 lines | 6.6 KiB | text/x-c | CppLexer
/ src / barchart / vertical / percent / percentbarchartitem.cpp
Jani Honkonen
Add license headers
r794 /****************************************************************************
**
Titta Heikkala
Update copyright year...
r2688 ** Copyright (C) 2014 Digia Plc
Jani Honkonen
Add license headers
r794 ** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
Miikka Heikkinen
Qt Commercial -> Qt Enterprise...
r2574 ** This file is part of the Qt Enterprise Charts Add-on.
Jani Honkonen
Add license headers
r794 **
** $QT_BEGIN_LICENSE$
Miikka Heikkinen
Qt Commercial -> Qt Enterprise...
r2574 ** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
Jani Honkonen
Add license headers
r794 ** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia.
**
** If you have questions regarding the use of this file, please use
** contact form at http://qt.digia.com
** $QT_END_LICENSE$
**
****************************************************************************/
sauimone
combined barpresenterbase and barpresenter. renamed barchartpresenters to barchartitems
r666 #include "percentbarchartitem_p.h"
sauimone
renamed bar.h to bar_p.h
r118 #include "bar_p.h"
sauimone
renamed barseries files to abstractbarseries
r1586 #include "qabstractbarseries_p.h"
sauimone
Added pen & brush to QBarSet
r214 #include "qbarset.h"
sauimone
Removed QPointF from QBarSet
r1580 #include "qbarset_p.h"
sauimone
percent bar chart
r101
QTCOMMERCIALCHART_BEGIN_NAMESPACE
Michal Klocek
Refactors internals...
r2273 PercentBarChartItem::PercentBarChartItem(QAbstractBarSeries *series, QGraphicsItem* item) :
AbstractBarChartItem(series, item)
sauimone
percent bar chart
r101 {
Titta Heikkala
Added possibility to show series value...
r2689 connect(series, SIGNAL(labelsPositionChanged(QAbstractBarSeries::LabelsPosition)),
this, SLOT(handleLabelsPositionChanged()));
connect(series, SIGNAL(labelsFormatChanged(QString)), this, SLOT(positionLabels()));
sauimone
percent bar chart
r101 }
Marek Rosa
Bar animations refactored
r2316 void PercentBarChartItem::initializeLayout()
{
qreal categoryCount = m_series->d_func()->categoryCount();
qreal setCount = m_series->count();
qreal barWidth = m_series->d_func()->barWidth();
m_layout.clear();
for(int category = 0; category < categoryCount; category++) {
for (int set = 0; set < setCount; set++) {
QRectF rect;
QPointF topLeft;
QPointF bottomRight;
if (domain()->type() == AbstractDomain::XLogYDomain || domain()->type() == AbstractDomain::LogXLogYDomain) {
Marek Rosa
Negative values with log axis handled
r2356 topLeft = domain()->calculateGeometryPoint(QPointF(category - barWidth / 2, domain()->minY()), m_validData);
bottomRight = domain()->calculateGeometryPoint(QPointF(category + barWidth / 2, domain()->minY()), m_validData);
Marek Rosa
Bar animations refactored
r2316 } else {
Marek Rosa
Negative values with log axis handled
r2356 topLeft = domain()->calculateGeometryPoint(QPointF(category - barWidth / 2, 0), m_validData);
bottomRight = domain()->calculateGeometryPoint(QPointF(category + barWidth / 2, 0), m_validData);
Marek Rosa
Bar animations refactored
r2316 }
Marek Rosa
Negative values with log axis handled
r2356 if (!m_validData)
return;
Marek Rosa
Bar animations refactored
r2316 rect.setTopLeft(topLeft);
rect.setBottomRight(bottomRight);
m_layout.append(rect.normalized());
}
}
}
sauimone
animations to stacked and percent barchart
r694 QVector<QRectF> PercentBarChartItem::calculateLayout()
sauimone
percent bar chart
r101 {
sauimone
animations to stacked and percent barchart
r694 QVector<QRectF> layout;
sauimone
bug fix in bar charts. Crashed, if layout was set before data. Also integrated to test app.
r165
sauimone
removed categories from barseries. categories are now only on axis
r1321 // Use temporary qreals for accuracy
qreal categoryCount = m_series->d_func()->categoryCount();
Tero Ahola
Minor modifications to properties of abstract, area and bar series
r1462 qreal setCount = m_series->count();
Marek Rosa
New bar calculate layout
r2303 qreal barWidth = m_series->d_func()->barWidth();
sauimone
correct x-positioning for barcharts
r1228
Marek Rosa
New bar calculate layout
r2303 for(int category = 0; category < categoryCount; category++) {
qreal sum = 0;
qreal categorySum = m_series->d_func()->categorySum(category);
for (int set = 0; set < setCount; set++) {
qreal value = m_series->barSets().at(set)->at(category);
Marek Rosa
BarChartItems code cleanup
r2305 QRectF rect;
Titta Heikkala
Fix assert failure with percent bar series...
r2690 qreal topY = 0;
qreal newSum = value + sum;
if (newSum > 0)
topY = 100 * newSum / categorySum;
qreal bottomY = 0;
if (sum > 0)
bottomY = 100 * sum / categorySum;
QPointF topLeft = domain()->calculateGeometryPoint(QPointF(category - barWidth/2, topY), m_validData);
Marek Rosa
New bar calculate layout
r2303 QPointF bottomRight;
Marek Rosa
BarChartItems code cleanup
r2305 if (domain()->type() == AbstractDomain::XLogYDomain || domain()->type() == AbstractDomain::LogXLogYDomain)
Titta Heikkala
Fix assert failure with percent bar series...
r2690 bottomRight = domain()->calculateGeometryPoint(QPointF(category + barWidth/2, set ? bottomY : domain()->minY()), m_validData);
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 else
Titta Heikkala
Fix assert failure with percent bar series...
r2690 bottomRight = domain()->calculateGeometryPoint(QPointF(category + barWidth/2, set ? bottomY : 0), m_validData);
Marek Rosa
Negative values with log axis handled
r2356
Marek Rosa
New bar calculate layout
r2303 rect.setTopLeft(topLeft);
rect.setBottomRight(bottomRight);
Marek Rosa
Bar animations refactored
r2316 layout.append(rect.normalized());
Titta Heikkala
Fix assert failure with percent bar series...
r2690 sum = newSum;
sauimone
Floating values to bar charts
r263 }
sauimone
refactored barcharts. layout to derived classess other funtionality to base class
r126 }
Marek Rosa
BarChartItems code cleanup
r2305 return layout;
}
Marek Rosa
New bar calculate layout
r2303
Marek Rosa
BarChartItems code cleanup
r2305 void PercentBarChartItem::handleUpdatedBars()
{
// Handle changes in pen, brush, labels etc.
int categoryCount = m_series->d_func()->categoryCount();
int setCount = m_series->count();
int itemIndex(0);
Titta Heikkala
Added possibility to show series value...
r2689 static const QString valueTag(QLatin1String("@value"));
Marek Rosa
New bar calculate layout
r2303
Marek Rosa
BarChartItems code cleanup
r2305 for (int category = 0; category < categoryCount; category++) {
for (int set = 0; set < setCount; set++) {
QBarSetPrivate *barSet = m_series->d_func()->barsetAt(set)->d_ptr.data();
Bar *bar = m_bars.at(itemIndex);
bar->setPen(barSet->m_pen);
bar->setBrush(barSet->m_brush);
bar->update();
Miikka Heikkinen
Added HTML support for various text items...
r2539 QGraphicsTextItem *label = m_labels.at(itemIndex);
Marek Rosa
BarChartItems code cleanup
r2305 int p = m_series->d_func()->percentageAt(set, category) * 100;
QString vString(QString::number(p));
vString.truncate(3);
vString.append("%");
Titta Heikkala
Added possibility to show series value...
r2689 QString valueLabel;
if (m_series->labelsFormat().isEmpty()) {
valueLabel = vString;
} else {
valueLabel = m_series->labelsFormat();
valueLabel.replace(valueTag, QString::number(barSet->value(category)));
}
label->setHtml(valueLabel);
Marek Rosa
BarChartItems code cleanup
r2305 label->setFont(barSet->m_labelFont);
Miikka Heikkinen
Added HTML support for various text items...
r2539 label->setDefaultTextColor(barSet->m_labelBrush.color());
Marek Rosa
BarChartItems code cleanup
r2305 label->update();
itemIndex++;
}
}
sauimone
percent bar chart
r101 }
Titta Heikkala
Added possibility to show series value...
r2689 void PercentBarChartItem::handleLabelsPositionChanged()
{
positionLabels();
}
void PercentBarChartItem::positionLabels()
{
for (int i = 0; i < m_layout.count(); i++) {
QGraphicsTextItem *label = m_labels.at(i);
qreal xPos = m_layout.at(i).center().x() - label->boundingRect().center().x();
qreal yPos = 0;
if (m_series->labelsPosition() == QAbstractBarSeries::LabelsCenter)
yPos = m_layout.at(i).center().y() - label->boundingRect().center().y();
else if (m_series->labelsPosition() == QAbstractBarSeries::LabelsInsideEnd)
yPos = m_layout.at(i).top();
else if (m_series->labelsPosition() == QAbstractBarSeries::LabelsInsideBase)
yPos = m_layout.at(i).bottom() - label->boundingRect().height();
else if (m_series->labelsPosition() == QAbstractBarSeries::LabelsOutsideEnd)
yPos = m_layout.at(i).top() - label->boundingRect().height();
label->setPos(xPos, yPos);
label->setZValue(zValue() + 1);
}
}
sauimone
combined barpresenterbase and barpresenter. renamed barchartpresenters to barchartitems
r666 #include "moc_percentbarchartitem_p.cpp"
sauimone
moved tooltip to presenter
r288
sauimone
percent bar chart
r101 QTCOMMERCIALCHART_END_NAMESPACE