##// END OF EJS Templates
Fix wrong interpolation call in bar*series, unit tests fixed
Fix wrong interpolation call in bar*series, unit tests fixed

File last commit:

r1733:51dc153251d2
r1734:ee6ddf4cebac
Show More
qabstractaxis.cpp
655 lines | 14.0 KiB | text/x-c | CppLexer
/ src / axis / qabstractaxis.cpp
Michal Klocek
Adds new API classes...
r1540 /****************************************************************************
**
** Copyright (C) 2012 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 Commercial Charts Add-on.
**
** $QT_BEGIN_LICENSE$
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial 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 "qabstractaxis.h"
#include "qabstractaxis_p.h"
QTCOMMERCIALCHART_BEGIN_NAMESPACE
/*!
\class QAbstractAxis
\brief The QAbstractAxis class is used for manipulating chart's axis.
\mainclass
sauimone
qml doc update
r1639 There is only one x Axis visible at the time, however there can be multiple y axes.
Michal Klocek
Adds new API classes...
r1540 Each chart series can be bound to exactly one Y axis and the shared common X axis.
Axis can be setup to show axis line with tick marks, grid lines and shades.
*/
/*!
sauimone
qml doc update
r1639 \qmlclass AbstractAxis QAbstractAxis
Michal Klocek
Adds new API classes...
r1540 \brief The Axis element is used for manipulating chart's axes
sauimone
qml doc update
r1639 There is only one x Axis visible at the time, however there can be multiple y axes on a ChartView.
Michal Klocek
Adds new API classes...
r1540 Each chart series can be bound to exactly one Y axis and the shared common X axis.
Axis can be setup to show axis line with tick marks, grid lines and shades.
To access Axes you can use ChartView API. For example:
\code
ChartView {
axisX.min: 0
axisX.max: 3
axisX.ticksCount: 4
axisY.min: 0
axisY.max: 4
// Add a few series...
}
\endcode
*/
Marek Rosa
Old QAxisCategories removed
r1548 /*!
\enum QAbstractAxis::AxisType
The type of the series object.
sauimone
documentation update
r1618 \value AxisTypeNoAxis
Marek Rosa
Old QAxisCategories removed
r1548 \value AxisTypeValues
\value AxisTypeCategories
Marek Rosa
Docs and dateTime test updated
r1733 \value AxisTypeIntervals
\value AxisTypeDateTime
Marek Rosa
Old QAxisCategories removed
r1548 */
Marek Rosa
Few more axes docs updates
r1637 /*!
*\fn void QAbstractAxis::type() const
Returns the type of the axis
*/
sauimone
axis doc update
r1621 /*!
\property QAbstractAxis::arrowVisible
The visibility of the axis arrow
*/
/*!
sauimone
qml doc update
r1639 \qmlproperty bool AbstractAxis::arrrowVisible
sauimone
axis doc update
r1621 The visibility of the axis arrow
Marek Rosa
Old QAxisCategories removed
r1548 */
Michal Klocek
Adds new API classes...
r1540 /*!
\property QAbstractAxis::labelsVisible
Defines if axis labels are visible.
*/
/*!
sauimone
qml doc update
r1639 \qmlproperty bool AbstractAxis::labelsVisible
Michal Klocek
Adds new API classes...
r1540 Defines if axis labels are visible.
*/
/*!
\property QAbstractAxis::visible
The visibility of the axis.
*/
/*!
sauimone
qml doc update
r1639 \qmlproperty bool AbstractAxis::visible
Michal Klocek
Adds new API classes...
r1540 The visibility of the axis.
*/
/*!
\property QAbstractAxis::gridVisible
The visibility of the grid lines.
*/
/*!
sauimone
qml doc update
r1639 \qmlproperty bool AbstractAxis::gridVisible
Michal Klocek
Adds new API classes...
r1540 The visibility of the grid lines.
*/
/*!
\property QAbstractAxis::color
The color of the axis and ticks.
*/
/*!
sauimone
qml doc update
r1639 \qmlproperty color AbstractAxis::color
Michal Klocek
Adds new API classes...
r1540 The color of the axis and ticks.
*/
/*!
sauimone
fixed documentation errors
r1575 \property QAbstractAxis::labelsFont
Michal Klocek
Adds new API classes...
r1540 The font of the axis labels.
*/
sauimone
fixed documentation errors
r1575
Michal Klocek
Adds new API classes...
r1540 /*!
sauimone
qml doc update
r1639 \qmlproperty Font AbstractAxis::labelsFont
Michal Klocek
Adds new API classes...
r1540 The font of the axis labels.
See the \l {Font} {QML Font Element} for detailed documentation.
*/
/*!
\property QAbstractAxis::labelsColor
The color of the axis labels.
*/
/*!
sauimone
qml doc update
r1639 \qmlproperty color AbstractAxis::labelsColor
Michal Klocek
Adds new API classes...
r1540 The color of the axis labels.
*/
/*!
\property QAbstractAxis::labelsAngle
The angle of the axis labels in degrees.
*/
/*!
sauimone
qml doc update
r1639 \qmlproperty int AbstractAxis::labelsAngle
Michal Klocek
Adds new API classes...
r1540 The angle of the axis labels in degrees.
*/
/*!
\property QAbstractAxis::shadesVisible
The visibility of the axis shades.
*/
/*!
sauimone
qml doc update
r1639 \qmlproperty bool AbstractAxis::shadesVisible
Michal Klocek
Adds new API classes...
r1540 The visibility of the axis shades.
*/
/*!
\property QAbstractAxis::shadesColor
The fill (brush) color of the axis shades.
*/
/*!
sauimone
qml doc update
r1639 \qmlproperty color AbstractAxis::shadesColor
Michal Klocek
Adds new API classes...
r1540 The fill (brush) color of the axis shades.
*/
/*!
\property QAbstractAxis::shadesBorderColor
The border (pen) color of the axis shades.
*/
/*!
sauimone
qml doc update
r1639 \qmlproperty color AbstractAxis::shadesBorderColor
Michal Klocek
Adds new API classes...
r1540 The border (pen) color of the axis shades.
*/
/*!
sauimone
abstract axis qml documentation. bug fix to setArrowVisible
r1654 \fn void QAbstractAxis::visibleChanged(bool visible)
Michal Klocek
Adds new API classes...
r1540 Visiblity of the axis has changed to \a visible.
*/
/*!
sauimone
abstract axis qml documentation. bug fix to setArrowVisible
r1654 \qmlsignal AbstractAxis::onVisibleChanged(bool visible)
Visiblity of the axis has changed to \a visible.
Michal Klocek
Adds new API classes...
r1540 */
/*!
sauimone
abstract axis qml documentation. bug fix to setArrowVisible
r1654 \fn void QAbstractAxis::arrowVisibleChanged(bool visible)
Visiblity of the axis arrow has changed to \a visible.
Michal Klocek
Adds new API classes...
r1540 */
sauimone
abstract axis qml documentation. bug fix to setArrowVisible
r1654 /*!
\qmlsignal AbstractAxis::onArrowVisibleChanged(bool visible)
Visiblity of the axis arrow has changed to \a visible.
Michal Klocek
Adds new API classes...
r1540 */
sauimone
abstract axis qml documentation. bug fix to setArrowVisible
r1654 /*!
\fn void QAbstractAxis::labelsVisibleChanged(bool visible)
Visiblity of the labels of the axis has changed to \a visible.
Michal Klocek
Adds new API classes...
r1540 */
sauimone
abstract axis qml documentation. bug fix to setArrowVisible
r1654 /*!
\qmlsignal AbstractAxis::onLabelsVisibleChanged(bool visible)
Visiblity of the labels of the axis has changed to \a visible.
Michal Klocek
Adds new API classes...
r1540 */
sauimone
abstract axis qml documentation. bug fix to setArrowVisible
r1654 /*!
\fn void QAbstractAxis::gridVisibleChanged(bool visible)
Visiblity of the grid lines of the axis has changed to \a visible.
*/
/*!
\qmlsignal AbstractAxis::onGridVisibleChanged(bool visible)
Visiblity of the grid lines of the axis has changed to \a visible.
Michal Klocek
Adds new API classes...
r1540 */
/*!
sauimone
abstract axis qml documentation. bug fix to setArrowVisible
r1654 \fn void QAbstractAxis::colorChanged(QColor color)
Emitted if the \a color of the axis is changed.
*/
/*!
\qmlsignal AbstractAxis::onColorChanged(QColor color)
Michal Klocek
Adds new API classes...
r1540 Emitted if the \a color of the axis is changed.
*/
/*!
sauimone
abstract axis qml documentation. bug fix to setArrowVisible
r1654 \fn void QAbstractAxis::labelsColorChanged(QColor color)
Emitted if the \a color of the axis labels is changed.
*/
/*!
\qmlsignal AbstractAxis::onLabelsColorChanged(QColor color)
Michal Klocek
Adds new API classes...
r1540 Emitted if the \a color of the axis labels is changed.
*/
/*!
\fn void QAbstractAxis::shadesVisibleChanged(bool)
Emitted if the visibility of the axis shades is changed to \a visible.
*/
sauimone
abstract axis qml documentation. bug fix to setArrowVisible
r1654 /*!
\qmlsignal AbstractAxis::onShadesVisibleChanged(bool visible)
Emitted if the visibility of the axis shades is changed to \a visible.
*/
Michal Klocek
Adds new API classes...
r1540
/*!
sauimone
abstract axis qml documentation. bug fix to setArrowVisible
r1654 \fn void QAbstractAxis::shadesColorChanged(QColor color)
Emitted if the \a color of the axis shades is changed.
*/
/*!
\qmlsignal AbstractAxis::onShadesColorChanged(QColor color)
Michal Klocek
Adds new API classes...
r1540 Emitted if the \a color of the axis shades is changed.
*/
/*!
\fn void QAbstractAxis::shadesBorderColorChanged(QColor)
Emitted if the border \a color of the axis shades is changed.
*/
sauimone
abstract axis qml documentation. bug fix to setArrowVisible
r1654 /*!
\qmlsignal AbstractAxis::onBorderColorChanged(QColor color)
Emitted if the border \a color of the axis shades is changed.
*/
Michal Klocek
Adds new API classes...
r1540
/*!
Marek Rosa
Docs fixes
r1657 \internal
Michal Klocek
Adds new API classes...
r1540 Constructs new axis object which is a child of \a parent. Ownership is taken by
QChart when axis added.
*/
QAbstractAxis::QAbstractAxis(QAbstractAxisPrivate &d, QObject *parent) :
QObject(parent),
d_ptr(&d)
{
}
/*!
Destructor of the axis object. When axis is added to chart, chart object takes ownership.
*/
QAbstractAxis::~QAbstractAxis()
{
Michal Klocek
Implements qbarcategoriesaxis logic...
r1725 if(d_ptr->m_dataset) qFatal("Still binded axis detected !");
Michal Klocek
Adds new API classes...
r1540 }
/*!
Sets \a pen used to draw axis line and ticks.
*/
void QAbstractAxis::setAxisPen(const QPen &pen)
{
if (d_ptr->m_axisPen!=pen) {
d_ptr->m_axisPen = pen;
Michal Klocek
Refactors Domain and Axis...
r1698 d_ptr->emitUpdated();
Michal Klocek
Adds new API classes...
r1540 }
}
/*!
Returns pen used to draw axis and ticks.
*/
QPen QAbstractAxis::axisPen() const
{
return d_ptr->m_axisPen;
}
void QAbstractAxis::setAxisPenColor(QColor color)
{
QPen p = d_ptr->m_axisPen;
if (p.color() != color) {
p.setColor(color);
setAxisPen(p);
emit colorChanged(color);
}
}
QColor QAbstractAxis::axisPenColor() const
{
return d_ptr->m_axisPen.color();
}
/*!
Sets if axis and ticks are \a visible.
*/
sauimone
abstract axis qml documentation. bug fix to setArrowVisible
r1654 void QAbstractAxis::setArrowVisible(bool visible)
Michal Klocek
Adds new API classes...
r1540 {
sauimone
abstract axis qml documentation. bug fix to setArrowVisible
r1654 if (d_ptr->m_arrowVisible != visible) {
d_ptr->m_arrowVisible = visible;
Michal Klocek
Refactors Domain and Axis...
r1698 d_ptr->emitUpdated();
sauimone
abstract axis qml documentation. bug fix to setArrowVisible
r1654 emit arrowVisibleChanged(visible);
Michal Klocek
Adds new API classes...
r1540 }
}
sauimone
abstract axis qml documentation. bug fix to setArrowVisible
r1654 bool QAbstractAxis::isArrowVisible() const
Michal Klocek
Adds new API classes...
r1540 {
sauimone
abstract axis qml documentation. bug fix to setArrowVisible
r1654 return d_ptr->m_arrowVisible;
Michal Klocek
Adds new API classes...
r1540 }
void QAbstractAxis::setGridLineVisible(bool visible)
{
if (d_ptr->m_gridLineVisible != visible) {
d_ptr->m_gridLineVisible = visible;
Michal Klocek
Refactors Domain and Axis...
r1698 d_ptr->emitUpdated();
Michal Klocek
Adds new API classes...
r1540 emit gridVisibleChanged(visible);
}
}
bool QAbstractAxis::isGridLineVisible() const
{
return d_ptr->m_gridLineVisible;
}
/*!
Sets \a pen used to draw grid line.
*/
void QAbstractAxis::setGridLinePen(const QPen &pen)
{
if (d_ptr->m_gridLinePen != pen) {
d_ptr->m_gridLinePen = pen;
Michal Klocek
Refactors Domain and Axis...
r1698 d_ptr->emitUpdated();
Michal Klocek
Adds new API classes...
r1540 }
}
/*!
Returns pen used to draw grid.
*/
QPen QAbstractAxis::gridLinePen() const
{
return d_ptr->m_gridLinePen;
}
void QAbstractAxis::setLabelsVisible(bool visible)
{
if (d_ptr->m_labelsVisible != visible) {
d_ptr->m_labelsVisible = visible;
Michal Klocek
Refactors Domain and Axis...
r1698 d_ptr->emitUpdated();
Michal Klocek
Adds new API classes...
r1540 emit labelsVisibleChanged(visible);
}
}
bool QAbstractAxis::labelsVisible() const
{
return d_ptr->m_labelsVisible;
}
/*!
Sets \a pen used to draw labels.
*/
void QAbstractAxis::setLabelsPen(const QPen &pen)
{
if (d_ptr->m_labelsPen != pen) {
d_ptr->m_labelsPen = pen;
Michal Klocek
Refactors Domain and Axis...
r1698 d_ptr->emitUpdated();
Michal Klocek
Adds new API classes...
r1540 }
}
/*!
Returns the pen used to labels.
*/
QPen QAbstractAxis::labelsPen() const
{
return d_ptr->m_labelsPen;
}
/*!
Sets \a brush used to draw labels.
*/
void QAbstractAxis::setLabelsBrush(const QBrush &brush)
{
if (d_ptr->m_labelsBrush != brush) {
d_ptr->m_labelsBrush = brush;
Michal Klocek
Refactors Domain and Axis...
r1698 d_ptr->emitUpdated();
Michal Klocek
Adds new API classes...
r1540 }
}
/*!
Returns brush used to draw labels.
*/
QBrush QAbstractAxis::labelsBrush() const
{
return d_ptr->m_labelsBrush;
}
/*!
Sets \a font used to draw labels.
*/
void QAbstractAxis::setLabelsFont(const QFont &font)
{
if (d_ptr->m_labelsFont != font) {
d_ptr->m_labelsFont = font;
Michal Klocek
Refactors Domain and Axis...
r1698 d_ptr->emitUpdated();
Michal Klocek
Adds new API classes...
r1540 }
}
/*!
Returns font used to draw labels.
*/
QFont QAbstractAxis::labelsFont() const
{
return d_ptr->m_labelsFont;
}
void QAbstractAxis::setLabelsAngle(int angle)
{
if (d_ptr->m_labelsAngle != angle) {
d_ptr->m_labelsAngle = angle;
Michal Klocek
Refactors Domain and Axis...
r1698 d_ptr->emitUpdated();
Michal Klocek
Adds new API classes...
r1540 }
}
int QAbstractAxis::labelsAngle() const
{
return d_ptr->m_labelsAngle;
}
void QAbstractAxis::setLabelsColor(QColor color)
{
QBrush b = d_ptr->m_labelsBrush;
if (b.color() != color) {
b.setColor(color);
setLabelsBrush(b);
emit labelsColorChanged(color);
}
}
QColor QAbstractAxis::labelsColor() const
{
return d_ptr->m_labelsBrush.color();
}
void QAbstractAxis::setShadesVisible(bool visible)
{
if (d_ptr->m_shadesVisible != visible) {
d_ptr->m_shadesVisible = visible;
Michal Klocek
Refactors Domain and Axis...
r1698 d_ptr->emitUpdated();
Michal Klocek
Adds new API classes...
r1540 emit shadesVisibleChanged(visible);
}
}
bool QAbstractAxis::shadesVisible() const
{
return d_ptr->m_shadesVisible;
}
/*!
Sets \a pen used to draw shades.
*/
void QAbstractAxis::setShadesPen(const QPen &pen)
{
if (d_ptr->m_shadesPen != pen) {
d_ptr->m_shadesPen = pen;
Michal Klocek
Refactors Domain and Axis...
r1698 d_ptr->emitUpdated();
Michal Klocek
Adds new API classes...
r1540 }
}
/*!
Returns pen used to draw shades.
*/
QPen QAbstractAxis::shadesPen() const
{
return d_ptr->m_shadesPen;
}
/*!
Sets \a brush used to draw shades.
*/
void QAbstractAxis::setShadesBrush(const QBrush &brush)
{
if (d_ptr->m_shadesBrush != brush) {
d_ptr->m_shadesBrush = brush;
Michal Klocek
Refactors Domain and Axis...
r1698 d_ptr->emitUpdated();
Michal Klocek
Adds new API classes...
r1540 emit shadesColorChanged(brush.color());
}
}
/*!
Returns brush used to draw shades.
*/
QBrush QAbstractAxis::shadesBrush() const
{
return d_ptr->m_shadesBrush;
}
void QAbstractAxis::setShadesColor(QColor color)
{
QBrush b = d_ptr->m_shadesBrush;
b.setColor(color);
setShadesBrush(b);
}
QColor QAbstractAxis::shadesColor() const
{
return d_ptr->m_shadesBrush.color();
}
void QAbstractAxis::setShadesBorderColor(QColor color)
{
QPen p = d_ptr->m_shadesPen;
p.setColor(color);
setShadesPen(p);
}
QColor QAbstractAxis::shadesBorderColor() const
{
return d_ptr->m_shadesPen.color();
}
Michal Klocek
Adds visibity paramter to axis
r1617 bool QAbstractAxis::isVisible() const
{
return d_ptr->m_visible;
}
Michal Klocek
Adds new API classes...
r1540 /*!
Sets axis, shades, labels and grid lines to be visible.
*/
Michal Klocek
Adds visibity paramter to axis
r1617 void QAbstractAxis::setVisible(bool visible)
Michal Klocek
Adds new API classes...
r1540 {
Michal Klocek
Adds logic to fix overlaping axes
r1626 if(d_ptr->m_visible!=visible){
d_ptr->m_visible=visible;
Michal Klocek
Refactors Domain and Axis...
r1698 d_ptr->emitUpdated();
Michal Klocek
Adds logic to fix overlaping axes
r1626 emit visibleChanged(visible);
}
Michal Klocek
Adds new API classes...
r1540 }
Michal Klocek
Adds visibity paramter to axis
r1617
/*!
Sets axis, shades, labels and grid lines to be visible.
*/
void QAbstractAxis::show()
{
setVisible(true);
}
Michal Klocek
Adds new API classes...
r1540 /*!
Sets axis, shades, labels and grid lines to not be visible.
*/
void QAbstractAxis::hide()
{
Michal Klocek
Adds visibity paramter to axis
r1617 setVisible(false);
Michal Klocek
Adds new API classes...
r1540 }
Marek Rosa
QAbstractAxis doc update
r1635 /*!
Sets the minimum value shown on the axis.
Depending on the actual axis type the \a min paramter is converted to appropriate type.
If the conversion is impossible then the function call does nothing
*/
sauimone
QAbstractAxis: variants strike back.
r1578 void QAbstractAxis::setMin(const QVariant &min)
Michal Klocek
Refactors setMin setMax setRange to be pure viritual on private implementation
r1544 {
d_ptr->setMin(min);
}
Marek Rosa
QAbstractAxis doc update
r1635
/*!
Sets the maximum value shown on the axis.
Depending on the actual axis type the \a max paramter is converted to appropriate type.
If the conversion is impossible then the function call does nothing
*/
sauimone
QAbstractAxis: variants strike back.
r1578 void QAbstractAxis::setMax(const QVariant &max)
Michal Klocek
Refactors setMin setMax setRange to be pure viritual on private implementation
r1544 {
d_ptr->setMax(max);
}
Marek Rosa
QAbstractAxis doc update
r1635
/*!
Sets the range shown on the axis.
Depending on the actual axis type the \a min and \a max paramters are converted to appropriate types.
If the conversion is impossible then the function call does nothing.
*/
sauimone
QAbstractAxis: variants strike back.
r1578 void QAbstractAxis::setRange(const QVariant &min, const QVariant &max)
Michal Klocek
Refactors setMin setMax setRange to be pure viritual on private implementation
r1544 {
d_ptr->setRange(min,max);
}
Michal Klocek
Adds axis domain intialization
r1695
Qt::Orientation QAbstractAxis::orientation()
{
return d_ptr->m_orientation;
}
Michal Klocek
Adds new API classes...
r1540 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
QAbstractAxisPrivate::QAbstractAxisPrivate(QAbstractAxis* q):
q_ptr(q),
Michal Klocek
Refactors Domain and Axis...
r1698 m_orientation(Qt::Orientation(0)),
Michal Klocek
Implements qbarcategoriesaxis logic...
r1725 m_dataset(0),
Michal Klocek
Adds logic to fix overlaping axes
r1626 m_visible(false),
sauimone
abstract axis qml documentation. bug fix to setArrowVisible
r1654 m_arrowVisible(true),
Michal Klocek
Adds new API classes...
r1540 m_gridLineVisible(true),
m_labelsVisible(true),
m_labelsAngle(0),
m_shadesVisible(false),
m_shadesBrush(Qt::SolidPattern),
Michal Klocek
Adds missing functions to qchart API
r1542 m_shadesOpacity(1.0),
Michal Klocek
Refactors Domain and Axis...
r1698 m_dirty(false)
Michal Klocek
Adds new API classes...
r1540 {
}
QAbstractAxisPrivate::~QAbstractAxisPrivate()
{
}
Michal Klocek
Refactors Domain and Axis...
r1698 void QAbstractAxisPrivate::emitUpdated()
{
if(!m_dirty){
m_dirty=true;
emit updated();
}
}
void QAbstractAxisPrivate::setDirty(bool dirty)
{
m_dirty=dirty;
}
void QAbstractAxisPrivate::setOrientation(Qt::Orientation orientation)
{
m_orientation=orientation;
}
Michal Klocek
Adds new API classes...
r1540 #include "moc_qabstractaxis.cpp"
#include "moc_qabstractaxis_p.cpp"
QTCOMMERCIALCHART_END_NAMESPACE