qpieslice.cpp
375 lines
| 7.3 KiB
| text/x-c
|
CppLexer
Jani Honkonen
|
r203 | #include "qpieslice.h" | ||
QTCOMMERCIALCHART_BEGIN_NAMESPACE | ||||
Jani Honkonen
|
r289 | #define DEFAULT_PEN_COLOR Qt::black | ||
#define DEFAULT_BRUSH_COLOR Qt::white | ||||
Jani Honkonen
|
r314 | #define DEFAULT_LABEL_ARM_LENGTH 40 | ||
Jani Honkonen
|
r289 | #define DEFAULT_EXPOLODE_DISTANCE 20 | ||
Jani Honkonen
|
r203 | |||
Jani Honkonen
|
r314 | /*! | ||
\class QPieSlice | ||||
Jani Honkonen
|
r339 | \brief Defines a slice in pie series. | ||
Jani Honkonen
|
r314 | |||
Jani Honkonen
|
r320 | Holds all the data of a single slice in a QPieSeries and provides the means | ||
to modify slice data and customize the visual appearance of the slice. | ||||
It also provides the means to customize user interaction with the slice by | ||||
providing signals for clicking and hover events. | ||||
Jani Honkonen
|
r314 | */ | ||
/*! | ||||
\property QPieSlice::label | ||||
Label of the slice. | ||||
*/ | ||||
/*! | ||||
\property QPieSlice::value | ||||
Value of the slice. | ||||
*/ | ||||
/*! | ||||
Constructs an empty slice with a \a parent. | ||||
Jani Honkonen
|
r320 | |||
Jani Honkonen
|
r314 | Note that QPieSeries takes ownership of the slice when it is set/added. | ||
Jani Honkonen
|
r320 | |||
Michal Klocek
|
r361 | \sa QPieSeries::replace(), QPieSeries::add() | ||
Jani Honkonen
|
r314 | */ | ||
Jani Honkonen
|
r203 | QPieSlice::QPieSlice(QObject *parent) | ||
:QObject(parent), | ||||
m_value(0), | ||||
Jani Honkonen
|
r294 | m_isLabelVisible(false), | ||
Jani Honkonen
|
r203 | m_isExploded(false), | ||
Jani Honkonen
|
r289 | m_explodeDistance(DEFAULT_EXPOLODE_DISTANCE), | ||
Jani Honkonen
|
r203 | m_percentage(0), | ||
Jani Honkonen
|
r355 | m_startAngle(0), | ||
Jani Honkonen
|
r289 | m_angleSpan(0), | ||
Jani Honkonen
|
r203 | m_pen(DEFAULT_PEN_COLOR), | ||
m_brush(DEFAULT_BRUSH_COLOR), | ||||
m_labelPen(DEFAULT_PEN_COLOR), | ||||
m_labelArmLength(DEFAULT_LABEL_ARM_LENGTH) | ||||
{ | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Constructs an empty slice with given \a value, \a label and a \a parent. | ||||
Note that QPieSeries takes ownership of the slice when it is set/added. | ||||
Michal Klocek
|
r361 | \sa QPieSeries::replace(), QPieSeries::add() | ||
Jani Honkonen
|
r314 | */ | ||
QPieSlice::QPieSlice(qreal value, QString label, QObject *parent) | ||||
Jani Honkonen
|
r203 | :QObject(parent), | ||
m_value(value), | ||||
m_label(label), | ||||
Jani Honkonen
|
r314 | m_isLabelVisible(false), | ||
Jani Honkonen
|
r203 | m_isExploded(false), | ||
Jani Honkonen
|
r289 | m_explodeDistance(DEFAULT_EXPOLODE_DISTANCE), | ||
Jani Honkonen
|
r203 | m_percentage(0), | ||
Jani Honkonen
|
r355 | m_startAngle(0), | ||
Jani Honkonen
|
r289 | m_angleSpan(0), | ||
Jani Honkonen
|
r203 | m_pen(DEFAULT_PEN_COLOR), | ||
m_brush(DEFAULT_BRUSH_COLOR), | ||||
m_labelPen(DEFAULT_PEN_COLOR), | ||||
m_labelArmLength(DEFAULT_LABEL_ARM_LENGTH) | ||||
{ | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Destroys the slice. | ||||
User should not delete the slice if it has been added to the series. | ||||
*/ | ||||
Jani Honkonen
|
r203 | QPieSlice::~QPieSlice() | ||
{ | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Gets the value of the slice. | ||||
Note that all values in the series | ||||
\sa setValue() | ||||
*/ | ||||
Jani Honkonen
|
r203 | qreal QPieSlice::value() const | ||
{ | ||||
return m_value; | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Gets the label of the slice. | ||||
\sa setLabel() | ||||
*/ | ||||
Jani Honkonen
|
r203 | QString QPieSlice::label() const | ||
{ | ||||
return m_label; | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Returns true if label is set as visible. | ||||
\sa setLabelVisible() | ||||
*/ | ||||
Jani Honkonen
|
r203 | bool QPieSlice::isLabelVisible() const | ||
{ | ||||
return m_isLabelVisible; | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Returns true if slice is exloded from the pie. | ||||
\sa setExploded() | ||||
*/ | ||||
Jani Honkonen
|
r203 | bool QPieSlice::isExploded() const | ||
{ | ||||
return m_isExploded; | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Returns the explosion distance of the slice. | ||||
Default value is 20. | ||||
\sa setExplodeDistance() | ||||
*/ | ||||
Jani Honkonen
|
r289 | qreal QPieSlice::explodeDistance() const | ||
{ | ||||
return m_explodeDistance; | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Returns the percentage of this slice compared to all slices in the same series. | ||||
Jani Honkonen
|
r320 | |||
Jani Honkonen
|
r314 | Updated internally after the slice is added to the series. | ||
*/ | ||||
Jani Honkonen
|
r203 | qreal QPieSlice::percentage() const | ||
{ | ||||
return m_percentage; | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Returns the starting angle of this slice in the series it belongs to. | ||||
Jani Honkonen
|
r320 | |||
Full pie is 360 degrees where 0 degrees is at 12 a'clock. | ||||
Jani Honkonen
|
r314 | Updated internally after the slice is added to the series. | ||
*/ | ||||
Jani Honkonen
|
r355 | qreal QPieSlice::startAngle() const | ||
Jani Honkonen
|
r203 | { | ||
Jani Honkonen
|
r355 | return m_startAngle; | ||
Jani Honkonen
|
r203 | } | ||
Jani Honkonen
|
r314 | /*! | ||
Jani Honkonen
|
r355 | Returns the end angle of this slice in the series it belongs to. | ||
Jani Honkonen
|
r320 | |||
Full pie is 360 degrees where 0 degrees is at 12 a'clock. | ||||
Jani Honkonen
|
r314 | Updated internally after the slice is added to the series. | ||
*/ | ||||
Jani Honkonen
|
r355 | qreal QPieSlice::endAngle() const | ||
Jani Honkonen
|
r203 | { | ||
Jani Honkonen
|
r355 | return m_startAngle + m_angleSpan; | ||
Jani Honkonen
|
r203 | } | ||
Jani Honkonen
|
r314 | /*! | ||
Returns the pen used to draw this slice. | ||||
\sa setPen() | ||||
*/ | ||||
Jani Honkonen
|
r203 | QPen QPieSlice::pen() const | ||
{ | ||||
return m_pen; | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Returns the brush used to draw this slice. | ||||
\sa setBrush() | ||||
*/ | ||||
Jani Honkonen
|
r203 | QBrush QPieSlice::brush() const | ||
{ | ||||
return m_brush; | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Returns the pen used to draw label in this slice. | ||||
\sa setLabelPen() | ||||
*/ | ||||
Jani Honkonen
|
r203 | QPen QPieSlice::labelPen() const | ||
{ | ||||
return m_labelPen; | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Returns the font used to draw label in this slice. | ||||
\sa setLabelFont() | ||||
*/ | ||||
Jani Honkonen
|
r203 | QFont QPieSlice::labelFont() const | ||
{ | ||||
return m_labelFont; | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Returns the label arm lenght used in this slice. | ||||
Default value is 40 pixels. | ||||
\sa setLabelArmLength() | ||||
*/ | ||||
Jani Honkonen
|
r289 | qreal QPieSlice::labelArmLength() const | ||
Jani Honkonen
|
r203 | { | ||
return m_labelArmLength; | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
\fn void QPieSlice::clicked() | ||||
This signal is emitted when user has clicked the slice. | ||||
\sa QPieSeries::clicked() | ||||
*/ | ||||
/*! | ||||
\fn void QPieSlice::hoverEnter() | ||||
This signal is emitted when user has hovered over the slice. | ||||
\sa QPieSeries::hoverEnter() | ||||
*/ | ||||
/*! | ||||
\fn void QPieSlice::hoverLeave() | ||||
This signal is emitted when user has hovered away from the slice. | ||||
\sa QPieSeries::hoverLeave() | ||||
*/ | ||||
/*! | ||||
\fn void QPieSlice::changed() | ||||
This signal emitted when something has changed in the slice. | ||||
\sa QPieSeries::changed() | ||||
*/ | ||||
/*! | ||||
Sets the value of this slice. | ||||
\sa value() | ||||
*/ | ||||
Jani Honkonen
|
r203 | void QPieSlice::setValue(qreal value) | ||
{ | ||||
if (m_value != value) { | ||||
m_value = value; | ||||
emit changed(); | ||||
} | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Sets the \a label of the slice. | ||||
\sa label() | ||||
*/ | ||||
Jani Honkonen
|
r203 | void QPieSlice::setLabel(QString label) | ||
{ | ||||
if (m_label != label) { | ||||
m_label = label; | ||||
emit changed(); | ||||
} | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Sets the label \a visible in this slice. | ||||
\sa isLabelVisible(), QPieSeries::setLabelsVisible() | ||||
*/ | ||||
Jani Honkonen
|
r203 | void QPieSlice::setLabelVisible(bool visible) | ||
{ | ||||
if (m_isLabelVisible != visible) { | ||||
m_isLabelVisible = visible; | ||||
emit changed(); | ||||
} | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Sets this slice \a exploded. | ||||
\sa isExploded(), setExplodeDistance(), QPieSeries::enableClickExplodes() | ||||
*/ | ||||
Jani Honkonen
|
r203 | void QPieSlice::setExploded(bool exploded) | ||
{ | ||||
if (m_isExploded != exploded) { | ||||
m_isExploded = exploded; | ||||
emit changed(); | ||||
} | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Sets the explosion \a distance of this slice. | ||||
It is the distance the slice is moved away from the pie center. | ||||
\sa explodeDistance(), isExploded(), QPieSeries::enableClickExplodes() | ||||
*/ | ||||
Jani Honkonen
|
r289 | void QPieSlice::setExplodeDistance(qreal distance) | ||
{ | ||||
if (m_explodeDistance != distance) { | ||||
m_explodeDistance = distance; | ||||
emit changed(); | ||||
} | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Sets the \a pen used to draw this slice. | ||||
Note that applying a theme will override this. | ||||
\sa pen() | ||||
*/ | ||||
Jani Honkonen
|
r203 | void QPieSlice::setPen(QPen pen) | ||
{ | ||||
if (m_pen != pen) { | ||||
m_pen = pen; | ||||
emit changed(); | ||||
} | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Sets the \a brush used to draw this slice. | ||||
Note that applying a theme will override this. | ||||
\sa brush() | ||||
*/ | ||||
Jani Honkonen
|
r203 | void QPieSlice::setBrush(QBrush brush) | ||
{ | ||||
if (m_brush != brush) { | ||||
m_brush = brush; | ||||
emit changed(); | ||||
} | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Sets the \a pen used to draw the label in this slice. | ||||
Note that applying a theme will override this. | ||||
\sa labelPen() | ||||
*/ | ||||
void QPieSlice::setLabelPen(QPen pen) | ||||
Jani Honkonen
|
r203 | { | ||
Jani Honkonen
|
r314 | if (m_labelPen != pen) { | ||
m_labelPen = pen; | ||||
Jani Honkonen
|
r203 | emit changed(); | ||
} | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Sets the \a font used to draw the label in this slice. | ||||
Note that applying a theme will override this. | ||||
\sa labelFont() | ||||
*/ | ||||
void QPieSlice::setLabelFont(QFont font) | ||||
Jani Honkonen
|
r203 | { | ||
Jani Honkonen
|
r314 | if (m_labelFont != font) { | ||
m_labelFont = font; | ||||
Jani Honkonen
|
r203 | emit changed(); | ||
} | ||||
} | ||||
Jani Honkonen
|
r314 | /*! | ||
Sets the label arm \a length used to draw the label in this slice. | ||||
\sa labelArmLength() | ||||
*/ | ||||
void QPieSlice::setLabelArmLength(qreal length) | ||||
Jani Honkonen
|
r203 | { | ||
Jani Honkonen
|
r314 | if (m_labelArmLength != length) { | ||
m_labelArmLength = length; | ||||
Jani Honkonen
|
r203 | emit changed(); | ||
} | ||||
} | ||||
#include "moc_qpieslice.cpp" | ||||
QTCOMMERCIALCHART_END_NAMESPACE | ||||