Merge develop to Release_2_8_3_Branch
[jalview.git] / src / jalview / appletgui / AlignmentPanel.java
index b2f58b9..c74914f 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2b1)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  */
 package jalview.appletgui;
 
-import jalview.api.AlignmentViewPanel;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.SearchResults;
-import jalview.datamodel.SequenceI;
-import jalview.structure.StructureSelectionManager;
-
 import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Dimension;
@@ -39,6 +33,14 @@ import java.awt.event.AdjustmentListener;
 import java.awt.event.ComponentAdapter;
 import java.awt.event.ComponentEvent;
 
+import jalview.analysis.AnnotationSorter;
+import jalview.api.AlignViewportI;
+import jalview.api.AlignmentViewPanel;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SearchResults;
+import jalview.datamodel.SequenceI;
+import jalview.structure.StructureSelectionManager;
+
 public class AlignmentPanel extends Panel implements AdjustmentListener,
         AlignmentViewPanel
 {
@@ -100,7 +102,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener,
     sequenceHolderPanel.add(annotationPanelHolder, BorderLayout.SOUTH);
     alabels = new AnnotationLabels(this);
 
-    setAnnotationVisible(av.showAnnotation);
+    setAnnotationVisible(av.isShowAnnotation());
 
     idPanelHolder.add(idPanel, BorderLayout.CENTER);
     idSpaceFillerPanel1.add(idwidthAdjuster, BorderLayout.CENTER);
@@ -153,6 +155,11 @@ public class AlignmentPanel extends Panel implements AdjustmentListener,
     });
   }
 
+  @Override
+  public AlignViewportI getAlignViewport()
+  {
+    return av;
+  }
   public SequenceRenderer getSequenceRenderer()
   {
     return seqPanel.seqCanvas.sr;
@@ -190,8 +197,9 @@ public class AlignmentPanel extends Panel implements AdjustmentListener,
     idPanel.idCanvas.image = null;
     FontMetrics fm = getFontMetrics(av.getFont());
 
-    scalePanel.setSize(new Dimension(10, av.charHeight + fm.getDescent()));
-    idwidthAdjuster.setSize(new Dimension(10, av.charHeight
+    scalePanel.setSize(new Dimension(10, av.getCharHeight()
+            + fm.getDescent()));
+    idwidthAdjuster.setSize(new Dimension(10, av.getCharHeight()
             + fm.getDescent()));
     av.updateSequenceIdColours();
     annotationPanel.image = null;
@@ -375,7 +383,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener,
     {
       start = ostart;
     }
-    if (!av.wrapAlignment)
+    if (!av.getWrapAlignment())
     {
       /*
        * int spos=av.getStartRes(),sqpos=av.getStartSeq(); if ((startv =
@@ -449,7 +457,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener,
 
   public void setAnnotationVisible(boolean b)
   {
-    if (!av.wrapAlignment)
+    if (!av.getWrapAlignment())
     {
       annotationSpaceFillerHolder.setVisible(b);
       annotationPanelHolder.setVisible(b);
@@ -473,7 +481,8 @@ public class AlignmentPanel extends Panel implements AdjustmentListener,
     // this is called after loading new annotation onto alignment
     if (alignFrame.getSize().height == 0)
     {
-      System.out.println("NEEDS FIXING");
+      System.out
+              .println("adjustAnnotationHeight frame size zero NEEDS FIXING");
     }
     fontChanged();
     validateAnnotationDimensions(true);
@@ -566,7 +575,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener,
       annotationPanelHolder.setVisible(false);
       annotationSpaceFillerHolder.setVisible(false);
     }
-    else if (av.showAnnotation)
+    else if (av.isShowAnnotation())
     {
       annotationPanelHolder.setVisible(true);
       annotationSpaceFillerHolder.setVisible(true);
@@ -648,8 +657,8 @@ public class AlignmentPanel extends Panel implements AdjustmentListener,
     }
     ;
 
-    hextent = seqPanel.seqCanvas.getSize().width / av.charWidth;
-    vextent = seqPanel.seqCanvas.getSize().height / av.charHeight;
+    hextent = seqPanel.seqCanvas.getSize().width / av.getCharWidth();
+    vextent = seqPanel.seqCanvas.getSize().height / av.getCharHeight();
 
     if (hextent > width)
     {
@@ -694,7 +703,8 @@ public class AlignmentPanel extends Panel implements AdjustmentListener,
 
     av.setEndSeq(endSeq);
     av.setStartRes(x);
-    av.setEndRes((x + (seqPanel.seqCanvas.getSize().width / av.charWidth)) - 1);
+    av.setEndRes((x + (seqPanel.seqCanvas.getSize().width / av
+            .getCharWidth())) - 1);
 
     hscroll.setValues(x, hextent, 0, width);
     vscroll.setValues(y, vextent, 0, height);
@@ -776,7 +786,7 @@ public class AlignmentPanel extends Panel implements AdjustmentListener,
       seqPanel.seqCanvas.fastPaint(scrollX, scrollY);
 
       scalePanel.repaint();
-      if (av.getShowAnnotation())
+      if (av.isShowAnnotation())
       {
         annotationPanel.fastPaint(av.getStartRes() - oldX);
       }
@@ -792,8 +802,15 @@ public class AlignmentPanel extends Panel implements AdjustmentListener,
                     av.endSeq);
   }
 
+  /**
+   * Repaint the alignment and annotations, and, optionally, any overview window
+   */
   public void paintAlignment(boolean updateOverview)
   {
+    final AnnotationSorter sorter = new AnnotationSorter(getAlignment(),
+            av.isShowAutocalculatedAbove());
+    sorter.sort(getAlignment().getAlignmentAnnotation(),
+            av.getSortAnnotationsBy());
     repaint();
 
     if (updateOverview)
@@ -847,9 +864,9 @@ public class AlignmentPanel extends Panel implements AdjustmentListener,
 
     seqPanel.seqCanvas.repaint();
     idPanel.idCanvas.repaint();
-    if (!av.wrapAlignment)
+    if (!av.getWrapAlignment())
     {
-      if (av.showAnnotation)
+      if (av.isShowAnnotation())
       {
         alabels.repaint();
         annotationPanel.repaint();