package eu.geopaparazzi.library.sketch.commands; import android.graphics.Canvas; import android.os.Handler; import android.util.Log; import java.util.Iterator; import java.util.List; import java.util.Collections; import java.util.ArrayList; /** * Created by IntelliJ IDEA. * User: almondmendoza * Date: 15/11/2010 * Time: 12:23 AM * To change this template use File | Settings | File Templates. */ public class CommandManager { private List<DrawingPath> currentStack; private List<DrawingPath> redoStack; public CommandManager(){ currentStack = Collections.synchronizedList(new ArrayList<DrawingPath>()); redoStack = Collections.synchronizedList(new ArrayList<DrawingPath>()); } public void addCommand(DrawingPath command){ redoStack.clear(); currentStack.add(command); } public void undo (){ final int length = currentStackLength(); if ( length > 0) { final DrawingPath undoCommand = currentStack.get( length - 1 ); currentStack.remove( length - 1 ); undoCommand.undo(); redoStack.add( undoCommand ); } } public int currentStackLength(){ final int length = currentStack.toArray().length; return length; } public void executeAll( Canvas canvas, Handler doneHandler){ if( currentStack != null ){ synchronized( currentStack ) { final Iterator i = currentStack.iterator(); while ( i.hasNext() ){ final DrawingPath drawingPath = (DrawingPath) i.next(); drawingPath.draw( canvas ); //doneHandler.sendEmptyMessage(1); } } } } public boolean hasMoreRedo(){ return redoStack.toArray().length > 0; } public boolean hasMoreUndo(){ return currentStack.toArray().length > 0; } public void redo(){ final int length = redoStack.toArray().length; if ( length > 0) { final DrawingPath redoCommand = redoStack.get( length - 1 ); redoStack.remove( length - 1 ); currentStack.add( redoCommand ); } } }