##// END OF EJS Templates
Ranges on values, intervals and datatime axes cannot be set to be invalid
Ranges on values, intervals and datatime axes cannot be set to be invalid

File last commit:

r1720:79d9101394e5
r1728:0f94bbbf49ff
Show More
chartaxis.cpp
373 lines | 9.3 KiB | text/x-c | CppLexer
Jani Honkonen
Add license headers
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
Changes QChartAxis -> QAxis
r1006 #include "chartaxis_p.h"
Michal Klocek
Refactors QAxis to QAbstractAxis...
r1541 #include "qabstractaxis.h"
#include "qabstractaxis_p.h"
Michal Klocek
Adds ZOrder enum to presenter
r262 #include "chartpresenter_p.h"
Michal Klocek
Animation refactor...
r530 #include "chartanimator_p.h"
Michal Klocek
Refactors Domain and Axis...
r1698 #include "domain_p.h"
Michal Klocek
Refactor QChart API...
r1577 #include <qmath.h>
Marek Rosa
Added QDateTimeAxis
r1717 #include <QDateTime>
Michal Klocek
Add zoom support...
r67
QTCOMMERCIALCHART_BEGIN_NAMESPACE
Michal Klocek
Refactors QAxis to QAbstractAxis...
r1541 ChartAxis::ChartAxis(QAbstractAxis *axis,ChartPresenter *presenter) : Chart(presenter),
sauimone
more minor code review fixes
r745 m_chartAxis(axis),
m_labelsAngle(0),
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
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
more minor code review fixes
r745 m_min(0),
m_max(0),
Michal Klocek
Refactors layout managment...
r1534 m_animation(0),
m_minWidth(0),
m_minHeight(0)
Michal Klocek
Add zoom support...
r67 {
Michal Klocek
Fix previous broken commit
r145 //initial initialization
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
r784 m_axis->setZValue(ChartPresenter::AxisZValue);
m_axis->setHandlesChildEvents(false);
Michal Klocek
Refactors chartitem...
r677
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
r784 m_shades->setZValue(ChartPresenter::ShadesZValue);
m_grid->setZValue(ChartPresenter::GridZValue);
Michal Klocek
Refactor domain model...
r439
Michal Klocek
Adds pimpl for qchartaxis and qchartaxiscategories
r963 QObject::connect(m_chartAxis->d_ptr.data(),SIGNAL(updated()),this,SLOT(handleAxisUpdated()));
Michal Klocek
Axis refactoring to support better barcharts
r502
Michal Klocek
Refactors layout managment...
r1534 QGraphicsSimpleTextItem item;
m_font = item.font();
Michal Klocek
Add zoom support...
r67 }
Michal Klocek
Changes QChartAxis -> QAxis
r1006 ChartAxis::~ChartAxis()
Michal Klocek
Add zoom support...
r67 {
}
Michal Klocek
Refactors axis animation, line animations
r1241 void ChartAxis::setAnimation(AxisAnimation* animation)
Michal Klocek
Adds more axis handling...
r176 {
Michal Klocek
Refactors axis animation, line animations
r1241 m_animation=animation;
}
Michal Klocek
Animation refactor...
r530
Michal Klocek
Refactors axis animation, line animations
r1241 void ChartAxis::setLayout(QVector<qreal> &layout)
{
m_layoutVector=layout;
}
void ChartAxis::createItems(int count)
{
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
r784 if (m_axis->children().size() == 0)
Michal Klocek
Refactors axis animation, line animations
r1241 m_axis->addToGroup(new AxisItem(this));
Michal Klocek
Refactors axis handling...
r223 for (int i = 0; i < count; ++i) {
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
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
Refactors axis animation, line animations
r1241 }
Michal Klocek
Adds more axis handling...
r176 }
Michal Klocek
Changes QChartAxis -> QAxis
r1006 void ChartAxis::deleteItems(int count)
Michal Klocek
Adds more axis handling...
r176 {
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
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
Adds more axis handling...
r176
Michal Klocek
Refactors axis layout managment...
r291 for (int i = 0; i < count; ++i) {
sauimone
more minor code review fixes
r745 if (lines.size()%2 && lines.size() > 1) delete(shades.takeLast());
Michal Klocek
Refactors axis layout managment...
r291 delete(lines.takeLast());
delete(labels.takeLast());
delete(axis.takeLast());
Michal Klocek
Fix zorder of axis, and ticks
r272 }
Michal Klocek
Adds more axis handling...
r176 }
Michal Klocek
Changes QChartAxis -> QAxis
r1006 void ChartAxis::updateLayout(QVector<qreal> &layout)
Michal Klocek
Adds more axis handling...
r176 {
Michal Klocek
Refactors axis animation, line animations
r1241 int diff = m_layoutVector.size() - layout.size();
if (diff>0) {
deleteItems(diff);
}
else if (diff<0) {
createItems(-diff);
}
Michal Klocek
Refactors Domain and Axis...
r1698 if(diff<0) handleAxisUpdated();
Michal Klocek
Refactors axis animation, line animations
r1241
if (m_animation) {
switch(presenter()->state()){
case ChartPresenter::ZoomInState:
m_animation->setAnimationType(AxisAnimation::ZoomInAnimation);
m_animation->setAnimationPoint(presenter()->statePoint());
break;
case ChartPresenter::ZoomOutState:
m_animation->setAnimationType(AxisAnimation::ZoomOutAnimation);
m_animation->setAnimationPoint(presenter()->statePoint());
break;
case ChartPresenter::ScrollUpState:
case ChartPresenter::ScrollLeftState:
m_animation->setAnimationType(AxisAnimation::MoveBackwordAnimation);
break;
case ChartPresenter::ScrollDownState:
case ChartPresenter::ScrollRightState:
m_animation->setAnimationType(AxisAnimation::MoveForwardAnimation);
break;
case ChartPresenter::ShowState:
m_animation->setAnimationType(AxisAnimation::DefaultAnimation);
break;
}
m_animation->setValues(m_layoutVector,layout);
presenter()->startAnimation(m_animation);
}
else {
sauimone
more minor code review fixes
r745 setLayout(layout);
Michal Klocek
Refactors axis animation, line animations
r1241 updateGeometry();
Michal Klocek
Animation refactor...
r530 }
Michal Klocek
Refactora axis and line chart to use graphics items insted of painter.
r85 }
Michal Klocek
Adds more axis handling...
r176
Michal Klocek
Changes QChartAxis -> QAxis
r1006 void ChartAxis::setAxisOpacity(qreal opacity)
Michal Klocek
Fixes wrong shades zvalues
r184 {
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
r784 m_axis->setOpacity(opacity);
Michal Klocek
Fixes wrong shades zvalues
r184 }
Michal Klocek
Changes QChartAxis -> QAxis
r1006 qreal ChartAxis::axisOpacity() const
Michal Klocek
Fixes wrong shades zvalues
r184 {
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
r784 return m_axis->opacity();
Michal Klocek
Fixes wrong shades zvalues
r184 }
Michal Klocek
Changes QChartAxis -> QAxis
r1006 void ChartAxis::setGridOpacity(qreal opacity)
Michal Klocek
Adds more axis handling...
r176 {
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
r784 m_grid->setOpacity(opacity);
Michal Klocek
Adds more axis handling...
r176 }
Michal Klocek
Refactora axis and line chart to use graphics items insted of painter.
r85
Michal Klocek
Changes QChartAxis -> QAxis
r1006 qreal ChartAxis::gridOpacity() const
Michal Klocek
Adds more axis handling...
r176 {
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
r784 return m_grid->opacity();
Michal Klocek
Adds more axis handling...
r176 }
Michal Klocek
Refactora axis and line chart to use graphics items insted of painter.
r85
Michal Klocek
Changes QChartAxis -> QAxis
r1006 void ChartAxis::setLabelsOpacity(qreal opacity)
Michal Klocek
Adds more axis handling...
r176 {
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
r784 m_labels->setOpacity(opacity);
Michal Klocek
Adds more axis handling...
r176 }
Michal Klocek
Refactora axis and line chart to use graphics items insted of painter.
r85
Michal Klocek
Changes QChartAxis -> QAxis
r1006 qreal ChartAxis::labelsOpacity() const
Michal Klocek
Adds more axis handling...
r176 {
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
r784 return m_labels->opacity();
Michal Klocek
Adds more axis handling...
r176 }
Michal Klocek
Refactora axis and line chart to use graphics items insted of painter.
r85
Michal Klocek
Changes QChartAxis -> QAxis
r1006 void ChartAxis::setShadesOpacity(qreal opacity)
Michal Klocek
Adds more axis handling...
r176 {
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
r784 m_shades->setOpacity(opacity);
Michal Klocek
Adds more axis handling...
r176 }
Michal Klocek
Refactora axis and line chart to use graphics items insted of painter.
r85
Michal Klocek
Changes QChartAxis -> QAxis
r1006 qreal ChartAxis::shadesOpacity() const
Michal Klocek
Adds more axis handling...
r176 {
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
r784 return m_shades->opacity();
Michal Klocek
Adds more axis handling...
r176 }
Michal Klocek
Add zoom support...
r67
Michal Klocek
Changes QChartAxis -> QAxis
r1006 void ChartAxis::setLabelsAngle(int angle)
Michal Klocek
Adds more axis handling...
r176 {
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
r784 foreach(QGraphicsItem* item , m_labels->childItems()) {
Michal Klocek
Adds more axis handling...
r176 item->setRotation(angle);
Michal Klocek
Fix previous broken commit
r145 }
Michal Klocek
Adds more axis handling...
r176
m_labelsAngle=angle;
Michal Klocek
Add zoom support...
r67 }
Michal Klocek
Changes QChartAxis -> QAxis
r1006 void ChartAxis::setLabelsPen(const QPen &pen)
Michal Klocek
Adds refactored axis to presenter
r140 {
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
r784 foreach(QGraphicsItem* item , m_labels->childItems()) {
Michal Klocek
Adds more axis handling...
r176 static_cast<QGraphicsSimpleTextItem*>(item)->setPen(pen);
}
Michal Klocek
Adds refactored axis to presenter
r140 }
Michal Klocek
Changes QChartAxis -> QAxis
r1006 void ChartAxis::setLabelsBrush(const QBrush &brush)
Michal Klocek
Adds refactored axis to presenter
r140 {
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
r784 foreach(QGraphicsItem* item , m_labels->childItems()) {
Michal Klocek
Adds more axis handling...
r176 static_cast<QGraphicsSimpleTextItem*>(item)->setBrush(brush);
}
Michal Klocek
Adds refactored axis to presenter
r140 }
Michal Klocek
Changes QChartAxis -> QAxis
r1006 void ChartAxis::setLabelsFont(const QFont &font)
Michal Klocek
Adds refactored axis to presenter
r140 {
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
r784 foreach(QGraphicsItem* item , m_labels->childItems()) {
Michal Klocek
Adds more axis handling...
r176 static_cast<QGraphicsSimpleTextItem*>(item)->setFont(font);
}
Michal Klocek
Refactors layout managment...
r1534 m_font = font;
Michal Klocek
Adds refactored axis to presenter
r140 }
Michal Klocek
Changes QChartAxis -> QAxis
r1006 void ChartAxis::setShadesBrush(const QBrush &brush)
Michal Klocek
Adds refactored axis to presenter
r140 {
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
r784 foreach(QGraphicsItem* item , m_shades->childItems()) {
Michal Klocek
Adds more axis handling...
r176 static_cast<QGraphicsRectItem*>(item)->setBrush(brush);
}
Michal Klocek
Adds refactored axis to presenter
r140 }
Michal Klocek
Changes QChartAxis -> QAxis
r1006 void ChartAxis::setShadesPen(const QPen &pen)
Michal Klocek
Adds refactored axis to presenter
r140 {
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
r784 foreach(QGraphicsItem* item , m_shades->childItems()) {
Michal Klocek
Adds more axis handling...
r176 static_cast<QGraphicsRectItem*>(item)->setPen(pen);
}
}
Michal Klocek
Changes QChartAxis -> QAxis
r1006 void ChartAxis::setAxisPen(const QPen &pen)
Michal Klocek
Fixes wrong shades zvalues
r184 {
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
r784 foreach(QGraphicsItem* item , m_axis->childItems()) {
Michal Klocek
Fix zorder of axis, and ticks
r272 static_cast<QGraphicsLineItem*>(item)->setPen(pen);
}
Michal Klocek
Fixes wrong shades zvalues
r184 }
Michal Klocek
Changes QChartAxis -> QAxis
r1006 void ChartAxis::setGridPen(const QPen &pen)
Michal Klocek
Adds more axis handling...
r176 {
Jani Honkonen
make QGraphicsItemGroup a pointer in axis
r784 foreach(QGraphicsItem* item , m_grid->childItems()) {
Michal Klocek
Adds more axis handling...
r176 static_cast<QGraphicsLineItem*>(item)->setPen(pen);
}
}
Michal Klocek
Changes QChartAxis -> QAxis
r1006 bool ChartAxis::isEmpty()
Michal Klocek
Axis refactoring to support better barcharts
r502 {
Michal Klocek
Refactors Domain and Axis...
r1698 return m_rect.isEmpty() || qFuzzyIsNull(m_min - m_max);
Michal Klocek
Refactors axis layout managment...
r291 }
Michal Klocek
Adds refactored axis to presenter
r140
Michal Klocek
Refactors Domain and Axis...
r1698 void ChartAxis::handleDomainUpdated()
Michal Klocek
Adds draft of axis bar label support
r497 {
Michal Klocek
Refactors Domain and Axis...
r1698 Domain* domain = qobject_cast<Domain*>(sender());
qreal min(0);
qreal max(0);
if(m_chartAxis->orientation()==Qt::Horizontal) {
min = domain->minX();
max = domain->maxX();
}
else if (m_chartAxis->orientation()==Qt::Vertical)
{
min = domain->minY();
max = domain->maxY();
}
if (!qFuzzyIsNull(m_min - min) || !qFuzzyIsNull(m_max - max))
{
m_min = min;
m_max = max;
if (!isEmpty()) {
QVector<qreal> layout = calculateLayout();
updateLayout(layout);
}
}
Michal Klocek
Adds draft of axis bar label support
r497 }
Michal Klocek
Changes QChartAxis -> QAxis
r1006 void ChartAxis::handleAxisUpdated()
Michal Klocek
Refactor domain model...
r439 {
Michal Klocek
Refactors Domain and Axis...
r1698 if(isEmpty()) return;
Michal Klocek
Refactor domain model...
r439
Michal Klocek
Adds visibity paramter to axis
r1617 if (!m_chartAxis->isVisible()) {
Michal Klocek
Refactor domain model...
r439 setAxisOpacity(0);
setGridOpacity(0);
setLabelsOpacity(0);
setShadesOpacity(0);
}
Michal Klocek
Adds visibity paramter to axis
r1617 else {
Michal Klocek
Refactor domain model...
r439
sauimone
abstract axis qml documentation. bug fix to setArrowVisible
r1654 if (m_chartAxis->isArrowVisible()) {
Michal Klocek
Adds visibity paramter to axis
r1617 setAxisOpacity(100);
}
else {
setAxisOpacity(0);
}
if (m_chartAxis->isGridLineVisible()) {
setGridOpacity(100);
}
else {
setGridOpacity(0);
}
if (m_chartAxis->labelsVisible()) {
setLabelsOpacity(100);
}
else {
setLabelsOpacity(0);
}
if (m_chartAxis->shadesVisible()) {
setShadesOpacity(100);
}
else {
setShadesOpacity(0);
}
}
Michal Klocek
Refactors Domain and Axis...
r1698
Michal Klocek
Refactor domain model...
r439 setLabelsAngle(m_chartAxis->labelsAngle());
setAxisPen(m_chartAxis->axisPen());
setLabelsPen(m_chartAxis->labelsPen());
setLabelsBrush(m_chartAxis->labelsBrush());
setLabelsFont(m_chartAxis->labelsFont());
Michal Klocek
Renames Grid to GridLine
r535 setGridPen(m_chartAxis->gridLinePen());
Michal Klocek
Refactor domain model...
r439 setShadesPen(m_chartAxis->shadesPen());
setShadesBrush(m_chartAxis->shadesBrush());
Michal Klocek
Refacotr axisitem to handle ticks changes
r452
Michal Klocek
Refactor domain model...
r439 }
Michal Klocek
Changes QChartAxis -> QAxis
r1006 void ChartAxis::handleGeometryChanged(const QRectF &rect)
Michal Klocek
Refactor domain model...
r439 {
Michal Klocek
Refactor qledgend handling...
r855 if(m_rect != rect)
{
m_rect = rect;
if (isEmpty()) return;
QVector<qreal> layout = calculateLayout();
updateLayout(layout);
}
Michal Klocek
Refacotr axisitem to handle ticks changes
r452 }
Michal Klocek
Refactor domain model...
r439
Michal Klocek
Refactors layout managment...
r1534
qreal ChartAxis::minimumWidth()
{
if(m_minWidth == 0) updateGeometry();
return m_minWidth;
}
qreal ChartAxis::minimumHeight()
{
if(m_minHeight == 0) updateGeometry();
return m_minHeight;
}
Michal Klocek
Changes QChartAxis -> QAxis
r1006 void ChartAxis::axisSelected()
Michal Klocek
Refacotr axisitem to handle ticks changes
r452 {
Michal Klocek
Adds pimpl for qchartaxis and qchartaxiscategories
r963 qDebug()<<"TODO: axis clicked";
Michal Klocek
Refactor domain model...
r439 }
Michal Klocek
Refactor QChart API...
r1577
void ChartAxis::createNumberLabels(QStringList &labels,qreal min, qreal max, int ticks) const
{
Q_ASSERT(max>min);
Q_ASSERT(ticks>1);
Michal Klocek
Fixes rounding issue with labels numbering
r1720 int n = qMax(int(-qFloor(log10((max-min)/(ticks-1)))),0);
Michal Klocek
Refactor QChart API...
r1577 n++;
for (int i=0; i< ticks; i++) {
qreal value = min + (i * (max - min)/ (ticks-1));
labels << QString::number(value,'f',n);
}
}
Michal Klocek
Changes QChartAxis -> QAxis
r1006 #include "moc_chartaxis_p.cpp"
Michal Klocek
Add zoom support...
r67
QTCOMMERCIALCHART_END_NAMESPACE