##// END OF EJS Templates
const fix
const fix

File last commit:

r766:a9c9a730026d
r777:25614395a437
Show More
legendmarker.cpp
173 lines | 3.8 KiB | text/x-c | CppLexer
#include "qchartglobal.h"
#include "legendmarker_p.h"
#include <qpieslice.h>
#include <qbarset.h>
#include <qxyseries.h>
#include <QPainter>
#include <QGraphicsSceneEvent>
#include <QGraphicsSimpleTextItem>
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<QXYSeries*> (mSeries);
setBrush(s->brush());
setName(s->name());
break;
}
case LegendMarkerTypeBarset: {
setBrush(mBarset->brush());
setName(mBarset->name());
break;
}
case LegendMarkerTypePieslice: {
setBrush(mPieslice->brush());
setName(mPieslice->label());
break;
}
}
}
#include "moc_legendmarker_p.cpp"
QTCOMMERCIALCHART_END_NAMESPACE