/**************************************************************************** ** ** 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. */ /*! \fn void QAxis::maxChanged(qreal max) Axis emits signal when \a max of axis has changed. */ /*! \fn void QAxis::rangeChanged(qreal min, qreal max) Axis emits signal when \a min or \a max of axis has changed. */ /*! \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"