##// END OF EJS Templates
Suppress a warning in msvc 64bit builds...
Suppress a warning in msvc 64bit builds Using std:sort causes warning C4267 in 64bit msvc builds, because size_t and int are of different size. There should never be a case where list indexes grow so large that this causes problems, so just suppress the warning. Change-Id: I0e4904f88542178177afc51a82bbbd18b094eb32 Reviewed-by: Titta Heikkala <titta.heikkala@theqtcompany.com>

File last commit:

r2712:c544258484ff
r2713:f6fba9e059d7
Show More
areachartitem.cpp
262 lines | 9.4 KiB | text/x-c | CppLexer
Jani Honkonen
Add license headers
r794 /****************************************************************************
**
Titta Heikkala
Update copyright year...
r2688 ** Copyright (C) 2014 Digia Plc
Jani Honkonen
Add license headers
r794 ** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
Miikka Heikkinen
Qt Commercial -> Qt Enterprise...
r2574 ** This file is part of the Qt Enterprise Charts Add-on.
Jani Honkonen
Add license headers
r794 **
** $QT_BEGIN_LICENSE$
Miikka Heikkinen
Qt Commercial -> Qt Enterprise...
r2574 ** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
Jani Honkonen
Add license headers
r794 ** 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$
**
****************************************************************************/
Michal Klocek
Adds area chart...
r421 #include "areachartitem_p.h"
#include "qareaseries.h"
Michal Klocek
Adds big fat pimpl to series classes...
r938 #include "qareaseries_p.h"
Michal Klocek
Adds area chart...
r421 #include "qlineseries.h"
Michal Klocek
Fixes missing chart area z value intialization
r564 #include "chartpresenter_p.h"
Marek Rosa
Domains added
r2275 #include "abstractdomain_p.h"
Michal Klocek
Adds area chart...
r421 #include <QPainter>
Michal Klocek
Refactors click signal to line,area,spline,scatter charts
r571 #include <QGraphicsSceneMouseEvent>
Michal Klocek
Refactors axis animation, line animations
r1241 #include <QDebug>
Michal Klocek
Adds area chart...
r421
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_BEGIN_NAMESPACE
Michal Klocek
Adds area chart...
r421
Michal Klocek
Refactors internals...
r2273 AreaChartItem::AreaChartItem(QAreaSeries *areaSeries, QGraphicsItem* item)
Miikka Heikkinen
Remove cryptic/obsolete TODOs
r2439 : ChartItem(areaSeries->d_func(),item),
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 m_series(areaSeries),
m_upper(0),
m_lower(0),
Titta Heikkala
Added possibility to show series value...
r2689 m_pointsVisible(false),
m_pointLabelsVisible(false),
Titta Heikkala
Fix order of initialization...
r2695 m_pointLabelsFormat(areaSeries->pointLabelsFormat()),
Titta Heikkala
Added possibility to show series value...
r2689 m_pointLabelsFont(areaSeries->pointLabelsFont()),
m_pointLabelsColor(areaSeries->pointLabelsColor())
Michal Klocek
Adds area chart...
r421 {
Marek Rosa
Added hovered support to areachart. Might need to be re-thought
r2264 setAcceptHoverEvents(true);
Michal Klocek
Fixes missing chart area z value intialization
r564 setZValue(ChartPresenter::LineChartZValue);
Titta Heikkala
Fix empty QAreaSeries crash...
r2601 if (m_series->upperSeries())
m_upper = new AreaBoundItem(this, m_series->upperSeries());
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 if (m_series->lowerSeries())
Michal Klocek
Refactors internals...
r2273 m_lower = new AreaBoundItem(this, m_series->lowerSeries());
Michal Klocek
Adds area chart...
r421
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 QObject::connect(m_series->d_func(), SIGNAL(updated()), this, SLOT(handleUpdated()));
Tero Ahola
Visible property to abstract series
r1342 QObject::connect(m_series, SIGNAL(visibleChanged()), this, SLOT(handleUpdated()));
Tero Ahola
Added opacity property to QAbstractSeries
r2067 QObject::connect(m_series, SIGNAL(opacityChanged()), this, SLOT(handleUpdated()));
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 QObject::connect(this, SIGNAL(clicked(QPointF)), areaSeries, SIGNAL(clicked(QPointF)));
Marek Rosa
Added hovered support to areachart. Might need to be re-thought
r2264 QObject::connect(this, SIGNAL(hovered(QPointF,bool)), areaSeries, SIGNAL(hovered(QPointF,bool)));
Titta Heikkala
Added possibility to show series value...
r2689 QObject::connect(areaSeries, SIGNAL(pointLabelsFormatChanged(QString)),
this, SLOT(handleUpdated()));
QObject::connect(areaSeries, SIGNAL(pointLabelsVisibilityChanged(bool)),
this, SLOT(handleUpdated()));
QObject::connect(areaSeries, SIGNAL(pointLabelsFontChanged(QFont)),
this, SLOT(handleUpdated()));
QObject::connect(areaSeries, SIGNAL(pointLabelsColorChanged(QColor)),
this, SLOT(handleUpdated()));
Michal Klocek
Adds area chart...
r421
handleUpdated();
}
AreaChartItem::~AreaChartItem()
{
delete m_upper;
delete m_lower;
Tero Ahola
Internal review: fixed minor issues in Area and XySeries
r761 }
Michal Klocek
Adds area chart...
r421
Michal Klocek
Refactors internals...
r2273 void AreaChartItem::setPresenter(ChartPresenter *presenter)
{
Titta Heikkala
Fix empty QAreaSeries crash...
r2601 if (m_upper)
m_upper->setPresenter(presenter);
Michal Klocek
Refactors internals...
r2273 if (m_lower) {
m_lower->setPresenter(presenter);
}
ChartItem::setPresenter(presenter);
}
Michal Klocek
Adds area chart...
r421 QRectF AreaChartItem::boundingRect() const
{
return m_rect;
}
QPainterPath AreaChartItem::shape() const
{
return m_path;
}
void AreaChartItem::updatePath()
{
QPainterPath path;
Michal Klocek
Refactors internals...
r2273 QRectF rect(QPointF(0,0),domain()->size());
Michal Klocek
Adds area chart...
r421
Tero Ahola
Fixed area series paint bug caused by mouse event fix on line series
r1792 path = m_upper->path();
Michal Klocek
Bugfix : black line drawn during areachart paint
r690
sauimone
minor code review issues. indent, spaces, brackets etc.
r743 if (m_lower) {
Miikka Heikkinen
Add Polar chart support...
r2483 // Note: Polarcharts always draw area correctly only when both series have equal width or are
// fully displayed. If one series is partally off-chart, the connecting line between
// the series does not attach to the end of the partially hidden series but to the point
// where it intersects the axis line. The problem is especially noticeable when one of the series
// is entirely off-chart, in which case the connecting line connects two ends of the
// visible series.
// This happens because we get the paths from linechart, which omits off-chart segments.
// To properly fix, linechart would need to provide true full path, in right, left, and the rest
// portions to enable proper clipping. However, combining those to single visually unified area
// would be a nightmare, since they would have to be painted separately.
Tero Ahola
Fixed area series paint bug caused by mouse event fix on line series
r1792 path.connectPath(m_lower->path().toReversed());
sauimone
minor code review issues. indent, spaces, brackets etc.
r743 } else {
Michal Klocek
Adds area chart...
r421 QPointF first = path.pointAtPercent(0);
QPointF last = path.pointAtPercent(1);
Miikka Heikkinen
Add Polar chart support...
r2483 if (presenter()->chartType() == QChart::ChartTypeCartesian) {
path.lineTo(last.x(), rect.bottom());
path.lineTo(first.x(), rect.bottom());
} else { // polar
path.lineTo(rect.center());
}
Michal Klocek
Adds area chart...
r421 }
path.closeSubpath();
Titta Heikkala
Fix zooming in crash...
r2603
// Only zoom in if the bounding rect of the path fits inside int limits. QWidget::update() uses
// a region that has to be compatible with QRect.
if (path.boundingRect().height() <= INT_MAX
&& path.boundingRect().width() <= INT_MAX) {
prepareGeometryChange();
m_path = path;
m_rect = path.boundingRect();
update();
}
Michal Klocek
Adds area chart...
r421 }
void AreaChartItem::handleUpdated()
{
Tero Ahola
Fixed isVisible implementation in XY series
r1346 setVisible(m_series->isVisible());
Michal Klocek
Adds visiblePoints handling to area chart
r563 m_pointsVisible = m_series->pointsVisible();
m_linePen = m_series->pen();
Michal Klocek
Unify naming setGeometry -> setLayout
r557 m_brush = m_series->brush();
Michal Klocek
Adds visiblePoints handling to area chart
r563 m_pointPen = m_series->pen();
Tero Ahola
Internal review: fixed minor issues in Area and XySeries
r761 m_pointPen.setWidthF(2 * m_pointPen.width());
Tero Ahola
Added opacity property to QAbstractSeries
r2067 setOpacity(m_series->opacity());
Titta Heikkala
Added possibility to show series value...
r2689 m_pointLabelsFormat = m_series->pointLabelsFormat();
m_pointLabelsVisible = m_series->pointLabelsVisible();
m_pointLabelsFont = m_series->pointLabelsFont();
m_pointLabelsColor = m_series->pointLabelsColor();
Michal Klocek
Adds area chart...
r421 update();
}
Michal Klocek
Refactors Domain and Axis...
r1698 void AreaChartItem::handleDomainUpdated()
Michal Klocek
Adds area chart...
r421 {
Titta Heikkala
Fix empty QAreaSeries crash...
r2601 if (m_upper) {
AbstractDomain* d = m_upper->domain();
d->setSize(domain()->size());
d->setRange(domain()->minX(),domain()->maxX(),domain()->minY(),domain()->maxY());
m_upper->handleDomainUpdated();
}
Michal Klocek
Refactors internals...
r2273
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 if (m_lower) {
Michal Klocek
Domain not sharable again
r2285 AbstractDomain* d = m_lower->domain();
Titta Heikkala
Qt Charts project file structure change...
r2712 d->setSize(domain()->size());
d->setRange(domain()->minX(),domain()->maxX(),domain()->minY(),domain()->maxY());
m_lower->handleDomainUpdated();
Michal Klocek
Refactors Domain and Axis...
r1698 }
Michal Klocek
Adds area chart...
r421 }
void AreaChartItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Tero Ahola
Squashed bunch of warnings
r611 Q_UNUSED(widget)
Q_UNUSED(option)
Tero Ahola
Fixed isVisible implementation in XY series
r1346 painter->save();
painter->setPen(m_linePen);
painter->setBrush(m_brush);
Miikka Heikkinen
Add Polar chart support...
r2483 QRectF clipRect = QRectF(QPointF(0, 0), domain()->size());
if (presenter()->chartType() == QChart::ChartTypePolar)
painter->setClipRegion(QRegion(clipRect.toRect(), QRegion::Ellipse));
else
painter->setClipRect(clipRect);
Tero Ahola
Fixed isVisible implementation in XY series
r1346 painter->drawPath(m_path);
if (m_pointsVisible) {
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 painter->setPen(m_pointPen);
painter->drawPoints(m_upper->geometryPoints());
if (m_lower)
painter->drawPoints(m_lower->geometryPoints());
Michal Klocek
Adds visiblePoints handling to area chart
r563 }
Titta Heikkala
Added possibility to show series value...
r2689
// Draw series point label
if (m_pointLabelsVisible) {
static const QString xPointTag(QLatin1String("@xPoint"));
static const QString yPointTag(QLatin1String("@yPoint"));
const int labelOffset = 2;
painter->setFont(m_pointLabelsFont);
painter->setPen(QPen(m_pointLabelsColor));
QFontMetrics fm(painter->font());
QString pointLabel = m_pointLabelsFormat;
if (m_series->upperSeries()) {
for (int i(0); i < m_series->upperSeries()->count(); i++) {
Miikka Heikkinen
Added QChart::localizeNumbers...
r2707 pointLabel.replace(xPointTag,
presenter()->numberToString(m_series->upperSeries()->at(i).x()));
pointLabel.replace(yPointTag,
presenter()->numberToString(m_series->upperSeries()->at(i).y()));
Titta Heikkala
Added possibility to show series value...
r2689
// Position text in relation to the point
int pointLabelWidth = fm.width(pointLabel);
QPointF position(m_upper->geometryPoints().at(i));
position.setX(position.x() - pointLabelWidth / 2);
position.setY(position.y() - m_series->upperSeries()->pen().width() / 2 - labelOffset);
painter->drawText(position, pointLabel);
}
}
if (m_series->lowerSeries()) {
for (int i(0); i < m_series->lowerSeries()->count(); i++) {
Miikka Heikkinen
Added QChart::localizeNumbers...
r2707 pointLabel.replace(xPointTag,
presenter()->numberToString(m_series->lowerSeries()->at(i).x()));
pointLabel.replace(yPointTag,
presenter()->numberToString(m_series->lowerSeries()->at(i).y()));
Titta Heikkala
Added possibility to show series value...
r2689
// Position text in relation to the point
int pointLabelWidth = fm.width(pointLabel);
QPointF position(m_lower->geometryPoints().at(i));
position.setX(position.x() - pointLabelWidth / 2);
position.setY(position.y() - m_series->lowerSeries()->pen().width() / 2 - labelOffset);
painter->drawText(position, pointLabel);
}
}
}
Tero Ahola
Fixed isVisible implementation in XY series
r1346 painter->restore();
Michal Klocek
Adds area chart...
r421 }
sauimone
minor code review issues. indent, spaces, brackets etc.
r743 void AreaChartItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
Michal Klocek
Refactors click signal to line,area,spline,scatter charts
r571 {
Michal Klocek
Refactors internals...
r2273 emit clicked(m_upper->domain()->calculateDomainPoint(event->pos()));
Michal Klocek
Fixes mouse handling in base class of chartseries
r1747 ChartItem::mousePressEvent(event);
Michal Klocek
Refactors click signal to line,area,spline,scatter charts
r571 }
Marek Rosa
Added hovered support to areachart. Might need to be re-thought
r2264 void AreaChartItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
Michal Klocek
Refactors internals...
r2273 emit hovered(domain()->calculateDomainPoint(event->pos()), true);
Marek Rosa
Added hovered support to areachart. Might need to be re-thought
r2264 event->accept();
// QGraphicsItem::hoverEnterEvent(event);
}
void AreaChartItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
{
Michal Klocek
Refactors internals...
r2273 emit hovered(domain()->calculateDomainPoint(event->pos()), false);
Marek Rosa
Added hovered support to areachart. Might need to be re-thought
r2264 event->accept();
// QGraphicsItem::hoverEnterEvent(event);
}
Michal Klocek
Adds area chart...
r421 #include "moc_areachartitem_p.cpp"
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_END_NAMESPACE