##// END OF EJS Templates
Fix issue with ghost axes being drawn when last axis removed...
Fix issue with ghost axes being drawn when last axis removed Change-Id: Id638bc225ef901301a4268530f574a2de6f2ff63 Reviewed-by: Titta Heikkala <titta.heikkala@theqtcompany.com>

File last commit:

r2782:5fbd172ba15f
r2836:7a48aa2a436d
Show More
qlogvalueaxis.cpp
397 lines | 10.0 KiB | text/x-c | CppLexer
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 /****************************************************************************
**
Titta Heikkala
Copyright header changes...
r2776 ** Copyright (C) 2015 The Qt Company Ltd
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 ** All rights reserved.
Titta Heikkala
Copyright header changes...
r2776 ** For any questions to The Qt Company, please use contact form at http://qt.io
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 **
Titta Heikkala
Updated license headers...
r2740 ** This file is part of the Qt Charts module.
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 **
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
Titta Heikkala
Copyright header changes...
r2776 ** agreement between you and The Qt Company.
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 **
** If you have questions regarding the use of this file, please use
Titta Heikkala
Updated license headers...
r2740 ** contact form at http://qt.io
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 **
****************************************************************************/
Titta Heikkala
Fix include syntax...
r2714 #include <QtCharts/QLogValueAxis>
#include <private/qlogvalueaxis_p.h>
#include <private/chartlogvalueaxisx_p.h>
#include <private/chartlogvalueaxisy_p.h>
#include <private/polarchartlogvalueaxisangular_p.h>
#include <private/polarchartlogvalueaxisradial_p.h>
#include <private/abstractdomain_p.h>
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 #include <float.h>
#include <cmath>
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_BEGIN_NAMESPACE
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 /*!
\class QLogValueAxis
Titta Heikkala
Fix Charts documentation...
r2639 \inmodule Qt Charts
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 \brief The QLogValueAxis class is used for manipulating chart's axis.
Miikka Heikkinen
Added a note in docs about not plotting series with log axis...
r2430
\note If a QLogValueAxis is attached to a series with one or more points with
negative or zero values on the associated dimension, the series will not be
plotted at all. This is particularly relevant when XYModelMappers are used,
since empty cells in models typically contain zero values.
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 */
Titta Heikkala
Fix Charts documentation...
r2639 /*!
\qmltype LogValueAxis
\instantiates QLogValueAxis
Titta Heikkala
Qt Charts project file structure change...
r2712 \inqmlmodule QtCharts
Titta Heikkala
Fix Charts documentation...
r2639
Titta Heikkala
Qt Charts project file structure change...
r2712 \brief The LogValueAxis element is used for manipulating chart's axes.
\inherits AbstractAxis
Miikka Heikkinen
QML support for LogValueAxis...
r2493
Titta Heikkala
Qt Charts project file structure change...
r2712 \note If a LogValueAxis is attached to a series with one or more points with
negative or zero values on the associated dimension, the series will not be
plotted at all. This is particularly relevant when XYModelMappers are used,
since empty cells in models typically contain zero values.
Miikka Heikkinen
QML support for LogValueAxis...
r2493 */
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 /*!
\property QLogValueAxis::min
Defines the minimum value on the axis.
When setting this property the max is adjusted if necessary, to ensure that the range remains valid.
Miikka Heikkinen
QML support for LogValueAxis...
r2493 Value has to be greater than 0.
*/
/*!
Miikka Heikkinen
Documentation updates...
r2494 \qmlproperty real LogValueAxis::min
Miikka Heikkinen
QML support for LogValueAxis...
r2493 Defines the minimum value on the axis.
When setting this property the max is adjusted if necessary, to ensure that the range remains valid.
Value has to be greater than 0.
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 */
/*!
\property QLogValueAxis::max
Defines the maximum value on the axis.
When setting this property the min is adjusted if necessary, to ensure that the range remains valid.
Miikka Heikkinen
QML support for LogValueAxis...
r2493 Value has to be greater than 0.
*/
/*!
Miikka Heikkinen
Documentation updates...
r2494 \qmlproperty real LogValueAxis::max
Miikka Heikkinen
QML support for LogValueAxis...
r2493 Defines the maximum value on the axis.
When setting this property the min is adjusted if necessary, to ensure that the range remains valid.
Value has to be greater than 0.
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 */
Marek Rosa
QLogValueAxis docs updated
r2338
/*!
\property QLogValueAxis::base
Defines the base of the logarithm.
Miikka Heikkinen
QML support for LogValueAxis...
r2493 Value has to be greater than 0 and not equal 1
*/
/*!
Miikka Heikkinen
Documentation updates...
r2494 \qmlproperty real LogValueAxis::base
Miikka Heikkinen
QML support for LogValueAxis...
r2493 Defines the maximum value on the axis.
Defines the base of the logarithm.
Value has to be greater than 0 and not equal 1
Marek Rosa
QLogValueAxis docs updated
r2338 */
/*!
\property QLogValueAxis::labelFormat
Defines the label format of the axis.
Supported specifiers are: d, i, o, x, X, f, F, e, E, g, G, c
See QString::sprintf() for additional details.
*/
Miikka Heikkinen
QML support for LogValueAxis...
r2493 /*!
Miikka Heikkinen
Documentation updates...
r2494 \qmlproperty real LogValueAxis::labelFormat
Miikka Heikkinen
QML support for LogValueAxis...
r2493 Defines the label format of the axis.
Supported specifiers are: d, i, o, x, X, f, F, e, E, g, G, c
See QString::sprintf() for additional details.
*/
Marek Rosa
QLogValueAxis added. Log domain missing
r2274
/*!
\fn void QLogValueAxis::minChanged(qreal min)
Axis emits signal when \a min of axis has changed.
*/
Miikka Heikkinen
QML support for LogValueAxis...
r2493 /*!
Miikka Heikkinen
Documentation updates...
r2494 \qmlsignal LogValueAxis::onMinChanged(qreal min)
Miikka Heikkinen
QML support for LogValueAxis...
r2493 Axis emits signal when \a min of axis has changed.
*/
Marek Rosa
QLogValueAxis added. Log domain missing
r2274
/*!
\fn void QLogValueAxis::maxChanged(qreal max)
Axis emits signal when \a max of axis has changed.
*/
Miikka Heikkinen
QML support for LogValueAxis...
r2493 /*!
Miikka Heikkinen
Documentation updates...
r2494 \qmlsignal LogValueAxis::onMaxChanged(qreal max)
Miikka Heikkinen
QML support for LogValueAxis...
r2493 Axis emits signal when \a max of axis has changed.
*/
Marek Rosa
QLogValueAxis added. Log domain missing
r2274
/*!
\fn void QLogValueAxis::rangeChanged(qreal min, qreal max)
Axis emits signal when \a min or \a max of axis has changed.
*/
Marek Rosa
QLogValueAxis docs updated
r2338 /*!
\fn void QLogValueAxis::labelFormatChanged(const QString &format)
Axis emits signal when \a format of axis labels has changed.
*/
Miikka Heikkinen
QML support for LogValueAxis...
r2493 /*!
\qmlsignal LogValueAxis::labelFormatChanged(const QString &format)
Axis emits signal when \a format of axis labels has changed.
*/
Marek Rosa
QLogValueAxis docs updated
r2338
/*!
\fn void QLogValueAxis::baseChanged(qreal base)
Axis emits signal when \a base of logarithm of the axis has changed.
*/
Miikka Heikkinen
QML support for LogValueAxis...
r2493 /*!
Miikka Heikkinen
Documentation updates...
r2494 \qmlsignal LogValueAxis::baseChanged(qreal base)
Miikka Heikkinen
QML support for LogValueAxis...
r2493 Axis emits signal when \a base of logarithm of the axis has changed.
*/
Marek Rosa
QLogValueAxis docs updated
r2338
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 /*!
Constructs an axis object which is a child of \a parent.
*/
QLogValueAxis::QLogValueAxis(QObject *parent) :
QAbstractAxis(*new QLogValueAxisPrivate(this), parent)
{
}
/*!
\internal
*/
QLogValueAxis::QLogValueAxis(QLogValueAxisPrivate &d, QObject *parent) : QAbstractAxis(d, parent)
{
}
/*!
Destroys the object
*/
QLogValueAxis::~QLogValueAxis()
{
Marek Rosa
LogDomain initialize fix
r2304 Q_D(QLogValueAxis);
if (d->m_chart)
d->m_chart->removeAxis(this);
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 }
void QLogValueAxis::setMin(qreal min)
{
Q_D(QLogValueAxis);
setRange(min, qMax(d->m_max, min));
}
qreal QLogValueAxis::min() const
{
Q_D(const QLogValueAxis);
return d->m_min;
}
void QLogValueAxis::setMax(qreal max)
{
Q_D(QLogValueAxis);
setRange(qMin(d->m_min, max), max);
}
qreal QLogValueAxis::max() const
{
Q_D(const QLogValueAxis);
return d->m_max;
}
/*!
Sets range from \a min to \a max on the axis.
If min is greater than max then this function returns without making any changes.
*/
void QLogValueAxis::setRange(qreal min, qreal max)
Michal Klocek
Fixes missing layout updated on ticks,base and format calls
r2333 {
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 Q_D(QLogValueAxis);
bool changed = false;
if (min > max)
return;
if (min > 0) {
if (!qFuzzyCompare(d->m_min, min)) {
d->m_min = min;
changed = true;
emit minChanged(min);
}
if (!qFuzzyCompare(d->m_max, max)) {
d->m_max = max;
changed = true;
emit maxChanged(max);
}
if (changed) {
emit rangeChanged(min, max);
emit d->rangeChanged(min,max);
}
}
}
void QLogValueAxis::setLabelFormat(const QString &format)
{
Q_D(QLogValueAxis);
d->m_format = format;
Marek Rosa
Added missing properties and NOTIFY's to logvalue and value axes
r2319 emit labelFormatChanged(format);
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 }
QString QLogValueAxis::labelFormat() const
{
Q_D(const QLogValueAxis);
return d->m_format;
}
void QLogValueAxis::setBase(qreal base)
{
// check if base is correct
Marek Rosa
LogDomains: calculateDomainPoint implemented
r2283 if (qFuzzyCompare(base, 1))
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 return;
Marek Rosa
LogDomains: calculateDomainPoint implemented
r2283 if (base > 0) {
Q_D(QLogValueAxis);
d->m_base = base;
Marek Rosa
Added attach/dettach axis domain implementations
r2290 emit baseChanged(base);
Marek Rosa
LogDomains: calculateDomainPoint implemented
r2283 }
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 }
qreal QLogValueAxis::base() const
{
Q_D(const QLogValueAxis);
return d->m_base;
}
/*!
Returns the type of the axis
*/
QAbstractAxis::AxisType QLogValueAxis::type() const
{
return AxisTypeLogValue;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
QLogValueAxisPrivate::QLogValueAxisPrivate(QLogValueAxis *q)
: QAbstractAxisPrivate(q),
m_min(1),
Marek Rosa
LogDomain initialize fix
r2304 m_max(1),
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 m_base(10),
m_format(QString::null)
{
}
QLogValueAxisPrivate::~QLogValueAxisPrivate()
{
}
void QLogValueAxisPrivate::setMin(const QVariant &min)
{
Q_Q(QLogValueAxis);
bool ok;
qreal value = min.toReal(&ok);
if (ok)
q->setMin(value);
}
void QLogValueAxisPrivate::setMax(const QVariant &max)
{
Q_Q(QLogValueAxis);
bool ok;
qreal value = max.toReal(&ok);
if (ok)
q->setMax(value);
}
void QLogValueAxisPrivate::setRange(const QVariant &min, const QVariant &max)
{
Q_Q(QLogValueAxis);
bool ok1;
bool ok2;
qreal value1 = min.toReal(&ok1);
qreal value2 = max.toReal(&ok2);
if (ok1 && ok2)
q->setRange(value1, value2);
}
void QLogValueAxisPrivate::setRange(qreal min, qreal max)
{
Q_Q(QLogValueAxis);
bool changed = false;
if (min > max)
return;
if (min > 0) {
if (!qFuzzyCompare(m_min, min)) {
m_min = min;
changed = true;
emit q->minChanged(min);
}
if (!qFuzzyCompare(m_max, max)) {
m_max = max;
changed = true;
emit q->maxChanged(max);
}
if (changed) {
emit rangeChanged(min,max);
Michal Klocek
Fixes missing layout updated on ticks,base and format calls
r2333 emit q->rangeChanged(min, max);
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 }
}
}
Miikka Heikkinen
Add Polar chart support...
r2483 void QLogValueAxisPrivate::initializeGraphics(QGraphicsItem *parent)
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 {
Q_Q(QLogValueAxis);
Miikka Heikkinen
Add Polar chart support...
r2483 ChartAxisElement *axis(0);
if (m_chart->chartType() == QChart::ChartTypeCartesian) {
if (orientation() == Qt::Vertical)
axis = new ChartLogValueAxisY(q,parent);
if (orientation() == Qt::Horizontal)
axis = new ChartLogValueAxisX(q,parent);
}
if (m_chart->chartType() == QChart::ChartTypePolar) {
if (orientation() == Qt::Vertical)
axis = new PolarChartLogValueAxisRadial(q, parent);
if (orientation() == Qt::Horizontal)
axis = new PolarChartLogValueAxisAngular(q, parent);
}
Marek Rosa
QLogValueAxis added. Log domain missing
r2274
m_item.reset(axis);
QAbstractAxisPrivate::initializeGraphics(parent);
}
Marek Rosa
Domains added
r2275 void QLogValueAxisPrivate::initializeDomain(AbstractDomain *domain)
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 {
if (orientation() == Qt::Vertical) {
Miikka Heikkinen
Add Polar chart support...
r2483 if (!qFuzzyCompare(m_max, m_min)) {
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 domain->setRangeY(m_min, m_max);
Marek Rosa
Fix logdomain initialization
r2355 } else if ( domain->minY() > 0) {
Marek Rosa
LogDomain initialize fix
r2304 setRange(domain->minY(), domain->maxY());
Marek Rosa
Fix logdomain initialization
r2355 } else if (domain->maxY() > 0) {
Marek Rosa
LogDomain initialize fix
r2304 domain->setRangeY(m_min, domain->maxY());
Marek Rosa
Fix logdomain initialization
r2355 } else {
domain->setRangeY(1, 10);
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 }
}
if (orientation() == Qt::Horizontal) {
Miikka Heikkinen
Add Polar chart support...
r2483 if (!qFuzzyCompare(m_max, m_min)) {
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 domain->setRangeX(m_min, m_max);
Marek Rosa
Fix logdomain initialization
r2355 } else if (domain->minX() > 0){
Marek Rosa
LogDomain initialize fix
r2304 setRange(domain->minX(), domain->maxX());
Marek Rosa
Fix logdomain initialization
r2355 } else if (domain->maxX() > 0) {
Marek Rosa
LogDomain initialize fix
r2304 domain->setRangeX(m_min, domain->maxX());
Marek Rosa
Fix logdomain initialization
r2355 } else {
domain->setRangeX(1, 10);
Marek Rosa
QLogValueAxis added. Log domain missing
r2274 }
}
}
#include "moc_qlogvalueaxis.cpp"
#include "moc_qlogvalueaxis_p.cpp"
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_END_NAMESPACE