Merge branch 'develop' into JAL-1483_featureBasedTreeCalc
[jalview.git] / src / jalview / gui / AlignmentPanel.java
index 1bc4ba7..47d6309 100644 (file)
  */
 package jalview.gui;
 
-import java.beans.*;
-import java.io.*;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.awt.print.*;
-import javax.swing.*;
-
+import jalview.analysis.AnnotationSorter;
 import jalview.api.AlignmentViewPanel;
 import jalview.bin.Cache;
-import jalview.datamodel.*;
-import jalview.jbgui.*;
-import jalview.schemes.*;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SearchResults;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceGroup;
+import jalview.datamodel.SequenceI;
+import jalview.jbgui.GAlignmentPanel;
+import jalview.schemes.ResidueProperties;
 import jalview.structure.StructureSelectionManager;
+import jalview.util.MessageManager;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.event.AdjustmentEvent;
+import java.awt.event.AdjustmentListener;
+import java.awt.print.PageFormat;
+import java.awt.print.Printable;
+import java.awt.print.PrinterException;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+
+import javax.swing.SwingUtilities;
 
 /**
  * DOCUMENT ME!
@@ -178,7 +196,7 @@ public class AlignmentPanel extends GAlignmentPanel implements
 
     int afwidth = (alignFrame != null ? alignFrame.getWidth() : 300);
     int maxwidth = Math.max(20,
-            Math.min(afwidth - 200, (int) 2 * afwidth / 3));
+            Math.min(afwidth - 200, 2 * afwidth / 3));
     return calculateIdWidth(maxwidth);
   }
 
@@ -717,8 +735,17 @@ public class AlignmentPanel extends GAlignmentPanel implements
     }
   }
 
+  /**
+   * Repaint the alignment including the annotations and overview panels (if
+   * shown).
+   */
   public void paintAlignment(boolean updateOverview)
   {
+    final AnnotationSorter sorter = new AnnotationSorter(getAlignment(),
+            av.isShowAutocalculatedAbove());
+    sorter.sort(getAlignment()
+            .getAlignmentAnnotation(),
+            av.getSortAnnotationsBy());
     repaint();
 
     if (updateOverview)
@@ -840,7 +867,7 @@ public class AlignmentPanel extends GAlignmentPanel implements
     // / How many sequences and residues can we fit on a printable page?
     int totalRes = (pwidth - idWidth) / av.getCharWidth();
 
-    int totalSeq = (int) ((pheight - scaleHeight) / av.getCharHeight()) - 1;
+    int totalSeq = (pheight - scaleHeight) / av.getCharHeight() - 1;
 
     int pagesWide = (av.getAlignment().getWidth() / totalRes) + 1;
 
@@ -953,10 +980,10 @@ public class AlignmentPanel extends GAlignmentPanel implements
       int offset = -alabels.scrollOffset;
       pg.translate(0, offset);
       pg.translate(-idWidth - 3, (endSeq - startSeq) * av.charHeight + 3);
-      alabels.drawComponent((Graphics2D) pg, idWidth);
+      alabels.drawComponent(pg, idWidth);
       pg.translate(idWidth + 3, 0);
       annotationPanel.renderer.drawComponent(annotationPanel, av,
-              (Graphics2D) pg, -1, startRes, endRes + 1);
+              pg, -1, startRes, endRes + 1);
       pg.translate(0, -offset);
     }
 
@@ -1112,16 +1139,17 @@ public class AlignmentPanel extends GAlignmentPanel implements
     return idwidth.intValue() + 4;
   }
 
-  void makeAlignmentImage(int type, File file)
+  void makeAlignmentImage(jalview.util.ImageMaker.TYPE type, File file)
   {
     long progress = System.currentTimeMillis();
     boolean headless = (System.getProperty("java.awt.headless") != null && System
             .getProperty("java.awt.headless").equals("true"));
     if (alignFrame != null && !headless)
     {
-      alignFrame.setProgressBar("Saving "
-              + (type == jalview.util.ImageMaker.PNG ? "PNG image"
-                      : "EPS file"), progress);
+      alignFrame.setProgressBar(MessageManager.formatMessage(
+              "status.saving_file",
+              new String[]
+              { type.getLabel() }), progress);
     }
     try
     {
@@ -1165,16 +1193,22 @@ public class AlignmentPanel extends GAlignmentPanel implements
 
         jalview.util.ImageMaker im;
         final String imageAction, imageTitle;
-        if (type == jalview.util.ImageMaker.PNG)
+        if (type == jalview.util.ImageMaker.TYPE.PNG)
         {
           imageAction = "Create PNG image from alignment";
           imageTitle = null;
         }
-        else
+        else if (type == jalview.util.ImageMaker.TYPE.EPS)
         {
           imageAction = "Create EPS file from alignment";
           imageTitle = alignFrame.getTitle();
         }
+        else
+        {
+          imageAction = "Create SVG file from alignment";
+          imageTitle = alignFrame.getTitle();
+        }
+
         im = new jalview.util.ImageMaker(this, type, imageAction, width,
                 height, file, imageTitle);
         if (av.getWrapAlignment())
@@ -1208,7 +1242,7 @@ public class AlignmentPanel extends GAlignmentPanel implements
     {
       if (alignFrame != null && !headless)
       {
-        alignFrame.setProgressBar("Export complete.", progress);
+        alignFrame.setProgressBar(MessageManager.getString("status.export_complete"), progress);
       }
     }
   }
@@ -1218,7 +1252,7 @@ public class AlignmentPanel extends GAlignmentPanel implements
    */
   public void makeEPS(File epsFile)
   {
-    makeAlignmentImage(jalview.util.ImageMaker.EPS, epsFile);
+    makeAlignmentImage(jalview.util.ImageMaker.TYPE.EPS, epsFile);
   }
 
   /**
@@ -1226,9 +1260,13 @@ public class AlignmentPanel extends GAlignmentPanel implements
    */
   public void makePNG(File pngFile)
   {
-    makeAlignmentImage(jalview.util.ImageMaker.PNG, pngFile);
+    makeAlignmentImage(jalview.util.ImageMaker.TYPE.PNG, pngFile);
   }
 
+  public void makeSVG(File svgFile)
+  {
+    makeAlignmentImage(jalview.util.ImageMaker.TYPE.SVG, svgFile);
+  }
   public void makePNGImageMap(File imgMapFile, String imageName)
   {
     // /////ONLY WORKS WITH NONE WRAPPED ALIGNMENTS