package org.jboss.tools.smooks.gef.tree.figures; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Point; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.GraphicalEditPart; public class GraphAnimation { private int minsteplegth = 30; private int maxstep = 50; private Map<GraphicalEditPart, Rectangle> initMap = new HashMap<GraphicalEditPart, Rectangle>(); private Map<GraphicalEditPart, Rectangle> finalMap = new HashMap<GraphicalEditPart, Rectangle>(); public void recordInit(GraphicalEditPart editpart) { initMap.put(editpart, editpart.getFigure().getBounds()); } public void recordFinal(GraphicalEditPart editpart, Rectangle rectangle) { finalMap.put(editpart, rectangle); } public void start(List<GraphicalEditPart> figureList) { // if(true) return; Map<IFigure, Integer> ystepmap = new HashMap<IFigure, Integer>(); Map<IFigure, Integer> xstepmap = new HashMap<IFigure, Integer>(); for (Iterator<?> iterator = figureList.iterator(); iterator.hasNext();) { GraphicalEditPart editPart = (GraphicalEditPart) iterator.next(); IFigure figure = editPart.getFigure(); Rectangle rect = initMap.get(editPart); int initx = rect.x; int inity = rect.y; Rectangle rect1 = finalMap.get(editPart); int finalx = rect1.x; int finaly = rect1.y; int chax = finalx - initx; // if(Math.abs(chax) < minsteplegth){ // chax = minsteplegth; // } int xstep = minsteplegth; if (chax < 0) xstep = -xstep; if (Math.abs(chax / minsteplegth) > maxstep) { // xstep = chax / maxstep; } int chay = finaly - inity; int ystep = minsteplegth; if (chay < 0) ystep = -ystep; if (Math.abs(chay / minsteplegth) > maxstep) { // ystep = chay / maxstep; } ystepmap.put(figure, ystep); xstepmap.put(figure, xstep); } int allfigure = 0; List<GraphicalEditPart> processedParts = new ArrayList<GraphicalEditPart>(); while (figureList.size() > allfigure) { for (Iterator<?> iterator = figureList.iterator(); iterator.hasNext();) { GraphicalEditPart editPart = (GraphicalEditPart) iterator.next(); if (processedParts.contains(editPart)) { continue; } IFigure figure = editPart.getFigure(); Rectangle rect = figure.getBounds(); int initx = rect.x; int inity = rect.y; Rectangle rect1 = finalMap.get(editPart); int finalx = rect1.x; int finaly = rect1.y; int xstep = xstepmap.get(figure); int ystep = ystepmap.get(figure); int x = initx + xstep; int y = inity + ystep; if (initx != finalx) { if (Math.abs(x - finalx) <= minsteplegth) { initx = finalx; } else { initx = x; } } if (inity != finaly) { if (Math.abs(y - finaly) <= minsteplegth) { inity = finaly; } else { inity = y; } } if (initx == finalx && inity == finaly) { processedParts.add(editPart); allfigure++; } Point location = new Point(initx, inity); Dimension size = figure.getPreferredSize(); figure.setLocation(new Point(initx, inity)); figure.getUpdateManager().performUpdate(); try { ((GraphicalEditPart) editPart.getParent()).setLayoutConstraint(editPart, figure, new Rectangle( location, size)); } catch (Exception e) { e.printStackTrace(); } } try { Thread.sleep(20); Thread.yield(); } catch (InterruptedException e) { e.printStackTrace(); } } } }