##// END OF EJS Templates
Refactored themes; now enabled for line, scatter and pies...
Refactored themes; now enabled for line, scatter and pies Draft themes implemented for most of the series types. The themes are still missing most of the features, only the line color and line width can be defined.

File last commit:

r103:399cbfcd557c
r103:399cbfcd557c
Show More
stackedbargroup.cpp
144 lines | 3.4 KiB | text/x-c | CppLexer
/ src / barchart / stackedbargroup.cpp
sauimone
percent bar chart
r101 #include "percentbargroup.h"
sauimone
added missing example files :)
r96 #include "bar.h"
#include <QDebug>
QTCOMMERCIALCHART_BEGIN_NAMESPACE
sauimone
percent bar chart
r101 PercentBarGroup::PercentBarGroup(PercentBarChartSeries& series, QGraphicsItem *parent) :
Tero Ahola
Refactored themes; now enabled for line, scatter and pies...
r103 QGraphicsItem(parent)
,mSeries(series)
,mLayoutSet(false)
,mLayoutDirty(true)
,mBarDefaultWidth(20) // TODO: remove hard coding, when we have layout code ready
sauimone
added missing example files :)
r96 {
dataChanged();
}
Tero Ahola
Refactored themes; now enabled for line, scatter and pies...
r103 void PercentBarGroup::setPos(const QPointF & pos)
{
qDebug() << "PercentBarGroup::setPos";
// TODO:
}
sauimone
added missing example files :)
r96
Tero Ahola
Refactored themes; now enabled for line, scatter and pies...
r103 void PercentBarGroup::resize(const QSize& size)
sauimone
added missing example files :)
r96 {
Tero Ahola
Refactored themes; now enabled for line, scatter and pies...
r103 qDebug() << "PercentBarGroup::resize";
sauimone
added missing example files :)
r96 mWidth = size.width();
mHeight = size.height();
layoutChanged();
mLayoutSet = true;
}
sauimone
percent bar chart
r101 void PercentBarGroup::setPlotDomain(const PlotDomain& data)
sauimone
added missing example files :)
r96 {
sauimone
percent bar chart
r101 qDebug() << "PercentBarGroup::setPlotDomain";
sauimone
added missing example files :)
r96 // TODO:
}
Tero Ahola
Refactored themes; now enabled for line, scatter and pies...
r103 void PercentBarGroup::setTheme(ChartTheme *theme)
{
qDebug() << "PercentBarGroup::setTheme";
// TODO:
}
sauimone
percent bar chart
r101 void PercentBarGroup::setBarWidth( int w )
sauimone
added missing example files :)
r96 {
mBarDefaultWidth = w;
}
sauimone
percent bar chart
r101 int PercentBarGroup::addColor( QColor color )
sauimone
added missing example files :)
r96 {
int colorIndex = mColors.count();
mColors.append(color);
return colorIndex;
}
sauimone
percent bar chart
r101 void PercentBarGroup::resetColors()
sauimone
added missing example files :)
r96 {
mColors.clear();
}
sauimone
percent bar chart
r101 void PercentBarGroup::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
sauimone
added missing example files :)
r96 {
if (!mLayoutSet) {
qDebug() << "QBarChart::paint called without layout set. Aborting.";
return;
}
if (mLayoutDirty) {
// Layout or data has changed. Need to redraw.
foreach(QGraphicsItem* i, childItems()) {
i->paint(painter,option,widget);
}
}
}
sauimone
percent bar chart
r101 QRectF PercentBarGroup::boundingRect() const
sauimone
added missing example files :)
r96 {
return QRectF(0,0,mWidth,mHeight);
}
sauimone
percent bar chart
r101 void PercentBarGroup::dataChanged()
sauimone
added missing example files :)
r96 {
qDebug() << "QBarChart::dataChanged mSeries";
// Find out maximum and minimum of all series
mMax = mSeries.max();
mMin = mSeries.min();
// Delete old bars
// Is this correct way to delete childItems?
foreach (QGraphicsItem* item, childItems()) {
delete item;
}
// Create new graphic items for bars
int totalItems = mSeries.countTotalItems();
for (int i=0; i<totalItems; i++) {
Bar *bar = new Bar(this);
childItems().append(bar);
}
mLayoutDirty = true;
}
sauimone
percent bar chart
r101 void PercentBarGroup::layoutChanged()
sauimone
added missing example files :)
r96 {
// Scale bars to new layout
// Layout for bars:
if (mSeries.countRows() <= 0) {
// Nothing to do.
return;
}
// TODO: better way to auto-layout
sauimone
bar chart layout fixing
r99 // Use reals for accurancy (we might get some compiler warnings... :)
sauimone
added missing example files :)
r96 int count = mSeries.countColumns();
int itemIndex(0);
sauimone
fixing layout bug on stacked bar chart
r98 qreal tW = mWidth;
qreal tC = count+1;
qreal xStep = (tW/tC);
qreal xPos = ((tW/tC) + mBarDefaultWidth / 2);
sauimone
added missing example files :)
r96 for (int column = 0; column < mSeries.countColumns(); column++) {
sauimone
percent bar chart
r101 qreal colSum = mSeries.columnSum(column);
qreal h = mHeight;
qreal scale = (h / colSum);
sauimone
fixing layout bug on stacked bar chart
r98 qreal yPos = h;
sauimone
added missing example files :)
r96 for (int row=0; row < mSeries.countRows(); row++) {
sauimone
fixing layout bug on stacked bar chart
r98 qreal barHeight = mSeries.valueAt(row, column) * scale;
sauimone
added missing example files :)
r96 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);
itemIndex++;
sauimone
Some fixes to bar charts. Now bars draw almost correctly
r97 yPos -= barHeight;
sauimone
added missing example files :)
r96 }
sauimone
fixing layout bug on stacked bar chart
r98 xPos += xStep;
sauimone
added missing example files :)
r96 }
mLayoutDirty = true;
}
QTCOMMERCIALCHART_END_NAMESPACE