##// END OF EJS Templates
Merge remote-tracking branch 'origin/5.6' into 5.7...
Merge remote-tracking branch 'origin/5.6' into 5.7 Conflicts: .qmake.conf README src/charts/qchartglobal.h Change-Id: I20497b20947f589f9f73239a09ba6ea013b3597a

File last commit:

r2854:46147b040d06
r2878:97bb01ce5d85 merge
Show More
qcategoryaxis.cpp
376 lines | 11.3 KiB | text/x-c | CppLexer
Miikka Heikkinen
Updated license...
r2854 /****************************************************************************
Marek Rosa
QIntervalsAxis working somewhat
r1701 **
Miikka Heikkinen
Updated license...
r2854 ** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
Marek Rosa
QIntervalsAxis working somewhat
r1701 **
Miikka Heikkinen
Updated license...
r2854 ** This file is part of the Qt Charts module of the Qt Toolkit.
Marek Rosa
QIntervalsAxis working somewhat
r1701 **
Miikka Heikkinen
Updated license...
r2854 ** $QT_BEGIN_LICENSE:GPL$
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
Miikka Heikkinen
Updated license...
r2854 ** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
Marek Rosa
QIntervalsAxis working somewhat
r1701 **
Titta Heikkala
Updated license headers...
r2845 ** $QT_END_LICENSE$
**
Miikka Heikkinen
Updated license...
r2854 ****************************************************************************/
Marek Rosa
QIntervalsAxis working somewhat
r1701
Titta Heikkala
Fix include syntax...
r2714 #include <QtCharts/QCategoryAxis>
#include <private/qcategoryaxis_p.h>
#include <private/chartcategoryaxisx_p.h>
#include <private/chartcategoryaxisy_p.h>
#include <private/polarchartcategoryaxisangular_p.h>
#include <private/polarchartcategoryaxisradial_p.h>
#include <QtCharts/QChart>
#include <QtCore/QtMath>
#include <QtCore/QDebug>
Marek Rosa
QIntervalsAxis working somewhat
r1701
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_BEGIN_NAMESPACE
Marek Rosa
QIntervalsAxis working somewhat
r1701 /*!
Marek Rosa
QIntervalsAxis renamed to QCategoryAxis
r1816 \class QCategoryAxis
Titta Heikkala
Fix Charts documentation...
r2639 \inmodule Qt Charts
Marek Rosa
Some axes docs update
r1834 \brief The QCategoryAxis class allows putting a named ranges on the axis.
This class can be used when the underlying data needs to be given extra meaning.
Unlike with the QBarCategoryAxis the QCategoryAxis allows the categories ranges widths to be specified freely.
Marek Rosa
Axis docs updated
r1887
Tero Ahola
Added a screen shot to QCategoryAxis documentation
r2220 Example code on how to use QCategoryAxis:
Titta Heikkala
Fix documentation appearance...
r2750 \image api_category_axis.png
\code
QChartView *chartView = new QChartView;
QLineSeries *series = new QLineSeries;
// ...
chartView->chart()->addSeries(series);
Marek Rosa
Axis docs updated
r1887
Titta Heikkala
Fix documentation appearance...
r2750 QCategoryAxis *axisY = new QCategoryAxis;
axisY->setMin(0);
axisY->setMax(52);
axisY->setStartValue(15);
axisY->append("First", 20);
axisY->append("Second", 37);
axisY->append("Third", 52);
chartView->chart()->setAxisY(axisY, series);
\endcode
Marek Rosa
QIntervalsAxis working somewhat
r1701 */
Titta Heikkala
Fix Charts documentation...
r2639 /*!
\qmltype CategoryAxis
\instantiates QCategoryAxis
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 \inherits AbstractAxis
\brief CategoryAxis allows putting a named ranges on the axis.
Tero Ahola
Added CategoryAxis and CategoryRange to QML API
r1870
Titta Heikkala
Qt Charts project file structure change...
r2712 For example:
Titta Heikkala
Fix documentation appearance...
r2750 \image examples_qmlaxes3.png
\snippet qmlaxes/qml/qmlaxes/View3.qml 1
Marek Rosa
Some axes docs update
r1834 */
/*!
\property QCategoryAxis::startValue
Defines the low end of the first category on the axis.
*/
/*!
\qmlproperty int CategoryAxis::startValue
Defines the low end of the first category on the axis.
Marek Rosa
QIntervalsAxis working somewhat
r1701 */
Tero Ahola
Added missing count property to QBarCategoryAxis
r2249 /*!
\property QCategoryAxis::count
The count of categories.
*/
/*!
\qmlproperty int CategoryAxis::count
The count of categories.
*/
/*!
\property QCategoryAxis::categoriesLabels
The category labels as a string list.
*/
/*!
\qmlproperty StringList CategoryAxis::categoriesLabels
The category labels as a list of strings.
*/
Miikka Heikkinen
Add Polar chart support...
r2483 /*!
\fn void QCategoryAxis::categoriesChanged()
Axis emits signal when the categories of the axis have changed.
*/
Titta Heikkala
Added possibility to set labels position for QCategoryAxis...
r2780 /*!
\enum QCategoryAxis::AxisLabelsPosition
This enum describes the position of the category labels.
\value AxisLabelsPositionCenter Labels are centered to category.
\value AxisLabelsPositionOnValue Labels are positioned to the high end limit of the category.
*/
/*!
\property QCategoryAxis::labelsPosition
Defines the position of the category labels. The labels in the beginning and in the end of the
axes may overlap other axes labels when positioned on value.
*/
/*!
\qmlproperty AxisLabelsPosition CategoryAxis::labelsPosition
Defines the position of the category labels. The labels in the beginning and in the end of the
axes may overlap other axes labels when positioned on value.
*/
Miikka Heikkinen
Add Polar chart support...
r2483
Marek Rosa
QIntervalsAxis working somewhat
r1701 /*!
Constructs an axis object which is a child of \a parent.
*/
Marek Rosa
QIntervalsAxis renamed to QCategoryAxis
r1816 QCategoryAxis::QCategoryAxis(QObject *parent):
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 QValueAxis(*new QCategoryAxisPrivate(this), parent)
Marek Rosa
QIntervalsAxis working somewhat
r1701 {
}
/*!
Destroys the object
*/
Marek Rosa
QIntervalsAxis renamed to QCategoryAxis
r1816 QCategoryAxis::~QCategoryAxis()
Marek Rosa
QIntervalsAxis working somewhat
r1701 {
Michal Klocek
Refactors internals...
r2273 Q_D(QCategoryAxis);
if (d->m_chart)
d->m_chart->removeAxis(this);
Marek Rosa
QIntervalsAxis working somewhat
r1701 }
/*!
\internal
*/
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 QCategoryAxis::QCategoryAxis(QCategoryAxisPrivate &d, QObject *parent): QValueAxis(d, parent)
Marek Rosa
QIntervalsAxis working somewhat
r1701 {
}
Tero Ahola
Added CategoryAxis and CategoryRange to QML API
r1870 /*!
\qmlmethod CategoryAxis::append(string label, real endValue)
Appends new category to the axis with an \a label. Category label has to be unique.
Parameter \a endValue specifies the high end limit of the category.
It has to be greater than the high end limit of the previous category.
Otherwise the method returns without adding a new category.
*/
Marek Rosa
QIntervalsAxis working somewhat
r1701 /*!
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 Appends new category to the axis with an \a categoryLabel.
Category label has to be unique.
Marek Rosa
QCategoryAxis: method parameter name updated
r1849 Parameter \a categoryEndValue specifies the high end limit of the category.
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 It has to be greater than the high end limit of the previous category.
Otherwise the method returns without adding a new category.
Marek Rosa
QIntervalsAxis working somewhat
r1701 */
Jani Honkonen
more coding style fixes for src-folder...
r2104 void QCategoryAxis::append(const QString &categoryLabel, qreal categoryEndValue)
Marek Rosa
QIntervalsAxis working somewhat
r1701 {
Marek Rosa
QIntervalsAxis renamed to QCategoryAxis
r1816 Q_D(QCategoryAxis);
Marek Rosa
Fixes and tests to Interval axis
r1708
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 if (!d->m_categories.contains(categoryLabel)) {
if (d->m_categories.isEmpty()) {
Marek Rosa
QCategoryAxis: method parameter name updated
r1849 Range range(d->m_categoryMinimum, categoryEndValue);
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 d->m_categoriesMap.insert(categoryLabel, range);
d->m_categories.append(categoryLabel);
Miikka Heikkinen
Add Polar chart support...
r2483 emit categoriesChanged();
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 } else if (categoryEndValue > endValue(d->m_categories.last())) {
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 Range previousRange = d->m_categoriesMap.value(d->m_categories.last());
Marek Rosa
QCategoryAxis: method parameter name updated
r1849 d->m_categoriesMap.insert(categoryLabel, Range(previousRange.second, categoryEndValue));
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 d->m_categories.append(categoryLabel);
Miikka Heikkinen
Add Polar chart support...
r2483 emit categoriesChanged();
Marek Rosa
Fixes and tests to Interval axis
r1708 }
Marek Rosa
QIntervalsAxis working somewhat
r1701 }
}
Marek Rosa
Some axes docs update
r1834 /*!
Sets \a min to be the low end limit of the first category on the axis.
Marek Rosa
QCategoryAxis: renamed some functions according to review
r1847 If there is already some categories added to the axis then passed value must be lower than the high end value of the already defined first category range.
Otherwise nothing is done.
Marek Rosa
Docs update
r1731 */
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 void QCategoryAxis::setStartValue(qreal min)
Marek Rosa
QIntervalsAxis working somewhat
r1701 {
Marek Rosa
QIntervalsAxis renamed to QCategoryAxis
r1816 Q_D(QCategoryAxis);
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 if (d->m_categories.isEmpty()) {
Marek Rosa
Fixes and tests to Interval axis
r1708 d->m_categoryMinimum = min;
Miikka Heikkinen
Add Polar chart support...
r2483 emit categoriesChanged();
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 } else {
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 Range range = d->m_categoriesMap.value(d->m_categories.first());
Miikka Heikkinen
Add Polar chart support...
r2483 if (min < range.second) {
Marek Rosa
QCategoryAxis: renamed some functions according to review
r1847 d->m_categoriesMap.insert(d->m_categories.first(), Range(min, range.second));
Miikka Heikkinen
Add Polar chart support...
r2483 emit categoriesChanged();
}
Marek Rosa
Fixes and tests to Interval axis
r1708 }
Marek Rosa
QIntervalsAxis working somewhat
r1701 }
Marek Rosa
Docs update
r1731 /*!
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 Returns the low end limit of the category specified by an \a categoryLabel
Marek Rosa
Docs update
r1731 */
Jani Honkonen
more coding style fixes for src-folder...
r2104 qreal QCategoryAxis::startValue(const QString &categoryLabel) const
Marek Rosa
QIntervalsAxis working somewhat
r1701 {
Marek Rosa
QIntervalsAxis renamed to QCategoryAxis
r1816 Q_D(const QCategoryAxis);
Jani Honkonen
Fix Krazy issues
r1935 if (categoryLabel.isEmpty())
Marek Rosa
QCategoryAxis: renamed some functions according to review
r1847 return d->m_categoryMinimum;
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 return d->m_categoriesMap.value(categoryLabel).first;
Marek Rosa
QIntervalsAxis working somewhat
r1701 }
Marek Rosa
Docs update
r1731 /*!
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 Returns the high end limit of the interval specified by an \a categoryLabel
Marek Rosa
Docs update
r1731 */
Jani Honkonen
more coding style fixes for src-folder...
r2104 qreal QCategoryAxis::endValue(const QString &categoryLabel) const
Marek Rosa
QIntervalsAxis working somewhat
r1701 {
Marek Rosa
QIntervalsAxis renamed to QCategoryAxis
r1816 Q_D(const QCategoryAxis);
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 return d->m_categoriesMap.value(categoryLabel).second;
Marek Rosa
QIntervalsAxis working somewhat
r1701 }
Tero Ahola
Added CategoryAxis and CategoryRange to QML API
r1870 /*!
\qmlmethod CategoryAxis::remove(string label)
Removes a category specified by the \a label from the axis
*/
Marek Rosa
QIntervalsAxis working somewhat
r1701 /*!
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 Removes an interval specified by the \a categoryLabel from the axis
Marek Rosa
QIntervalsAxis working somewhat
r1701 */
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 void QCategoryAxis::remove(const QString &categoryLabel)
Marek Rosa
QIntervalsAxis working somewhat
r1701 {
Marek Rosa
QIntervalsAxis renamed to QCategoryAxis
r1816 Q_D(QCategoryAxis);
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 int labelIndex = d->m_categories.indexOf(categoryLabel);
Marek Rosa
Fixes and tests to Interval axis
r1708
// check if such label exists
if (labelIndex != -1) {
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 d->m_categories.removeAt(labelIndex);
d->m_categoriesMap.remove(categoryLabel);
Marek Rosa
Fixes and tests to Interval axis
r1708
// the range of the interval that follows (if exists) needs to be updated
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 if (labelIndex < d->m_categories.count()) {
QString label = d->m_categories.at(labelIndex);
Range range = d->m_categoriesMap.value(label);
Marek Rosa
Fixes and tests to Interval axis
r1708
// set the range
if (labelIndex == 0) {
range.first = d->m_categoryMinimum;
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 d->m_categoriesMap.insert(label, range);
Marek Rosa
Fixes and tests to Interval axis
r1708 } else {
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 range.first = d->m_categoriesMap.value(d->m_categories.at(labelIndex - 1)).second;
d->m_categoriesMap.insert(label, range);
Marek Rosa
Fixes and tests to Interval axis
r1708 }
Michal Klocek
Revert "TODOs removed from code. Undo me after release"...
r2407 }
Miikka Heikkinen
Add Polar chart support...
r2483 emit categoriesChanged();
Marek Rosa
Fixes and tests to Interval axis
r1708 }
Marek Rosa
QIntervalsAxis working somewhat
r1701 }
Tero Ahola
Added CategoryAxis and CategoryRange to QML API
r1870 /*!
\qmlmethod CategoryAxis::replace(string oldLabel, string newLabel)
Replaces \a oldLabel of an existing category with a \a newLabel.
If the old label does not exist the method returns without making any changes.
*/
Marek Rosa
Some interval axis docs updates
r1800 /*!
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 Replaces \a oldLabel of an existing category with a \a newLabel
Marek Rosa
Some interval axis docs updates
r1800 If the old label does not exist the method returns without making any changes.
*/
Jani Honkonen
more coding style fixes for src-folder...
r2104 void QCategoryAxis::replaceLabel(const QString &oldLabel, const QString &newLabel)
Marek Rosa
Added posibility to replace interval's label in QIntervalsAxis
r1777 {
Marek Rosa
QIntervalsAxis renamed to QCategoryAxis
r1816 Q_D(QCategoryAxis);
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 int labelIndex = d->m_categories.indexOf(oldLabel);
Marek Rosa
Added posibility to replace interval's label in QIntervalsAxis
r1777
// check if such label exists
if (labelIndex != -1) {
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 d->m_categories.replace(labelIndex, newLabel);
Range range = d->m_categoriesMap.value(oldLabel);
d->m_categoriesMap.remove(oldLabel);
Michal Klocek
Revert "TODOs removed from code. Undo me after release"...
r2407 d->m_categoriesMap.insert(newLabel, range);
Miikka Heikkinen
Add Polar chart support...
r2483 emit categoriesChanged();
Marek Rosa
Added posibility to replace interval's label in QIntervalsAxis
r1777 }
}
Marek Rosa
Some interval axis docs updates
r1800 /*!
Returns the list of the intervals labels
*/
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 QStringList QCategoryAxis::categoriesLabels()
Marek Rosa
QIntervalsAxis working somewhat
r1701 {
Marek Rosa
QIntervalsAxis renamed to QCategoryAxis
r1816 Q_D(QCategoryAxis);
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 return d->m_categories;
Marek Rosa
QIntervalsAxis working somewhat
r1701 }
/*!
Marek Rosa
QIntervalsAxis some names updates
r1799 Returns number of intervals.
Marek Rosa
QIntervalsAxis working somewhat
r1701 */
Marek Rosa
QIntervalsAxis renamed to QCategoryAxis
r1816 int QCategoryAxis::count() const
Marek Rosa
QIntervalsAxis working somewhat
r1701 {
Marek Rosa
QIntervalsAxis renamed to QCategoryAxis
r1816 Q_D(const QCategoryAxis);
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 return d->m_categories.count();
Marek Rosa
QIntervalsAxis working somewhat
r1701 }
/*!
Returns the type of the axis
*/
Marek Rosa
QIntervalsAxis renamed to QCategoryAxis
r1816 QAbstractAxis::AxisType QCategoryAxis::type() const
Marek Rosa
QIntervalsAxis working somewhat
r1701 {
Marek Rosa
updated AxisType names
r1818 return QAbstractAxis::AxisTypeCategory;
Marek Rosa
QIntervalsAxis working somewhat
r1701 }
Titta Heikkala
Added possibility to set labels position for QCategoryAxis...
r2780 void QCategoryAxis::setLabelsPosition(QCategoryAxis::AxisLabelsPosition position)
{
Q_D(QCategoryAxis);
if (d->m_labelsPosition != position) {
d->m_labelsPosition = position;
emit labelsPositionChanged(position);
}
}
QCategoryAxis::AxisLabelsPosition QCategoryAxis::labelsPosition() const
{
Q_D(const QCategoryAxis);
return d->m_labelsPosition;
}
Marek Rosa
QIntervalsAxis working somewhat
r1701 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Jani Honkonen
more coding style fixes for src-folder...
r2104 QCategoryAxisPrivate::QCategoryAxisPrivate(QCategoryAxis *q)
: QValueAxisPrivate(q),
Titta Heikkala
Added possibility to set labels position for QCategoryAxis...
r2780 m_categoryMinimum(0),
m_labelsPosition(QCategoryAxis::AxisLabelsPositionCenter)
Marek Rosa
QIntervalsAxis working somewhat
r1701 {
}
Marek Rosa
QIntervalsAxis renamed to QCategoryAxis
r1816 QCategoryAxisPrivate::~QCategoryAxisPrivate()
Marek Rosa
QIntervalsAxis working somewhat
r1701 {
}
Marek Rosa
QIntervalsAxis renamed to QCategoryAxis
r1816 int QCategoryAxisPrivate::ticksCount() const
Marek Rosa
QIntervalsAxis working somewhat
r1701 {
Marek Rosa
QCategoryAxis renamed some methods names according to review
r1829 return m_categories.count() + 1;
Marek Rosa
QIntervalsAxis working somewhat
r1701 }
Miikka Heikkinen
Add Polar chart support...
r2483 void QCategoryAxisPrivate::initializeGraphics(QGraphicsItem *parent)
Marek Rosa
QIntervalsAxis working somewhat
r1701 {
Marek Rosa
QIntervalsAxis renamed to QCategoryAxis
r1816 Q_Q(QCategoryAxis);
Miikka Heikkinen
Add Polar chart support...
r2483 ChartAxisElement *axis(0);
if (m_chart->chartType() == QChart::ChartTypeCartesian) {
if (orientation() == Qt::Vertical)
axis = new ChartCategoryAxisY(q,parent);
else if (orientation() == Qt::Horizontal)
axis = new ChartCategoryAxisX(q,parent);
}
if (m_chart->chartType() == QChart::ChartTypePolar) {
if (orientation() == Qt::Vertical)
axis = new PolarChartCategoryAxisRadial(q, parent);
if (orientation() == Qt::Horizontal)
axis = new PolarChartCategoryAxisAngular(q, parent);
}
Michal Klocek
Refactors internals...
r2273
m_item.reset(axis);
QAbstractAxisPrivate::initializeGraphics(parent);
Marek Rosa
QIntervalsAxis working somewhat
r1701 }
Marek Rosa
Renamed QCategoryAxis related files
r1817 #include "moc_qcategoryaxis.cpp"
#include "moc_qcategoryaxis_p.cpp"
Marek Rosa
QIntervalsAxis working somewhat
r1701
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_END_NAMESPACE