JAL-3026 srcjar files for VARNA and log4j
[jalview.git] / srcjar / fr / orsay / lri / varna / applications / templateEditor / TemplateEditorPanelUI.java
diff --git a/srcjar/fr/orsay/lri/varna/applications/templateEditor/TemplateEditorPanelUI.java b/srcjar/fr/orsay/lri/varna/applications/templateEditor/TemplateEditorPanelUI.java
new file mode 100644 (file)
index 0000000..9a7725e
--- /dev/null
@@ -0,0 +1,112 @@
+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;
+       private Tool selectedTool = Tool.CREATE_HELIX;
+       
+
+
+       public enum Tool {
+               SELECT, CREATE_HELIX, CREATE_UNPAIRED
+       }
+
+       public TemplateEditorPanelUI(TemplatePanel tp)
+       {
+               _tp = tp;
+                _undoableEditSupport = new UndoableEditSupport(tp);
+       }
+       
+       public Tool getSelectedTool() {
+               return selectedTool;
+       }
+
+       public void setSelectedTool(Tool selectedTool) {
+               this.selectedTool = selectedTool;
+       }
+       
+       /* 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 moveUnpairedUI(UnpairedRegion u, double nx, double ny)
+       { undoableEdgeMove(u,GraphicalTemplateElement.RelativePosition.RP_INNER_MOVE, 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();
+       }
+       
+       
+}