JAL-2381 copy and paste sequence also copies contact matrix annotation
[jalview.git] / src / jalview / gui / AlignFrame.java
index 2d02e79..48927bb 100644 (file)
@@ -112,6 +112,7 @@ import jalview.datamodel.AlignmentI;
 import jalview.datamodel.AlignmentOrder;
 import jalview.datamodel.AlignmentView;
 import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.ContactMatrixI;
 import jalview.datamodel.HiddenColumns;
 import jalview.datamodel.PDBEntry;
 import jalview.datamodel.SeqCigar;
@@ -1480,7 +1481,14 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   @Override
   public void createPNG(File f)
   {
-    alignPanel.makeAlignmentImage(TYPE.PNG, f);
+    createPNG(f, null, 0.0f, 0, 0);
+  }
+
+  public void createPNG(File f, String renderer, float bitmapscale,
+          int bitmapwidth, int bitmapheight)
+  {
+    alignPanel.makeAlignmentImage(TYPE.PNG, f, renderer, bitmapscale,
+            bitmapwidth, bitmapheight);
   }
 
   /**
@@ -1492,7 +1500,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   @Override
   public void createEPS(File f)
   {
-    alignPanel.makeAlignmentImage(TYPE.EPS, f);
+    createEPS(f, null);
+  }
+
+  public void createEPS(File f, String renderer)
+  {
+    alignPanel.makeAlignmentImage(TYPE.EPS, f, renderer);
   }
 
   /**
@@ -1504,7 +1517,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   @Override
   public void createSVG(File f)
   {
-    alignPanel.makeAlignmentImage(TYPE.SVG, f);
+    createSVG(f, null);
+  }
+
+  public void createSVG(File f, String renderer)
+  {
+    alignPanel.makeAlignmentImage(TYPE.SVG, f, renderer);
   }
 
   @Override
@@ -2286,10 +2304,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                         .intValue();
               }
             }
-            alignment.addAnnotation(sequences[i].getAnnotation()[a]); // annotation
-            // was
-            // duplicated
-            // earlier
+            // annotation was duplicated earlier
+            alignment.addAnnotation(sequences[i].getAnnotation()[a]);
+            // take care of contact matrix too
+            ContactMatrixI cm=sequences[i].getContactMatrixFor(sequences[i].getAnnotation()[a]);
+            if (cm!=null)
+            {
+              alignment.addContactListFor(sequences[i].getAnnotation()[a], cm);
+            }
+            
             alignment.setAnnotationIndex(sequences[i].getAnnotation()[a],
                     a);
           }
@@ -3440,8 +3463,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   @Override
   public void overviewMenuItem_actionPerformed(ActionEvent e)
   {
-    boolean showHiddenRegions = Cache.getDefault(Preferences.SHOW_OV_HIDDEN_AT_START,
-                false);
+    boolean showHiddenRegions = Cache
+            .getDefault(Preferences.SHOW_OV_HIDDEN_AT_START, false);
     openOverviewPanel(showHiddenRegions);
   }
 
@@ -3452,14 +3475,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       return alignPanel.overviewPanel;
     }
     JInternalFrame frame = new JInternalFrame();
-    final OverviewPanel overview = new OverviewPanel(alignPanel, frame, showHidden);
+    final OverviewPanel overview = new OverviewPanel(alignPanel, frame,
+            showHidden);
     frame.setContentPane(overview);
-    Desktop.addInternalFrame(frame, "", true, frame.getWidth(), frame.getHeight(),
-            true, true);
+    Desktop.addInternalFrame(frame, "", true, frame.getWidth(),
+            frame.getHeight(), true, true);
     frame.setFrameIcon(null);
     frame.pack();
     frame.setLayer(JLayeredPane.PALETTE_LAYER);
-    final AlignmentPanel thePanel = this.alignPanel; 
+    final AlignmentPanel thePanel = this.alignPanel;
     frame.addInternalFrameListener(
             new javax.swing.event.InternalFrameAdapter()
             {
@@ -3478,7 +3502,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
     alignPanel.setOverviewPanel(overview);
     alignPanel.setOverviewTitle(this);
-    
+
     return overview;
   }
 
@@ -4133,7 +4157,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     return showNewickTree(nf, treeTitle, null, w, h, x, y);
   }
 
-
   /**
    * Add a treeviewer for the tree extracted from a Newick file object to the
    * current alignment view
@@ -4184,56 +4207,58 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     return tp;
   }
 
-
   public void showContactMapTree(AlignmentAnnotation aa,
-          PAEContactMatrix cm)
+          ContactMatrixI cm)
   {
     int x = 4, y = 5;
     int w = 400, h = 500;
-    
+
     try
     {
       NewickFile fin = new NewickFile(
               new FileParse(cm.getNewick(), DataSourceType.PASTE));
-      String title = "PAE Matrix Tree for "
-              + cm.getReferenceSeq().getDisplayId(false);
+      String title = cm.getAnnotLabel() + " " + cm.getTreeMethod() + " tree"
+              + aa.sequenceRef != null
+                      ? (" for " + aa.sequenceRef.getDisplayId(false))
+                      : "";
 
-      showColumnWiseTree(fin, aa, title, w,h, x,y);
+      showColumnWiseTree(fin, aa, title, w, h, x, y);
     } catch (Throwable xx)
     {
       Console.error("Unexpected exception showing tree for contact matrix",
               xx);
     }
   }
-  public TreePanel showColumnWiseTree(NewickFile nf, AlignmentAnnotation aa, String treeTitle,
-           int w, int h, int x, int y)
+
+  public TreePanel showColumnWiseTree(NewickFile nf, AlignmentAnnotation aa,
+          String treeTitle, int w, int h, int x, int y)
   {
-      try
+    try
+    {
+      nf.parse();
+      if (nf.getTree() == null)
       {
-        nf.parse();
-        if (nf.getTree() == null)
-        {
-          return null;
-        }
-        TreePanel tp = new TreePanel(alignPanel, nf, aa, title);
-
-        tp.setSize(w, h);
+        return null;
+      }
+      TreePanel tp = new TreePanel(alignPanel, nf, aa, title);
 
-        if (x > 0 && y > 0)
-        {
-          tp.setLocation(x, y);
-        }
+      tp.setSize(w, h);
 
-        Desktop.addInternalFrame(tp, title, w, h);
-        return tp;
-      } catch (Throwable xx)
+      if (x > 0 && y > 0)
       {
-        Console.error("Unexpected exception showing tree for contact matrix",
-                xx);
+        tp.setLocation(x, y);
       }
-      return null;
+
+      Desktop.addInternalFrame(tp, title, w, h);
+      return tp;
+    } catch (Throwable xx)
+    {
+      Console.error("Unexpected exception showing tree for contact matrix",
+              xx);
+    }
+    return null;
   }
-  
+
   private boolean buildingMenu = false;
 
   /**
@@ -5027,7 +5052,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
        * to add view name "Original" if necessary
        */
       alignPanel.setOverviewTitle(this);
-      
+
       /*
        * switch panels and set Overview title (if there is one
        * because it was opened automatically)
@@ -5698,7 +5723,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
    *          update non-sequence-related annotations
    */
   @Override
-  protected void setAnnotationsVisibility(boolean visible,
+  public void setAnnotationsVisibility(boolean visible,
           boolean forSequences, boolean forAlignment)
   {
     AlignmentAnnotation[] anns = alignPanel.getAlignment()