Example #1
0
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();
    }
}