##// END OF EJS Templates
Fix point label drawing for XYSeries...
Fix point label drawing for XYSeries Reverting change 810e912b2c05d5f4305b0f1e56be57e765a30479. m_points is used for the point label because that has the series point information. The points variable that is passed to the function is used for positioning the label as it has the coordinates. Change-Id: Iad48660d245c06b736c14161e5c86a4746df2b28 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@theqtcompany.com>

File last commit:

r2776:bc1f6aa59d42
r2779:ce2af37ac88e
Show More
qcategoryaxis.cpp
331 lines | 9.6 KiB | text/x-c | CppLexer
Marek Rosa
QIntervalsAxis working somewhat
r1701 /****************************************************************************
**
Titta Heikkala
Copyright header changes...
r2776 ** Copyright (C) 2015 The Qt Company Ltd
Marek Rosa
QIntervalsAxis working somewhat
r1701 ** 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
QIntervalsAxis working somewhat
r1701 **
Titta Heikkala
Updated license headers...
r2740 ** This file is part of the Qt Charts module.
Marek Rosa
QIntervalsAxis working somewhat
r1701 **
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
QIntervalsAxis working somewhat
r1701 **
** 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
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.
Marek Rosa
QIntervalsAxis working somewhat
r1701 \mainclass
Marek Rosa
Some axes docs update
r1834
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.
*/
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 }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Jani Honkonen
more coding style fixes for src-folder...
r2104 QCategoryAxisPrivate::QCategoryAxisPrivate(QCategoryAxis *q)
: QValueAxisPrivate(q),
m_categoryMinimum(0)
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