#include "bargroupbase.h" #include "bar_p.h" #include "barlabel_p.h" #include "separator_p.h" #include QTCOMMERCIALCHART_BEGIN_NAMESPACE BarGroupBase::BarGroupBase(BarChartModel& model, QGraphicsItem *parent) : ChartItem(parent) ,mBarDefaultWidth(20) // TODO: remove hard coding, when we have layout code ready ,mLayoutSet(false) ,mLayoutDirty(true) ,mSeparatorsVisible(true) ,mModel(model) // ,mSeries(series) { dataChanged(); } void BarGroupBase::setSeparatorsVisible(bool visible) { mSeparatorsVisible = visible; } void BarGroupBase::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { // qDebug() << "BarGroupBase::paint" << childItems().count(); if (!mLayoutSet) { qDebug() << "BarGroupBase::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); } // } } QRectF BarGroupBase::boundingRect() const { return QRectF(0,0,mWidth,mHeight); } void BarGroupBase::setBarWidth( int w ) { mBarDefaultWidth = w; } int BarGroupBase::addColor( QColor color ) { // qDebug() << "BarGroupBase::addColor"; int colorIndex = mColors.count(); mColors.append(color); return colorIndex; } void BarGroupBase::resetColors() { // qDebug() << "BarGroupBase::resetColors"; mColors.clear(); } void BarGroupBase::dataChanged() { // TODO: performance optimizations. Do we really need to delete and create items every time data is changed or can we reuse them? // Delete old bars foreach (QGraphicsItem* item, childItems()) { delete item; } // Create new graphic items for bars int totalItems = mModel.countTotalItems(); // mSeries.countTotalItems(); for (int i=0; iset(mModel.label(i)); childItems().append(label); } count = mModel.countCategories() - 1; // mSeries.countColumns() - 1; // There is one less separator than columns for (int i=0; isetColor(QColor(255,0,0,255)); // TODO: color for separations from theme childItems().append(sep); } // TODO: if (autolayout) { layoutChanged() } or something mLayoutDirty = true; } //handlers void BarGroupBase::handleModelChanged(int index) { qDebug() << "BarGroupBase::handleModelChanged" << index; dataChanged(); } void BarGroupBase::handleDomainChanged(const Domain& domain) { // qDebug() << "BarGroupBase::handleDomainChanged"; // TODO: Figure out the use case for this. // Affects the size of visible item, so layout is changed. // layoutChanged(); } void BarGroupBase::handleGeometryChanged(const QRectF& rect) { // qDebug() << "BarGroupBase::handleGeometryChanged"; mWidth = rect.width(); mHeight = rect.height(); layoutChanged(); mLayoutSet = true; setPos(rect.topLeft()); } #include "moc_bargroupbase.cpp" QTCOMMERCIALCHART_END_NAMESPACE