1 package fr.orsay.lri.varna.applications.templateEditor;
3 import java.awt.geom.Point2D;
5 import javax.swing.undo.AbstractUndoableEdit;
6 import javax.swing.undo.CannotRedoException;
7 import javax.swing.undo.CannotUndoException;
8 import javax.swing.undo.UndoableEdit;
10 public class TemplateEdits {
11 public static final double MAX_DISTANCE= 15.0;
13 public static class ElementAddTemplateEdit extends AbstractUndoableEdit
15 private GraphicalTemplateElement _h;
16 private TemplatePanel _p;
17 public ElementAddTemplateEdit(GraphicalTemplateElement h,TemplatePanel p)
22 public void undo() throws CannotUndoException {
26 public void redo() throws CannotRedoException {
30 public boolean canUndo() { return true; }
31 public boolean canRedo() { return true; }
32 public String getPresentationName() { return "Graphical element added"; }
34 public static class ElementRemoveTemplateEdit extends AbstractUndoableEdit
36 private GraphicalTemplateElement _h;
37 private TemplatePanel _p;
38 public ElementRemoveTemplateEdit(GraphicalTemplateElement h,TemplatePanel p)
43 public void undo() throws CannotUndoException {
47 public void redo() throws CannotRedoException {
51 public boolean canUndo() { return true; }
52 public boolean canRedo() { return true; }
53 public String getPresentationName() { return "Graphical element removed"; }
55 public static class ElementAttachTemplateEdit extends AbstractUndoableEdit
58 private TemplatePanel _p;
59 public ElementAttachTemplateEdit(Connection c,
65 public void undo() throws CannotUndoException {
66 _p.removeConnection(_c);
69 public void redo() throws CannotRedoException {
70 _c = _p.addConnection(_c._h1,_c._edge1,_c._h2,_c._edge2);
73 public boolean canUndo() { return true; }
74 public boolean canRedo() { return true; }
75 public String getPresentationName() { return "Graphical elements attached"; }
77 public static class ElementDetachTemplateEdit extends AbstractUndoableEdit
80 private TemplatePanel _p;
81 public ElementDetachTemplateEdit(Connection c,
87 public void undo() throws CannotUndoException {
88 _c = _p.addConnection(_c._h1,_c._edge1,_c._h2,_c._edge2);
91 public void redo() throws CannotRedoException {
92 _p.removeConnection(_c);
95 public boolean canUndo() { return true; }
96 public boolean canRedo() { return true; }
97 public String getPresentationName() { return "Graphical elements detached"; }
100 public static class ElementEdgeMoveTemplateEdit extends AbstractUndoableEdit
102 private GraphicalTemplateElement _ur;
103 GraphicalTemplateElement.RelativePosition _edge;
108 private TemplatePanel _p;
109 public ElementEdgeMoveTemplateEdit(GraphicalTemplateElement ur, GraphicalTemplateElement.RelativePosition edge, double nx, double ny, TemplatePanel p)
113 _ox = ur.getEdgePosition(edge).x;
114 _oy = ur.getEdgePosition(edge).y;
119 public void undo() throws CannotUndoException {
120 _ur.setEdgePosition(_edge,new Point2D.Double(_ox,_oy));
123 public void redo() throws CannotRedoException {
124 _ur.setEdgePosition(_edge,new Point2D.Double(_nx,_ny));
127 public boolean canUndo() { return true; }
128 public boolean canRedo() { return true; }
129 public String getPresentationName() { return "Edge moved "+_edge; }
130 public boolean addEdit(UndoableEdit anEdit)
132 if (anEdit instanceof ElementEdgeMoveTemplateEdit)
134 ElementEdgeMoveTemplateEdit e = (ElementEdgeMoveTemplateEdit) anEdit;
137 Point2D.Double po1 = new Point2D.Double(_ox,_oy);
138 Point2D.Double pn1 = new Point2D.Double(_nx,_ny);
139 Point2D.Double po2 = new Point2D.Double(e._ox,e._oy);
140 Point2D.Double pn2 = new Point2D.Double(e._nx,e._ny);
141 if ((_ur==e._ur)&&(pn1.equals(po2))&&(po1.distance(pn2)<MAX_DISTANCE))
152 public static class HelixFlipTemplateEdit extends AbstractUndoableEdit
155 private TemplatePanel _p;
156 public HelixFlipTemplateEdit(Helix h, TemplatePanel p)
161 public void undo() throws CannotUndoException {
165 public void redo() throws CannotRedoException {
169 public boolean canUndo() { return true; }
170 public boolean canRedo() { return true; }
171 public String getPresentationName() { return "Helix flipped "; }