/**************************************************************************** ** ** 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 "qaxis.h" #include "qaxis_p.h" QTCOMMERCIALCHART_BEGIN_NAMESPACE /*! \class QAxis \brief The QAxis class is used for manipulating chart's axis and for adding optional axes to the chart. \mainclass There is only one x Axis, however there can be multiple y axes. 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. */ /*! \qmlclass Axis QAxis \brief The Axis element is used for manipulating chart's axes There is only one x Axis, however there can be multiple y axes on a ChartView. 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 */ /*! \property QAxis::labelsVisible Defines if axis labels are visible. */ /*! \qmlproperty bool Axis::labelsVisible Defines if axis labels are visible. */ /*! \property QAxis::min Defines the minimum value on the axis. */ /*! \qmlproperty real Axis::min Defines the minimum value on the axis. */ /*! \property QAxis::max Defines the maximum value on the axis. */ /*! \qmlproperty real Axis::max Defines the maximum value on the axis. */ /*! \property QAxis::visible The visibility of the axis. */ /*! \qmlproperty bool Axis::visible The visibility of the axis. */ /*! \property QAxis::gridVisible The visibility of the grid lines. */ /*! \qmlproperty bool Axis::gridVisible The visibility of the grid lines. */ /*! \property QAxis::color The color of the axis and ticks. */ /*! \qmlproperty color Axis::color The color of the axis and ticks. */ /*! \property QAxis::labelsFont The font of the axis labels. */ /*! \qmlproperty Font Axis::labelsFont The font of the axis labels. See the \l {Font} {QML Font Element} for detailed documentation. */ /*! \property QAxis::labelsColor The color of the axis labels. */ /*! \qmlproperty color Axis::labelsColor The color of the axis labels. */ /*! \property QAxis::labelsAngle The angle of the axis labels in degrees. */ /*! \qmlproperty int Axis::labelsAngle The angle of the axis labels in degrees. */ /*! \property QAxis::shadesVisible The visibility of the axis shades. */ /*! \qmlproperty bool Axis::shadesVisible The visibility of the axis shades. */ /*! \property QAxis::shadesColor The fill (brush) color of the axis shades. */ /*! \qmlproperty color Axis::shadesColor The fill (brush) color of the axis shades. */ /*! \property QAxis::shadesBorderColor The border (pen) color of the axis shades. */ /*! \qmlproperty color Axis::shadesBorderColor The border (pen) color of the axis shades. */ /*! \property QAxis::ticksCount The number of tick marks for the axis. */ /*! \qmlproperty int Axis::ticksCount The number of tick marks for the axis. */ /*! \property QAxis::niceNumbersEnabled Whether the nice numbers algorithm is enabled or not for the axis. */ /*! \qmlproperty bool Axis::niceNumbersEnabled Whether the nice numbers algorithm is enabled or not for the axis. */ /*! \fn void QAxis::visibleChanged(bool) Visiblity of the axis has changed to \a visible. */ /*! \fn void QAxis::labelsVisibleChanged(bool) Visiblity of the labels of the axis has changed to \a visible. */ /*! \fn void QAxis::gridVisibleChanged(bool) Visiblity of the grid lines of the axis has changed to \a visible. */ /*! \fn void QAxis::minChanged(qreal min) Axis emits signal when \a min of axis has changed. */ /*! \qmlsignal Axis::onMinChanged(real min) Axis emits signal when \a min of axis has changed. This may happen for example if you zoom, scroll or enable nice numbers algorithm. */ /*! \fn void QAxis::maxChanged(qreal max) Axis emits signal when \a max of axis has changed. */ /*! \qmlsignal Axis::onMaxChanged(real max) Axis emits signal when \a max of axis has changed. This may happen for example if you zoom, scroll or enable nice numbers algorithm. */ /*! \fn void QAxis::rangeChanged(qreal min, qreal max) Axis emits signal when \a min or \a max of axis has changed. */ /*! \qmlsignal Axis::onRangeChanged(real min, real max) Axis emits signal when \a min or \a max of axis has changed. This may happen for example if you zoom, scroll or enable nice numbers algorithm. */ /*! \fn QChartAxisCategories* QAxis::categories() Returns pointer to the list of categories which correspond to the values on the axis. */ /*! \fn void QAxis::colorChanged(QColor) Emitted if the \a color of the axis is changed. */ /*! \fn void QAxis::labelsColorChanged(QColor) Emitted if the \a color of the axis labels is changed. */ /*! \fn void QAxis::shadesVisibleChanged(bool) Emitted if the visibility of the axis shades is changed to \a visible. */ /*! \fn void QAxis::shadesColorChanged(QColor) Emitted if the \a color of the axis shades is changed. */ /*! \fn void QAxis::shadesBorderColorChanged(QColor) Emitted if the border \a color of the axis shades is changed. */ /*! Constructs new axis object which is a child of \a parent. Ownership is taken by QChart when axis added. */ QAxis::QAxis(QObject *parent) : QObject(parent), d_ptr(new QAxisPrivate(this)) { } /*! Destructor of the axis object. When axis is added to chart, chart object takes ownership. */ QAxis::~QAxis() { } /*! Sets \a pen used to draw axis line and ticks. */ void QAxis::setAxisPen(const QPen &pen) { if (d_ptr->m_axisPen!=pen) { d_ptr->m_axisPen = pen; emit d_ptr->updated(); } } /*! Returns pen used to draw axis and ticks. */ QPen QAxis::axisPen() const { return d_ptr->m_axisPen; } void QAxis::setAxisPenColor(QColor color) { QPen p = d_ptr->m_axisPen; if (p.color() != color) { p.setColor(color); setAxisPen(p); emit colorChanged(color); } } QColor QAxis::axisPenColor() const { return d_ptr->m_axisPen.color(); } /*! Sets if axis and ticks are \a visible. */ void QAxis::setAxisVisible(bool visible) { if (d_ptr->m_axisVisible != visible) { d_ptr->m_axisVisible = visible; emit d_ptr->updated(); emit visibleChanged(visible); } } bool QAxis::isAxisVisible() const { return d_ptr->m_axisVisible; } void QAxis::setGridLineVisible(bool visible) { if (d_ptr->m_gridLineVisible != visible) { d_ptr->m_gridLineVisible = visible; emit d_ptr->updated(); emit gridVisibleChanged(visible); } } bool QAxis::isGridLineVisible() const { return d_ptr->m_gridLineVisible; } /*! Sets \a pen used to draw grid line. */ void QAxis::setGridLinePen(const QPen &pen) { if (d_ptr->m_gridLinePen != pen) { d_ptr->m_gridLinePen = pen; emit d_ptr->updated(); } } /*! Returns pen used to draw grid. */ QPen QAxis::gridLinePen() const { return d_ptr->m_gridLinePen; } void QAxis::setLabelsVisible(bool visible) { if (d_ptr->m_labelsVisible != visible) { d_ptr->m_labelsVisible = visible; emit d_ptr->updated(); emit labelsVisibleChanged(visible); } } bool QAxis::labelsVisible() const { return d_ptr->m_labelsVisible; } /*! Sets \a pen used to draw labels. */ void QAxis::setLabelsPen(const QPen &pen) { if (d_ptr->m_labelsPen != pen) { d_ptr->m_labelsPen = pen; emit d_ptr->updated(); } } /*! Returns the pen used to labels. */ QPen QAxis::labelsPen() const { return d_ptr->m_labelsPen; } /*! Sets \a brush used to draw labels. */ void QAxis::setLabelsBrush(const QBrush &brush) { if (d_ptr->m_labelsBrush != brush) { d_ptr->m_labelsBrush = brush; emit d_ptr->updated(); } } /*! Returns brush used to draw labels. */ QBrush QAxis::labelsBrush() const { return d_ptr->m_labelsBrush; } /*! Sets \a font used to draw labels. */ void QAxis::setLabelsFont(const QFont &font) { if (d_ptr->m_labelsFont != font) { d_ptr->m_labelsFont = font; emit d_ptr->updated(); } } /*! Returns font used to draw labels. */ QFont QAxis::labelsFont() const { return d_ptr->m_labelsFont; } void QAxis::setLabelsAngle(int angle) { if (d_ptr->m_labelsAngle != angle) { d_ptr->m_labelsAngle = angle; emit d_ptr->updated(); } } int QAxis::labelsAngle() const { return d_ptr->m_labelsAngle; } void QAxis::setLabelsColor(QColor color) { QBrush b = d_ptr->m_labelsBrush; if (b.color() != color) { b.setColor(color); setLabelsBrush(b); emit labelsColorChanged(color); } } QColor QAxis::labelsColor() const { return d_ptr->m_labelsBrush.color(); } void QAxis::setShadesVisible(bool visible) { if (d_ptr->m_shadesVisible != visible) { d_ptr->m_shadesVisible = visible; emit d_ptr->updated(); emit shadesVisibleChanged(visible); } } bool QAxis::shadesVisible() const { return d_ptr->m_shadesVisible; } /*! Sets \a pen used to draw shades. */ void QAxis::setShadesPen(const QPen &pen) { if (d_ptr->m_shadesPen != pen) { d_ptr->m_shadesPen = pen; emit d_ptr->updated(); } } /*! Returns pen used to draw shades. */ QPen QAxis::shadesPen() const { return d_ptr->m_shadesPen; } /*! Sets \a brush used to draw shades. */ void QAxis::setShadesBrush(const QBrush &brush) { if (d_ptr->m_shadesBrush != brush) { d_ptr->m_shadesBrush = brush; emit d_ptr->updated(); emit shadesColorChanged(brush.color()); } } /*! \brief Returns brush used to draw shades. */ QBrush QAxis::shadesBrush() const { return d_ptr->m_shadesBrush; } void QAxis::setShadesColor(QColor color) { QBrush b = d_ptr->m_shadesBrush; b.setColor(color); setShadesBrush(b); } QColor QAxis::shadesColor() const { return d_ptr->m_shadesBrush.color(); } void QAxis::setShadesBorderColor(QColor color) { QPen p = d_ptr->m_shadesPen; p.setColor(color); setShadesPen(p); } QColor QAxis::shadesBorderColor() const { return d_ptr->m_shadesPen.color(); } void QAxis::setMin(qreal min) { setRange(min,d_ptr->m_max); } qreal QAxis::min() const { return d_ptr->m_min; } void QAxis::setMax(qreal max) { setRange(d_ptr->m_min,max); } qreal QAxis::max() const { return d_ptr->m_max; } /*! Sets range from \a min to \a max on the axis. */ void QAxis::setRange(qreal min, qreal max) { bool changed = false; if (!qFuzzyIsNull(d_ptr->m_min - min)) { d_ptr->m_min = min; changed = true; emit minChanged(min); } if (!qFuzzyIsNull(d_ptr->m_max - max)) { d_ptr->m_max = max; changed = true; emit maxChanged(max); } if (changed) { emit rangeChanged(d_ptr->m_min,d_ptr->m_max); emit d_ptr->changed(d_ptr->m_min, d_ptr->m_max, d_ptr->m_ticksCount, d_ptr->m_niceNumbers); } } /*! Sets \a count for ticks on the axis. */ void QAxis::setTicksCount(int count) { if (d_ptr->m_ticksCount != count) { d_ptr->m_ticksCount = count; emit d_ptr->changed(d_ptr->m_min, d_ptr->m_max, d_ptr->m_ticksCount, d_ptr->m_niceNumbers); } } /*! \fn int QAxis::ticksCount() const Return number of ticks on the axis */ int QAxis::ticksCount() const { return d_ptr->m_ticksCount; } /*! Sets axis, shades, labels and grid lines to be visible. */ void QAxis::show() { d_ptr->m_axisVisible=true; d_ptr->m_gridLineVisible=true; d_ptr->m_labelsVisible=true; d_ptr->m_shadesVisible=true; emit d_ptr->updated(); } /*! Sets axis, shades, labels and grid lines to not be visible. */ void QAxis::hide() { d_ptr->m_axisVisible = false; d_ptr->m_gridLineVisible = false; d_ptr->m_labelsVisible = false; d_ptr->m_shadesVisible = false; emit d_ptr->updated(); } void QAxis::setNiceNumbersEnabled(bool enable) { if (d_ptr->m_niceNumbers != enable){ d_ptr->m_niceNumbers = enable; emit d_ptr->changed(d_ptr->m_min, d_ptr->m_max, d_ptr->m_ticksCount, d_ptr->m_niceNumbers); } } bool QAxis::niceNumbersEnabled() const { return d_ptr->m_niceNumbers; } QAxisCategories* QAxis::categories() { return &d_ptr->m_category; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// QAxisPrivate::QAxisPrivate(QAxis* q): q_ptr(q), m_axisVisible(true), m_gridLineVisible(true), m_labelsVisible(true), m_labelsAngle(0), m_shadesVisible(false), m_shadesBrush(Qt::SolidPattern), m_shadesOpacity(1.0), m_min(0), m_max(0), m_ticksCount(5), m_niceNumbers(false) { } QAxisPrivate::~QAxisPrivate() { } void QAxisPrivate::handleAxisRangeChanged(qreal min, qreal max,int count) { q_ptr->setRange(min,max); q_ptr->setTicksCount(count); } QTCOMMERCIALCHART_END_NAMESPACE QTCOMMERCIALCHART_USE_NAMESPACE #include "moc_qaxis.cpp" #include "moc_qaxis_p.cpp"