Merge branch 'docs/2_8_1_Release' into Release_2_8_1_Branch
[jalview.git] / src / jalview / appletgui / AnnotationPanel.java
index 45a5f1e..a343bcf 100755 (executable)
@@ -1,19 +1,20 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
- * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
- *
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.1)
+ * Copyright (C) 2014 The Jalview Authors
+ * 
  * This file is part of Jalview.
- *
+ * 
  * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
+ * modify it under the terms of the GNU General Public License 
  * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
- *
- * Jalview is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
  * PURPOSE.  See the GNU General Public License for more details.
- *
+ * 
  * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.appletgui;
 
@@ -21,14 +22,15 @@ import java.util.*;
 
 import java.awt.*;
 import java.awt.event.*;
-import java.awt.image.BufferedImage;
 
 import jalview.datamodel.*;
 import jalview.renderer.AnnotationRenderer;
 import jalview.renderer.AwtRenderPanelI;
+import jalview.util.MessageManager;
 
-public class AnnotationPanel extends Panel implements AwtRenderPanelI, AdjustmentListener,
-        ActionListener, MouseListener, MouseMotionListener
+public class AnnotationPanel extends Panel implements AwtRenderPanelI,
+        AdjustmentListener, ActionListener, MouseListener,
+        MouseMotionListener
 {
   AlignViewport av;
 
@@ -110,7 +112,7 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, Adjustmen
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @param evt
    *          DOCUMENT ME!
    */
@@ -133,7 +135,8 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, Adjustmen
     }
 
     String label = "";
-    if (av.getColumnSelection() != null && av.getColumnSelection().size() > 0
+    if (av.getColumnSelection() != null
+            && av.getColumnSelection().size() > 0
             && anot[av.getColumnSelection().getMin()] != null)
       label = anot[av.getColumnSelection().getMin()].displayCharacter;
 
@@ -233,6 +236,10 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, Adjustmen
       if ((label.length() > 0) && !aa[activeRow].hasText)
       {
         aa[activeRow].hasText = true;
+        if (evt.getActionCommand().equals(STEM))
+        {
+          aa[activeRow].showAllColLabels=true;
+        }
       }
 
       for (int i = 0; i < av.getColumnSelection().size(); i++)
@@ -252,10 +259,10 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, Adjustmen
       }
     }
 
-    aa[activeRow].validateRangeAndDisplay();
+    av.getAlignment().validateAnnotation(aa[activeRow]);
 
-    adjustPanelHeight();
     ap.alignmentChanged();
+    adjustPanelHeight();
     repaint();
 
     return;
@@ -316,7 +323,7 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, Adjustmen
         return;
       }
 
-      PopupMenu pop = new PopupMenu("Structure type");
+      PopupMenu pop = new PopupMenu(MessageManager.getString("label.structure_type"));
       MenuItem item;
       /*
        * Just display the needed structure options
@@ -326,7 +333,9 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, Adjustmen
         item = new MenuItem(STEM);
         item.addActionListener(this);
         pop.add(item);
-      } else {
+      }
+      else
+      {
         item = new MenuItem(HELIX);
         item.addActionListener(this);
         pop.add(item);
@@ -472,9 +481,11 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, Adjustmen
     }
     return height;
   }
+
   /**
-   * calculate the height for visible annotation, revalidating bounds where necessary
-   * ABSTRACT GUI METHOD
+   * calculate the height for visible annotation, revalidating bounds where
+   * necessary ABSTRACT GUI METHOD
+   * 
    * @return total height of annotation
    */
 
@@ -520,11 +531,12 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, Adjustmen
     Dimension d = getSize();
     imgWidth = d.width;
     // (av.endRes - av.startRes + 1) * av.charWidth;
-    if (imgWidth<1 || d.height<1)
+    if (imgWidth < 1 || d.height < 1)
     {
       return;
     }
-    if (image == null || imgWidth != image.getWidth(this) || d.height != image.getHeight(this))
+    if (image == null || imgWidth != image.getWidth(this)
+            || d.height != image.getHeight(this))
     {
       image = createImage(imgWidth, d.height);
       gg = image.getGraphics();
@@ -549,7 +561,8 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, Adjustmen
 
   public void fastPaint(int horizontal)
   {
-    if (horizontal == 0 || av.getAlignment().getAlignmentAnnotation() == null
+    if (horizontal == 0
+            || av.getAlignment().getAlignmentAnnotation() == null
             || av.getAlignment().getAlignmentAnnotation().length < 1)
     {
       repaint();
@@ -582,7 +595,7 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, Adjustmen
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @param g
    *          DOCUMENT ME!
    * @param startRes
@@ -611,7 +624,7 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, Adjustmen
       g.setColor(Color.black);
       if (av.validCharWidth)
       {
-        g.drawString("Alignment has no annotations", 20, 15);
+        g.drawString(MessageManager.getString("label.alignment_has_no_annotations"), 20, 15);
       }
 
       return;
@@ -623,10 +636,13 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, Adjustmen
 
   int scrollOffset = 0;
 
-  public void setScrollOffset(int value)
+  public void setScrollOffset(int value, boolean repaint)
   {
     scrollOffset = value;
-    repaint();
+    if (repaint)
+    {
+      repaint();
+    }
   }
 
   @Override
@@ -646,4 +662,16 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, Adjustmen
   {
     return imgWidth;
   }
+  private int[] bounds = new int[2];
+  @Override
+  public int[] getVisibleVRange()
+  {
+    if (ap!=null && ap.alabels!=null)
+    {
+    int sOffset=-ap.alabels.scrollOffset;
+    int visHeight = sOffset+ap.annotationPanelHolder.getHeight();
+    bounds[0] = sOffset; bounds[1]=visHeight;
+    return bounds;
+    } else return null;
+  }
 }