void KdeObservatory::switchViews(int delta) { if (m_views.count() > 0 && m_transitionTimer->state() == QTimeLine::NotRunning) { int previousView = m_currentView; int newView = m_currentView + delta; m_currentView = (newView >= 0) ? (newView % m_views.count()):(m_views.count() + newView); QGraphicsWidget *previousViewWidget = m_views.at(previousView); QGraphicsWidget *currentViewWidget = m_views.at(m_currentView); currentViewWidget->setPos(currentViewWidget->geometry().width(), 0); currentViewWidget->show(); m_transitionTimer->setFrameRange(0, 1); m_transitionTimer->setCurveShape(QTimeLine::EaseOutCurve); m_animationPrevious = new QGraphicsItemAnimation(this); m_animationPrevious->setItem(previousViewWidget); m_animationPrevious->setTimeLine(m_transitionTimer); m_animationPrevious->setPosAt(0, QPointF(0, 0)); m_animationPrevious->setPosAt(1, -delta*QPointF(previousViewWidget->geometry().width(), 0)); m_animationNew = new QGraphicsItemAnimation(this); m_animationNew->setItem(currentViewWidget); m_animationNew->setTimeLine(m_transitionTimer); m_animationNew->setPosAt(0, delta*QPointF(currentViewWidget->geometry().width(), 0)); m_animationNew->setPosAt(1, QPointF(0, 0)); m_transitionTimer->start(); } }