##// END OF EJS Templates
Fix package and folder name for Windows package...
Fix package and folder name for Windows package Fix the package and folder names to the package generation script for Windows. The package and folder names are of form: qt-charts-enterprise-src-<version> Change-Id: I170f63ce47936b73e5339614f134bb2a5a4c9cd9 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>

File last commit:

r2620:bcd8645639fe
r2654:294683e18c5d
Show More
abstractdomain.cpp
266 lines | 7.0 KiB | text/x-c | CppLexer
/ src / domain / abstractdomain.cpp
Jani Honkonen
Add license headers
r794 /****************************************************************************
**
Miikka Heikkinen
Fixed the copyright year 2012 -> 2013
r2432 ** Copyright (C) 2013 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$
**
****************************************************************************/
Marek Rosa
Domains added
r2275 #include "abstractdomain_p.h"
Michal Klocek
Refactors Domain and Axis...
r1698 #include "qabstractaxis_p.h"
Michal Klocek
Refactors internals...
r2273 #include <qmath.h>
Michal Klocek
Refactors qchart , adds line animation...
r131
QTCOMMERCIALCHART_BEGIN_NAMESPACE
Marek Rosa
Domains added
r2275 AbstractDomain::AbstractDomain(QObject *parent)
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 : QObject(parent),
m_minX(0),
m_maxX(0),
m_minY(0),
Michal Klocek
Refactors internals...
r2273 m_maxY(0),
Miikka Heikkinen
Added QChart::zoomReset() and QChart::isZoomed()...
r2545 m_signalsBlocked(false),
m_zoomed(false),
m_zoomResetMinX(0),
m_zoomResetMaxX(0),
m_zoomResetMinY(0),
m_zoomResetMaxY(0)
Michal Klocek
Refactors qchart , adds line animation...
r131 {
}
Marek Rosa
Domains added
r2275 AbstractDomain::~AbstractDomain()
Michal Klocek
Refactors qchart , adds line animation...
r131 {
}
Miikka Heikkinen
Add Polar chart support...
r2483 void AbstractDomain::setSize(const QSizeF &size)
Michal Klocek
Refactors internals...
r2273 {
if(m_size!=size)
{
m_size=size;
emit updated();
}
}
Marek Rosa
Domains added
r2275 QSizeF AbstractDomain::size() const
Michal Klocek
Refactors internals...
r2273 {
return m_size;
}
Marek Rosa
Domains added
r2275 void AbstractDomain::setRangeX(qreal min, qreal max)
Michal Klocek
Refactor domain model...
r439 {
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 setRange(min, max, m_minY, m_maxY);
Michal Klocek
Refactor domain model...
r439 }
Michal Klocek
Refactors barchart axis hadnling...
r679
Marek Rosa
Domains added
r2275 void AbstractDomain::setRangeY(qreal min, qreal max)
Michal Klocek
Refactor domain model...
r439 {
Michal Klocek
Adds loosenumber algorithm...
r678 setRange(m_minX, m_maxX, min, max);
Michal Klocek
Refactor domain model...
r439 }
Marek Rosa
Domains added
r2275 void AbstractDomain::setMinX(qreal min)
Michal Klocek
Refactor domain model...
r439 {
Michal Klocek
Adds loosenumber algorithm...
r678 setRange(min, m_maxX, m_minY, m_maxY);
Michal Klocek
Refactor domain model...
r439 }
Marek Rosa
Domains added
r2275 void AbstractDomain::setMaxX(qreal max)
Michal Klocek
Refactor domain model...
r439 {
Michal Klocek
Adds loosenumber algorithm...
r678 setRange(m_minX, max, m_minY, m_maxY);
Michal Klocek
Refactor domain model...
r439 }
Marek Rosa
Domains added
r2275 void AbstractDomain::setMinY(qreal min)
Michal Klocek
Refactor domain model...
r439 {
Michal Klocek
Adds loosenumber algorithm...
r678 setRange(m_minX, m_maxX, min, m_maxY);
Michal Klocek
Refactor domain model...
r439 }
Marek Rosa
Domains added
r2275 void AbstractDomain::setMaxY(qreal max)
Michal Klocek
Refactor domain model...
r439 {
setRange(m_minX, m_maxX, m_minY, max);
}
Marek Rosa
Domains added
r2275 qreal AbstractDomain::spanX() const
Michal Klocek
Refactors qchart , adds line animation...
r131 {
Michal Klocek
Refactor domain model...
r439 Q_ASSERT(m_maxX >= m_minX);
return m_maxX - m_minX;
Michal Klocek
Refactors qchart , adds line animation...
r131 }
Marek Rosa
Domains added
r2275 qreal AbstractDomain::spanY() const
Michal Klocek
Refactors qchart , adds line animation...
r131 {
Michal Klocek
Refactor domain model...
r439 Q_ASSERT(m_maxY >= m_minY);
return m_maxY - m_minY;
Michal Klocek
Refactors qchart , adds line animation...
r131 }
Marek Rosa
Domains added
r2275 bool AbstractDomain::isEmpty() const
Michal Klocek
Adds isEmpty to domain
r388 {
Marek Rosa
Domains added
r2275 return qFuzzyIsNull(spanX()) || qFuzzyIsNull(spanY()) || m_size.isEmpty() ;
Michal Klocek
Adds isEmpty to domain
r388 }
Marek Rosa
Domains added
r2275 QPointF AbstractDomain::calculateDomainPoint(const QPointF &point) const
Michal Klocek
Refactors internals...
r2273 {
const qreal deltaX = m_size.width() / (m_maxX - m_minX);
const qreal deltaY = m_size.height() / (m_maxY - m_minY);
qreal x = point.x() / deltaX + m_minX;
qreal y = (point.y() - m_size.height()) / (-deltaY) + m_minY;
return QPointF(x, y);
}
// handlers
Marek Rosa
Domains added
r2275 void AbstractDomain::handleVerticalAxisRangeChanged(qreal min, qreal max)
Michal Klocek
Refactors internals...
r2273 {
Michal Klocek
Bugfix resize event during zoomin
r2289 setRangeY(min, max);
Michal Klocek
Refactors internals...
r2273 }
Marek Rosa
Domains added
r2275 void AbstractDomain::handleHorizontalAxisRangeChanged(qreal min, qreal max)
Michal Klocek
Refactors internals...
r2273 {
Michal Klocek
Bugfix resize event during zoomin
r2289 setRangeX(min, max);
Michal Klocek
Refactors internals...
r2273 }
Michal Klocek
Bugfix resize event during zoomin
r2289 void AbstractDomain::blockRangeSignals(bool block)
Michal Klocek
Refactors internals...
r2273 {
Miikka Heikkinen
Add Polar chart support...
r2483 if (m_signalsBlocked!=block) {
Michal Klocek
Bugfix resize event during zoomin
r2289 m_signalsBlocked=block;
Miikka Heikkinen
Add Polar chart support...
r2483 if (!block) {
Michal Klocek
Bugfix resize event during zoomin
r2289 emit rangeHorizontalChanged(m_minX,m_maxX);
emit rangeVerticalChanged(m_minY,m_maxY);
}
}
Michal Klocek
Refactors internals...
r2273 }
Miikka Heikkinen
Added QChart::zoomReset() and QChart::isZoomed()...
r2545 void AbstractDomain::zoomReset()
{
if (m_zoomed) {
setRange(m_zoomResetMinX,
m_zoomResetMaxX,
m_zoomResetMinY,
m_zoomResetMaxY);
m_zoomed = false;
}
}
void AbstractDomain::storeZoomReset()
{
if (!m_zoomed) {
m_zoomed = true;
m_zoomResetMinX = m_minX;
m_zoomResetMaxX = m_maxX;
m_zoomResetMinY = m_minY;
m_zoomResetMaxY = m_maxY;
}
}
Michal Klocek
Refactors internals...
r2273 //algorithm defined by Paul S.Heckbert GraphicalGems I
Marek Rosa
Domains added
r2275 void AbstractDomain::looseNiceNumbers(qreal &min, qreal &max, int &ticksCount)
Michal Klocek
Refactors internals...
r2273 {
qreal range = niceNumber(max - min, true); //range with ceiling
qreal step = niceNumber(range / (ticksCount - 1), false);
min = qFloor(min / step);
max = qCeil(max / step);
ticksCount = int(max - min) + 1;
min *= step;
max *= step;
}
//nice numbers can be expressed as form of 1*10^n, 2* 10^n or 5*10^n
Marek Rosa
Domains added
r2275 qreal AbstractDomain::niceNumber(qreal x, bool ceiling)
Michal Klocek
Refactors internals...
r2273 {
qreal z = qPow(10, qFloor(log10(x))); //find corresponding number of the form of 10^n than is smaller than x
qreal q = x / z; //q<10 && q>=1;
if (ceiling) {
if (q <= 1.0) q = 1;
else if (q <= 2.0) q = 2;
else if (q <= 5.0) q = 5;
else q = 10;
} else {
if (q < 1.5) q = 1;
else if (q < 3.0) q = 2;
else if (q < 7.0) q = 5;
else q = 10;
}
return q * z;
}
Miikka Heikkinen
Add Polar chart support...
r2483 bool AbstractDomain::attachAxis(QAbstractAxis *axis)
Michal Klocek
Adds domains swap logic
r2284 {
Miikka Heikkinen
Add Polar chart support...
r2483 if (axis->orientation() == Qt::Vertical) {
Michal Klocek
Adds domains swap logic
r2284 QObject::connect(axis->d_ptr.data(), SIGNAL(rangeChanged(qreal,qreal)), this, SLOT(handleVerticalAxisRangeChanged(qreal,qreal)));
QObject::connect(this, SIGNAL(rangeVerticalChanged(qreal,qreal)), axis->d_ptr.data(), SLOT(handleRangeChanged(qreal,qreal)));
}
Miikka Heikkinen
Add Polar chart support...
r2483 if (axis->orientation() == Qt::Horizontal) {
Michal Klocek
Adds domains swap logic
r2284 QObject::connect(axis->d_ptr.data(), SIGNAL(rangeChanged(qreal,qreal)), this, SLOT(handleHorizontalAxisRangeChanged(qreal,qreal)));
QObject::connect(this, SIGNAL(rangeHorizontalChanged(qreal,qreal)), axis->d_ptr.data(), SLOT(handleRangeChanged(qreal,qreal)));
}
return true;
}
Miikka Heikkinen
Add Polar chart support...
r2483 bool AbstractDomain::detachAxis(QAbstractAxis *axis)
Michal Klocek
Adds domains swap logic
r2284 {
Miikka Heikkinen
Add Polar chart support...
r2483 if (axis->orientation() == Qt::Vertical) {
Michal Klocek
Adds domains swap logic
r2284 QObject::disconnect(axis->d_ptr.data(), SIGNAL(rangeChanged(qreal,qreal)), this, SLOT(handleVerticalAxisRangeChanged(qreal,qreal)));
QObject::disconnect(this, SIGNAL(rangeVerticalChanged(qreal,qreal)), axis->d_ptr.data(), SLOT(handleRangeChanged(qreal,qreal)));
}
Miikka Heikkinen
Add Polar chart support...
r2483 if (axis->orientation() == Qt::Horizontal) {
Michal Klocek
Adds domains swap logic
r2284 QObject::disconnect(axis->d_ptr.data(), SIGNAL(rangeChanged(qreal,qreal)), this, SLOT(handleHorizontalAxisRangeChanged(qreal,qreal)));
QObject::disconnect(this, SIGNAL(rangeHorizontalChanged(qreal,qreal)), axis->d_ptr.data(), SLOT(handleRangeChanged(qreal,qreal)));
}
return true;
}
Michal Klocek
Refactors internals...
r2273
// operators
Marek Rosa
Domains added
r2275 bool QTCOMMERCIALCHART_AUTOTEST_EXPORT operator== (const AbstractDomain &domain1, const AbstractDomain &domain2)
Michal Klocek
Add overloaded comparison operators to domain
r220 {
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));
Michal Klocek
Add overloaded comparison operators to domain
r220 }
Michal Klocek
Another attempt to fix issue with visual sutudio hidden export attributes in domain
r1066
Marek Rosa
Domains added
r2275 bool QTCOMMERCIALCHART_AUTOTEST_EXPORT operator!= (const AbstractDomain &domain1, const AbstractDomain &domain2)
Michal Klocek
Add overloaded comparison operators to domain
r220 {
return !(domain1 == domain2);
}
Michal Klocek
Another attempt to fix issue with visual sutudio hidden export attributes in domain
r1066
Marek Rosa
Domains added
r2275 QDebug QTCOMMERCIALCHART_AUTOTEST_EXPORT operator<<(QDebug dbg, const AbstractDomain &domain)
Michal Klocek
Adds debug operator to domain
r222 {
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
Michal Klocek
Adds debug operator to domain
r222 return dbg.maybeSpace();
}
Miikka Heikkinen
Add Polar chart support...
r2483 // This function adjusts min/max ranges to failsafe values if negative/zero values are attempted.
void AbstractDomain::adjustLogDomainRanges(qreal &min, qreal &max)
{
if (min <= 0) {
min = 1.0;
if (max <= min)
max = min + 1.0;
}
}
Marek Rosa
Domains added
r2275 #include "moc_abstractdomain_p.cpp"
Michal Klocek
Refactor domain model...
r439
Michal Klocek
Refactors qchart , adds line animation...
r131 QTCOMMERCIALCHART_END_NAMESPACE