JAL-3541 selectively merged build.gradle and gradle.properties
[jalview.git] / srcjar / fr / orsay / lri / varna / applications / templateEditor / TemplateEdits.java
diff --git a/srcjar/fr/orsay/lri/varna/applications/templateEditor/TemplateEdits.java b/srcjar/fr/orsay/lri/varna/applications/templateEditor/TemplateEdits.java
new file mode 100644 (file)
index 0000000..d086989
--- /dev/null
@@ -0,0 +1,174 @@
+package fr.orsay.lri.varna.applications.templateEditor;
+
+import java.awt.geom.Point2D;
+
+import javax.swing.undo.AbstractUndoableEdit;
+import javax.swing.undo.CannotRedoException;
+import javax.swing.undo.CannotUndoException;
+import javax.swing.undo.UndoableEdit;
+
+public class TemplateEdits {
+       public static final double MAX_DISTANCE= 15.0;
+               
+       public static  class ElementAddTemplateEdit extends AbstractUndoableEdit
+       {
+               private GraphicalTemplateElement _h;
+               private TemplatePanel _p;
+               public ElementAddTemplateEdit(GraphicalTemplateElement h,TemplatePanel p)
+               {
+                       _h = h;
+                       _p = p;
+               }
+               public void undo() throws CannotUndoException {
+                       _p.removeElement(_h);
+                       _p.repaint();                   
+               }
+               public void redo() throws CannotRedoException {
+                       _p.addElement(_h);
+                       _p.repaint();
+               }
+               public boolean canUndo() { return true; }
+               public boolean canRedo() { return true; }
+               public String getPresentationName() { return "Graphical element added"; }
+       };
+       public static  class ElementRemoveTemplateEdit extends AbstractUndoableEdit
+       {
+               private GraphicalTemplateElement _h;
+               private TemplatePanel _p;
+               public ElementRemoveTemplateEdit(GraphicalTemplateElement h,TemplatePanel p)
+               {
+                       _h = h;
+                       _p = p;
+               }
+               public void undo() throws CannotUndoException {
+                       _p.addElement(_h);
+                       _p.repaint();                   
+               }
+               public void redo() throws CannotRedoException {
+                       _p.removeElement(_h);
+                       _p.repaint();
+               }
+               public boolean canUndo() { return true; }
+               public boolean canRedo() { return true; }
+               public String getPresentationName() { return "Graphical element removed"; }
+       };
+       public static  class ElementAttachTemplateEdit extends AbstractUndoableEdit
+       {
+               Connection _c;
+               private TemplatePanel _p;
+               public ElementAttachTemplateEdit(Connection c,
+                               TemplatePanel p)
+               {
+                       _c = c;
+                       _p = p;
+               }
+               public void undo() throws CannotUndoException {
+                       _p.removeConnection(_c);
+                       _p.repaint();                   
+               }
+               public void redo() throws CannotRedoException {
+                       _c = _p.addConnection(_c._h1,_c._edge1,_c._h2,_c._edge2);
+                       _p.repaint();
+               }
+               public boolean canUndo() { return true; }
+               public boolean canRedo() { return true; }
+               public String getPresentationName() { return "Graphical elements attached"; }
+       };
+       public static  class ElementDetachTemplateEdit extends AbstractUndoableEdit
+       {
+               Connection _c;
+               private TemplatePanel _p;
+               public ElementDetachTemplateEdit(Connection c,
+                               TemplatePanel p)
+               {
+                       _c = c;
+                       _p = p;
+               }
+               public void undo() throws CannotUndoException {
+                       _c = _p.addConnection(_c._h1,_c._edge1,_c._h2,_c._edge2);
+                       _p.repaint();                   
+               }
+               public void redo() throws CannotRedoException {
+                       _p.removeConnection(_c);
+                       _p.repaint();
+               }
+               public boolean canUndo() { return true; }
+               public boolean canRedo() { return true; }
+               public String getPresentationName() { return "Graphical elements detached"; }
+       };
+       
+       public static  class ElementEdgeMoveTemplateEdit extends AbstractUndoableEdit
+       {
+               private GraphicalTemplateElement _ur;
+               GraphicalTemplateElement.RelativePosition _edge;
+               private double _ox; 
+               private double _oy;
+               private double _nx; 
+               private double _ny;
+               private TemplatePanel _p;
+               public ElementEdgeMoveTemplateEdit(GraphicalTemplateElement ur, GraphicalTemplateElement.RelativePosition edge, double nx, double ny, TemplatePanel p)
+               {
+                       _ur = ur;
+                       _edge = edge;
+                       _ox = ur.getEdgePosition(edge).x;
+                       _oy = ur.getEdgePosition(edge).y;
+                       _nx = nx;
+                       _ny = ny;
+                       _p = p;
+               }
+               public void undo() throws CannotUndoException {
+                       _ur.setEdgePosition(_edge,new Point2D.Double(_ox,_oy));
+                       _p.repaint();                   
+               }
+               public void redo() throws CannotRedoException {
+                       _ur.setEdgePosition(_edge,new Point2D.Double(_nx,_ny));
+                       _p.repaint();
+               }
+               public boolean canUndo() { return true; }
+               public boolean canRedo() { return true; }
+               public String getPresentationName() { return "Edge moved "+_edge; }
+               public boolean addEdit(UndoableEdit anEdit)
+               {
+                       if (anEdit instanceof ElementEdgeMoveTemplateEdit)
+                       {
+                               ElementEdgeMoveTemplateEdit e = (ElementEdgeMoveTemplateEdit) anEdit;
+                               if (e._edge==_edge)
+                               {
+                                       Point2D.Double po1 = new Point2D.Double(_ox,_oy);
+                                       Point2D.Double pn1 = new Point2D.Double(_nx,_ny);
+                                       Point2D.Double po2 = new Point2D.Double(e._ox,e._oy);
+                                       Point2D.Double pn2 = new Point2D.Double(e._nx,e._ny);
+                                       if ((_ur==e._ur)&&(pn1.equals(po2))&&(po1.distance(pn2)<MAX_DISTANCE))
+                                       {
+                                               _nx = e._nx;
+                                               _ny = e._ny;
+                                               return true;
+                                       }
+                               }
+                       }
+                       return false;
+               }
+       };
+       public static  class HelixFlipTemplateEdit extends AbstractUndoableEdit
+       {
+               private Helix _h;
+               private TemplatePanel _p;
+               public HelixFlipTemplateEdit(Helix h, TemplatePanel p)
+               {
+                       _h = h;
+                       _p = p;
+               }
+               public void undo() throws CannotUndoException {
+                       _h.toggleFlipped();
+                       _p.repaint();                   
+               }
+               public void redo() throws CannotRedoException {
+                       _h.toggleFlipped();
+                       _p.repaint();
+               }
+               public boolean canUndo() { return true; }
+               public boolean canRedo() { return true; }
+               public String getPresentationName() { return "Helix flipped "; }
+       };
+       
+}