mirror of
https://github.com/fralx/LimeReport.git
synced 2024-12-24 00:33:02 +03:00
0fca7169d3
except those placed in 3rdparty directories.
81 lines
2.8 KiB
C++
81 lines
2.8 KiB
C++
#include "lrhorizontalbarchart.h"
|
|
|
|
namespace LimeReport {
|
|
|
|
void HorizontalBarChart::paintChart(QPainter* painter, QRectF chartRect)
|
|
{
|
|
updateMinAndMaxValues();
|
|
|
|
const qreal valuesVMargin = this->valuesVMargin(painter);
|
|
|
|
QRectF calcRect = verticalLabelsRect(
|
|
painter,
|
|
chartRect.adjusted(hPadding(chartRect), vPadding(chartRect) * 2, -(chartRect.width() * 0.9),
|
|
-(vPadding(chartRect) * 2 + valuesVMargin)));
|
|
|
|
qreal barsShift = calcRect.width();
|
|
|
|
paintHorizontalGrid(painter,
|
|
chartRect.adjusted(hPadding(chartRect) + barsShift, vPadding(chartRect),
|
|
-(hPadding(chartRect)), -vPadding(chartRect)));
|
|
|
|
paintHorizontalBars(painter,
|
|
chartRect.adjusted(hPadding(chartRect) + barsShift, vPadding(chartRect) * 2,
|
|
-(hPadding(chartRect)), -(vPadding(chartRect) * 2)));
|
|
|
|
paintVerticalLabels(painter, calcRect);
|
|
}
|
|
|
|
void HorizontalBarChart::paintHorizontalBars(QPainter* painter, QRectF barsRect)
|
|
{
|
|
if (seriesCount() == 0)
|
|
return;
|
|
|
|
painter->save();
|
|
painter->setRenderHint(QPainter::Antialiasing, false);
|
|
|
|
const AxisData& yAxisData = this->yAxisData();
|
|
const qreal delta = yAxisData.delta();
|
|
|
|
const qreal verticalOffset = painter->fontMetrics().height();
|
|
qreal vStep = (barsRect.height() - verticalOffset) / valuesCount() / seriesCount();
|
|
qreal hStep = (barsRect.width()
|
|
- painter->fontMetrics().boundingRect(QString::number(maxValue())).width())
|
|
/ delta;
|
|
|
|
if (!m_chartItem->series().isEmpty() && (m_chartItem->itemMode() != DesignMode)) {
|
|
qreal curVOffset = barsRect.top();
|
|
if (m_chartItem->horizontalAxisOnTop()) {
|
|
curVOffset += verticalOffset;
|
|
}
|
|
foreach (SeriesItem* series, m_chartItem->series()) {
|
|
painter->setBrush(series->color());
|
|
qreal y = curVOffset;
|
|
foreach (qreal value, series->data()->values()) {
|
|
painter->drawRect(
|
|
QRectF((-minValue() * hStep) + barsRect.left(), y, value * hStep, vStep));
|
|
y += vStep * seriesCount();
|
|
}
|
|
curVOffset += vStep;
|
|
}
|
|
} else {
|
|
qreal curVOffset = barsRect.top();
|
|
if (m_chartItem->horizontalAxisOnTop()) {
|
|
curVOffset += verticalOffset;
|
|
}
|
|
int curColor = 0;
|
|
for (int i = 0; i < 9; ++i) {
|
|
if (curColor == 3)
|
|
curColor = 0;
|
|
painter->setBrush(color_map[curColor]);
|
|
painter->drawRect(
|
|
QRectF(barsRect.left(), curVOffset, designValues()[i] * hStep, vStep));
|
|
curVOffset += vStep;
|
|
curColor++;
|
|
}
|
|
}
|
|
painter->restore();
|
|
}
|
|
|
|
} // namespace LimeReport
|