##// END OF EJS Templates
Fix crash with empty BarSet values...
Fix crash with empty BarSet values Change-Id: I6c82ad2985f7efc501ed0df34b8205875a369fd0 Task-number: QTBUG-51287 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@theqtcompany.com>

File last commit:

r2845:ae12522d475c
r2869:8f454d1f8b44
Show More
percentbarchartitem.cpp
160 lines | 5.9 KiB | text/x-c | CppLexer
/ src / charts / barchart / vertical / percent / percentbarchartitem.cpp
Titta Heikkala
Updated license headers...
r2845 /******************************************************************************
Jani Honkonen
Add license headers
r794 **
Titta Heikkala
Updated license headers...
r2845 ** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
Jani Honkonen
Add license headers
r794 **
Titta Heikkala
Updated license headers...
r2740 ** This file is part of the Qt Charts module.
Jani Honkonen
Add license headers
r794 **
Titta Heikkala
Updated license headers...
r2845 ** $QT_BEGIN_LICENSE:COMM$
Jani Honkonen
Add license headers
r794 **
Titta Heikkala
Updated license headers...
r2845 ** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see http://www.qt.io/terms-conditions. For further
** information use the contact form at http://www.qt.io/contact-us.
Jani Honkonen
Add license headers
r794 **
Titta Heikkala
Updated license headers...
r2845 ** $QT_END_LICENSE$
**
******************************************************************************/
Jani Honkonen
Add license headers
r794
Titta Heikkala
Fix include syntax...
r2714 #include <private/percentbarchartitem_p.h>
#include <private/bar_p.h>
#include <private/qabstractbarseries_p.h>
#include <QtCharts/QBarSet>
#include <private/qbarset_p.h>
sauimone
percent bar chart
r101
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_BEGIN_NAMESPACE
sauimone
percent bar chart
r101
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);
Miikka Heikkinen
Added QChart::localizeNumbers...
r2707 qreal p = m_series->d_func()->percentageAt(set, category) * 100.0;
QString vString(presenter()->numberToString(p, 'f', 0));
Titta Heikkala
Added possibility to show series value...
r2689 QString valueLabel;
Titta Heikkala
Fixed bar label visibility...
r2814 if (p == 0) {
label->setVisible(false);
Titta Heikkala
Added possibility to show series value...
r2689 } else {
Titta Heikkala
Fix bar series label visibility...
r2816 label->setVisible(m_series->isLabelsVisible());
Titta Heikkala
Fixed bar label visibility...
r2814 if (m_series->labelsFormat().isEmpty()) {
vString.append(QStringLiteral("%"));
valueLabel = vString;
} else {
valueLabel = m_series->labelsFormat();
valueLabel.replace(valueTag, vString);
}
Titta Heikkala
Added possibility to show series value...
r2689 }
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()
{
Miikka Heikkinen
Added support for bar series value label angle...
r2802 positionLabelsVertical();
Titta Heikkala
Added possibility to show series value...
r2689 }
sauimone
combined barpresenterbase and barpresenter. renamed barchartpresenters to barchartitems
r666 #include "moc_percentbarchartitem_p.cpp"
sauimone
moved tooltip to presenter
r288
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_END_NAMESPACE