All pastes #906205 Raw Edit

Someone

public text v1 · immutable
·published 2008-02-16 13:28 UTC
rendered paste body
package org.ucam.ned.foxtrot.engine.renderer.transitions;

import java.util.List;
import java.util.Iterator;
import com.trolltech.qt.gui.QGraphicsItemInterface;
import com.trolltech.qt.gui.QGraphicsView;
import com.trolltech.qt.core.QTimer;
import org.ucam.ned.foxtrot.Globals;
import org.ucam.ned.foxtrot.engine.renderer.FoxtrotItem;

/**
 * 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<QGraphicsItemInterface> m_oldItems;
    private List<QGraphicsItemInterface> m_newItems;
    
    private QGraphicsView m_view;
	private int translateX = 0;
	
    public SlideTransition()
    {
    	m_timer = new QTimer();
    	m_timer.timeout.connect(this, "translate()");
    }

    public void animate(QGraphicsView view, List<QGraphicsItemInterface> 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.stop();
    		return;
    	}
    	
    	int stepValue = 5;
    	
    	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());
    }
}