##// END OF EJS Templates
Fix QNX build issue...
Fix QNX build issue Use qmath and cmath methods instead of math.h methods. Change-Id: I7c853f2e1218a1d3cde15a089192c24a6b0b1395 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@theqtcompany.com>

File last commit:

r2746:4909289ecbd7
r2775:143be951b1fe
Show More
boxwhiskers.cpp
212 lines | 6.1 KiB | text/x-c | CppLexer
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 /****************************************************************************
**
Titta Heikkala
Update copyright year...
r2688 ** Copyright (C) 2014 Digia Plc
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 ** All rights reserved.
Titta Heikkala
Updated license headers...
r2740 ** For any questions to Digia, please use contact form at http://qt.io
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 **
Titta Heikkala
Updated license headers...
r2740 ** This file is part of the Qt Charts module.
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 **
Titta Heikkala
Updated license headers...
r2740 ** Licensees holding valid commercial license for Qt may use this file in
** accordance with the Qt License Agreement provided with the Software
** or, alternatively, in accordance with the terms contained in a written
** agreement between you and Digia.
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 **
** If you have questions regarding the use of this file, please use
Titta Heikkala
Updated license headers...
r2740 ** contact form at http://qt.io
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 **
****************************************************************************/
Titta Heikkala
Fix include syntax...
r2714 #include <private/boxwhiskers_p.h>
#include <QtGui/QPainter>
#include <QtWidgets/QWidget>
Titta Heikkala
Add pressed, released and doubleClicked signals...
r2739 #include <QtWidgets/QGraphicsSceneMouseEvent>
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_BEGIN_NAMESPACE
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548
BoxWhiskers::BoxWhiskers(QBoxSet *set, AbstractDomain *domain, QGraphicsObject *parent) :
QGraphicsObject(parent),
m_boxSet(set),
Titta Heikkala
Add pressed, released and doubleClicked signals...
r2739 m_domain(domain),
m_mousePressed(false)
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 {
setAcceptHoverEvents(true);
setAcceptedMouseButtons(Qt::MouseButtonMask);
Titta Heikkala
Add pressed, released and doubleClicked signals...
r2739 setFlag(QGraphicsObject::ItemIsSelectable);
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 }
BoxWhiskers::~BoxWhiskers()
{
}
void BoxWhiskers::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
Titta Heikkala
Fix clicked, released and doubleClicked signal points...
r2746 Q_UNUSED(event)
Titta Heikkala
Add pressed, released and doubleClicked signals...
r2739 emit pressed(m_boxSet);
m_mousePressed = true;
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 }
void BoxWhiskers::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
Q_UNUSED(event)
emit hovered(true, m_boxSet);
}
void BoxWhiskers::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
{
Q_UNUSED(event)
emit hovered(false, m_boxSet);
}
Titta Heikkala
Add pressed, released and doubleClicked signals...
r2739 void BoxWhiskers::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Titta Heikkala
Fix clicked, released and doubleClicked signal points...
r2746 Q_UNUSED(event)
Titta Heikkala
Add pressed, released and doubleClicked signals...
r2739 emit released(m_boxSet);
Titta Heikkala
Fix clicked, released and doubleClicked signal points...
r2746 if (m_mousePressed)
Titta Heikkala
Add pressed, released and doubleClicked signals...
r2739 emit clicked(m_boxSet);
}
void BoxWhiskers::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event)
// For Box a press signal needs to be explicitly fired for mouseDoubleClickEvent
emit pressed(m_boxSet);
emit doubleClicked(m_boxSet);
}
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 void BoxWhiskers::setBrush(const QBrush &brush)
{
m_brush = brush;
Mika Salmela
Selectable outlines for box...
r2573 m_outlinePen.setColor(m_brush.color());
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 update();
}
void BoxWhiskers::setPen(const QPen &pen)
{
Mika Salmela
Selectable outlines for box...
r2573 qreal widthDiff = pen.widthF() - m_pen.widthF();
m_boundingRect.adjust(-widthDiff, -widthDiff, widthDiff, widthDiff);
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 m_pen = pen;
Mika Salmela
Selectable outlines for box...
r2573 m_medianPen = pen;
m_medianPen.setCapStyle(Qt::FlatCap);
m_outlinePen = pen;
m_outlinePen.setStyle(Qt::SolidLine);
m_outlinePen.setColor(m_brush.color());
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 update();
}
Mika Salmela
Property to control box width...
r2584 void BoxWhiskers::setBoxWidth(const qreal width)
{
m_boxWidth = width;
}
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 void BoxWhiskers::setLayout(const BoxWhiskersData &data)
{
m_data = data;
Mika Salmela
Changed BoxPlot to use domain for calculating geometry points....
r2554 updateGeometry(m_domain);
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 update();
}
QSizeF BoxWhiskers::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
{
Q_UNUSED(which)
Q_UNUSED(constraint)
return QSizeF();
}
void BoxWhiskers::setGeometry(const QRectF &rect)
{
Q_UNUSED(rect)
}
QRectF BoxWhiskers::boundingRect() const
{
return m_boundingRect;
}
void BoxWhiskers::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option)
Q_UNUSED(widget)
Miikka Heikkinen
Add save and restore to boxwhiskers paint...
r2586 painter->save();
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 painter->setBrush(m_brush);
painter->setClipRect(parentItem()->boundingRect());
Mika Salmela
Selectable outlines for box...
r2573 painter->setPen(m_pen);
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 painter->drawPath(m_boxPath);
Mika Salmela
Selectable outlines for box...
r2573 if (!m_boxOutlined)
painter->setPen(m_outlinePen);
painter->drawRect(m_middleBox);
painter->setPen(m_medianPen);
qreal halfLine = m_pen.widthF() / 2.0;
painter->drawLine(QLineF(m_geometryLeft - halfLine, m_geometryMedian,
m_geometryRight + halfLine, m_geometryMedian));
Miikka Heikkinen
Add save and restore to boxwhiskers paint...
r2586 painter->restore();
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 }
Mika Salmela
Changed BoxPlot to use domain for calculating geometry points....
r2554 void BoxWhiskers::updateGeometry(AbstractDomain *domain)
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 {
Mika Salmela
Changed BoxPlot to use domain for calculating geometry points....
r2554 m_domain = domain;
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 prepareGeometryChange();
QPainterPath path;
Mika Salmela
Changed BoxPlot to use domain for calculating geometry points....
r2554 m_boxPath = path;
m_boundingRect = m_boxPath.boundingRect();
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548
qreal columnWidth = 1.0 / m_data.m_seriesCount;
Mika Salmela
Property to control box width...
r2584 qreal left = ((1.0 - m_boxWidth) / 2.0) * columnWidth + columnWidth * m_data.m_seriesIndex + m_data.m_index - 0.5;
qreal barWidth = m_boxWidth * columnWidth;
Mika Salmela
Changed BoxPlot to use domain for calculating geometry points....
r2554
QPointF geometryPoint = m_domain->calculateGeometryPoint(QPointF(left, m_data.m_upperExtreme), m_validData);
if (!m_validData)
return;
Mika Salmela
Selectable outlines for box...
r2573 m_geometryLeft = geometryPoint.x();
Mika Salmela
Changed BoxPlot to use domain for calculating geometry points....
r2554 qreal geometryUpperExtreme = geometryPoint.y();
geometryPoint = m_domain->calculateGeometryPoint(QPointF(left + barWidth, m_data.m_upperQuartile), m_validData);
if (!m_validData)
return;
Mika Salmela
Selectable outlines for box...
r2573 m_geometryRight = geometryPoint.x();
Mika Salmela
Changed BoxPlot to use domain for calculating geometry points....
r2554 qreal geometryUpperQuartile = geometryPoint.y();
geometryPoint = m_domain->calculateGeometryPoint(QPointF(left, m_data.m_lowerQuartile), m_validData);
if (!m_validData)
return;
qreal geometryLowerQuartile = geometryPoint.y();
geometryPoint = m_domain->calculateGeometryPoint(QPointF(left, m_data.m_lowerExtreme), m_validData);
if (!m_validData)
return;
qreal geometryLowerExtreme = geometryPoint.y();
geometryPoint = m_domain->calculateGeometryPoint(QPointF(left, m_data.m_median), m_validData);
if (!m_validData)
return;
Mika Salmela
Selectable outlines for box...
r2573 m_geometryMedian = geometryPoint.y();
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548
// Upper whisker
Mika Salmela
Selectable outlines for box...
r2573 path.moveTo(m_geometryLeft, geometryUpperExtreme);
path.lineTo(m_geometryRight, geometryUpperExtreme);
path.moveTo((m_geometryLeft + m_geometryRight) / 2.0, geometryUpperExtreme);
path.lineTo((m_geometryLeft + m_geometryRight) / 2.0, geometryUpperQuartile);
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548
// Middle Box
Mika Salmela
Selectable outlines for box...
r2573 m_middleBox.setCoords(m_geometryLeft, geometryUpperQuartile, m_geometryRight, geometryLowerQuartile);
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548
// Lower whisker
Mika Salmela
Selectable outlines for box...
r2573 path.moveTo(m_geometryLeft, geometryLowerExtreme);
path.lineTo(m_geometryRight, geometryLowerExtreme);
path.moveTo((m_geometryLeft + m_geometryRight) / 2.0, geometryLowerQuartile);
path.lineTo((m_geometryLeft + m_geometryRight) / 2.0, geometryLowerExtreme);
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548
path.closeSubpath();
m_boxPath = path;
Mika Salmela
Changed BoxPlot to use domain for calculating geometry points....
r2554 m_boundingRect = m_boxPath.boundingRect();
Miikka Heikkinen
Fix boxplot drawing artifacts with thick pen...
r2565
Mika Salmela
Property to control box width...
r2584 qreal extra = m_pen.widthF();
Miikka Heikkinen
Fix boxplot drawing artifacts with thick pen...
r2565 m_boundingRect.adjust(-extra, -extra, extra, extra);
Mika Salmela
A new box-and-whiskers series type added to charts....
r2548 }
#include "moc_boxwhiskers_p.cpp"
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_END_NAMESPACE