diff --git a/examples/ekgchart/chartview.cpp b/examples/ekgchart/chartview.cpp index 1ef6175..d1d58a3 100644 --- a/examples/ekgchart/chartview.cpp +++ b/examples/ekgchart/chartview.cpp @@ -12,7 +12,7 @@ m_y(1) setChartTitle("Three random line charts"); QObject::connect(&m_timer,SIGNAL(timeout()),this,SLOT(handleTimeout())); - m_timer.setInterval(1000); + m_timer.setInterval(3000); m_series0 = new QLineSeries(this); QPen blue(Qt::blue); @@ -49,5 +49,10 @@ void ChartView::handleTimeout() m_y = qrand() % 5 - 2.5; m_series0->add(m_x,m_y); m_series1->add(m_x,m_y); + if(m_x>=10) + { + m_series0->remove(m_x-10); + m_series1->remove(m_x-10); + } scrollRight(); } diff --git a/src/animations/animations.pri b/src/animations/animations.pri index 5b0d655..ad06aea 100644 --- a/src/animations/animations.pri +++ b/src/animations/animations.pri @@ -6,7 +6,9 @@ SOURCES += \ $$PWD/chartanimator.cpp \ $$PWD/xyanimation.cpp \ $$PWD/pieanimation.cpp \ - $$PWD/piesliceanimation.cpp + $$PWD/piesliceanimation.cpp \ + $$PWD/splineanimation.cpp + PRIVATE_HEADERS += \ $$PWD/axisanimation_p.h \ @@ -14,4 +16,5 @@ PRIVATE_HEADERS += \ $$PWD/chartanimation_p.h \ $$PWD/xyanimation_p.h \ $$PWD/pieanimation_p.h \ - $$PWD/piesliceanimation_p.h + $$PWD/piesliceanimation_p.h \ + $$PWD/splineanimation_p.h diff --git a/src/animations/chartanimation_p.h b/src/animations/chartanimation_p.h index dd46b6a..4599f60 100644 --- a/src/animations/chartanimation_p.h +++ b/src/animations/chartanimation_p.h @@ -9,7 +9,14 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE class ChartAnimation: public QVariantAnimation { public: - ChartAnimation(QObject* parent=0):QVariantAnimation(parent){}; + enum Animation { LineDrawAnimation, MoveDownAnimation, MoveUpAnimation }; + ChartAnimation(QObject* parent=0):QVariantAnimation(parent),m_type(MoveDownAnimation){}; + void setAnimationType(Animation type){ + m_type=type; + } +protected: + Animation m_type; + }; QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/animations/chartanimator.cpp b/src/animations/chartanimator.cpp index a8964fc..9a6cb99 100644 --- a/src/animations/chartanimator.cpp +++ b/src/animations/chartanimator.cpp @@ -1,9 +1,12 @@ #include "chartanimator_p.h" #include "axisanimation_p.h" #include "xyanimation_p.h" +#include "splineanimation_p.h" #include "xychartitem_p.h" #include "pieanimation_p.h" #include "areachartitem_p.h" +#include "splinechartitem_p.h" +#include "scatterchartitem_p.h" #include Q_DECLARE_METATYPE(QVector) @@ -33,7 +36,31 @@ void ChartAnimator::addAnimation(AxisItem* item) item->setAnimator(this); } -void ChartAnimator::addAnimation(XYChartItem* item) +void ChartAnimator::addAnimation(SplineChartItem* item) +{ + ChartAnimation* animation = m_animations.value(item); + + if(!animation) { + animation = new SplineAnimation(item); + m_animations.insert(item,animation); + } + + item->setAnimator(this); +} + +void ChartAnimator::addAnimation(ScatterChartItem* item) +{ + ChartAnimation* animation = m_animations.value(item); + + if(!animation) { + animation = new XYAnimation(item); + m_animations.insert(item,animation); + } + + item->setAnimator(this); +} + +void ChartAnimator::addAnimation(LineChartItem* item) { ChartAnimation* animation = m_animations.value(item); @@ -142,44 +169,57 @@ void ChartAnimator::applyLayout(AxisItem* item , QVector& newLayout) QTimer::singleShot(0,animation,SLOT(start())); } -void ChartAnimator::applyLayout(XYChartItem* item, QVector& newPoints) +void ChartAnimator::updateLayout(SplineChartItem* item, QVector& oldPoints ,QVector& newPoints, QVector& oldControlPoints, QVector& newControlPoints,int index) { - - XYAnimation* animation = static_cast(m_animations.value(item)); + SplineAnimation* animation = static_cast(m_animations.value(item)); Q_ASSERT(animation); - QVector oldPoints = item->points(); - - if(newPoints.count()==0) return; + if(newPoints.count()<2 || newControlPoints.count()<2) return; bool empty = oldPoints.count()==0; - oldPoints.resize(newPoints.size()); + if(animation->state()!=QAbstractAnimation::Stopped) { - animation->stop(); + animation->stop(); } animation->setDuration(duration); if(!empty) - animation->setAnimationType(XYAnimation::MoveDownAnimation); + animation->setAnimationType(ChartAnimation::MoveDownAnimation); else - animation->setAnimationType(XYAnimation::LineDrawAnimation); + animation->setAnimationType(ChartAnimation::LineDrawAnimation); + animation->setEasingCurve(QEasingCurve::OutQuart); - animation->setValues(oldPoints,newPoints); + animation->setValues(oldPoints,newPoints,oldControlPoints,newControlPoints,index); + QTimer::singleShot(0,animation,SLOT(start())); } -void ChartAnimator::updateLayout(XYChartItem* item, QVector& newPoints) + +void ChartAnimator::updateLayout(XYChartItem* item, QVector& oldPoints , QVector& newPoints, int index) { XYAnimation* animation = static_cast(m_animations.value(item)); Q_ASSERT(animation); + if(newPoints.count()==0) return; + + bool empty = oldPoints.count()==0; + + + if(animation->state()!=QAbstractAnimation::Stopped) { + animation->stop(); + } + animation->setDuration(duration); - animation->setAnimationType(XYAnimation::MoveDownAnimation); + if(!empty) + animation->setAnimationType(ChartAnimation::MoveDownAnimation); + else + animation->setAnimationType(ChartAnimation::LineDrawAnimation); + animation->setEasingCurve(QEasingCurve::OutQuart); - animation->updateValues(newPoints); + animation->setValues(oldPoints,newPoints,index); QTimer::singleShot(0,animation,SLOT(start())); } diff --git a/src/animations/chartanimator_p.h b/src/animations/chartanimator_p.h index 21e8e0d..9b48728 100644 --- a/src/animations/chartanimator_p.h +++ b/src/animations/chartanimator_p.h @@ -8,10 +8,12 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE class ChartItem; -class XYChartItem; class AxisItem; class AreaChartItem; - +class SplineChartItem; +class ScatterChartItem; +class LineChartItem; +class XYChartItem; class ChartAnimator : public QObject { @@ -22,14 +24,15 @@ public: virtual ~ChartAnimator(); void addAnimation(AxisItem* item); - void addAnimation(XYChartItem* item); void addAnimation(PieChartItem* item); - + void addAnimation(ScatterChartItem* item); + void addAnimation(LineChartItem* item); + void addAnimation(SplineChartItem* item); void removeAnimation(ChartItem* item); void animationStarted(); - void applyLayout(XYChartItem* item, QVector& layout); - void updateLayout(XYChartItem* item, QVector& layout); + void updateLayout(XYChartItem* item, QVector& oldLayout,QVector& newLayout,int index); + void updateLayout(SplineChartItem* item, QVector& oldPoints , QVector& newPoints, QVector& oldControlPoints, QVector& newContorlPoints,int index); void applyLayout(AxisItem* item, QVector& layout); void addAnimation(PieChartItem* item, QPieSlice *slice, PieSliceLayout &layout); diff --git a/src/animations/splineanimation.cpp b/src/animations/splineanimation.cpp new file mode 100644 index 0000000..99e15a9 --- /dev/null +++ b/src/animations/splineanimation.cpp @@ -0,0 +1,127 @@ +#include "splineanimation_p.h" +#include "splinechartitem_p.h" + +Q_DECLARE_METATYPE(QVector) +Q_DECLARE_METATYPE(SplineVector) + +QTCOMMERCIALCHART_BEGIN_NAMESPACE + +SplineAnimation::SplineAnimation(SplineChartItem* item):ChartAnimation(item), +m_item(item), +m_dirty(true) +{ +} + +SplineAnimation::~SplineAnimation() +{ +} + +void SplineAnimation::setValues(QVector& oldPoints,QVector& newPoints,QVector& oldControlPoints,QVector& newControlPoints,int index) +{ + int x = oldPoints.count(); + int y = newPoints.count(); + + Q_ASSERT(newPoints.count()*2-2 == newControlPoints.count()); + + if(x!=y && abs(x-y)!=1) { + m_oldSpline.first= newPoints; + m_oldSpline.second= newControlPoints; + oldPoints.resize(newPoints.size()); + oldControlPoints.resize(newControlPoints.size()); + SplineVector oldPair; + oldPair.first=oldPoints; + oldPair.second=oldControlPoints; + SplineVector newPair; + newPair.first=newPoints; + newPair.second=newControlPoints; + setKeyValueAt(0.0, qVariantFromValue(oldPair)); + setKeyValueAt(1.0, qVariantFromValue(newPair)); + m_dirty=false; + } + else { + if(m_dirty) { + m_oldSpline.first = oldPoints; + m_oldSpline.second = oldControlPoints; + m_dirty=false; + } + oldPoints = newPoints; + oldControlPoints = newControlPoints; + if (yx) { + m_oldSpline.first.insert(index,x>0?m_oldSpline.first[index-1]:newPoints[index]); //add + m_oldSpline.second.insert((index-1)*2,x>1?m_oldSpline.second[(index-2)*2]:newControlPoints[(index-1)*2]); //add + m_oldSpline.second.insert((index-1)*2+1,x>1?m_oldSpline.second[(index-2)*2+1]:newControlPoints[(index-1)*2+1]); //add + } + SplineVector newPair; + newPair.first=newPoints; + newPair.second=newControlPoints; + setKeyValueAt(0.0, qVariantFromValue(m_oldSpline)); + setKeyValueAt(1.0, qVariantFromValue(newPair)); + + } +} + +QVariant SplineAnimation::interpolated(const QVariant &start, const QVariant & end, qreal progress ) const +{ + + SplineVector startPair = qVariantValue< SplineVector >(start); + SplineVector endPair = qVariantValue< SplineVector >(end); + SplineVector result; + + + switch(m_type) { + + case MoveDownAnimation: { + + if(startPair.first.count() != endPair.first.count()) break; + Q_ASSERT(startPair.first.count()*2-2 == startPair.second.count()); + Q_ASSERT(endPair.first.count()*2-2 == endPair.second.count()); + for(int i =0;i< endPair.first.count();i++) { + qreal x = startPair.first[i].x() + ((endPair.first[i].x()- startPair.first[i].x()) * progress); + qreal y = startPair.first[i].y() + ((endPair.first[i].y()- startPair.first[i].y()) * progress); + result.first << QPointF(x,y); + if(i +1 >= endPair.first.count()) continue; + x = startPair.second[i*2].x() + ((endPair.second[i*2].x()- startPair.second[i*2].x()) * progress); + y = startPair.second[i*2].y() + ((endPair.second[i*2].y()- startPair.second[i*2].y()) * progress); + result.second << QPoint(x,y); + x = startPair.second[i*2+1].x() + ((endPair.second[i*2+1].x()- startPair.second[i*2+1].x()) * progress); + y = startPair.second[i*2+1].y() + ((endPair.second[i*2+1].y()- startPair.second[i*2+1].y()) * progress); + result.second << QPoint(x,y); + } + + } + break; + case LineDrawAnimation:{ + Q_ASSERT(endPair.first.count()*2-2 == endPair.second.count()); + int count = endPair.first.count()* qBound(0.0, progress, 1.0); + for(int i =0;i, QVector > pair = qVariantValue< QPair< QVector, QVector > >(value); + m_item->setLayout(pair.first,pair.second); + } +} + + +QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/animations/splineanimation_p.h b/src/animations/splineanimation_p.h new file mode 100644 index 0000000..33b2f64 --- /dev/null +++ b/src/animations/splineanimation_p.h @@ -0,0 +1,33 @@ +#ifndef SPLINEANIMATION_P_H_ +#define SPLINEANIMATION_P_H_ +#include "chartanimation_p.h" +#include + +typedef QPair, QVector > SplineVector; + +QTCOMMERCIALCHART_BEGIN_NAMESPACE + + +class SplineChartItem; + +class SplineAnimation : public ChartAnimation +{ +public: + + SplineAnimation(SplineChartItem* item); + ~SplineAnimation(); + void setValues(QVector& oldPoints,QVector& newPoints,QVector& oldContorlPoints,QVector& newControlPoints,int index); + +protected: + QVariant interpolated(const QVariant &start, const QVariant & end, qreal progress ) const; + void updateCurrentValue (const QVariant & value ); + +private: + SplineVector m_oldSpline; + SplineChartItem* m_item; + bool m_dirty; +}; + +QTCOMMERCIALCHART_END_NAMESPACE + +#endif diff --git a/src/animations/xyanimation.cpp b/src/animations/xyanimation.cpp index b95168e..cd18d3d 100644 --- a/src/animations/xyanimation.cpp +++ b/src/animations/xyanimation.cpp @@ -7,7 +7,6 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE XYAnimation::XYAnimation(XYChartItem *item):ChartAnimation(item), m_item(item), - m_type(MoveDownAnimation), m_dirty(false) { } @@ -16,33 +15,31 @@ XYAnimation::~XYAnimation() { } -void XYAnimation::setAnimationType(Animation type) +void XYAnimation::setValues(QVector& oldPoints,QVector& newPoints,int index) { - m_type=type; -} - -void XYAnimation::setValues(QVector& oldPoints,QVector& newPoints) -{ - setKeyValueAt(0.0, qVariantFromValue(oldPoints)); - setKeyValueAt(1.0, qVariantFromValue(newPoints)); - m_points = newPoints; - m_dirty=false; -} -void XYAnimation::updateValues(QVector& newPoints) -{ - if(state()!=QAbstractAnimation::Stopped) { - stop(); - m_dirty=true; - } + int x = oldPoints.count(); + int y = newPoints.count(); - if(m_dirty) { - m_points=newPoints; + if(x!=y && abs(x-y)!=1) { + m_oldPoints = newPoints; + oldPoints.resize(newPoints.size()); + setKeyValueAt(0.0, qVariantFromValue(oldPoints)); + setKeyValueAt(1.0, qVariantFromValue(newPoints)); m_dirty=false; } - - setKeyValueAt(0.0, qVariantFromValue(m_points)); - setKeyValueAt(1.0, qVariantFromValue(newPoints)); + else { + if(m_dirty) { + m_oldPoints = oldPoints; + m_dirty=false; + } + oldPoints = newPoints; + if (yx) (m_oldPoints.insert(index,x>0?m_oldPoints[index-1]:newPoints[index])); //add + setKeyValueAt(0.0, qVariantFromValue(m_oldPoints)); + setKeyValueAt(1.0, qVariantFromValue(newPoints)); + Q_ASSERT(m_oldPoints.count() == newPoints.count()); + } } QVariant XYAnimation::interpolated(const QVariant &start, const QVariant & end, qreal progress ) const @@ -82,16 +79,10 @@ QVariant XYAnimation::interpolated(const QVariant &start, const QVariant & end, void XYAnimation::updateCurrentValue (const QVariant & value ) { if(state()!=QAbstractAnimation::Stopped){ //workaround + m_dirty=true; QVector vector = qVariantValue >(value); m_item->setLayout(vector); } } -void XYAnimation::updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) -{ - Q_UNUSED(oldState) - if (newState==QAbstractAnimation::Running) m_dirty=true; - QVariantAnimation::updateState(newState,oldState); -} - QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/animations/xyanimation_p.h b/src/animations/xyanimation_p.h index de6de8a..8f575af 100644 --- a/src/animations/xyanimation_p.h +++ b/src/animations/xyanimation_p.h @@ -13,19 +13,15 @@ public: enum Animation { LineDrawAnimation, MoveDownAnimation, MoveUpAnimation }; XYAnimation(XYChartItem *item); ~XYAnimation(); - void setAnimationType(Animation type); - void setValues(QVector& oldPoints,QVector& newPoints); - void updateValues(QVector& newPoints); + void setValues(QVector& oldPoints,QVector& newPoints,int index); protected: QVariant interpolated(const QVariant &start, const QVariant & end, qreal progress ) const; void updateCurrentValue (const QVariant & value ); - void updateState ( QAbstractAnimation::State newState, QAbstractAnimation::State oldState); private: XYChartItem *m_item; - Animation m_type; - QVector m_points; + QVector m_oldPoints; bool m_dirty; }; diff --git a/src/linechart/linechartitem.cpp b/src/linechart/linechartitem.cpp index 20487dd..20a61e4 100644 --- a/src/linechart/linechartitem.cpp +++ b/src/linechart/linechartitem.cpp @@ -48,6 +48,7 @@ void LineChartItem::setLayout(QVector& points) m_rect = linePath.boundingRect(); XYChartItem::setLayout(points); + } void LineChartItem::handleUpdated() diff --git a/src/splinechart/splinechartitem.cpp b/src/splinechart/splinechartitem.cpp index e584296..ad08556 100644 --- a/src/splinechart/splinechartitem.cpp +++ b/src/splinechart/splinechartitem.cpp @@ -1,5 +1,6 @@ #include "splinechartitem_p.h" #include "chartpresenter_p.h" +#include "chartanimator_p.h" #include QTCOMMERCIALCHART_BEGIN_NAMESPACE @@ -24,34 +25,59 @@ QPainterPath SplineChartItem::shape() const return m_path; } +void SplineChartItem::updateLayout(QVector& oldPoints,QVector& newPoints,int index) +{ + QVector controlPoints; + + controlPoints.resize(newPoints.count()*2-2); + + for (int i = 0; i < newPoints.size() - 1; i++) + { + controlPoints[2*i] = calculateGeometryControlPoint(2 * i); + controlPoints[2 * i + 1] = calculateGeometryControlPoint(2 * i + 1); + } + + if(controlPoints.count()<2) { + setLayout(newPoints,controlPoints); + return; + } + + if(m_animator){ + m_animator->updateLayout(this,oldPoints,newPoints,m_controlPoints,controlPoints,index); + }else{ + setLayout(newPoints,controlPoints); + } +} + QPointF SplineChartItem::calculateGeometryControlPoint(int index) const { return XYChartItem::calculateGeometryPoint(m_series->controlPoint(index)); } -void SplineChartItem::setLayout(QVector& points) +void SplineChartItem::setLayout(QVector& points,QVector& controlPoints) { - - if(points.size()==0) + if(points.size()<2 || controlPoints.size()<2) { XYChartItem::setLayout(points); + m_controlPoints=controlPoints; return; } - QPainterPath splinePath; - const QPointF& point = points.at(0); - splinePath.moveTo(point); + Q_ASSERT(points.count()*2-2 == controlPoints.count()); + + QPainterPath splinePath(points.at(0)); for (int i = 0; i < points.size() - 1; i++) { const QPointF& point = points.at(i + 1); - splinePath.cubicTo(calculateGeometryControlPoint(2 * i), calculateGeometryControlPoint(2 * i + 1), point); + splinePath.cubicTo(controlPoints[2*i],controlPoints[2 * i + 1],point); } prepareGeometryChange(); m_path = splinePath; m_rect = splinePath.boundingRect(); XYChartItem::setLayout(points); + m_controlPoints=controlPoints; } //handlers diff --git a/src/splinechart/splinechartitem_p.h b/src/splinechart/splinechartitem_p.h index 3850082..b6f0a44 100644 --- a/src/splinechart/splinechartitem_p.h +++ b/src/splinechart/splinechartitem_p.h @@ -5,6 +5,7 @@ #include "xychartitem_p.h" #include + QTCOMMERCIALCHART_BEGIN_NAMESPACE class SplineChartItem : public XYChartItem @@ -22,7 +23,8 @@ public slots: void handleUpdated(); protected: - void setLayout(QVector& points); + void setLayout(QVector& points,QVector& controlPoints); + void updateLayout(QVector& oldPoints,QVector& newPoints,int index); private: QPointF calculateGeometryControlPoint(int index) const; @@ -34,7 +36,9 @@ private: QPen m_linePen; QPen m_pointPen; bool m_pointsVisible; + QVector m_controlPoints; + friend class SplineAnimation; }; QTCOMMERCIALCHART_END_NAMESPACE diff --git a/src/xychart/qxyseries.cpp b/src/xychart/qxyseries.cpp index 0f0edc0..ae68508 100644 --- a/src/xychart/qxyseries.cpp +++ b/src/xychart/qxyseries.cpp @@ -115,6 +115,21 @@ void QXYSeries::replace(const QPointF& point) } /*! + Removes first \a x value and related y value. +*/ +void QXYSeries::remove(qreal x) +{ + int index = m_x.indexOf(x); + + if(index==-1) return; + + m_x.remove(index); + m_y.remove(index); + + emit pointRemoved(index); +} + +/*! Removes current \a x and \a y value. */ void QXYSeries::remove(qreal x,qreal y) diff --git a/src/xychart/qxyseries.h b/src/xychart/qxyseries.h index 06541ba..4bb3cbc 100644 --- a/src/xychart/qxyseries.h +++ b/src/xychart/qxyseries.h @@ -22,6 +22,7 @@ public: void add(const QList points); void replace(qreal x,qreal y); void replace(const QPointF& point); + void remove(qreal x); void remove(qreal x, qreal y); void remove(const QPointF& point); void removeAll(); diff --git a/src/xychart/xychartitem.cpp b/src/xychart/xychartitem.cpp index a383c67..82d3620 100644 --- a/src/xychart/xychartitem.cpp +++ b/src/xychart/xychartitem.cpp @@ -66,23 +66,19 @@ QPointF XYChartItem::calculateDomainPoint(const QPointF& point) const return QPointF(x,y); } -void XYChartItem::applyLayout(QVector& points) +void XYChartItem::updateLayout(QVector& oldPoints,QVector& newPoints,int index) { if(m_animator){ - m_animator->applyLayout(this,points); + m_animator->updateLayout(this,oldPoints,newPoints,index); + }else{ + setLayout(newPoints); } - else setLayout(points); - -} - -void XYChartItem::updateLayout(QVector& points) -{ - setLayout(points); } void XYChartItem::setLayout(QVector& points) { m_points = points; + update(); } //handlers @@ -91,11 +87,11 @@ void XYChartItem::handlePointAdded(int index) { Q_ASSERT(indexcount()); Q_ASSERT(index>=0); - + qDebug()<<__FUNCTION__< points = m_points; - points.insert(index-1,point); - updateLayout(points); + points.insert(index,point); + updateLayout(m_points,points,index); update(); } void XYChartItem::handlePointRemoved(int index) @@ -104,7 +100,7 @@ void XYChartItem::handlePointRemoved(int index) Q_ASSERT(index>=0); QVector points = m_points; points.remove(index); - updateLayout(points); + updateLayout(m_points,points,index); update(); } @@ -115,7 +111,7 @@ void XYChartItem::handlePointReplaced(int index) QPointF point = calculateGeometryPoint(index); QVector points = m_points; points.replace(index,point); - updateLayout(points); + updateLayout(m_points,points,index); update(); } @@ -128,7 +124,7 @@ void XYChartItem::handleDomainChanged(qreal minX, qreal maxX, qreal minY, qreal if(isEmpty()) return; QVector points = calculateGeometryPoints(); - applyLayout(points); + updateLayout(m_points,points); update(); } @@ -141,7 +137,7 @@ void XYChartItem::handleGeometryChanged(const QRectF& rect) if(isEmpty()) return; QVector points = calculateGeometryPoints(); - applyLayout(points); + updateLayout(m_points,points); update(); } diff --git a/src/xychart/xychartitem_p.h b/src/xychart/xychartitem_p.h index a156705..bb83d74 100644 --- a/src/xychart/xychartitem_p.h +++ b/src/xychart/xychartitem_p.h @@ -32,6 +32,7 @@ signals: protected: virtual void setLayout(QVector& points); + virtual void updateLayout(QVector& oldPoints,QVector& newPoints,int index = 0); QPointF calculateGeometryPoint(const QPointF& point) const; QPointF calculateGeometryPoint(int index) const; QPointF calculateDomainPoint(const QPointF& point) const; @@ -39,8 +40,6 @@ protected: void mousePressEvent( QGraphicsSceneMouseEvent * event ); private: - void applyLayout(QVector& points); - void updateLayout(QVector& points); inline bool isEmpty(); private: