##// END OF EJS Templates
Fix debug-and-release build...
Fix debug-and-release build Charts is part of the Qt release and there is no need to do magic hacks to install the qmldir file. This was supposed to help running examples separately, but we assume that the lib is shipped with Qt proper. The problem was that the qmldir file would be simultaneously copied into the same location twice which will fail on Windows. Change-Id: I4d765c18367f7985c7dbfadbc7ddae78ce24f398 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@theqtcompany.com> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com> Reviewed-by: Titta Heikkala <titta.heikkala@theqtcompany.com>

File last commit:

r2845:ae12522d475c
r2853:a801e78fb8d1
Show More
xlogydomain.cpp
243 lines | 7.6 KiB | text/x-c | CppLexer
Titta Heikkala
Updated license headers...
r2845 /******************************************************************************
Marek Rosa
Domains added
r2275 **
Titta Heikkala
Updated license headers...
r2845 ** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
Marek Rosa
Domains added
r2275 **
Titta Heikkala
Updated license headers...
r2740 ** This file is part of the Qt Charts module.
Marek Rosa
Domains added
r2275 **
Titta Heikkala
Updated license headers...
r2845 ** $QT_BEGIN_LICENSE:COMM$
Marek Rosa
Domains added
r2275 **
Titta Heikkala
Updated license headers...
r2845 ** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see http://www.qt.io/terms-conditions. For further
** information use the contact form at http://www.qt.io/contact-us.
Marek Rosa
Domains added
r2275 **
Titta Heikkala
Updated license headers...
r2845 ** $QT_END_LICENSE$
**
******************************************************************************/
Marek Rosa
Domains added
r2275
Titta Heikkala
Fix include syntax...
r2714 #include <private/xlogydomain_p.h>
#include <private/qabstractaxis_p.h>
#include <QtCharts/QLogValueAxis>
#include <QtCore/QtMath>
Titta Heikkala
Fix QNX build issue...
r2775 #include <cmath>
Marek Rosa
Domains added
r2275
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_BEGIN_NAMESPACE
Marek Rosa
Domains added
r2275
XLogYDomain::XLogYDomain(QObject *parent)
: AbstractDomain(parent),
Marek Rosa
QChart mapping functions: return QPoint(0, 0) if series type is Pie...
r2351 m_logLeftY(0),
m_logRightY(1),
Marek Rosa
Domains added
r2275 m_logBaseY(10)
{
}
XLogYDomain::~XLogYDomain()
{
}
void XLogYDomain::setRange(qreal minX, qreal maxX, qreal minY, qreal maxY)
{
bool axisXChanged = false;
bool axisYChanged = false;
Miikka Heikkinen
Add Polar chart support...
r2483 adjustLogDomainRanges(minY, maxY);
Marek Rosa
Domains added
r2275 if (!qFuzzyIsNull(m_minX - minX) || !qFuzzyIsNull(m_maxX - maxX)) {
m_minX = minX;
m_maxX = maxX;
axisXChanged = true;
Michal Klocek
Fix domain switching
r2288 if(!m_signalsBlocked)
Marek Rosa
Negative values with log axis handled
r2356 emit rangeHorizontalChanged(m_minX, m_maxX);
Marek Rosa
Domains added
r2275 }
if (!qFuzzyIsNull(m_minY - minY) || !qFuzzyIsNull(m_maxY - maxY)) {
m_minY = minY;
m_maxY = maxY;
axisYChanged = true;
Titta Heikkala
Fix QNX build issue...
r2775 qreal logMinY = std::log10(m_minY) / std::log10(m_logBaseY);
qreal logMaxY = std::log10(m_maxY) / std::log10(m_logBaseY);
Marek Rosa
QChart mapping functions: return QPoint(0, 0) if series type is Pie...
r2351 m_logLeftY = logMinY < logMaxY ? logMinY : logMaxY;
m_logRightY = logMinY > logMaxY ? logMinY : logMaxY;
Miikka Heikkinen
Add Polar chart support...
r2483 if (!m_signalsBlocked)
Marek Rosa
Negative values with log axis handled
r2356 emit rangeVerticalChanged(m_minY, m_maxY);
Marek Rosa
Domains added
r2275 }
if (axisXChanged || axisYChanged)
emit updated();
}
void XLogYDomain::zoomIn(const QRectF &rect)
{
Miikka Heikkinen
Added QChart::zoomReset() and QChart::isZoomed()...
r2545 storeZoomReset();
Marek Rosa
Domains added
r2275 qreal dx = spanX() / m_size.width();
qreal maxX = m_maxX;
qreal minX = m_minX;
maxX = minX + dx * rect.right();
minX = minX + dx * rect.left();
Marek Rosa
Log domains zoomin, zoomout and move added
r2280
Marek Rosa
QChart mapping functions: return QPoint(0, 0) if series type is Pie...
r2351 qreal logLeftY = m_logRightY - rect.bottom() * (m_logRightY - m_logLeftY) / m_size.height();
qreal logRightY = m_logRightY - rect.top() * (m_logRightY - m_logLeftY) / 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;
Marek Rosa
Domains added
r2275
setRange(minX, maxX, minY, maxY);
}
void XLogYDomain::zoomOut(const QRectF &rect)
{
Miikka Heikkinen
Added QChart::zoomReset() and QChart::isZoomed()...
r2545 storeZoomReset();
Marek Rosa
Domains added
r2275 qreal dx = spanX() / rect.width();
qreal maxX = m_maxX;
qreal minX = m_minX;
minX = maxX - dx * rect.right();
maxX = minX + dx * m_size.width();
Marek Rosa
Log domains zoomin, zoomout and move added
r2280
Marek Rosa
QChart mapping functions: return QPoint(0, 0) if series type is Pie...
r2351 const qreal factorY = m_size.height() / rect.height();
qreal newLogMinY = m_logLeftY + (m_logRightY - m_logLeftY) / 2 * (1 - factorY);
qreal newLogMaxY = m_logLeftY + (m_logRightY - m_logLeftY) / 2 * (1 + 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;
Marek Rosa
Domains added
r2275
setRange(minX, maxX, minY, maxY);
}
void XLogYDomain::move(qreal dx, qreal dy)
{
qreal x = spanX() / m_size.width();
qreal maxX = m_maxX;
qreal minX = m_minX;
if (dx != 0) {
minX = minX + x * dx;
maxX = maxX + x * dx;
}
Marek Rosa
Log domains zoomin, zoomout and move added
r2280
Marek Rosa
QChart mapping functions: return QPoint(0, 0) if series type is Pie...
r2351 qreal stepY = dy * (m_logRightY - m_logLeftY) / m_size.height();
qreal leftY = qPow(m_logBaseY, m_logLeftY + stepY);
qreal rightY = qPow(m_logBaseY, m_logRightY + stepY);
qreal minY = leftY < rightY ? leftY : rightY;
qreal maxY = leftY > rightY ? leftY : rightY;
Marek Rosa
Log domains zoomin, zoomout and move added
r2280
Marek Rosa
Domains added
r2275 setRange(minX, maxX, minY, maxY);
}
Marek Rosa
Negative values with log axis handled
r2356 QPointF XLogYDomain::calculateGeometryPoint(const QPointF &point, bool &ok) const
Marek Rosa
Domains added
r2275 {
Titta Heikkala
Fix logarithmic axis point calculation...
r2611 const qreal deltaX = m_size.width() / (m_maxX - m_minX);
const qreal deltaY = m_size.height() / qAbs(m_logRightY - m_logLeftY);
Marek Rosa
Negative values with log axis handled
r2356
Titta Heikkala
Fix logarithmic axis point calculation...
r2611 qreal x = (point.x() - m_minX) * deltaX;
qreal y(0);
if (point.y() > 0) {
Titta Heikkala
Fix QNX build issue...
r2775 y = (std::log10(point.y()) / std::log10(m_logBaseY)) * -deltaY - m_logLeftY * -deltaY + m_size.height();
Marek Rosa
Negative values with log axis handled
r2356 ok = true;
} else {
Titta Heikkala
Fix logarithmic axis point calculation...
r2611 y = m_size.height();
qWarning() << "Logarithms of zero and negative values are undefined.";
Marek Rosa
Negative values with log axis handled
r2356 ok = false;
}
Titta Heikkala
Fix logarithmic axis point calculation...
r2611 return QPointF(x, y);
Marek Rosa
Domains added
r2275 }
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 QVector<QPointF> XLogYDomain::calculateGeometryPoints(const QVector<QPointF> &vector) const
Marek Rosa
Domains added
r2275 {
const qreal deltaX = m_size.width() / (m_maxX - m_minX);
Marek Rosa
QChart mapping functions: return QPoint(0, 0) if series type is Pie...
r2351 const qreal deltaY = m_size.height() / qAbs(m_logRightY - m_logLeftY);
Marek Rosa
Domains added
r2275
QVector<QPointF> result;
result.resize(vector.count());
for (int i = 0; i < vector.count(); ++i) {
Marek Rosa
Negative values with log axis handled
r2356 if (vector[i].y() > 0) {
qreal x = (vector[i].x() - m_minX) * deltaX;
Titta Heikkala
Fix QNX build issue...
r2775 qreal y = (std::log10(vector[i].y()) / std::log10(m_logBaseY)) * -deltaY - m_logLeftY * -deltaY + m_size.height();
Marek Rosa
Negative values with log axis handled
r2356 result[i].setX(x);
result[i].setY(y);
} else {
Titta Heikkala
Fix logarithmic axis point calculation...
r2611 qWarning() << "Logarithms of zero and negative values are undefined.";
Marek Rosa
Negative values with log axis handled
r2356 return QVector<QPointF>();
}
Marek Rosa
Domains added
r2275 }
return result;
}
QPointF XLogYDomain::calculateDomainPoint(const QPointF &point) const
{
const qreal deltaX = m_size.width() / (m_maxX - m_minX);
Marek Rosa
QChart mapping functions: return QPoint(0, 0) if series type is Pie...
r2351 const qreal deltaY = m_size.height() / qAbs(m_logRightY - m_logLeftY);
Marek Rosa
Domains added
r2275 qreal x = point.x() / deltaX + m_minX;
Marek Rosa
QChart mapping functions: return QPoint(0, 0) if series type is Pie...
r2351 qreal y = qPow(m_logBaseY, m_logLeftY + (m_size.height() - point.y()) / deltaY);
Marek Rosa
Domains added
r2275 return QPointF(x, y);
}
Miikka Heikkinen
Add Polar chart support...
r2483 bool XLogYDomain::attachAxis(QAbstractAxis *axis)
Marek Rosa
Added attach/dettach axis domain implementations
r2290 {
QLogValueAxis *logAxis = qobject_cast<QLogValueAxis *>(axis);
Miikka Heikkinen
Add Polar chart support...
r2483 if (logAxis && logAxis->orientation() == Qt::Vertical) {
Marek Rosa
Added attach/dettach axis domain implementations
r2290 QObject::connect(logAxis, SIGNAL(baseChanged(qreal)), this, SLOT(handleVerticalAxisBaseChanged(qreal)));
Marek Rosa
Fix to domain initialization when log base was preset on axis before adding it to chart
r2295 handleVerticalAxisBaseChanged(logAxis->base());
Marek Rosa
Negative values with log axis handled
r2356 }
Michal Klocek
bugfix signals not reconnected when domain changed
r2292 return AbstractDomain::attachAxis(axis);
Marek Rosa
Added attach/dettach axis domain implementations
r2290 }
Miikka Heikkinen
Add Polar chart support...
r2483 bool XLogYDomain::detachAxis(QAbstractAxis *axis)
Marek Rosa
Added attach/dettach axis domain implementations
r2290 {
QLogValueAxis *logAxis = qobject_cast<QLogValueAxis *>(axis);
Miikka Heikkinen
Add Polar chart support...
r2483 if (logAxis && logAxis->orientation() == Qt::Vertical)
Marek Rosa
Added attach/dettach axis domain implementations
r2290 QObject::disconnect(logAxis, SIGNAL(baseChanged(qreal)), this, SLOT(handleVerticalAxisBaseChanged(qreal)));
Michal Klocek
bugfix signals not reconnected when domain changed
r2292 return AbstractDomain::detachAxis(axis);
Marek Rosa
Added attach/dettach axis domain implementations
r2290 }
void XLogYDomain::handleVerticalAxisBaseChanged(qreal baseY)
{
m_logBaseY = baseY;
Titta Heikkala
Fix QNX build issue...
r2775 qreal logMinY = std::log10(m_minY) / std::log10(m_logBaseY);
qreal logMaxY = std::log10(m_maxY) / std::log10(m_logBaseY);
Marek Rosa
QChart mapping functions: return QPoint(0, 0) if series type is Pie...
r2351 m_logLeftY = logMinY < logMaxY ? logMinY : logMaxY;
m_logRightY = logMinY > logMaxY ? logMinY : logMaxY;
Marek Rosa
Fixed: chart not redrawing when logaxis's logBase value changed
r2322 emit updated();
Marek Rosa
Added attach/dettach axis domain implementations
r2290 }
Marek Rosa
Domains added
r2275 // operators
Titta Heikkala
Qt Charts project file structure change...
r2712 bool QT_CHARTS_AUTOTEST_EXPORT operator== (const XLogYDomain &domain1, const XLogYDomain &domain2)
Marek Rosa
Domains added
r2275 {
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));
Marek Rosa
Domains added
r2275 }
Titta Heikkala
Qt Charts project file structure change...
r2712 bool QT_CHARTS_AUTOTEST_EXPORT operator!= (const XLogYDomain &domain1, const XLogYDomain &domain2)
Marek Rosa
Domains added
r2275 {
return !(domain1 == domain2);
}
Titta Heikkala
Qt Charts project file structure change...
r2712 QDebug QT_CHARTS_AUTOTEST_EXPORT operator<<(QDebug dbg, const XLogYDomain &domain)
Marek Rosa
Domains added
r2275 {
Titta Heikkala
Fix Chart build when QT_NO_TEXTSTREAM is defined...
r2620 #ifdef QT_NO_TEXTSTREAM
Q_UNUSED(domain)
#else
Marek Rosa
Domains added
r2275 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
Marek Rosa
Domains added
r2275 return dbg.maybeSpace();
}
#include "moc_xlogydomain_p.cpp"
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_END_NAMESPACE