JAL-1640 updates to use get/setter on viewportI: efficiencies - temp variables create...
[jalview.git] / src / jalview / appletgui / AnnotationPanel.java
index 45a5f1e..167dd09 100755 (executable)
@@ -1,19 +1,22 @@
 /*
- * 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.2)
+ * 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
- * 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
+ * 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 
  * 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/>.
+ * 
+ * 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 +24,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 +114,7 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, Adjustmen
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @param evt
    *          DOCUMENT ME!
    */
@@ -133,7 +137,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 +238,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++)
@@ -247,15 +256,17 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, Adjustmen
           anot[index] = new Annotation(label, "", type, 0);
         }
 
-        anot[index].secondaryStructure = type;
+        
+        anot[index].secondaryStructure = type != 'S' ? type : label
+                .length() == 0 ? ' ' : label.charAt(0);
         anot[index].displayCharacter = label;
       }
     }
 
-    aa[activeRow].validateRangeAndDisplay();
+    av.getAlignment().validateAnnotation(aa[activeRow]);
 
-    adjustPanelHeight();
     ap.alignmentChanged();
+    adjustPanelHeight();
     repaint();
 
     return;
@@ -316,7 +327,8 @@ 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 +338,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 +486,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 +536,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,20 +566,21 @@ 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();
       return;
     }
 
-    gg.copyArea(0, 0, imgWidth, getSize().height, -horizontal
-            * av.charWidth, 0);
+    gg.copyArea(0, 0, imgWidth, getSize().height,
+            -horizontal * av.getCharWidth(), 0);
     int sr = av.startRes, er = av.endRes + 1, transX = 0;
 
     if (horizontal > 0) // scrollbar pulled right, image to the left
     {
-      transX = (er - sr - horizontal) * av.charWidth;
+      transX = (er - sr - horizontal) * av.getCharWidth();
       sr = er - horizontal;
     }
     else if (horizontal < 0)
@@ -582,7 +600,7 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, Adjustmen
 
   /**
    * DOCUMENT ME!
-   *
+   * 
    * @param g
    *          DOCUMENT ME!
    * @param startRes
@@ -596,7 +614,8 @@ public class AnnotationPanel extends Panel implements AwtRenderPanelI, Adjustmen
     g.setFont(ofont);
 
     g.setColor(Color.white);
-    g.fillRect(0, 0, (endRes - startRes) * av.charWidth, getSize().height);
+    g.fillRect(0, 0, (endRes - startRes) * av.getCharWidth(),
+            getSize().height);
 
     if (fm == null)
     {
@@ -611,7 +630,8 @@ 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 +643,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 +669,21 @@ 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;
+  }
 }