##// END OF EJS Templates
added labels to series, intergrated with test app. minor hack to test app
added labels to series, intergrated with test app. minor hack to test app

File last commit:

r165:2ff4f264aa68
r167:023d2c8150a8
Show More
percentbargroup.cpp
77 lines | 2.4 KiB | text/x-c | CppLexer
#include "percentbargroup.h"
#include "bar_p.h"
#include "barlabel_p.h"
#include "separator_p.h"
#include <QDebug>
QTCOMMERCIALCHART_BEGIN_NAMESPACE
PercentBarGroup::PercentBarGroup(PercentBarChartSeries& series, QGraphicsItem *parent) :
BarGroupBase(series, parent)
{
}
void PercentBarGroup::layoutChanged()
{
// Scale bars to new layout
// Layout for bars:
if (mModel.countRows() <= 0) {
// Nothing to do.
return;
}
if (childItems().count() == 0) {
qDebug() << "WARNING: PercentBarGroup::layoutChanged called before graphics items are created!";
return;
}
// TODO: better way to auto-layout
// Use reals for accurancy (we might get some compiler warnings... :)
int count = mModel.countColumns();
int itemIndex(0);
qreal tW = mWidth;
qreal tC = count+1;
qreal xStep = (tW/tC);
qreal xPos = ((tW/tC) - mBarDefaultWidth / 2);
int labelIndex = mModel.countColumns() * mModel.countRows();
for (int column = 0; column < mModel.countColumns(); column++) {
qreal colSum = mModel.columnSum(column);
qreal h = mHeight;
qreal scale = (h / colSum);
qreal yPos = h;
for (int row=0; row < mModel.countRows(); row++) {
qreal barHeight = mModel.valueAt(row, column) * scale;
Bar* bar = reinterpret_cast<Bar*> (childItems().at(itemIndex));
// TODO: width settable per bar?
bar->resize(mBarDefaultWidth, barHeight);
bar->setColor(mColors.at(row));
bar->setPos(xPos, yPos-barHeight);
itemIndex++;
yPos -= barHeight;
}
// TODO: Layout for labels, remove magic number
BarLabel* label = reinterpret_cast<BarLabel*> (childItems().at(labelIndex));
label->setPos(xPos, mHeight + 20);
labelIndex++;
xPos += xStep;
}
// Position separators
int separatorIndex = labelIndex; // Separators are after labels in childItems(). TODO: better way to store these?
xPos = xStep + xStep/2; // Initial position is between first and second group. ie one and half steps from left.
for (int s=0; s < mModel.countColumns() - 1; s++) {
Separator* sep = reinterpret_cast<Separator*> (childItems().at(separatorIndex));
sep->setPos(xPos,0);
sep->setSize(QSizeF(1,mHeight));
xPos += xStep;
separatorIndex++;
}
mLayoutDirty = true;
}
QTCOMMERCIALCHART_END_NAMESPACE