JAL-1066 limit available rows to per-sequence when selected and disable if no sequenc...
authorjprocter <jprocter@compbio.dundee.ac.uk>
Wed, 29 Aug 2012 16:55:46 +0000 (17:55 +0100)
committerjprocter <jprocter@compbio.dundee.ac.uk>
Wed, 29 Aug 2012 16:55:46 +0000 (17:55 +0100)
src/jalview/gui/AnnotationColourChooser.java

index 5b69534..f53f55a 100755 (executable)
@@ -108,18 +108,7 @@ public class AnnotationColourChooser extends JPanel
       seqAssociated.setSelected(acg.isSeqAssociated());
     }
     adjusting = true;
-    Vector list = new Vector();
-    int index = 1;
-    for (int i = 0; i < av.getAlignment().getAlignmentAnnotation().length; i++)
-    {
-      String label = av.getAlignment().getAlignmentAnnotation()[i].label;
-      if (!list.contains(label))
-        list.addElement(label);
-      else
-        list.addElement(label + "_" + (index++));
-    }
-
-    annotations = new JComboBox(list);
+    annotations = new JComboBox(getAnnotationItems(seqAssociated.isSelected()));
 
     threshold.addItem("No Threshold");
     threshold.addItem("Above Threshold");
@@ -161,6 +150,39 @@ public class AnnotationColourChooser extends JPanel
 
   }
 
+  private Vector<String> getAnnotationItems(boolean isSeqAssociated) {
+    Vector<String> list = new Vector<String>();
+    int index = 1;
+    int[] anmap = new int[av.getAlignment().getAlignmentAnnotation().length];
+    boolean enableSeqAss=false;
+    for (int i = 0; i < av.getAlignment().getAlignmentAnnotation().length; i++)
+    {
+      if (av.getAlignment().getAlignmentAnnotation()[i].sequenceRef==null)
+      {
+        if (isSeqAssociated)
+          {
+          continue;
+          }
+      } else {
+        enableSeqAss=true;
+      }
+      String label = av.getAlignment().getAlignmentAnnotation()[i].label;
+      if (!list.contains(label))
+        {anmap[list.size()] = i;
+        list.addElement(label);
+        
+        }else {
+        if (!isSeqAssociated) {
+          anmap[list.size()] = i;
+          list.addElement(label + "_" + (index++));
+        }
+      }
+    }
+    seqAssociated.setEnabled(enableSeqAss);
+    annmap = new int[list.size()];
+    System.arraycopy(anmap, 0,  annmap,  0,  annmap.length);
+    return list;
+  }
   private void setDefaultMinMax()
   {
     minColour.setBackground(Cache.getDefaultColour("ANNOTATIONCOLOUR_MIN", Color.orange));
@@ -308,14 +330,14 @@ public class AnnotationColourChooser extends JPanel
 
     jPanel1.add(ok);
     jPanel1.add(cancel);
-    jPanel2.add(annotations);
+    jPanel2.add(annotations, "grow, wrap");
+    jPanel2.add(seqAssociated);
     jPanel2.add(currentColours);
     JPanel colpanel = new JPanel(new FlowLayout());
     colpanel.setBackground(Color.white);
     colpanel.add(minColour);
     colpanel.add(maxColour);
     jPanel2.add(colpanel, "wrap");
-    jPanel2.add(seqAssociated, "wrap");
     jPanel2.add(threshold);
     jPanel2.add(defColours,"skip 1, wrap");
     jPanel2.add(thresholdIsMin);
@@ -328,7 +350,25 @@ public class AnnotationColourChooser extends JPanel
 
   protected void seqAssociated_actionPerformed(ActionEvent arg0)
   {
-    changeColour();
+    adjusting=true;
+    String cursel = (String) annotations.getSelectedItem();
+    boolean isvalid=false,isseqs=seqAssociated.isSelected();
+    this.annotations.removeAllItems();
+    for (String anitem:getAnnotationItems(seqAssociated.isSelected()))
+    {
+      if (anitem.equals(            cursel) || (isseqs && cursel.startsWith(anitem)))
+      {
+        isvalid=true;
+        cursel=anitem;
+      }
+      this.annotations.addItem(anitem);
+    }
+    adjusting=false;
+    if (isvalid) { this.annotations.setSelectedItem(cursel); } else {
+      if (annotations.getItemCount()>0) {
+        annotations.setSelectedIndex(0);
+      }
+    }
   }
 
   protected void resetColours_actionPerformed(ActionEvent arg0)
@@ -338,7 +378,7 @@ public class AnnotationColourChooser extends JPanel
   }
 
   JComboBox annotations;
-
+  int[] annmap;
   JPanel minColour = new JPanel();
 
   JPanel maxColour = new JPanel();
@@ -397,8 +437,8 @@ public class AnnotationColourChooser extends JPanel
       return;
     }
 
-    currentAnnotation = av.getAlignment().getAlignmentAnnotation()[annotations
-            .getSelectedIndex()];
+    currentAnnotation = av.getAlignment().getAlignmentAnnotation()[annmap[annotations
+            .getSelectedIndex()]];
 
     int aboveThreshold = -1;
     if (threshold.getSelectedItem().equals("Above Threshold"))