axisitem.cpp
465 lines
| 12.7 KiB
| text/x-c
|
CppLexer
Jani Honkonen
|
r794 | /**************************************************************************** | ||
** | ||||
** 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$ | ||||
** | ||||
****************************************************************************/ | ||||
Michal Klocek
|
r67 | #include "axisitem_p.h" | ||
Michal Klocek
|
r140 | #include "qchartaxis.h" | ||
Michal Klocek
|
r262 | #include "chartpresenter_p.h" | ||
Michal Klocek
|
r530 | #include "chartanimator_p.h" | ||
Michal Klocek
|
r67 | #include <QPainter> | ||
#include <QDebug> | ||||
Michal Klocek
|
r678 | #include <cmath> | ||
Michal Klocek
|
r67 | |||
Michal Klocek
|
r176 | static int label_padding = 5; | ||
Michal Klocek
|
r85 | |||
Michal Klocek
|
r67 | QTCOMMERCIALCHART_BEGIN_NAMESPACE | ||
sauimone
|
r759 | Axis::Axis(QChartAxis *axis,ChartPresenter *presenter,AxisType type) : Chart(presenter), | ||
sauimone
|
r745 | m_chartAxis(axis), | ||
m_type(type), | ||||
m_labelsAngle(0), | ||||
Jani Honkonen
|
r784 | m_grid(new QGraphicsItemGroup(presenter->rootItem())), | ||
m_shades(new QGraphicsItemGroup(presenter->rootItem())), | ||||
m_labels(new QGraphicsItemGroup(presenter->rootItem())), | ||||
m_axis(new QGraphicsItemGroup(presenter->rootItem())), | ||||
sauimone
|
r745 | m_min(0), | ||
m_max(0), | ||||
m_ticksCount(0) | ||||
Michal Klocek
|
r67 | { | ||
Michal Klocek
|
r145 | //initial initialization | ||
Jani Honkonen
|
r784 | m_axis->setZValue(ChartPresenter::AxisZValue); | ||
m_axis->setHandlesChildEvents(false); | ||||
Michal Klocek
|
r677 | |||
Jani Honkonen
|
r784 | m_shades->setZValue(ChartPresenter::ShadesZValue); | ||
m_grid->setZValue(ChartPresenter::GridZValue); | ||||
Michal Klocek
|
r439 | |||
sauimone
|
r745 | connect(m_chartAxis,SIGNAL(updated()),this,SLOT(handleAxisUpdated())); | ||
connect(m_chartAxis->categories(),SIGNAL(updated()),this,SLOT(handleAxisCategoriesUpdated())); | ||||
Michal Klocek
|
r502 | |||
handleAxisUpdated(); | ||||
Michal Klocek
|
r67 | } | ||
Michal Klocek
|
r677 | Axis::~Axis() | ||
Michal Klocek
|
r67 | { | ||
} | ||||
Michal Klocek
|
r677 | void Axis::createItems(int count) | ||
Michal Klocek
|
r176 | { | ||
Michal Klocek
|
r530 | |||
Jani Honkonen
|
r784 | if (m_axis->children().size() == 0) | ||
m_axis->addToGroup(new AxisItem(this)); | ||||
Michal Klocek
|
r223 | for (int i = 0; i < count; ++i) { | ||
Jani Honkonen
|
r784 | m_grid->addToGroup(new QGraphicsLineItem()); | ||
m_labels->addToGroup(new QGraphicsSimpleTextItem()); | ||||
m_axis->addToGroup(new QGraphicsLineItem()); | ||||
if ((m_grid->childItems().size())%2 && m_grid->childItems().size()>2) m_shades->addToGroup(new QGraphicsRectItem()); | ||||
Michal Klocek
|
r176 | } | ||
} | ||||
Michal Klocek
|
r677 | void Axis::deleteItems(int count) | ||
Michal Klocek
|
r176 | { | ||
Jani Honkonen
|
r784 | QList<QGraphicsItem *> lines = m_grid->childItems(); | ||
QList<QGraphicsItem *> labels = m_labels->childItems(); | ||||
QList<QGraphicsItem *> shades = m_shades->childItems(); | ||||
QList<QGraphicsItem *> axis = m_axis->childItems(); | ||||
Michal Klocek
|
r176 | |||
Michal Klocek
|
r291 | for (int i = 0; i < count; ++i) { | ||
sauimone
|
r745 | if (lines.size()%2 && lines.size() > 1) delete(shades.takeLast()); | ||
Michal Klocek
|
r291 | delete(lines.takeLast()); | ||
delete(labels.takeLast()); | ||||
delete(axis.takeLast()); | ||||
Michal Klocek
|
r272 | } | ||
Michal Klocek
|
r176 | } | ||
sauimone
|
r759 | void Axis::updateLayout(QVector<qreal> &layout) | ||
Michal Klocek
|
r176 | { | ||
sauimone
|
r745 | if (animator()) { | ||
animator()->updateLayout(this,layout); | ||||
} else { | ||||
setLayout(layout); | ||||
Michal Klocek
|
r530 | } | ||
Michal Klocek
|
r85 | } | ||
Michal Klocek
|
r176 | |||
sauimone
|
r759 | bool Axis::createLabels(QStringList &labels,qreal min, qreal max,int ticks) const | ||
Michal Klocek
|
r85 | { | ||
Michal Klocek
|
r439 | Q_ASSERT(max>=min); | ||
Michal Klocek
|
r678 | Q_ASSERT(ticks>1); | ||
Michal Klocek
|
r85 | |||
Michal Klocek
|
r497 | QChartAxisCategories* categories = m_chartAxis->categories(); | ||
Michal Klocek
|
r291 | |||
Michal Klocek
|
r701 | bool category = categories->count()>0; | ||
sauimone
|
r745 | if (!category) { | ||
Michal Klocek
|
r701 | int n = qMax(int(-floor(log10((max-min)/(ticks-1)))),0); | ||
Michal Klocek
|
r801 | n++; | ||
sauimone
|
r759 | for (int i=0; i< ticks; i++) { | ||
Michal Klocek
|
r701 | qreal value = min + (i * (max - min)/ (ticks-1)); | ||
Michal Klocek
|
r678 | labels << QString::number(value,'f',n); | ||
Michal Klocek
|
r439 | } | ||
sauimone
|
r745 | } else { | ||
Michal Klocek
|
r706 | QList<qreal> values = categories->values(); | ||
sauimone
|
r745 | for (int i=0; i< ticks; i++) { | ||
Michal Klocek
|
r706 | qreal value = (min + (i * (max - min)/ (ticks-1))); | ||
int j=0; | ||||
sauimone
|
r745 | for (; j<values.count(); j++) { | ||
Michal Klocek
|
r706 | if (values.at(j) > value) break; | ||
} | ||||
sauimone
|
r745 | if (j!=0) value=values.at(j-1); | ||
Michal Klocek
|
r706 | |||
Michal Klocek
|
r497 | QString label = categories->label(value); | ||
Michal Klocek
|
r439 | labels << label; | ||
} | ||||
Michal Klocek
|
r223 | } | ||
Michal Klocek
|
r701 | |||
return category; | ||||
Michal Klocek
|
r176 | } | ||
Michal Klocek
|
r85 | |||
Michal Klocek
|
r677 | void Axis::setAxisOpacity(qreal opacity) | ||
Michal Klocek
|
r184 | { | ||
Jani Honkonen
|
r784 | m_axis->setOpacity(opacity); | ||
Michal Klocek
|
r184 | } | ||
Michal Klocek
|
r677 | qreal Axis::axisOpacity() const | ||
Michal Klocek
|
r184 | { | ||
Jani Honkonen
|
r784 | return m_axis->opacity(); | ||
Michal Klocek
|
r184 | } | ||
Michal Klocek
|
r677 | void Axis::setGridOpacity(qreal opacity) | ||
Michal Klocek
|
r176 | { | ||
Jani Honkonen
|
r784 | m_grid->setOpacity(opacity); | ||
Michal Klocek
|
r176 | } | ||
Michal Klocek
|
r85 | |||
Michal Klocek
|
r677 | qreal Axis::gridOpacity() const | ||
Michal Klocek
|
r176 | { | ||
Jani Honkonen
|
r784 | return m_grid->opacity(); | ||
Michal Klocek
|
r176 | } | ||
Michal Klocek
|
r85 | |||
Michal Klocek
|
r677 | void Axis::setLabelsOpacity(qreal opacity) | ||
Michal Klocek
|
r176 | { | ||
Jani Honkonen
|
r784 | m_labels->setOpacity(opacity); | ||
Michal Klocek
|
r176 | } | ||
Michal Klocek
|
r85 | |||
Michal Klocek
|
r677 | qreal Axis::labelsOpacity() const | ||
Michal Klocek
|
r176 | { | ||
Jani Honkonen
|
r784 | return m_labels->opacity(); | ||
Michal Klocek
|
r176 | } | ||
Michal Klocek
|
r85 | |||
Michal Klocek
|
r677 | void Axis::setShadesOpacity(qreal opacity) | ||
Michal Klocek
|
r176 | { | ||
Jani Honkonen
|
r784 | m_shades->setOpacity(opacity); | ||
Michal Klocek
|
r176 | } | ||
Michal Klocek
|
r85 | |||
Michal Klocek
|
r677 | qreal Axis::shadesOpacity() const | ||
Michal Klocek
|
r176 | { | ||
Jani Honkonen
|
r784 | return m_shades->opacity(); | ||
Michal Klocek
|
r176 | } | ||
Michal Klocek
|
r67 | |||
Michal Klocek
|
r677 | void Axis::setLabelsAngle(int angle) | ||
Michal Klocek
|
r176 | { | ||
Jani Honkonen
|
r784 | foreach(QGraphicsItem* item , m_labels->childItems()) { | ||
Michal Klocek
|
r176 | item->setRotation(angle); | ||
Michal Klocek
|
r145 | } | ||
Michal Klocek
|
r176 | |||
m_labelsAngle=angle; | ||||
Michal Klocek
|
r67 | } | ||
sauimone
|
r745 | void Axis::setLabelsPen(const QPen &pen) | ||
Michal Klocek
|
r140 | { | ||
Jani Honkonen
|
r784 | foreach(QGraphicsItem* item , m_labels->childItems()) { | ||
Michal Klocek
|
r176 | static_cast<QGraphicsSimpleTextItem*>(item)->setPen(pen); | ||
} | ||||
Michal Klocek
|
r140 | } | ||
sauimone
|
r745 | void Axis::setLabelsBrush(const QBrush &brush) | ||
Michal Klocek
|
r140 | { | ||
Jani Honkonen
|
r784 | foreach(QGraphicsItem* item , m_labels->childItems()) { | ||
Michal Klocek
|
r176 | static_cast<QGraphicsSimpleTextItem*>(item)->setBrush(brush); | ||
} | ||||
Michal Klocek
|
r140 | } | ||
sauimone
|
r745 | void Axis::setLabelsFont(const QFont &font) | ||
Michal Klocek
|
r140 | { | ||
Jani Honkonen
|
r784 | foreach(QGraphicsItem* item , m_labels->childItems()) { | ||
Michal Klocek
|
r176 | static_cast<QGraphicsSimpleTextItem*>(item)->setFont(font); | ||
} | ||||
Michal Klocek
|
r140 | } | ||
sauimone
|
r745 | void Axis::setShadesBrush(const QBrush &brush) | ||
Michal Klocek
|
r140 | { | ||
Jani Honkonen
|
r784 | foreach(QGraphicsItem* item , m_shades->childItems()) { | ||
Michal Klocek
|
r176 | static_cast<QGraphicsRectItem*>(item)->setBrush(brush); | ||
} | ||||
Michal Klocek
|
r140 | } | ||
sauimone
|
r745 | void Axis::setShadesPen(const QPen &pen) | ||
Michal Klocek
|
r140 | { | ||
Jani Honkonen
|
r784 | foreach(QGraphicsItem* item , m_shades->childItems()) { | ||
Michal Klocek
|
r176 | static_cast<QGraphicsRectItem*>(item)->setPen(pen); | ||
} | ||||
} | ||||
sauimone
|
r745 | void Axis::setAxisPen(const QPen &pen) | ||
Michal Klocek
|
r184 | { | ||
Jani Honkonen
|
r784 | foreach(QGraphicsItem* item , m_axis->childItems()) { | ||
Michal Klocek
|
r272 | static_cast<QGraphicsLineItem*>(item)->setPen(pen); | ||
} | ||||
Michal Klocek
|
r184 | } | ||
sauimone
|
r745 | void Axis::setGridPen(const QPen &pen) | ||
Michal Klocek
|
r176 | { | ||
Jani Honkonen
|
r784 | foreach(QGraphicsItem* item , m_grid->childItems()) { | ||
Michal Klocek
|
r176 | static_cast<QGraphicsLineItem*>(item)->setPen(pen); | ||
} | ||||
} | ||||
Michal Klocek
|
r677 | QVector<qreal> Axis::calculateLayout() const | ||
Michal Klocek
|
r291 | { | ||
Michal Klocek
|
r502 | Q_ASSERT(m_ticksCount>=2); | ||
Michal Klocek
|
r393 | QVector<qreal> points; | ||
Michal Klocek
|
r502 | points.resize(m_ticksCount); | ||
Michal Klocek
|
r393 | |||
Michal Klocek
|
r291 | switch (m_type) | ||
{ | ||||
case X_AXIS: | ||||
{ | ||||
Michal Klocek
|
r502 | const qreal deltaX = m_rect.width()/(m_ticksCount-1); | ||
for (int i = 0; i < m_ticksCount; ++i) { | ||||
Michal Klocek
|
r291 | int x = i * deltaX + m_rect.left(); | ||
Michal Klocek
|
r393 | points[i] = x; | ||
Michal Klocek
|
r291 | } | ||
} | ||||
break; | ||||
case Y_AXIS: | ||||
{ | ||||
Michal Klocek
|
r502 | const qreal deltaY = m_rect.height()/(m_ticksCount-1); | ||
for (int i = 0; i < m_ticksCount; ++i) { | ||||
Michal Klocek
|
r291 | int y = i * -deltaY + m_rect.bottom(); | ||
Michal Klocek
|
r393 | points[i] = y; | ||
Michal Klocek
|
r291 | } | ||
} | ||||
break; | ||||
} | ||||
Michal Klocek
|
r393 | return points; | ||
Michal Klocek
|
r291 | } | ||
sauimone
|
r759 | void Axis::setLayout(QVector<qreal> &layout) | ||
Michal Klocek
|
r291 | { | ||
Michal Klocek
|
r502 | int diff = m_layoutVector.size() - layout.size(); | ||
sauimone
|
r745 | if (diff>0) { | ||
Michal Klocek
|
r502 | deleteItems(diff); | ||
sauimone
|
r759 | } else if (diff<0) { | ||
Michal Klocek
|
r502 | createItems(-diff); | ||
} | ||||
sauimone
|
r759 | if( diff!=0) handleAxisUpdated(); | ||
Michal Klocek
|
r513 | |||
Michal Klocek
|
r701 | QStringList ticksList; | ||
bool categories = createLabels(ticksList,m_min,m_max,layout.size()); | ||||
Michal Klocek
|
r513 | |||
Jani Honkonen
|
r784 | QList<QGraphicsItem *> lines = m_grid->childItems(); | ||
QList<QGraphicsItem *> labels = m_labels->childItems(); | ||||
QList<QGraphicsItem *> shades = m_shades->childItems(); | ||||
QList<QGraphicsItem *> axis = m_axis->childItems(); | ||||
Michal Klocek
|
r502 | |||
Michal Klocek
|
r513 | Q_ASSERT(labels.size() == ticksList.size()); | ||
Q_ASSERT(layout.size() == ticksList.size()); | ||||
Michal Klocek
|
r502 | |||
Michal Klocek
|
r855 | qreal minWidth = 0; | ||
qreal minHeight = 0; | ||||
Michal Klocek
|
r502 | switch (m_type) | ||
{ | ||||
case X_AXIS: | ||||
{ | ||||
QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(axis.at(0)); | ||||
lineItem->setLine(m_rect.left(), m_rect.bottom(), m_rect.right(), m_rect.bottom()); | ||||
for (int i = 0; i < layout.size(); ++i) { | ||||
QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(lines.at(i)); | ||||
lineItem->setLine(layout[i], m_rect.top(), layout[i], m_rect.bottom()); | ||||
QGraphicsSimpleTextItem *labelItem = static_cast<QGraphicsSimpleTextItem*>(labels.at(i)); | ||||
Michal Klocek
|
r779 | if (!categories || i<1) { | ||
Michal Klocek
|
r701 | labelItem->setText(ticksList.at(i)); | ||
Michal Klocek
|
r855 | const QRectF& rect = labelItem->boundingRect(); | ||
minWidth+=rect.width(); | ||||
minHeight=qMax(rect.height(),minHeight); | ||||
QPointF center = rect.center(); | ||||
Michal Klocek
|
r701 | labelItem->setTransformOriginPoint(center.x(), center.y()); | ||
labelItem->setPos(layout[i] - center.x(), m_rect.bottom() + label_padding); | ||||
Michal Klocek
|
r779 | } else { | ||
Michal Klocek
|
r701 | labelItem->setText(ticksList.at(i)); | ||
Michal Klocek
|
r855 | const QRectF& rect = labelItem->boundingRect(); | ||
minWidth+=rect.width(); | ||||
minHeight=qMax(rect.height()+label_padding,minHeight); | ||||
QPointF center = rect.center(); | ||||
Michal Klocek
|
r701 | labelItem->setTransformOriginPoint(center.x(), center.y()); | ||
labelItem->setPos(layout[i] - (layout[i] - layout[i-1])/2 - center.x(), m_rect.bottom() + label_padding); | ||||
} | ||||
sauimone
|
r759 | if ((i+1)%2 && i>1) { | ||
Michal Klocek
|
r551 | QGraphicsRectItem *rectItem = static_cast<QGraphicsRectItem*>(shades.at(i/2-1)); | ||
rectItem->setRect(layout[i-1],m_rect.top(),layout[i]-layout[i-1],m_rect.height()); | ||||
Michal Klocek
|
r502 | } | ||
lineItem = static_cast<QGraphicsLineItem*>(axis.at(i+1)); | ||||
lineItem->setLine(layout[i],m_rect.bottom(),layout[i],m_rect.bottom()+5); | ||||
} | ||||
Michal Klocek
|
r855 | |||
Michal Klocek
|
r502 | } | ||
break; | ||||
case Y_AXIS: | ||||
{ | ||||
QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(axis.at(0)); | ||||
lineItem->setLine(m_rect.left() , m_rect.top(), m_rect.left(), m_rect.bottom()); | ||||
for (int i = 0; i < layout.size(); ++i) { | ||||
QGraphicsLineItem *lineItem = static_cast<QGraphicsLineItem*>(lines.at(i)); | ||||
lineItem->setLine(m_rect.left() , layout[i], m_rect.right(), layout[i]); | ||||
QGraphicsSimpleTextItem *labelItem = static_cast<QGraphicsSimpleTextItem*>(labels.at(i)); | ||||
Michal Klocek
|
r706 | |||
Michal Klocek
|
r779 | if (!categories || i<1) { | ||
Michal Klocek
|
r706 | labelItem->setText(ticksList.at(i)); | ||
Michal Klocek
|
r855 | const QRectF& rect = labelItem->boundingRect(); | ||
minWidth=qMax(rect.width()+label_padding,minWidth); | ||||
minHeight+=rect.height(); | ||||
QPointF center = rect.center(); | ||||
Michal Klocek
|
r706 | labelItem->setTransformOriginPoint(center.x(), center.y()); | ||
Michal Klocek
|
r855 | labelItem->setPos(m_rect.left() - rect.width() - label_padding , layout[i]-center.y()); | ||
Michal Klocek
|
r779 | } else { | ||
Michal Klocek
|
r706 | labelItem->setText(ticksList.at(i)); | ||
Michal Klocek
|
r855 | const QRectF& rect = labelItem->boundingRect(); | ||
minWidth=qMax(rect.width(),minWidth); | ||||
minHeight+=rect.height(); | ||||
QPointF center = rect.center(); | ||||
Michal Klocek
|
r706 | labelItem->setTransformOriginPoint(center.x(), center.y()); | ||
Michal Klocek
|
r855 | labelItem->setPos(m_rect.left() - rect.width() - label_padding , layout[i] - (layout[i] - layout[i-1])/2 -center.y()); | ||
Michal Klocek
|
r706 | } | ||
sauimone
|
r759 | if ((i+1)%2 && i>1) { | ||
Michal Klocek
|
r551 | QGraphicsRectItem *rectItem = static_cast<QGraphicsRectItem*>(shades.at(i/2-1)); | ||
Michal Klocek
|
r578 | rectItem->setRect(m_rect.left(),layout[i],m_rect.width(),layout[i-1]-layout[i]); | ||
Michal Klocek
|
r502 | } | ||
lineItem = static_cast<QGraphicsLineItem*>(axis.at(i+1)); | ||||
lineItem->setLine(m_rect.left()-5,layout[i],m_rect.left(),layout[i]); | ||||
} | ||||
} | ||||
break; | ||||
default: | ||||
sauimone
|
r759 | qDebug()<<"Unknown axis type"; | ||
Michal Klocek
|
r502 | break; | ||
} | ||||
Michal Klocek
|
r855 | m_layoutVector=layout; | ||
presenter()->setMinimumMarginWidth(this,minWidth); | ||||
presenter()->setMinimumMarginHeight(this,minHeight); | ||||
Michal Klocek
|
r502 | } | ||
Michal Klocek
|
r291 | |||
Michal Klocek
|
r677 | bool Axis::isEmpty() | ||
Michal Klocek
|
r502 | { | ||
Jani Honkonen
|
r768 | return m_rect.isEmpty() || qFuzzyIsNull(m_min - m_max) || m_ticksCount==0; | ||
Michal Klocek
|
r291 | } | ||
Michal Klocek
|
r140 | |||
Michal Klocek
|
r439 | //handlers | ||
Michal Klocek
|
r677 | void Axis::handleAxisCategoriesUpdated() | ||
Michal Klocek
|
r497 | { | ||
sauimone
|
r759 | if (isEmpty()) return; | ||
Michal Klocek
|
r502 | updateLayout(m_layoutVector); | ||
Michal Klocek
|
r497 | } | ||
Michal Klocek
|
r677 | void Axis::handleAxisUpdated() | ||
Michal Klocek
|
r439 | { | ||
Michal Klocek
|
r497 | |||
sauimone
|
r745 | if (isEmpty()) return; | ||
Michal Klocek
|
r439 | |||
sauimone
|
r745 | if (m_chartAxis->isAxisVisible()) { | ||
Michal Klocek
|
r439 | setAxisOpacity(100); | ||
sauimone
|
r745 | } else { | ||
Michal Klocek
|
r439 | setAxisOpacity(0); | ||
} | ||||
sauimone
|
r759 | if (m_chartAxis->isGridLineVisible()) { | ||
Michal Klocek
|
r439 | setGridOpacity(100); | ||
sauimone
|
r745 | } else { | ||
Michal Klocek
|
r439 | setGridOpacity(0); | ||
} | ||||
sauimone
|
r759 | if (m_chartAxis->labelsVisible()) { | ||
Michal Klocek
|
r439 | setLabelsOpacity(100); | ||
sauimone
|
r745 | } else { | ||
Michal Klocek
|
r439 | setLabelsOpacity(0); | ||
} | ||||
sauimone
|
r745 | if (m_chartAxis->shadesVisible()) { | ||
Michal Klocek
|
r439 | setShadesOpacity(m_chartAxis->shadesOpacity()); | ||
sauimone
|
r745 | } else { | ||
Michal Klocek
|
r439 | setShadesOpacity(0); | ||
} | ||||
setLabelsAngle(m_chartAxis->labelsAngle()); | ||||
setAxisPen(m_chartAxis->axisPen()); | ||||
setLabelsPen(m_chartAxis->labelsPen()); | ||||
setLabelsBrush(m_chartAxis->labelsBrush()); | ||||
setLabelsFont(m_chartAxis->labelsFont()); | ||||
Michal Klocek
|
r535 | setGridPen(m_chartAxis->gridLinePen()); | ||
Michal Klocek
|
r439 | setShadesPen(m_chartAxis->shadesPen()); | ||
setShadesBrush(m_chartAxis->shadesBrush()); | ||||
Michal Klocek
|
r452 | |||
Michal Klocek
|
r439 | } | ||
Michal Klocek
|
r677 | void Axis::handleRangeChanged(qreal min, qreal max,int tickCount) | ||
Michal Klocek
|
r439 | { | ||
Jani Honkonen
|
r768 | if (qFuzzyIsNull(min - max) || tickCount < 2) | ||
return; | ||||
Michal Klocek
|
r554 | |||
Michal Klocek
|
r452 | m_min = min; | ||
m_max = max; | ||||
Michal Klocek
|
r554 | m_ticksCount= tickCount; | ||
Michal Klocek
|
r513 | |||
sauimone
|
r745 | if (isEmpty()) return; | ||
Michal Klocek
|
r502 | QVector<qreal> layout = calculateLayout(); | ||
updateLayout(layout); | ||||
Michal Klocek
|
r439 | |||
Michal Klocek
|
r452 | } | ||
Michal Klocek
|
r439 | |||
sauimone
|
r759 | void Axis::handleGeometryChanged(const QRectF &rect) | ||
Michal Klocek
|
r439 | { | ||
Michal Klocek
|
r855 | if(m_rect != rect) | ||
{ | ||||
m_rect = rect; | ||||
if (isEmpty()) return; | ||||
QVector<qreal> layout = calculateLayout(); | ||||
updateLayout(layout); | ||||
} | ||||
Michal Klocek
|
r452 | } | ||
Michal Klocek
|
r439 | |||
Michal Klocek
|
r677 | void Axis::axisSelected() | ||
Michal Klocek
|
r452 | { | ||
Michal Klocek
|
r677 | qDebug()<<"TODO axis clicked"; | ||
Michal Klocek
|
r439 | } | ||
Michal Klocek
|
r67 | //TODO "nice numbers algorithm" | ||
Michal Klocek
|
r140 | #include "moc_axisitem_p.cpp" | ||
Michal Klocek
|
r67 | |||
QTCOMMERCIALCHART_END_NAMESPACE | ||||