package org.ucam.ned.foxtrot.engine.renderer.transitions; import java.util.List; /** * Slides that are using this transition effect slide in from the right of the * screen covering the previously displayed one. */ public class SlideTransition implements TransitionEffect { private QTimer m_timer; private List m_oldItems; private List m_newItems; private QGraphicsView m_view; private int translateX = 0; public SlideTransition() { m_timer = new QTimer(m_view); m_timer.timeout.connect(this, "translate()"); } public void animate(QGraphicsView view, List newItems) { m_newItems = newItems; m_oldItems = view.scene().items(); m_view = view; Iterator i = m_newItems.iterator(); FoxtrotItem item; // Add new items with offset -SCREEN_WIDTH while (i.hasNext()) { item = (FoxtrotItem) i.next(); item.moveBy(-1 * Globals.SCREEN_WIDTH, 0); view.scene().addItem(item); } m_timer.start(1); } public void translate() { if (translateX >= Globals.SCREEN_WIDTH) { removeOldItems(); m_timer.dispose(); return; } int stepValue = 15; if (Globals.SCREEN_WIDTH - translateX < stepValue) stepValue = Globals.SCREEN_WIDTH - translateX; Iterator i; i = m_view.scene().items().iterator(); FoxtrotItem item; while (i.hasNext()) { item = (FoxtrotItem)i.next(); item.moveBy(stepValue, 0); } translateX += stepValue; } public void removeOldItems() { Iterator i; i = m_oldItems.iterator(); while (i.hasNext()) { m_view.scene().removeItem((QGraphicsItemInterface) i.next()); } } }