From 42a69102cb90f11498687980f3592ef96a3cf9ea Mon Sep 17 00:00:00 2001 From: jprocter Date: Wed, 29 Aug 2012 17:55:46 +0100 Subject: [PATCH] JAL-1066 limit available rows to per-sequence when selected and disable if no sequence associated annotation --- src/jalview/gui/AnnotationColourChooser.java | 76 ++++++++++++++++++++------ 1 file changed, 58 insertions(+), 18 deletions(-) diff --git a/src/jalview/gui/AnnotationColourChooser.java b/src/jalview/gui/AnnotationColourChooser.java index 5b69534..f53f55a 100755 --- a/src/jalview/gui/AnnotationColourChooser.java +++ b/src/jalview/gui/AnnotationColourChooser.java @@ -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 getAnnotationItems(boolean isSeqAssociated) { + Vector list = new Vector(); + 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")) -- 1.7.10.2