##// END OF EJS Templates
removed barlabel. label visibility control is now per series instead of per set
removed barlabel. label visibility control is now per series instead of per set

File last commit:

r1241:51695bb27b0e
r1246:5512aa7e284d
Show More
chartaxis.cpp
361 lines | 9.4 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"
#include "qaxis.h"
#include "qaxis_p.h"
Michal Klocek
Changes QChartAxisCategories -> QAxisCategories
r1032 #include "qaxiscategories_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
Add zoom support...
r67 #include <QPainter>
Michal Klocek
Improves build configuration...
r996 #include <QDebug>
Michal Klocek
Adds loosenumber algorithm...
r678 #include <cmath>
Michal Klocek
Add zoom support...
r67
QTCOMMERCIALCHART_BEGIN_NAMESPACE
Michal Klocek
Refactors axis animation, line animations
r1241 ChartAxis::ChartAxis(QAxis *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 axis animation, line animations
r1241 m_ticksCount(0),
m_animation(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()));
QObject::connect(m_chartAxis->categories()->d_ptr.data(),SIGNAL(updated()),this,SLOT(handleAxisCategoriesUpdated()));
Michal Klocek
Axis refactoring to support better barcharts
r502
handleAxisUpdated();
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);
}
if( diff!=0) handleAxisUpdated();
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 bool ChartAxis::createLabels(QStringList &labels,qreal min, qreal max,int ticks) const
Michal Klocek
Refactora axis and line chart to use graphics items insted of painter.
r85 {
Michal Klocek
Refactors axis animation, line animations
r1241 Q_ASSERT(max>min);
Michal Klocek
Adds loosenumber algorithm...
r678 Q_ASSERT(ticks>1);
Michal Klocek
Refactora axis and line chart to use graphics items insted of painter.
r85
Michal Klocek
Changes QChartAxisCategories -> QAxisCategories
r1032 QAxisCategories* categories = m_chartAxis->categories();
Michal Klocek
Refactors axis layout managment...
r291
Michal Klocek
Adds back reimplemnted categories handling
r701 bool category = categories->count()>0;
sauimone
more minor code review fixes
r745 if (!category) {
Michal Klocek
Adds back reimplemnted categories handling
r701 int n = qMax(int(-floor(log10((max-min)/(ticks-1)))),0);
Michal Klocek
Inreases decimal point in axis
r801 n++;
sauimone
minor code review fixes
r759 for (int i=0; i< ticks; i++) {
Michal Klocek
Adds back reimplemnted categories handling
r701 qreal value = min + (i * (max - min)/ (ticks-1));
Michal Klocek
Refactors axis animation, line animations
r1241 Q_UNUSED(value);
Michal Klocek
Adds loosenumber algorithm...
r678 labels << QString::number(value,'f',n);
Michal Klocek
Refactor domain model...
r439 }
sauimone
more minor code review fixes
r745 } else {
Michal Klocek
Adds custom categories + example
r706 QList<qreal> values = categories->values();
sauimone
more minor code review fixes
r745 for (int i=0; i< ticks; i++) {
Michal Klocek
Adds custom categories + example
r706 qreal value = (min + (i * (max - min)/ (ticks-1)));
int j=0;
sauimone
more minor code review fixes
r745 for (; j<values.count(); j++) {
Michal Klocek
Adds custom categories + example
r706 if (values.at(j) > value) break;
}
sauimone
more minor code review fixes
r745 if (j!=0) value=values.at(j-1);
Michal Klocek
Adds custom categories + example
r706
Michal Klocek
Adds draft of axis bar label support
r497 QString label = categories->label(value);
Michal Klocek
Refactor domain model...
r439 labels << label;
}
Michal Klocek
Refactors axis handling...
r223 }
Michal Klocek
Adds back reimplemnted categories handling
r701
return category;
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::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
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 {
Jani Honkonen
Use qFuzzyIsNull to compare (in)equality of real values
r768 return m_rect.isEmpty() || qFuzzyIsNull(m_min - m_max) || m_ticksCount==0;
Michal Klocek
Refactors axis layout managment...
r291 }
Michal Klocek
Adds refactored axis to presenter
r140
Michal Klocek
Refactor domain model...
r439 //handlers
Michal Klocek
Changes QChartAxis -> QAxis
r1006 void ChartAxis::handleAxisCategoriesUpdated()
Michal Klocek
Adds draft of axis bar label support
r497 {
sauimone
minor code review fixes
r759 if (isEmpty()) return;
Michal Klocek
Axis refactoring to support better barcharts
r502 updateLayout(m_layoutVector);
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
Adds draft of axis bar label support
r497
sauimone
more minor code review fixes
r745 if (isEmpty()) return;
Michal Klocek
Refactor domain model...
r439
sauimone
more minor code review fixes
r745 if (m_chartAxis->isAxisVisible()) {
Michal Klocek
Refactor domain model...
r439 setAxisOpacity(100);
sauimone
more minor code review fixes
r745 } else {
Michal Klocek
Refactor domain model...
r439 setAxisOpacity(0);
}
sauimone
minor code review fixes
r759 if (m_chartAxis->isGridLineVisible()) {
Michal Klocek
Refactor domain model...
r439 setGridOpacity(100);
sauimone
more minor code review fixes
r745 } else {
Michal Klocek
Refactor domain model...
r439 setGridOpacity(0);
}
sauimone
minor code review fixes
r759 if (m_chartAxis->labelsVisible()) {
Michal Klocek
Refactor domain model...
r439 setLabelsOpacity(100);
sauimone
more minor code review fixes
r745 } else {
Michal Klocek
Refactor domain model...
r439 setLabelsOpacity(0);
}
sauimone
more minor code review fixes
r745 if (m_chartAxis->shadesVisible()) {
Michal Klocek
Refactor domain model...
r439 setShadesOpacity(m_chartAxis->shadesOpacity());
sauimone
more minor code review fixes
r745 } else {
Michal Klocek
Refactor domain model...
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
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::handleRangeChanged(qreal min, qreal max,int tickCount)
Michal Klocek
Refactor domain model...
r439 {
Jani Honkonen
Use qFuzzyIsNull to compare (in)equality of real values
r768 if (qFuzzyIsNull(min - max) || tickCount < 2)
return;
Michal Klocek
Adds missing ticks hadnling
r554
Michal Klocek
Refacotr axisitem to handle ticks changes
r452 m_min = min;
m_max = max;
Michal Klocek
Adds missing ticks hadnling
r554 m_ticksCount= tickCount;
Michal Klocek
Adding zoom in out animation support
r513
sauimone
more minor code review fixes
r745 if (isEmpty()) return;
Michal Klocek
Axis refactoring to support better barcharts
r502 QVector<qreal> layout = calculateLayout();
updateLayout(layout);
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
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
Changes QChartAxis -> QAxis
r1006 #include "moc_chartaxis_p.cpp"
Michal Klocek
Add zoom support...
r67
QTCOMMERCIALCHART_END_NAMESPACE