#include "qchartglobal.h" #include "legendmarker_p.h" #include #include #include #include #include #include QTCOMMERCIALCHART_BEGIN_NAMESPACE LegendMarker::LegendMarker(QSeries* series, QGraphicsItem *parent) : QGraphicsObject(parent) ,mPos(0,0) ,mSize(0,0) ,mBoundingRect(0,0,0,0) ,mMarkerBoundingRect(0,0,0,0) ,mSeries(series) ,mBarset(0) ,mPieslice(0) ,mType(LegendMarkerTypeSeries) ,mTextItem(new QGraphicsSimpleTextItem(this)) { setAcceptedMouseButtons(Qt::LeftButton|Qt::RightButton); } LegendMarker::LegendMarker(QSeries *series, QBarSet *barset, QGraphicsItem *parent) : QGraphicsObject(parent) ,mPos(0,0) ,mSize(0,0) ,mBoundingRect(0,0,0,0) ,mMarkerBoundingRect(0,0,0,0) ,mSeries(series) ,mBarset(barset) ,mPieslice(0) ,mType(LegendMarkerTypeBarset) ,mTextItem(new QGraphicsSimpleTextItem(this)) { setAcceptedMouseButtons(Qt::LeftButton|Qt::RightButton); } LegendMarker::LegendMarker(QSeries *series, QPieSlice *pieslice, QGraphicsItem *parent) : QGraphicsObject(parent) ,mPos(0,0) ,mSize(0,0) ,mBoundingRect(0,0,0,0) ,mMarkerBoundingRect(0,0,0,0) ,mSeries(series) ,mBarset(0) ,mPieslice(pieslice) ,mType(LegendMarkerTypePieslice) ,mTextItem(new QGraphicsSimpleTextItem(this)) { setAcceptedMouseButtons(Qt::LeftButton|Qt::RightButton); } void LegendMarker::setPos(qreal x, qreal y) { mPos = QPointF(x,y); layoutChanged(); } void LegendMarker::setPen(const QPen pen) { mPen = pen; } QPen LegendMarker::pen() const { return mPen; } void LegendMarker::setBrush(const QBrush brush) { mBrush = brush; } QBrush LegendMarker::brush() const { return mBrush; } void LegendMarker::setName(const QString name) { mTextItem.setText(name); layoutChanged(); } QString LegendMarker::name() const { return mTextItem.text(); } QSeries* LegendMarker::series() const { return mSeries; } void LegendMarker::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option) Q_UNUSED(widget) painter->setPen(mPen); painter->setBrush(mBrush); painter->drawRect(mMarkerBoundingRect); } QRectF LegendMarker::boundingRect() const { return mBoundingRect; } void LegendMarker::layoutChanged() { QSizeF markerSize(10,10); qreal margin = 2; mSize.setHeight(markerSize.height() + 2 * margin); mSize.setWidth(mTextItem.boundingRect().width() + markerSize.width() + 3 * margin); mBoundingRect = QRectF(mPos.x(),mPos.y(),mSize.width(),mSize.height()); mMarkerBoundingRect = QRectF(mPos.x() + margin, mPos.y() + margin, markerSize.width(),markerSize.height()); mTextItem.setPos(mPos.x() + markerSize.width() + 2 * margin, mPos.y() + margin); } void LegendMarker::mousePressEvent(QGraphicsSceneMouseEvent *event) { switch (mType) { case LegendMarkerTypeSeries: { emit clicked(mSeries,event->button()); break; } case LegendMarkerTypeBarset: { emit clicked(mBarset,event->button()); break; } case LegendMarkerTypePieslice: { emit clicked(mPieslice,event->button()); break; } default: { break; } } } void LegendMarker::changed() { switch (mType) { case LegendMarkerTypeSeries: { QXYSeries* s = static_cast (mSeries); setBrush(s->brush()); setName(s->name()); break; } case LegendMarkerTypeBarset: { setBrush(mBarset->brush()); setName(mBarset->name()); break; } case LegendMarkerTypePieslice: { setBrush(mPieslice->sliceBrush()); setName(mPieslice->label()); break; } } } #include "moc_legendmarker_p.cpp" QTCOMMERCIALCHART_END_NAMESPACE