1 6 7 package com.thoughtriver.open.vectorvisuals.meta.arranger; 8 9 import java.awt.geom.*; 10 import java.util.*; 11 12 import com.thoughtriver.open.vectorvisuals.*; 13 import com.thoughtriver.open.vectorvisuals.task.*; 14 15 26 public abstract class Arranger { 27 28 29 private final List<VisualObject> objects = Collections.synchronizedList(new LinkedList<VisualObject>()); 30 31 32 private final Map<VisualObject, AffineTransform> unarrangedPositions = new HashMap<VisualObject, AffineTransform>(); 33 34 35 private boolean animationEnabled = false; 36 37 42 public void add(final VisualObject obj) { 43 objects.add(obj); 44 unarrangedPositions.put(obj, obj.getTransform()); 45 } 46 47 53 public void remove(final VisualObject obj) { 54 unarrangedPositions.remove(obj); 55 objects.remove(obj); 56 } 57 58 66 public List<VisualObject> getObjects() { 67 return objects; 68 } 69 70 76 public void setAnimationEnabled(final boolean enabled) { 77 animationEnabled = enabled; 78 } 79 80 87 public boolean isAnimationEnabled() { 88 return animationEnabled; 89 } 90 91 97 public void arrange() { 98 99 Map<VisualObject, AffineTransform> positions = getArrangedPositions(); 100 101 for (VisualObject obj : getObjects()) { 103 AffineTransform position = positions.get(obj); 104 VVDisplay vvDisplay = obj.getDisplay(); 105 if (vvDisplay != null) { 106 TaskManager taskManager = vvDisplay.getTaskManager(); 107 if (taskManager != null) { 108 if (isAnimationEnabled()) { 109 vvDisplay.getTaskManager().addTask(new TranslationTask(obj, position.getTranslateX(), position.getTranslateY(), 2000)); 110 continue; 111 } 112 } 113 } 114 115 obj.setTransform(position); 117 } 118 119 } 120 121 126 public void unarrange() { 127 for (VisualObject obj : getObjects()) { 128 AffineTransform position = unarrangedPositions.get(obj); 129 obj.setTransform(position); 130 } 131 } 132 133 141 abstract protected Map<VisualObject, AffineTransform> getArrangedPositions(); 142 } 143 | Popular Tags |