JAL-1925 update source version in license
[jalview.git] / src / jalview / appletgui / AnnotationLabels.java
index 85a2fbe..b6b2b0d 100755 (executable)
@@ -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 2.9.0b2)
+ * Copyright (C) 2015 The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  */
 package jalview.appletgui;
 
-import java.util.*;
-import java.awt.*;
-import java.awt.event.*;
-
-import jalview.datamodel.*;
+import jalview.analysis.AlignmentUtils;
+import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.Annotation;
+import jalview.datamodel.SequenceGroup;
+import jalview.datamodel.SequenceI;
 import jalview.util.MessageManager;
 import jalview.util.ParseHtmlBodyAndLinks;
 
+import java.awt.Checkbox;
+import java.awt.CheckboxMenuItem;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.FontMetrics;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.Image;
+import java.awt.MenuItem;
+import java.awt.Panel;
+import java.awt.PopupMenu;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.InputEvent;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Vector;
+
 public class AnnotationLabels extends Panel implements ActionListener,
         MouseListener, MouseMotionListener
 {
@@ -189,6 +213,14 @@ public class AnnotationLabels extends Panel implements ActionListener,
       }
 
     }
+    refresh();
+  }
+
+  /**
+   * Adjust size and repaint
+   */
+  protected void refresh()
+  {
     ap.annotationPanel.adjustPanelHeight();
     setSize(getSize().width, ap.annotationPanel.getSize().height);
     ap.validate();
@@ -221,7 +253,9 @@ public class AnnotationLabels extends Panel implements ActionListener,
       return true;
     }
     else
+    {
       return false;
+    }
 
   }
 
@@ -287,8 +321,8 @@ public class AnnotationLabels extends Panel implements ActionListener,
               .getSize(), f = ap.seqPanelHolder.getSize();
       int dif = evt.getY() - oldY;
 
-      dif /= ap.av.charHeight;
-      dif *= ap.av.charHeight;
+      dif /= ap.av.getCharHeight();
+      dif *= ap.av.getCharHeight();
 
       if ((d.height - dif) > 20 && (f.height + dif) > 20)
       {
@@ -437,6 +471,32 @@ public class AnnotationLabels extends Panel implements ActionListener,
       item = new MenuItem(HIDE);
       item.addActionListener(this);
       popup.add(item);
+
+      /*
+       * Hide all <label>:
+       */
+      if (selectedRow < aa.length)
+      {
+        if (aa[selectedRow].sequenceRef != null)
+        {
+          final String label = aa[selectedRow].label;
+          MenuItem hideType = new MenuItem(
+                  MessageManager.getString("label.hide_all") + " " + label);
+          hideType.addActionListener(new ActionListener()
+          {
+            @Override
+            public void actionPerformed(ActionEvent e)
+            {
+              AlignmentUtils.showOrHideSequenceAnnotations(
+                      ap.av.getAlignment(), Collections.singleton(label),
+                      null, false, false);
+              refresh();
+            }
+          });
+          popup.add(hideType);
+        }
+      }
+
       if (hasHiddenRows)
       {
         item = new MenuItem(SHOWALL);
@@ -458,7 +518,7 @@ public class AnnotationLabels extends Panel implements ActionListener,
                     MessageManager.getString("label.ignore_gaps_consensus"),
                     (aa[selectedRow].groupRef != null) ? aa[selectedRow].groupRef
                             .getIgnoreGapsConsensus() : ap.av
-                            .getIgnoreGapsConsensus());
+                            .isIgnoreGapsConsensus());
             final AlignmentAnnotation aaa = aa[selectedRow];
             cbmi.addItemListener(new ItemListener()
             {
@@ -471,7 +531,7 @@ public class AnnotationLabels extends Panel implements ActionListener,
                 }
                 else
                 {
-                  ap.av.setIgnoreGapsConsensus(cbmi.getState());
+                  ap.av.setIgnoreGapsConsensus(cbmi.getState(), ap);
                 }
                 ap.paintAlignment(true);
               }
@@ -480,7 +540,8 @@ public class AnnotationLabels extends Panel implements ActionListener,
             if (aaa.groupRef != null)
             {
               final CheckboxMenuItem chist = new CheckboxMenuItem(
-                      MessageManager.getString("label.show_group_histogram"),
+                      MessageManager
+                              .getString("label.show_group_histogram"),
                       aa[selectedRow].groupRef.isShowConsensusHistogram());
               chist.addItemListener(new ItemListener()
               {
@@ -519,7 +580,8 @@ public class AnnotationLabels extends Panel implements ActionListener,
 
               popup.add(cprofl);
               final CheckboxMenuItem cprofn = new CheckboxMenuItem(
-                      MessageManager.getString("label.normalise_group_logo"),
+                      MessageManager
+                              .getString("label.normalise_group_logo"),
                       aa[selectedRow].groupRef.isNormaliseSequenceLogo());
               cprofn.addItemListener(new ItemListener()
               {
@@ -542,7 +604,8 @@ public class AnnotationLabels extends Panel implements ActionListener,
             else
             {
               final CheckboxMenuItem chist = new CheckboxMenuItem(
-                      MessageManager.getString("label.show_histogram"), av.isShowConsensusHistogram());
+                      MessageManager.getString("label.show_histogram"),
+                      av.isShowConsensusHistogram());
               chist.addItemListener(new ItemListener()
               {
                 public void itemStateChanged(ItemEvent e)
@@ -564,7 +627,8 @@ public class AnnotationLabels extends Panel implements ActionListener,
               });
               popup.add(chist);
               final CheckboxMenuItem cprof = new CheckboxMenuItem(
-                      MessageManager.getString("label.show_logo"), av.isShowSequenceLogo());
+                      MessageManager.getString("label.show_logo"),
+                      av.isShowSequenceLogo());
               cprof.addItemListener(new ItemListener()
               {
                 public void itemStateChanged(ItemEvent e)
@@ -587,7 +651,8 @@ public class AnnotationLabels extends Panel implements ActionListener,
               });
               popup.add(cprof);
               final CheckboxMenuItem cprofn = new CheckboxMenuItem(
-                      MessageManager.getString("label.normalise_logo"), av.isNormaliseSequenceLogo());
+                      MessageManager.getString("label.normalise_logo"),
+                      av.isNormaliseSequenceLogo());
               cprofn.addItemListener(new ItemListener()
               {
                 public void itemStateChanged(ItemEvent e)
@@ -650,36 +715,44 @@ public class AnnotationLabels extends Panel implements ActionListener,
         {
           if (evt.getClickCount() == 1)
           {
-            ap.seqPanel.ap.idPanel.highlightSearchResults(Arrays
-                    .asList(new SequenceI[]
-                    { aa[selectedRow].sequenceRef }));
+            ap.seqPanel.ap.idPanel
+                    .highlightSearchResults(Arrays
+                            .asList(new SequenceI[] { aa[selectedRow].sequenceRef }));
           }
           else if (evt.getClickCount() >= 2)
           {
             ap.seqPanel.ap.idPanel.highlightSearchResults(null);
             SequenceGroup sg = ap.av.getSelectionGroup();
-            if (sg!=null)
+            if (sg != null)
             {
-              // we make a copy rather than edit the current selection if no modifiers pressed
+              // we make a copy rather than edit the current selection if no
+              // modifiers pressed
               // see Enhancement JAL-1557
               if (!(evt.isControlDown() || evt.isShiftDown()))
               {
                 sg = new SequenceGroup(sg);
                 sg.clear();
                 sg.addSequence(aa[selectedRow].sequenceRef, false);
-              } else {
+              }
+              else
+              {
                 if (evt.isControlDown())
                 {
                   sg.addOrRemove(aa[selectedRow].sequenceRef, true);
-                } else {
-                  // notionally, we should also add intermediate sequences from last added sequence ?
+                }
+                else
+                {
+                  // notionally, we should also add intermediate sequences from
+                  // last added sequence ?
                   sg.addSequence(aa[selectedRow].sequenceRef, true);
                 }
               }
-            } else {
+            }
+            else
+            {
               sg = new SequenceGroup();
               sg.setStartRes(0);
-              sg.setEndRes(ap.av.getAlignment().getWidth()-1);
+              sg.setEndRes(ap.av.getAlignment().getWidth() - 1);
               sg.addSequence(aa[selectedRow].sequenceRef, false);
             }
             ap.av.setSelectionGroup(sg);
@@ -713,14 +786,10 @@ public class AnnotationLabels extends Panel implements ActionListener,
     if (av.hasHiddenColumns())
     {
       jalview.appletgui.AlignFrame.copiedHiddenColumns = new Vector();
-      for (int i = 0; i < av.getColumnSelection().getHiddenColumns().size(); i++)
+      for (int[] region : av.getColumnSelection().getHiddenColumns())
       {
-        int[] region = (int[]) av.getColumnSelection().getHiddenColumns()
-                .elementAt(i);
-
         jalview.appletgui.AlignFrame.copiedHiddenColumns
-                .addElement(new int[]
-                { region[0], region[1] });
+                .addElement(new int[] { region[0], region[1] });
       }
     }
   }
@@ -792,7 +861,7 @@ public class AnnotationLabels extends Panel implements ActionListener,
               dragEvent.getY());
     }
 
-    if (!av.wrapAlignment && ((aa == null) || (aa.length < 1)))
+    if (!av.getWrapAlignment() && ((aa == null) || (aa.length < 1)))
     {
       g.setColor(Color.black);
       g.drawString(MessageManager.getString("label.right_click"), 2, 8);