summaryrefslogtreecommitdiffstats
path: root/src/xychart/xychart.cpp
diff options
context:
space:
mode:
authorMichal Klocek <Michal.Klocek@digia.com>2012-11-16 13:21:46 +0200
committerMichal Klocek <Michal.Klocek@digia.com>2012-11-26 14:58:47 +0200
commit1c49aa901cb25b0bbdeb4922784fec273b97e781 (patch)
tree21469c4bf6070f109cb4dc12472f641c37644674 /src/xychart/xychart.cpp
parentb1616762bd1e13608c1040c543e909698670b519 (diff)
Refactors internals
* rewrite axisUpdated signal handling * create handlers for each property of axis * decouple chartdataset, presenter, theme * adds theme manager * adds axis add/remove/attach/detach handling * refactors createGraphics * add initializers (graphics,domain,theme,animations) * refactor the way the charts are constructed (decouple form presenter) * fix initialization issues with qchart * refactor domain logic to handle also geometry size for charts * delegate xyseries geometry calculation to domian * fix lazy initialization of animations * remove hadnleGeomoetryChanged * add shared pointers to handle reference count for domain * moves nice number algorithm to domain * adds applyNiceNumbers(), depreciate setNiceNumbers * refactor multiple charts handling * domain is shared object * each domain can have multiple axis for controlling * multiple charts share now the same domain
Diffstat (limited to 'src/xychart/xychart.cpp')
-rw-r--r--src/xychart/xychart.cpp94
1 files changed, 10 insertions, 84 deletions
diff --git a/src/xychart/xychart.cpp b/src/xychart/xychart.cpp
index f7356b15..72b7ea65 100644
--- a/src/xychart/xychart.cpp
+++ b/src/xychart/xychart.cpp
@@ -32,12 +32,8 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE
//TODO: optimize : remove points which are not visible
-XYChart::XYChart(QXYSeries *series, ChartPresenter *presenter)
- : ChartElement(presenter),
- m_minX(0),
- m_maxX(0),
- m_minY(0),
- m_maxY(0),
+XYChart::XYChart(QXYSeries *series,QGraphicsItem* item):
+ ChartItem(series->d_func(),item),
m_series(series),
m_animation(0),
m_dirty(true)
@@ -55,11 +51,6 @@ void XYChart::setGeometryPoints(const QVector<QPointF>& points)
m_points = points;
}
-void XYChart::setClipRect(const QRectF &rect)
-{
- m_clipRect = rect;
-}
-
void XYChart::setAnimation(XYAnimation *animation)
{
m_animation = animation;
@@ -70,51 +61,6 @@ void XYChart::setDirty(bool dirty)
m_dirty = dirty;
}
-QPointF XYChart::calculateGeometryPoint(const QPointF &point) const
-{
- const qreal deltaX = m_size.width() / (m_maxX - m_minX);
- const qreal deltaY = m_size.height() / (m_maxY - m_minY);
- qreal x = (point.x() - m_minX) * deltaX;
- qreal y = (point.y() - m_minY) * -deltaY + m_size.height();
- return QPointF(x, y);
-}
-
-QPointF XYChart::calculateGeometryPoint(int index) const
-{
- const qreal deltaX = m_size.width() / (m_maxX - m_minX);
- const qreal deltaY = m_size.height() / (m_maxY - m_minY);
- const QList<QPointF>& vector = m_series->points();
- qreal x = (vector[index].x() - m_minX) * deltaX;
- qreal y = (vector[index].y() - m_minY) * -deltaY + m_size.height();
- return QPointF(x, y);
-}
-
-QVector<QPointF> XYChart::calculateGeometryPoints() const
-{
- const qreal deltaX = m_size.width() / (m_maxX - m_minX);
- const qreal deltaY = m_size.height() / (m_maxY - m_minY);
-
- QVector<QPointF> result;
- result.resize(m_series->count());
- const QList<QPointF>& vector = m_series->points();
- for (int i = 0; i < m_series->count(); ++i) {
- qreal x = (vector[i].x() - m_minX) * deltaX;
- qreal y = (vector[i].y() - m_minY) * -deltaY + m_size.height();
- result[i].setX(x);
- result[i].setY(y);
- }
- return result;
-}
-
-QPointF XYChart::calculateDomainPoint(const QPointF &point) const
-{
- const qreal deltaX = m_size.width() / (m_maxX - m_minX);
- const qreal deltaY = m_size.height() / (m_maxY - m_minY);
- qreal x = point.x() / deltaX + m_minX;
- qreal y = (point.y() - m_size.height()) / (-deltaY) + m_minY;
- return QPointF(x, y);
-}
-
void XYChart::updateChart(QVector<QPointF> &oldPoints, QVector<QPointF> &newPoints, int index)
{
@@ -139,10 +85,10 @@ void XYChart::handlePointAdded(int index)
QVector<QPointF> points;
if (m_dirty) {
- points = calculateGeometryPoints();
+ points = domain()->calculateGeometryPoints(m_series->points());
} else {
points = m_points;
- QPointF point = calculateGeometryPoint(index);
+ QPointF point = domain()->calculateGeometryPoint(m_series->points()[index]);
points.insert(index, point);
}
@@ -157,7 +103,7 @@ void XYChart::handlePointRemoved(int index)
QVector<QPointF> points;
if (m_dirty) {
- points = calculateGeometryPoints();
+ points = domain()->calculateGeometryPoints(m_series->points());
} else {
points = m_points;
points.remove(index);
@@ -174,9 +120,9 @@ void XYChart::handlePointReplaced(int index)
QVector<QPointF> points;
if (m_dirty) {
- points = calculateGeometryPoints();
+ points = domain()->calculateGeometryPoints(m_series->points());
} else {
- QPointF point = calculateGeometryPoint(index);
+ QPointF point = domain()->calculateGeometryPoint(m_series->points()[index]);
points = m_points;
points.replace(index, point);
}
@@ -187,40 +133,20 @@ void XYChart::handlePointReplaced(int index)
void XYChart::handlePointsReplaced()
{
// All the points were replaced -> recalculate
- QVector<QPointF> points = calculateGeometryPoints();
+ QVector<QPointF> points = domain()->calculateGeometryPoints(m_series->points());
updateChart(m_points, points, -1);
}
void XYChart::handleDomainUpdated()
{
- m_minX = domain()->minX();
- m_maxX = domain()->maxX();
- m_minY = domain()->minY();
- m_maxY = domain()->maxY();
if (isEmpty()) return;
-
- QVector<QPointF> points = calculateGeometryPoints();
-
- updateChart(m_points, points);
-}
-
-void XYChart::handleGeometryChanged(const QRectF &rect)
-{
- Q_ASSERT(rect.isValid());
- m_size = rect.size();
- m_clipRect = rect.translated(-rect.topLeft());
- m_origin = rect.topLeft();
-
- if (isEmpty()) return;
-
- QVector<QPointF> points = calculateGeometryPoints();
-
+ QVector<QPointF> points = domain()->calculateGeometryPoints(m_series->points());
updateChart(m_points, points);
}
bool XYChart::isEmpty()
{
- return !m_clipRect.isValid() || qFuzzyCompare(m_maxX, m_minX) || qFuzzyCompare(m_maxY, m_minY) || m_series->points().isEmpty();
+ return domain()->isEmpty() || m_series->points().isEmpty();
}
#include "moc_xychart_p.cpp"