merge from 2_4_Release branch
[jalview.git] / src / jalview / gui / AnnotationLabels.java
index 2eda839..8050490 100755 (executable)
@@ -1,17 +1,17 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer
- * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
- *
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4)
+ * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ * 
  * This program 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 2
  * of the License, or (at your option) any later version.
- *
+ * 
  * This program 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 this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
@@ -31,36 +31,52 @@ import jalview.io.*;
 
 /**
  * DOCUMENT ME!
- *
+ * 
  * @author $author$
  * @version $Revision$
  */
-public class AnnotationLabels
-    extends JPanel implements MouseListener,
-    MouseMotionListener, ActionListener
+public class AnnotationLabels extends JPanel implements MouseListener,
+        MouseMotionListener, ActionListener
 {
   static String ADDNEW = "Add New Row";
+
   static String EDITNAME = "Edit Label/Description";
+
   static String HIDE = "Hide This Row";
+
   static String DELETE = "Delete This Row";
+
   static String SHOWALL = "Show All Hidden Rows";
+
   static String OUTPUT_TEXT = "Export Annotation";
+
   static String COPYCONS_SEQ = "Copy Consensus Sequence";
+
   boolean resizePanel = false;
+
   Image image;
+
   AlignmentPanel ap;
+
   AlignViewport av;
+
   boolean resizing = false;
+
   MouseEvent dragEvent;
+
   int oldY;
+
   int selectedRow;
+
   int scrollOffset = 0;
+
   Font font = new Font("Arial", Font.PLAIN, 11);
 
   /**
    * Creates a new AnnotationLabels object.
-   *
-   * @param ap DOCUMENT ME!
+   * 
+   * @param ap
+   *                DOCUMENT ME!
    */
   public AnnotationLabels(AlignmentPanel ap)
   {
@@ -81,14 +97,12 @@ public class AnnotationLabels
       MediaTracker mt = new MediaTracker(this);
       mt.addImage(temp, 0);
       mt.waitForID(0);
-    }
-    catch (Exception ex)
+    } catch (Exception ex)
     {
     }
 
-    BufferedImage bi = new BufferedImage(temp.getHeight(this),
-                                         temp.getWidth(this),
-                                         BufferedImage.TYPE_INT_RGB);
+    BufferedImage bi = new BufferedImage(temp.getHeight(this), temp
+            .getWidth(this), BufferedImage.TYPE_INT_RGB);
     Graphics2D g = (Graphics2D) bi.getGraphics();
     g.rotate(Math.toRadians(90));
     g.drawImage(temp, 0, -bi.getWidth(this), this);
@@ -105,8 +119,9 @@ public class AnnotationLabels
 
   /**
    * DOCUMENT ME!
-   *
-   * @param y DOCUMENT ME!
+   * 
+   * @param y
+   *                DOCUMENT ME!
    */
   public void setScrollOffset(int y)
   {
@@ -142,8 +157,9 @@ public class AnnotationLabels
 
   /**
    * DOCUMENT ME!
-   *
-   * @param evt DOCUMENT ME!
+   * 
+   * @param evt
+   *                DOCUMENT ME!
    */
   public void actionPerformed(ActionEvent evt)
   {
@@ -152,8 +168,7 @@ public class AnnotationLabels
     if (evt.getActionCommand().equals(ADDNEW))
     {
       AlignmentAnnotation newAnnotation = new AlignmentAnnotation(null,
-          null,
-          new Annotation[ap.av.alignment.getWidth()]);
+              null, new Annotation[ap.av.alignment.getWidth()]);
 
       if (!editLabelDescription(newAnnotation))
       {
@@ -185,7 +200,7 @@ public class AnnotationLabels
     {
       for (int i = 0; i < aa.length; i++)
       {
-        if (!aa[i].visible && aa[i].annotations!=null)
+        if (!aa[i].visible && aa[i].annotations != null)
         {
           aa[i].visible = true;
         }
@@ -193,12 +208,9 @@ public class AnnotationLabels
     }
     else if (evt.getActionCommand().equals(OUTPUT_TEXT))
     {
-      new AnnotationExporter().exportAnnotations(
-          ap,
-          new AlignmentAnnotation[]
-          {aa[selectedRow]},
-          null, null
-          );
+      new AnnotationExporter().exportAnnotations(ap,
+              new AlignmentAnnotation[]
+              { aa[selectedRow] }, null, null);
     }
     else if (evt.getActionCommand().equals(COPYCONS_SEQ))
     {
@@ -217,16 +229,15 @@ public class AnnotationLabels
 
   /**
    * DOCUMENT ME!
-   *
-   * @param e DOCUMENT ME!
+   * 
+   * @param e
+   *                DOCUMENT ME!
    */
   boolean editLabelDescription(AlignmentAnnotation annotation)
   {
     EditNameDialog dialog = new EditNameDialog(annotation.label,
-                                               annotation.description,
-                                               "       Annotation Name ",
-                                               "Annotation Description ",
-                                               "Edit Annotation Name/Description");
+            annotation.description, "       Annotation Name ",
+            "Annotation Description ", "Edit Annotation Name/Description");
 
     if (!dialog.accept)
     {
@@ -236,7 +247,7 @@ public class AnnotationLabels
     annotation.label = dialog.getName();
 
     String text = dialog.getDescription();
-    if (text!=null && text.length() == 0)
+    if (text != null && text.length() == 0)
     {
       text = null;
     }
@@ -247,8 +258,9 @@ public class AnnotationLabels
 
   /**
    * DOCUMENT ME!
-   *
-   * @param evt DOCUMENT ME!
+   * 
+   * @param evt
+   *                DOCUMENT ME!
    */
   public void mousePressed(MouseEvent evt)
   {
@@ -258,8 +270,9 @@ public class AnnotationLabels
 
   /**
    * DOCUMENT ME!
-   *
-   * @param evt DOCUMENT ME!
+   * 
+   * @param evt
+   *                DOCUMENT ME!
    */
   public void mouseReleased(MouseEvent evt)
   {
@@ -269,9 +282,9 @@ public class AnnotationLabels
 
     if (start != end)
     {
-      //Swap these annotations
-      AlignmentAnnotation startAA = ap.av.alignment.getAlignmentAnnotation()[
-          start];
+      // Swap these annotations
+      AlignmentAnnotation startAA = ap.av.alignment
+              .getAlignmentAnnotation()[start];
       AlignmentAnnotation endAA = ap.av.alignment.getAlignmentAnnotation()[end];
 
       ap.av.alignment.getAlignmentAnnotation()[end] = startAA;
@@ -286,8 +299,9 @@ public class AnnotationLabels
 
   /**
    * DOCUMENT ME!
-   *
-   * @param evt DOCUMENT ME!
+   * 
+   * @param evt
+   *                DOCUMENT ME!
    */
   public void mouseEntered(MouseEvent evt)
   {
@@ -300,8 +314,9 @@ public class AnnotationLabels
 
   /**
    * DOCUMENT ME!
-   *
-   * @param evt DOCUMENT ME!
+   * 
+   * @param evt
+   *                DOCUMENT ME!
    */
   public void mouseExited(MouseEvent evt)
   {
@@ -314,8 +329,9 @@ public class AnnotationLabels
 
   /**
    * DOCUMENT ME!
-   *
-   * @param evt DOCUMENT ME!
+   * 
+   * @param evt
+   *                DOCUMENT ME!
    */
   public void mouseDragged(MouseEvent evt)
   {
@@ -329,13 +345,13 @@ public class AnnotationLabels
       dif /= ap.av.charHeight;
       dif *= ap.av.charHeight;
 
-      if ( (d.height - dif) > 20)
+      if ((d.height - dif) > 20)
       {
         ap.annotationScroller.setPreferredSize(new Dimension(d.width,
-            d.height - dif));
+                d.height - dif));
         d = ap.annotationSpaceFillerHolder.getPreferredSize();
         ap.annotationSpaceFillerHolder.setPreferredSize(new Dimension(
-            d.width, d.height - dif));
+                d.width, d.height - dif));
         ap.paintAlignment(true);
       }
 
@@ -349,8 +365,9 @@ public class AnnotationLabels
 
   /**
    * DOCUMENT ME!
-   *
-   * @param evt DOCUMENT ME!
+   * 
+   * @param evt
+   *                DOCUMENT ME!
    */
   public void mouseMoved(MouseEvent evt)
   {
@@ -358,27 +375,26 @@ public class AnnotationLabels
 
     getSelectedRow(evt.getY() - scrollOffset);
 
-
     if (selectedRow > -1
-        && ap.av.alignment.getAlignmentAnnotation().length > selectedRow)
+            && ap.av.alignment.getAlignmentAnnotation().length > selectedRow)
     {
-      AlignmentAnnotation aa = ap.av.alignment.
-          getAlignmentAnnotation()[selectedRow];
+      AlignmentAnnotation aa = ap.av.alignment.getAlignmentAnnotation()[selectedRow];
 
       StringBuffer desc = new StringBuffer("<html>");
 
-      if (aa.description != null && !aa.description.equals("New description"))
+      if (aa.description != null
+              && !aa.description.equals("New description"))
       {
         desc.append(aa.getDescription(true));
-        if(aa.hasScore)
+        if (aa.hasScore)
           desc.append("<br>");
       }
-      if(aa.hasScore())
+      if (aa.hasScore())
       {
-        desc.append("Score: "+aa.score);
+        desc.append("Score: " + aa.score);
       }
 
-      if(desc.length()!=6)
+      if (desc.length() != 6)
       {
         desc.append("</html>");
         this.setToolTipText(desc.toString());
@@ -391,8 +407,9 @@ public class AnnotationLabels
 
   /**
    * DOCUMENT ME!
-   *
-   * @param evt DOCUMENT ME!
+   * 
+   * @param evt
+   *                DOCUMENT ME!
    */
   public void mouseClicked(MouseEvent evt)
   {
@@ -407,7 +424,7 @@ public class AnnotationLabels
     JMenuItem item = new JMenuItem(ADDNEW);
     item.addActionListener(this);
 
-    if ( (aa == null) || (aa.length == 0))
+    if ((aa == null) || (aa.length == 0))
     {
       item = new JMenuItem(SHOWALL);
       item.addActionListener(this);
@@ -433,12 +450,11 @@ public class AnnotationLabels
     item.addActionListener(this);
     pop.add(item);
     // annotation object should be typed
-    if (selectedRow<aa.length && aa[selectedRow] == ap.av.consensus)
+    if (selectedRow < aa.length && aa[selectedRow] == ap.av.consensus)
     {
       pop.addSeparator();
       final JCheckBoxMenuItem cbmi = new JCheckBoxMenuItem(
-          "Ignore Gaps In Consensus",
-          ap.av.getIgnoreGapsConsensus());
+              "Ignore Gaps In Consensus", ap.av.getIgnoreGapsConsensus());
       cbmi.addActionListener(new ActionListener()
       {
         public void actionPerformed(ActionEvent e)
@@ -457,25 +473,22 @@ public class AnnotationLabels
 
   /**
    * do a single sequence copy to jalview and the system clipboard
-   *
-   * @param sq sequence to be copied to clipboard
+   * 
+   * @param sq
+   *                sequence to be copied to clipboard
    */
   protected void copy_annotseqtoclipboard(SequenceI sq)
   {
     SequenceI[] seqs = new SequenceI[]
-        {
-        sq};
+    { sq };
     String[] omitHidden = null;
     SequenceI[] dseqs = new SequenceI[]
-        {
-        sq.getDatasetSequence()};
+    { sq.getDatasetSequence() };
     if (dseqs[0] == null)
     {
       dseqs[0] = new Sequence(sq);
-      dseqs[0].setSequence(
-          jalview.analysis.AlignSeq.extractGaps(
-              jalview.util.Comparison.GapChars,
-              sq.getSequenceAsString()));
+      dseqs[0].setSequence(jalview.analysis.AlignSeq.extractGaps(
+              jalview.util.Comparison.GapChars, sq.getSequenceAsString()));
 
       sq.setDatasetSequence(dseqs[0]);
     }
@@ -483,16 +496,14 @@ public class AnnotationLabels
     if (av.hasHiddenColumns)
     {
       omitHidden = av.getColumnSelection().getVisibleSequenceStrings(0,
-          sq.getLength(), seqs);
+              sq.getLength(), seqs);
     }
 
-    String output = new FormatAdapter().formatSequences(
-        "Fasta",
-        seqs,
-        omitHidden);
+    String output = new FormatAdapter().formatSequences("Fasta", seqs,
+            omitHidden);
 
-    Toolkit.getDefaultToolkit().getSystemClipboard()
-        .setContents(new StringSelection(output), Desktop.instance);
+    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
+            new StringSelection(output), Desktop.instance);
 
     Vector hiddenColumns = null;
     if (av.hasHiddenColumns)
@@ -500,26 +511,25 @@ public class AnnotationLabels
       hiddenColumns = new Vector();
       for (int i = 0; i < av.getColumnSelection().getHiddenColumns().size(); i++)
       {
-        int[] region = (int[])
-            av.getColumnSelection().getHiddenColumns().elementAt(i);
+        int[] region = (int[]) av.getColumnSelection().getHiddenColumns()
+                .elementAt(i);
 
         hiddenColumns.addElement(new int[]
-                                 {region[0],
-                                 region[1]});
+        { region[0], region[1] });
       }
     }
 
     Desktop.jalviewClipboard = new Object[]
-        {
-        seqs,
-        ds, // what is the dataset of a consensus sequence ? need to flag sequence as special.
-        hiddenColumns};
+    { seqs, ds, // what is the dataset of a consensus sequence ? need to flag
+                // sequence as special.
+        hiddenColumns };
   }
 
   /**
    * DOCUMENT ME!
-   *
-   * @param g1 DOCUMENT ME!
+   * 
+   * @param g1
+   *                DOCUMENT ME!
    */
   public void paintComponent(Graphics g)
   {
@@ -534,7 +544,7 @@ public class AnnotationLabels
     if (av.antiAlias)
     {
       g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
-                          RenderingHints.VALUE_ANTIALIAS_ON);
+              RenderingHints.VALUE_ANTIALIAS_ON);
     }
 
     drawComponent(g2, width);
@@ -543,8 +553,9 @@ public class AnnotationLabels
 
   /**
    * DOCUMENT ME!
-   *
-   * @param g DOCUMENT ME!
+   * 
+   * @param g
+   *                DOCUMENT ME!
    */
   public void drawComponent(Graphics g, int width)
   {
@@ -569,7 +580,7 @@ public class AnnotationLabels
     int y = 0;
     int x = 0;
     int graphExtras = 0;
-    int offset =0;
+    int offset = 0;
 
     if (aa != null)
     {
@@ -582,14 +593,13 @@ public class AnnotationLabels
           continue;
         }
 
-
         y += aa[i].height;
 
-        offset = -aa[i].height/2;
+        offset = -aa[i].height / 2;
 
-        if(aa[i].hasText)
+        if (aa[i].hasText)
         {
-          offset += fm.getHeight()/2;
+          offset += fm.getHeight() / 2;
           offset -= fm.getDescent();
         }
         else
@@ -618,15 +628,14 @@ public class AnnotationLabels
             if (aa[gg].graphGroup == aa[i].graphGroup)
             {
               x = width - fm.stringWidth(aa[gg].label) - 3;
-              g.drawString(aa[gg].label, x,y - graphExtras);
+              g.drawString(aa[gg].label, x, y - graphExtras);
               if (aa[gg].annotations[0] != null)
               {
                 g.setColor(aa[gg].annotations[0].colour);
               }
 
-              g.drawLine(x, y - graphExtras - 3,
-                         x + fm.stringWidth(aa[gg].label),
-                         y - graphExtras - 3);
+              g.drawLine(x, y - graphExtras - 3, x
+                      + fm.stringWidth(aa[gg].label), y - graphExtras - 3);
 
               g.setColor(Color.black);
               graphExtras += fontHeight + 8;
@@ -635,7 +644,7 @@ public class AnnotationLabels
         }
         else
         {
-          g.drawString(aa[i].label, x, y +offset);
+          g.drawString(aa[i].label, x, y + offset);
         }
       }
     }
@@ -647,11 +656,12 @@ public class AnnotationLabels
     else if (dragEvent != null && aa != null)
     {
       g.setColor(Color.lightGray);
-      g.drawString(aa[selectedRow].label, dragEvent.getX(),
-                   dragEvent.getY() - scrollOffset);
+      g.drawString(aa[selectedRow].label, dragEvent.getX(), dragEvent
+              .getY()
+              - scrollOffset);
     }
 
-    if ( (aa == null) || (aa.length < 1))
+    if ((aa == null) || (aa.length < 1))
     {
       g.drawString("Right click", 2, 8);
       g.drawString("to add annotation", 2, 18);