##// END OF EJS Templates
Fix clicked, released and doubleClicked signal points...
Fix clicked, released and doubleClicked signal points The clicked, released and doubleClicked signals for line, spline and area series return the point where the press was triggered. Change-Id: I075bb213657a7cadabdec3a72fde7cf5f412e982 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@theqtcompany.com>

File last commit:

r2740:377e4516d036
r2746:4909289ecbd7
Show More
xlogypolardomain.cpp
235 lines | 7.0 KiB | text/x-c | CppLexer
/ src / charts / domain / xlogypolardomain.cpp
Miikka Heikkinen
Add Polar chart support...
r2483 /****************************************************************************
**
Titta Heikkala
Update copyright year...
r2688 ** Copyright (C) 2014 Digia Plc
Miikka Heikkinen
Add Polar chart support...
r2483 ** All rights reserved.
Titta Heikkala
Updated license headers...
r2740 ** For any questions to Digia, please use contact form at http://qt.io
Miikka Heikkinen
Add Polar chart support...
r2483 **
Titta Heikkala
Updated license headers...
r2740 ** This file is part of the Qt Charts module.
Miikka Heikkinen
Add Polar chart support...
r2483 **
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.
Miikka Heikkinen
Add Polar chart support...
r2483 **
** If you have questions regarding the use of this file, please use
Titta Heikkala
Updated license headers...
r2740 ** contact form at http://qt.io
Miikka Heikkinen
Add Polar chart support...
r2483 **
****************************************************************************/
Titta Heikkala
Fix include syntax...
r2714 #include <private/xlogypolardomain_p.h>
#include <private/qabstractaxis_p.h>
#include <QtCharts/QLogValueAxis>
#include <QtCore/QtMath>
Miikka Heikkinen
Add Polar chart support...
r2483
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_BEGIN_NAMESPACE
Miikka Heikkinen
Add Polar chart support...
r2483
XLogYPolarDomain::XLogYPolarDomain(QObject *parent)
: PolarDomain(parent),
m_logInnerY(0),
m_logOuterY(1),
m_logBaseY(10)
{
}
XLogYPolarDomain::~XLogYPolarDomain()
{
}
void XLogYPolarDomain::setRange(qreal minX, qreal maxX, qreal minY, qreal maxY)
{
bool axisXChanged = false;
bool axisYChanged = false;
adjustLogDomainRanges(minY, maxY);
if (!qFuzzyIsNull(m_minX - minX) || !qFuzzyIsNull(m_maxX - maxX)) {
m_minX = minX;
m_maxX = maxX;
axisXChanged = true;
if (!m_signalsBlocked)
emit rangeHorizontalChanged(m_minX, m_maxX);
}
if (!qFuzzyIsNull(m_minY - minY) || !qFuzzyIsNull(m_maxY - maxY)) {
m_minY = minY;
m_maxY = maxY;
axisYChanged = true;
qreal logMinY = log10(m_minY) / log10(m_logBaseY);
qreal logMaxY = log10(m_maxY) / log10(m_logBaseY);
m_logInnerY = logMinY < logMaxY ? logMinY : logMaxY;
m_logOuterY = logMinY > logMaxY ? logMinY : logMaxY;
if (!m_signalsBlocked)
emit rangeVerticalChanged(m_minY, m_maxY);
}
if (axisXChanged || axisYChanged)
emit updated();
}
void XLogYPolarDomain::zoomIn(const QRectF &rect)
{
Miikka Heikkinen
Added QChart::zoomReset() and QChart::isZoomed()...
r2545 storeZoomReset();
Miikka Heikkinen
Add Polar chart support...
r2483 qreal dx = spanX() / m_size.width();
qreal maxX = m_maxX;
qreal minX = m_minX;
maxX = minX + dx * rect.right();
minX = minX + dx * rect.left();
qreal logLeftY = m_logOuterY - rect.bottom() * (m_logOuterY - m_logInnerY) / m_size.height();
qreal logRightY = m_logOuterY - rect.top() * (m_logOuterY - m_logInnerY) / m_size.height();
qreal leftY = qPow(m_logBaseY, logLeftY);
qreal rightY = qPow(m_logBaseY, logRightY);
qreal minY = leftY < rightY ? leftY : rightY;
qreal maxY = leftY > rightY ? leftY : rightY;
setRange(minX, maxX, minY, maxY);
}
void XLogYPolarDomain::zoomOut(const QRectF &rect)
{
Miikka Heikkinen
Added QChart::zoomReset() and QChart::isZoomed()...
r2545 storeZoomReset();
Miikka Heikkinen
Add Polar chart support...
r2483 qreal dx = spanX() / rect.width();
qreal maxX = m_maxX;
qreal minX = m_minX;
minX = maxX - dx * rect.right();
maxX = minX + dx * m_size.width();
const qreal factorY = m_size.height() / rect.height();
qreal newLogMinY = m_logInnerY + (m_logOuterY - m_logInnerY) / 2.0 * (1.0 - factorY);
qreal newLogMaxY = m_logInnerY + (m_logOuterY - m_logInnerY) / 2.0 * (1.0 + factorY);
qreal leftY = qPow(m_logBaseY, newLogMinY);
qreal rightY = qPow(m_logBaseY, newLogMaxY);
qreal minY = leftY < rightY ? leftY : rightY;
qreal maxY = leftY > rightY ? leftY : rightY;
setRange(minX, maxX, minY, maxY);
}
void XLogYPolarDomain::move(qreal dx, qreal dy)
{
qreal x = spanX() / 360.0;
qreal maxX = m_maxX;
qreal minX = m_minX;
if (dx != 0) {
minX = minX + x * dx;
maxX = maxX + x * dx;
}
qreal stepY = dy * (m_logOuterY - m_logInnerY) / m_radius;
qreal leftY = qPow(m_logBaseY, m_logInnerY + stepY);
qreal rightY = qPow(m_logBaseY, m_logOuterY + stepY);
qreal minY = leftY < rightY ? leftY : rightY;
qreal maxY = leftY > rightY ? leftY : rightY;
setRange(minX, maxX, minY, maxY);
}
qreal XLogYPolarDomain::toAngularCoordinate(qreal value, bool &ok) const
{
ok = true;
qreal f = (value - m_minX) / (m_maxX - m_minX);
return f * 360.0;
}
qreal XLogYPolarDomain::toRadialCoordinate(qreal value, bool &ok) const
{
qreal retVal;
if (value <= 0) {
ok = false;
retVal = 0.0;
} else {
ok = true;
const qreal tickSpan = m_radius / qAbs(m_logOuterY - m_logInnerY);
const qreal logValue = log10(value) / log10(m_logBaseY);
const qreal valueDelta = logValue - m_logInnerY;
retVal = valueDelta * tickSpan;
if (retVal < 0.0)
retVal = 0.0;
}
return retVal;
}
QPointF XLogYPolarDomain::calculateDomainPoint(const QPointF &point) const
{
if (point == m_center)
return QPointF(0.0, m_minY);
QLineF line(m_center, point);
qreal a = 90.0 - line.angle();
if (a < 0.0)
a += 360.0;
a = ((a / 360.0) * (m_maxX - m_minX)) + m_minX;
const qreal deltaY = m_radius / qAbs(m_logOuterY - m_logInnerY);
qreal r = qPow(m_logBaseY, m_logInnerY + (line.length() / deltaY));
return QPointF(a, r);
}
bool XLogYPolarDomain::attachAxis(QAbstractAxis *axis)
{
QLogValueAxis *logAxis = qobject_cast<QLogValueAxis *>(axis);
if (logAxis && logAxis->orientation() == Qt::Vertical) {
QObject::connect(logAxis, SIGNAL(baseChanged(qreal)), this, SLOT(handleVerticalAxisBaseChanged(qreal)));
handleVerticalAxisBaseChanged(logAxis->base());
}
return AbstractDomain::attachAxis(axis);
}
bool XLogYPolarDomain::detachAxis(QAbstractAxis *axis)
{
QLogValueAxis *logAxis = qobject_cast<QLogValueAxis *>(axis);
if (logAxis && logAxis->orientation() == Qt::Vertical)
QObject::disconnect(logAxis, SIGNAL(baseChanged(qreal)), this, SLOT(handleVerticalAxisBaseChanged(qreal)));
return AbstractDomain::detachAxis(axis);
}
void XLogYPolarDomain::handleVerticalAxisBaseChanged(qreal baseY)
{
m_logBaseY = baseY;
qreal logMinY = log10(m_minY) / log10(m_logBaseY);
qreal logMaxY = log10(m_maxY) / log10(m_logBaseY);
m_logInnerY = logMinY < logMaxY ? logMinY : logMaxY;
m_logOuterY = logMinY > logMaxY ? logMinY : logMaxY;
emit updated();
}
// operators
Titta Heikkala
Qt Charts project file structure change...
r2712 bool QT_CHARTS_AUTOTEST_EXPORT operator== (const XLogYPolarDomain &domain1, const XLogYPolarDomain &domain2)
Miikka Heikkinen
Add Polar chart support...
r2483 {
return (qFuzzyIsNull(domain1.m_maxX - domain2.m_maxX)
&& qFuzzyIsNull(domain1.m_maxY - domain2.m_maxY)
&& qFuzzyIsNull(domain1.m_minX - domain2.m_minX)
&& qFuzzyIsNull(domain1.m_minY - domain2.m_minY));
}
Titta Heikkala
Qt Charts project file structure change...
r2712 bool QT_CHARTS_AUTOTEST_EXPORT operator!= (const XLogYPolarDomain &domain1, const XLogYPolarDomain &domain2)
Miikka Heikkinen
Add Polar chart support...
r2483 {
return !(domain1 == domain2);
}
Titta Heikkala
Qt Charts project file structure change...
r2712 QDebug QT_CHARTS_AUTOTEST_EXPORT operator<<(QDebug dbg, const XLogYPolarDomain &domain)
Miikka Heikkinen
Add Polar chart support...
r2483 {
Titta Heikkala
Fix Chart build when QT_NO_TEXTSTREAM is defined...
r2620 #ifdef QT_NO_TEXTSTREAM
Q_UNUSED(domain)
#else
Miikka Heikkinen
Add Polar chart support...
r2483 dbg.nospace() << "AbstractDomain(" << domain.m_minX << ',' << domain.m_maxX << ',' << domain.m_minY << ',' << domain.m_maxY << ')' << domain.m_size;
Titta Heikkala
Fix Chart build when QT_NO_TEXTSTREAM is defined...
r2620 #endif
Miikka Heikkinen
Add Polar chart support...
r2483 return dbg.maybeSpace();
}
#include "moc_xlogypolardomain_p.cpp"
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_END_NAMESPACE