#include "barpresenterbase.h" #include "bar_p.h" #include "barlabel_p.h" #include "separator_p.h" #include QTCOMMERCIALCHART_BEGIN_NAMESPACE BarPresenterBase::BarPresenterBase(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) { dataChanged(); } void BarPresenterBase::setSeparatorsVisible(bool visible) { mSeparatorsVisible = visible; } void BarPresenterBase::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 BarPresenterBase::boundingRect() const { return QRectF(0,0,mWidth,mHeight); } void BarPresenterBase::setBarWidth( int w ) { mBarDefaultWidth = w; } void BarPresenterBase::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(); for (int i=0; iset(mModel.label(i)); childItems().append(label); } count = mModel.countCategories() - 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 BarPresenterBase::handleModelChanged(int index) { // qDebug() << "BarGroupBase::handleModelChanged" << index; dataChanged(); } void BarPresenterBase::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 BarPresenterBase::handleGeometryChanged(const QRectF& rect) { mWidth = rect.width(); mHeight = rect.height(); layoutChanged(); mLayoutSet = true; setPos(rect.topLeft()); } #include "moc_barpresenterbase.cpp" QTCOMMERCIALCHART_END_NAMESPACE