/**************************************************************************** ** ** Copyright (C) 2012 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** ** This file is part of the Qt Commercial Charts Add-on. ** ** $QT_BEGIN_LICENSE$ ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Commercial License Agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. ** ** If you have questions regarding the use of this file, please use ** contact form at http://qt.digia.com ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qchartglobal.h" #include "legendmarker_p.h" #include #include #include #include #include #include #include QTCOMMERCIALCHART_BEGIN_NAMESPACE LegendMarker::LegendMarker(QSeries *series, QGraphicsItem *parent) : QGraphicsObject(parent), m_pos(0,0), m_size(0,0), m_boundingRect(0,0,0,0), m_markerBoundingRect(0,0,0,0), m_series(series), m_barset(0), m_pieslice(0), m_textItem(new QGraphicsSimpleTextItem(this)) { setAcceptedMouseButtons(Qt::LeftButton|Qt::RightButton); } LegendMarker::LegendMarker(QSeries *series, QBarSet *barset, QGraphicsItem *parent) : QGraphicsObject(parent), m_pos(0,0), m_size(0,0), m_boundingRect(0,0,0,0), m_markerBoundingRect(0,0,0,0), m_series(series), m_barset(barset), m_pieslice(0), m_textItem(new QGraphicsSimpleTextItem(this)) { setAcceptedMouseButtons(Qt::LeftButton|Qt::RightButton); } LegendMarker::LegendMarker(QSeries *series, QPieSlice *pieslice, QGraphicsItem *parent) : QGraphicsObject(parent), m_pos(0,0), m_size(0,0), m_boundingRect(0,0,0,0), m_markerBoundingRect(0,0,0,0), m_series(series), m_barset(0), m_pieslice(pieslice), m_textItem(new QGraphicsSimpleTextItem(this)) { setAcceptedMouseButtons(Qt::LeftButton|Qt::RightButton); } void LegendMarker::setPos(qreal x, qreal y) { m_pos = QPointF(x,y); layoutChanged(); } void LegendMarker::setPen(const QPen &pen) { m_pen = pen; } QPen LegendMarker::pen() const { return m_pen; } void LegendMarker::setBrush(const QBrush &brush) { m_brush = brush; } QBrush LegendMarker::brush() const { return m_brush; } void LegendMarker::setName(const QString name) { m_textItem->setText(name); layoutChanged(); } QString LegendMarker::name() const { return m_textItem->text(); } QSeries* LegendMarker::series() const { return m_series; } void LegendMarker::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option) Q_UNUSED(widget) painter->setPen(m_pen); painter->setBrush(m_brush); painter->drawRect(m_markerBoundingRect); } QRectF LegendMarker::boundingRect() const { return m_boundingRect; } void LegendMarker::layoutChanged() { QSizeF markerSize(10,10); qreal margin = 2; m_size.setHeight(markerSize.height() + 2 * margin); m_size.setWidth(m_textItem->boundingRect().width() + markerSize.width() + 3 * margin); m_boundingRect = QRectF(m_pos.x(),m_pos.y(),m_size.width(),m_size.height()); m_markerBoundingRect = QRectF(m_pos.x() + margin, m_pos.y() + margin, markerSize.width(),markerSize.height()); m_textItem->setPos(m_pos.x() + markerSize.width() + 2 * margin, m_pos.y() + margin); } void LegendMarker::mousePressEvent(QGraphicsSceneMouseEvent *event) { switch (m_series->type()) { case QSeries::SeriesTypeLine: case QSeries::SeriesTypeArea: case QSeries::SeriesTypeScatter: case QSeries::SeriesTypeSpline: { emit clicked(m_series,event->button()); break; } case QSeries::SeriesTypeBar: case QSeries::SeriesTypeStackedBar: case QSeries::SeriesTypePercentBar: { emit clicked(m_barset,event->button()); break; } case QSeries::SeriesTypePie: { emit clicked(m_pieslice,event->button()); break; } default: { break; } } } void LegendMarker::changed() { setPen(Qt::NoPen); switch (m_series->type()) { case QSeries::SeriesTypeArea: { QAreaSeries* s = static_cast (m_series); setBrush(s->brush()); setName(s->name()); break; } case QSeries::SeriesTypeLine: case QSeries::SeriesTypeSpline: { QXYSeries* s = static_cast (m_series); setBrush(QBrush(s->pen().color(),Qt::SolidPattern)); setName(s->name()); break; } case QSeries::SeriesTypeScatter: { QXYSeries* s = static_cast (m_series); setBrush(s->brush()); setName(s->name()); break; } case QSeries::SeriesTypeBar: case QSeries::SeriesTypeStackedBar: case QSeries::SeriesTypePercentBar: { setBrush(m_barset->brush()); setName(m_barset->name()); break; } case QSeries::SeriesTypePie: { setBrush(m_pieslice->brush()); setName(m_pieslice->label()); break; } default: { setBrush(Qt::NoBrush); break; } } } #include "moc_legendmarker_p.cpp" QTCOMMERCIALCHART_END_NAMESPACE