diff options
Diffstat (limited to 'src/charts/legend/qlegendmarker.cpp')
-rw-r--r-- | src/charts/legend/qlegendmarker.cpp | 294 |
1 files changed, 294 insertions, 0 deletions
diff --git a/src/charts/legend/qlegendmarker.cpp b/src/charts/legend/qlegendmarker.cpp new file mode 100644 index 00000000..e170cb4d --- /dev/null +++ b/src/charts/legend/qlegendmarker.cpp @@ -0,0 +1,294 @@ +/**************************************************************************** + ** + ** Copyright (C) 2014 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 Enterprise Charts Add-on. + ** + ** $QT_BEGIN_LICENSE$ + ** Licensees holding valid Qt Enterprise licenses may use this file in + ** accordance with the Qt Enterprise 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 "qlegendmarker.h" +#include "qlegendmarker_p.h" +#include "legendmarkeritem_p.h" +#include "qlegend.h" +#include "qlegend_p.h" +#include "legendlayout_p.h" +#include <QFontMetrics> +#include <QGraphicsSceneEvent> +#include <QAbstractSeries> + +QT_CHARTS_BEGIN_NAMESPACE + +/*! + \class QLegendMarker + \inmodule Qt Charts + \brief LegendMarker object. + \mainclass + + QLegendMarker is abstract object that can be used to access markers inside QLegend. Legend marker consists of two + items: The colored box, which reflects the color of series and label, which is the name of series (or label of slice/barset + in case of pie or bar series) + The QLegendMarker is always related to one series. + + \image examples_percentbarchart_legend.png + + \sa QLegend +*/ +/*! + \enum QLegendMarker::LegendMarkerType + + The type of the legendmarker object. + + \value LegendMarkerTypeArea + \value LegendMarkerTypeBar + \value LegendMarkerTypePie + \value LegendMarkerTypeXY + \value LegendMarkerTypeBoxPlot +*/ + +/*! + \fn virtual LegendMarkerType QLegendMarker::type() = 0; + Returns the type of legendmarker. Type depends of the related series. LegendMarkerTypeXY is used for all QXYSeries derived + classes. +*/ + +/*! + \fn virtual QAbstractSeries* QLegendMarker::series() = 0; + Returns pointer to series, which is related to this marker. Marker is always related to some series. +*/ + +/*! + \fn void QLegendMarker::clicked(); + This signal is emitted, when marker is clicked with mouse. +*/ + +/*! + \fn void QLegendMarker::hovered(bool status); + This signal is emitted, when mouse is hovered over marker. \a status is true, when mouse enters the marker + and false when it leaves the marker. +*/ + +/*! + \fn void QLegendMarker::labelChanged() + This signal is emitted when the label of the legend marker has changed. +*/ + +/*! + \fn void QLegendMarker::labelBrushChanged() + This signal is emitted when the label brush of the legend marker has changed. +*/ + +/*! + \fn void QLegendMarker::fontChanged() + This signal is emitted when the (label) font of the legend marker has changed. +*/ + +/*! + \fn void QLegendMarker::penChanged() + This signal is emitted when the pen of the legend marker has changed. +*/ + +/*! + \fn void QLegendMarker::brushChanged() + This signal is emitted when the brush of the legend marker has changed. +*/ + +/*! + \fn void QLegendMarker::visibleChanged() + This signal is emitted when the visibility of the legend marker has changed. +*/ + +/*! + \property QLegendMarker::label + Label of the marker. This is the text that is shown in legend. +*/ + +/*! + \property QLegendMarker::labelBrush + Brush of the label +*/ + +/*! + \property QLegendMarker::font + Font of the label +*/ + +/*! + \property QLegendMarker::pen + Pen of the marker. This is the outline of the colored square. +*/ + +/*! + \property QLegendMarker::brush + Brush of the marker. This is the inside of the colored square. +*/ + +/*! + \property QLegendMarker::visible + Visibility of the legend marker. Affects label and the colored square. +*/ + + +/*! + \internal + */ +QLegendMarker::QLegendMarker(QLegendMarkerPrivate &d, QObject *parent) : + QObject(parent), + d_ptr(&d) +{ + d_ptr->m_item->setVisible(d_ptr->series()->isVisible()); +} + +/*! + Destructor of marker +*/ +QLegendMarker::~QLegendMarker() +{ +} + +/*! + Returns the label of the marker. +*/ +QString QLegendMarker::label() const +{ + return d_ptr->m_item->label(); +} + +/*! + Sets the \a label of marker. Note that changing name of series will also change label of its marker. +*/ +void QLegendMarker::setLabel(const QString &label) +{ + if (label.isEmpty()) { + d_ptr->m_customLabel = false; + } else { + d_ptr->m_customLabel = true; + d_ptr->m_item->setLabel(label); + } +} +/*! + Returns the brush which is used to draw label. +*/ +QBrush QLegendMarker::labelBrush() const +{ + return d_ptr->m_item->labelBrush(); +} + +/*! + Sets the \a brush of label +*/ +void QLegendMarker::setLabelBrush(const QBrush &brush) +{ + d_ptr->m_item->setLabelBrush(brush); +} + +/*! + Retuns the font of label +*/ +QFont QLegendMarker::font() const +{ + return d_ptr->m_item->font(); +} + +/*! + Sets the \a font of label +*/ +void QLegendMarker::setFont(const QFont &font) +{ + d_ptr->m_item->setFont(font); +} + +/*! + Returns the pen of marker item +*/ +QPen QLegendMarker::pen() const +{ + return d_ptr->m_item->pen(); +} + +/*! + Sets the \a pen of marker item +*/ +void QLegendMarker::setPen(const QPen &pen) +{ + if (pen == QPen(Qt::NoPen)) { + d_ptr->m_customPen = false; + } else { + d_ptr->m_customPen = true; + d_ptr->m_item->setPen(pen); + } +} + +/*! + Returns the brush of marker item +*/ +QBrush QLegendMarker::brush() const +{ + return d_ptr->m_item->brush(); +} + +/*! + Sets the \a brush of marker item. Note that changing color of the series also changes this. +*/ +void QLegendMarker::setBrush(const QBrush &brush) +{ + if (brush == QBrush(Qt::NoBrush)) { + d_ptr->m_customBrush = false; + } else { + d_ptr->m_customBrush = true; + d_ptr->m_item->setBrush(brush); + } +} + +/*! + Returns visibility of the marker +*/ +bool QLegendMarker::isVisible() const +{ + return d_ptr->m_item->isVisible(); +} + +/*! + Sets markers visibility to \a visible +*/ +void QLegendMarker::setVisible(bool visible) +{ + d_ptr->m_item->setVisible(visible); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +QLegendMarkerPrivate::QLegendMarkerPrivate(QLegendMarker *q, QLegend *legend) : + m_legend(legend), + m_customLabel(false), + m_customBrush(false), + m_customPen(false), + q_ptr(q) +{ + m_item = new LegendMarkerItem(this); +} + +QLegendMarkerPrivate::~QLegendMarkerPrivate() +{ + delete m_item; +} + +void QLegendMarkerPrivate::invalidateLegend() +{ + m_legend->d_ptr->m_layout->invalidate(); +} + +#include "moc_qlegendmarker.cpp" +#include "moc_qlegendmarker_p.cpp" + +QT_CHARTS_END_NAMESPACE |