package fr.orsay.lri.varna.applications.templateEditor; import java.awt.geom.Point2D; import javax.swing.undo.UndoManager; import javax.swing.undo.UndoableEditSupport; import fr.orsay.lri.varna.applications.templateEditor.GraphicalTemplateElement.RelativePosition; import fr.orsay.lri.varna.models.templates.RNATemplate; public class TemplateEditorPanelUI { private UndoableEditSupport _undoableEditSupport; private TemplatePanel _tp; public TemplateEditorPanelUI(TemplatePanel tp) { _tp = tp; _undoableEditSupport = new UndoableEditSupport(tp); } /* Generic undoable event firing for edge movement */ public void undoableEdgeMove(GraphicalTemplateElement h, GraphicalTemplateElement.RelativePosition edge,double nx, double ny) { _undoableEditSupport.postEdit(new TemplateEdits.ElementEdgeMoveTemplateEdit( h,edge,nx,ny,_tp)); h.setEdgePosition(edge, new Point2D.Double(nx,ny)); _tp.repaint(); } public void setEdge5UI(GraphicalTemplateElement h, double nx, double ny) { undoableEdgeMove(h,GraphicalTemplateElement.RelativePosition.RP_CONNECT_START5, nx,ny); } public void setEdge3UI(UnpairedRegion h, double nx, double ny) { undoableEdgeMove(h,GraphicalTemplateElement.RelativePosition.RP_CONNECT_END3, nx,ny); } public void setEdge5TangentUI(UnpairedRegion h, double nx, double ny) { undoableEdgeMove(h,GraphicalTemplateElement.RelativePosition.RP_EDIT_TANGENT_5, nx,ny); } public void setEdge3TangentUI(UnpairedRegion h, double nx, double ny) { undoableEdgeMove(h,GraphicalTemplateElement.RelativePosition.RP_EDIT_TANGENT_3, nx,ny); } public void moveHelixUI(Helix h, double nx, double ny) { undoableEdgeMove(h,GraphicalTemplateElement.RelativePosition.RP_INNER_MOVE, nx,ny); } public void setHelixPosUI(Helix h, double nx, double ny) { undoableEdgeMove(h,GraphicalTemplateElement.RelativePosition.RP_EDIT_START, nx,ny); } public void setHelixExtentUI(Helix h, double nx, double ny) { undoableEdgeMove(h,GraphicalTemplateElement.RelativePosition.RP_EDIT_END, nx,ny); } public void addElementUI(GraphicalTemplateElement h) { _undoableEditSupport.postEdit(new TemplateEdits.ElementAddTemplateEdit( h,_tp)); _tp.addElement(h); } public void removeElementUI(GraphicalTemplateElement h) { _undoableEditSupport.postEdit(new TemplateEdits.ElementRemoveTemplateEdit( h,_tp)); _tp.removeElement(h); } public void addUndoableEditListener(UndoManager manager) { _undoableEditSupport.addUndoableEditListener(manager); } public void addConnectionUI(GraphicalTemplateElement h1, GraphicalTemplateElement.RelativePosition e1, GraphicalTemplateElement h2, GraphicalTemplateElement.RelativePosition e2) { if (GraphicalTemplateElement.canConnect(h1, e1,h2, e2)) { Connection c = _tp.addConnection(h1,e1,h2,e2); _undoableEditSupport.postEdit(new TemplateEdits.ElementAttachTemplateEdit(c,_tp)); } } public void removeConnectionUI(Connection c) { _undoableEditSupport.postEdit(new TemplateEdits.ElementDetachTemplateEdit(c,_tp)); _tp.removeConnection(c); } public void flipHelixUI(Helix h) { _undoableEditSupport.postEdit(new TemplateEdits.HelixFlipTemplateEdit(h,_tp)); _tp.flip(h); _tp.repaint(); } public RNATemplate getTemplate() { return _tp.getTemplate(); } }