diff options
Diffstat (limited to 'src/axis/barcategoryaxis/qbarcategoryaxis.cpp')
-rw-r--r-- | src/axis/barcategoryaxis/qbarcategoryaxis.cpp | 612 |
1 files changed, 0 insertions, 612 deletions
diff --git a/src/axis/barcategoryaxis/qbarcategoryaxis.cpp b/src/axis/barcategoryaxis/qbarcategoryaxis.cpp deleted file mode 100644 index fa90de64..00000000 --- a/src/axis/barcategoryaxis/qbarcategoryaxis.cpp +++ /dev/null @@ -1,612 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 Digia Plc -** All rights reserved. -** For any questions to Digia, please use contact form at http://qt.digia.com -** -** This file is part of the Qt Enterprise Charts Add-on. -** -** $QT_BEGIN_LICENSE$ -** Licensees holding valid Qt Enterprise licenses may use this file in -** accordance with the Qt Enterprise License Agreement provided with the -** 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$ -** -****************************************************************************/ - -#include "qbarcategoryaxis.h" -#include "qbarcategoryaxis_p.h" -#include "chartbarcategoryaxisx_p.h" -#include "chartbarcategoryaxisy_p.h" -#include "abstractdomain_p.h" -#include "qchart.h" -#include <qmath.h> - -QTCOMMERCIALCHART_BEGIN_NAMESPACE -/*! - \class QBarCategoryAxis - \inmodule Qt Charts - \brief The QBarCategoryAxis class is used for manipulating chart's axis. - \mainclass - - QBarCategoryAxis can be setup to show axis line with tick marks, grid lines and shades. - Categories are drawn between ticks. Note that you can use this also with lineseries too. - See the \l {Line and BarChart Example} {Line and BarChart Example} to learn how to do that. - - Example code on how to use QBarCategoryAxis. - \code - QChartView *chartView = new QChartView; - QBarSeries *series = new QBarSeries; - // ... - chartView->chart()->addSeries(series); - chartView->chart()->createDefaultAxes(); - - QBarCategoryAxis *axisX = new QBarCategoryAxis; - QStringList categories; - categories << "Jan" << "Feb" << "Mar" << "Apr" << "May" << "Jun"; - axisX->append(categories); - axisX->setRange("Feb", "May"); - chartView->chart()->setAxisX(axisX, series); - \endcode -*/ - -#ifdef QDOC_QT5 -/*! - \qmltype BarCategoryAxis - \instantiates QBarCategoryAxis - \inqmlmodule QtCommercial.Chart - - \include doc/src/barcategoryaxis.qdocinc -*/ -#else -/*! - \qmlclass BarCategoryAxis QBarCategoryAxis - - \include ../doc/src/barcategoryaxis.qdocinc -*/ -#endif - -/*! - \property QBarCategoryAxis::categories - Defines the categories of axis -*/ -/*! - \qmlproperty QStringList BarCategoryAxis::categories - Defines the categories of axis -*/ - -/*! - \property QBarCategoryAxis::min - Defines the minimum value on the axis. -*/ -/*! - \qmlproperty string BarCategoryAxis::min - Defines the minimum value on the axis. -*/ - -/*! - \property QBarCategoryAxis::max - Defines the maximum value on the axis. -*/ -/*! - \qmlproperty string BarCategoryAxis::max - Defines the maximum value on the axis. -*/ - -/*! - \property QBarCategoryAxis::count - The count of categories. -*/ -/*! - \qmlproperty int BarCategoryAxis::count - The count of categories. -*/ - -/*! - \fn void QBarCategoryAxis::categoriesChanged() - Axis emits signal when the categories of the axis have changed. -*/ - -/*! - \fn void QBarCategoryAxis::minChanged(const QString &min) - Axis emits signal when \a min of axis has changed. -*/ -/*! - \qmlsignal BarCategoryAxis::onMinChanged(const QString &min) - Axis emits signal when \a min of axis has changed. -*/ - -/*! - \fn void QBarCategoryAxis::maxChanged(const QString &max) - Axis emits signal when \a max of axis has changed. -*/ -/*! - \qmlsignal BarCategoryAxis::onMaxChanged(const QString &max) - Axis emits signal when \a max of axis has changed. -*/ - -/*! - \fn void QBarCategoryAxis::countChanged() - Axis emits signal when the count of categories has changed. -*/ -/*! - \qmlsignal BarCategoryAxis::onCountChanged() - Axis emits signal when the count of categories has changed. -*/ - -/*! - \fn void QBarCategoryAxis::rangeChanged(const QString &min, const QString &max) - Axis emits signal when \a min or \a max of axis has changed. -*/ - -/*! - \qmlmethod void BarCategoryAxis::clear() - Removes all categories. Sets the maximum and minimum of the axis's range to QString::null. -*/ - -/*! - Constructs an axis object which is a child of \a parent. -*/ -QBarCategoryAxis::QBarCategoryAxis(QObject *parent): - QAbstractAxis(*new QBarCategoryAxisPrivate(this), parent) -{ -} - -/*! - Destroys the object -*/ -QBarCategoryAxis::~QBarCategoryAxis() -{ - Q_D(QBarCategoryAxis); - if (d->m_chart) - d->m_chart->removeAxis(this); -} - -/*! - \internal -*/ -QBarCategoryAxis::QBarCategoryAxis(QBarCategoryAxisPrivate &d, QObject *parent) - : QAbstractAxis(d, parent) -{ - -} - -/*! - Appends \a categories to axis. A maximum of the axis will be changed to last category in \a categories. - If there were no categories previously defined, minimum of axis will be also changed to first category in \a categories. - A category has to be valid QStrings and can not be duplicated. Duplicated categories will not be appended. -*/ -void QBarCategoryAxis::append(const QStringList &categories) -{ - if (categories.isEmpty()) - return; - - Q_D(QBarCategoryAxis); - - int count = d->m_categories.count(); - - foreach(QString category, categories) { - if (!d->m_categories.contains(category) && !category.isNull()) { - d->m_categories.append(category); - } - } - - if (d->m_categories.count() == count) - return; - - if (count == 0) - setRange(d->m_categories.first(), d->m_categories.last()); - else - setRange(d->m_minCategory, d->m_categories.last()); - - emit categoriesChanged(); - emit countChanged(); -} - -/*! - Appends \a category to axis. A maximum of the axis will be changed to last \a category. - If there were no categories previously defined, minimum of axis will be also changed to \a category. - A \a category has to be valid QStrings and can not be duplicated. Duplicated categories will not be appended. -*/ -void QBarCategoryAxis::append(const QString &category) -{ - Q_D(QBarCategoryAxis); - - int count = d->m_categories.count(); - - if (!d->m_categories.contains(category) && !category.isNull()) - d->m_categories.append(category); - - if (d->m_categories.count() == count) - return; - - if (count == 0) - setRange(d->m_categories.last(), d->m_categories.last()); - else - setRange(d->m_minCategory, d->m_categories.last()); - - emit categoriesChanged(); - emit countChanged(); -} - -/*! - Removes \a category from axis. Removing category which is currently maximum or minimum - will affect the axis range. -*/ -void QBarCategoryAxis::remove(const QString &category) -{ - Q_D(QBarCategoryAxis); - - if (d->m_categories.contains(category)) { - d->m_categories.removeAt(d->m_categories.indexOf(category)); - if (!d->m_categories.isEmpty()) { - if (d->m_minCategory == category) { - setRange(d->m_categories.first(), d->m_maxCategory); - } else if (d->m_maxCategory == category) { - setRange(d->m_minCategory, d->m_categories.last()); - } else { - d->updateCategoryDomain(); - } - } else { - setRange(QString::null, QString::null); - } - emit categoriesChanged(); - emit countChanged(); - } -} - -/*! - Inserts \a category to axis at \a index. A \a category has to be valid QStrings and can not be duplicated. - If \a category is prepended or appended to categories, minimum and maximum of axis is updated accordingly. -*/ -void QBarCategoryAxis::insert(int index, const QString &category) -{ - Q_D(QBarCategoryAxis); - - int count = d->m_categories.count(); - - if (!d->m_categories.contains(category) && !category.isNull()) - d->m_categories.insert(index, category); - - if (d->m_categories.count() == count) - return; - - if (count == 0) { - setRange(d->m_categories.first(), d->m_categories.first()); - } else if (index == 0) { - setRange(d->m_categories.first(), d->m_maxCategory); - } else if (index == count) { - setRange(d->m_minCategory, d->m_categories.last()); - } else { - d->updateCategoryDomain(); - } - - emit categoriesChanged(); - emit countChanged(); -} - -/*! - Replaces \a oldCategory with \a newCategory. If \a oldCategory does not exist on the axis nothing is done. - A \a newCategory has to be valid QStrings and can not be duplicated. In case of replacing minimum or maximum category, - minimum and maximum of axis is updated accordingly. -*/ -void QBarCategoryAxis::replace(const QString &oldCategory, const QString &newCategory) -{ - Q_D(QBarCategoryAxis); - - int pos = d->m_categories.indexOf(oldCategory); - - if (pos != -1 && !d->m_categories.contains(newCategory) && !newCategory.isNull()) { - d->m_categories.replace(pos, newCategory); - if (d->m_minCategory == oldCategory) - setRange(newCategory, d->m_maxCategory); - else if (d->m_maxCategory == oldCategory) - setRange(d->m_minCategory, newCategory); - - emit categoriesChanged(); - emit countChanged(); - } -} - -/*! - Removes all categories. Sets the maximum and minimum of the axis's range to QString::null. - */ -void QBarCategoryAxis::clear() -{ - Q_D(QBarCategoryAxis); - d->m_categories.clear(); - setRange(QString::null, QString::null); - emit categoriesChanged(); - emit countChanged(); -} - -/*! - Set \a categories and discards the old ones, range of axis is adjusted to match first and last category in \a categories. - A category has to be valid QStrings and can not be duplicated. -*/ -void QBarCategoryAxis::setCategories(const QStringList &categories) -{ - Q_D(QBarCategoryAxis); - d->m_categories.clear(); - d->m_minCategory = QString::null; - d->m_maxCategory = QString::null; - d->m_min = 0; - d->m_max = 0; - d->m_count = 0; - append(categories); -} - -/*! - Returns categories -*/ -QStringList QBarCategoryAxis::categories() -{ - Q_D(QBarCategoryAxis); - return d->m_categories; -} - -/*! - Returns number of categories. - */ -int QBarCategoryAxis::count() const -{ - Q_D(const QBarCategoryAxis); - return d->m_categories.count(); -} - -/*! - Returns category at \a index. Index must be valid. -*/ -QString QBarCategoryAxis::at(int index) const -{ - Q_D(const QBarCategoryAxis); - return d->m_categories.at(index); -} - -/*! - Sets minimum category to \a min. -*/ -void QBarCategoryAxis::setMin(const QString &min) -{ - Q_D(QBarCategoryAxis); - d->setRange(min, d->m_maxCategory); -} - -/*! - Returns minimum category. -*/ -QString QBarCategoryAxis::min() const -{ - Q_D(const QBarCategoryAxis); - return d->m_minCategory; -} - -/*! - Sets maximum category to \a max. -*/ -void QBarCategoryAxis::setMax(const QString &max) -{ - Q_D(QBarCategoryAxis); - d->setRange(d->m_minCategory, max); -} - -/*! - Returns maximum category -*/ -QString QBarCategoryAxis::max() const -{ - Q_D(const QBarCategoryAxis); - return d->m_maxCategory; -} - -/*! - Sets range from \a minCategory to \a maxCategory -*/ -void QBarCategoryAxis::setRange(const QString &minCategory, const QString &maxCategory) -{ - Q_D(QBarCategoryAxis); - d->setRange(minCategory,maxCategory); -} - -/*! - Returns the type of the axis -*/ -QAbstractAxis::AxisType QBarCategoryAxis::type() const -{ - return AxisTypeBarCategory; -} - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -QBarCategoryAxisPrivate::QBarCategoryAxisPrivate(QBarCategoryAxis *q) - : QAbstractAxisPrivate(q), - m_min(0.0), - m_max(0.0), - m_count(0) -{ - -} - -QBarCategoryAxisPrivate::~QBarCategoryAxisPrivate() -{ - -} - -void QBarCategoryAxisPrivate::setMin(const QVariant &min) -{ - setRange(min, m_maxCategory); -} - -void QBarCategoryAxisPrivate::setMax(const QVariant &max) -{ - setRange(m_minCategory, max); -} - -void QBarCategoryAxisPrivate::setRange(const QVariant &min, const QVariant &max) -{ - QString value1 = min.toString(); - QString value2 = max.toString(); - setRange(value1, value2); -} - -void QBarCategoryAxisPrivate::setRange(qreal min, qreal max) -{ - Q_Q(QBarCategoryAxis); - - bool categoryChanged = false; - bool changed = false; - - if (min > max) - return; - - if (!qFuzzyIsNull(m_min - min)) { - m_min = min; - changed = true; - - int imin = m_min + 0.5; - if (imin >= 0 && imin < m_categories.count()) { - QString minCategory = m_categories.at(imin); - if (m_minCategory != minCategory && !minCategory.isEmpty()) { - m_minCategory = minCategory; - categoryChanged = true; - emit q->minChanged(minCategory); - } - } - - } - - if (!qFuzzyIsNull(m_max - max)) { - m_max = max; - changed = true; - - int imax = m_max - 0.5; - if (imax >= 0 && imax < m_categories.count()) { - QString maxCategory = m_categories.at(imax); - if (m_maxCategory != maxCategory && !maxCategory.isEmpty()) { - m_maxCategory = maxCategory; - categoryChanged = true; - emit q->maxChanged(maxCategory); - } - } - } - - if (categoryChanged){ - emit q->rangeChanged(m_minCategory, m_maxCategory); - } - - if (changed) { - emit rangeChanged(m_min,m_max); - } -} - -void QBarCategoryAxisPrivate::setRange(const QString &minCategory, const QString &maxCategory) -{ - Q_Q(QBarCategoryAxis); - bool changed = false; - - //special case in case or clearing all categories - if (minCategory.isNull() && maxCategory.isNull()) { - m_minCategory = minCategory; - m_maxCategory = maxCategory; - m_min = 0; - m_max = 0; - m_count = 0; - emit q->minChanged(minCategory); - emit q->maxChanged(maxCategory); - emit q->rangeChanged(m_minCategory, m_maxCategory); - emit rangeChanged(m_min,m_max); - return; - } - - if (m_categories.indexOf(maxCategory) < m_categories.indexOf(minCategory)) - return; - - if (!minCategory.isNull() && (m_minCategory != minCategory || m_minCategory.isNull()) - && m_categories.contains(minCategory)) { - m_minCategory = minCategory; - m_min = m_categories.indexOf(m_minCategory) - 0.5; - changed = true; - emit q->minChanged(minCategory); - } - - if (!maxCategory.isNull() && (m_maxCategory != maxCategory || m_maxCategory.isNull()) - && m_categories.contains(maxCategory)) { - m_maxCategory = maxCategory; - m_max = m_categories.indexOf(m_maxCategory) + 0.5; - changed = true; - emit q->maxChanged(maxCategory); - } - - if (changed) { - m_count = m_max - m_min; - emit q->rangeChanged(m_minCategory, m_maxCategory); - emit rangeChanged(m_min,m_max); - } -} - -void QBarCategoryAxisPrivate::initializeGraphics(QGraphicsItem* parent) -{ - Q_Q(QBarCategoryAxis); - ChartAxisElement* axis(0); - if (orientation() == Qt::Vertical) - axis = new ChartBarCategoryAxisY(q,parent); - if (orientation() == Qt::Horizontal) - axis = new ChartBarCategoryAxisX(q,parent); - - m_item.reset(axis); - QAbstractAxisPrivate::initializeGraphics(parent); -} - -void QBarCategoryAxisPrivate::updateCategoryDomain() -{ - bool changed = false; - - qreal tmpMin = m_categories.indexOf(m_minCategory) - 0.5; - if (!qFuzzyIsNull(m_min - tmpMin)) { - m_min = tmpMin; - changed = true; - } - qreal tmpMax = m_categories.indexOf(m_maxCategory) + 0.5; - if (!qFuzzyIsNull(m_max - tmpMax)) { - m_max = tmpMax; - changed = true; - } - m_count = m_max - m_min; - - if (changed) - emit rangeChanged(m_min,m_max); -} - - -void QBarCategoryAxisPrivate::initializeDomain(AbstractDomain *domain) -{ - Q_Q(QBarCategoryAxis); - if (m_max == m_min) { - int min; - int max; - if (orientation() == Qt::Vertical) { - min = domain->minY() + 0.5; - max = domain->maxY() - 0.5; - } else { - min = domain->minX() + 0.5; - max = domain->maxX() - 0.5; - } - - if (min > 0 && min < m_categories.count() && max > 0 && max < m_categories.count()) - q->setRange(m_categories.at(min), m_categories.at(max)); - } else { - if (orientation() == Qt::Vertical) - domain->setRangeY(m_min, m_max); - else - domain->setRangeX(m_min, m_max); - } -} - -#include "moc_qbarcategoryaxis.cpp" -#include "moc_qbarcategoryaxis_p.cpp" - -QTCOMMERCIALCHART_END_NAMESPACE |