JAL-3083 reset threshold on Cancel; Javadoc
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Fri, 17 Aug 2018 09:10:12 +0000 (10:10 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Fri, 17 Aug 2018 09:10:12 +0000 (10:10 +0100)
src/jalview/gui/AnnotationColourChooser.java
src/jalview/gui/AnnotationRowFilter.java

index 384635b..b29a1dd 100644 (file)
@@ -36,7 +36,9 @@ import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
-import java.util.Hashtable;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Vector;
 
 import javax.swing.BorderFactory;
@@ -59,7 +61,9 @@ public class AnnotationColourChooser extends AnnotationRowFilter
 
   private JButton defColours;
 
-  private Hashtable<SequenceGroup, ColourSchemeI> oldgroupColours;
+  private Map<SequenceGroup, ColourSchemeI> oldgroupColours;
+
+  private Map<AlignmentAnnotation, GraphLine> oldThresholds;
 
   private JCheckBox useOriginalColours = new JCheckBox();
 
@@ -73,21 +77,18 @@ public class AnnotationColourChooser extends AnnotationRowFilter
 
   protected static final int MIN_HEIGHT = 240;
 
+  /**
+   * Constructor
+   * 
+   * @param av
+   * @param ap
+   */
   public AnnotationColourChooser(AlignViewport av, final AlignmentPanel ap)
   {
     super(av, ap);
-    oldcs = av.getGlobalColourScheme();
-    if (av.getAlignment().getGroups() != null)
-    {
-      oldgroupColours = new Hashtable<>();
-      for (SequenceGroup sg : ap.av.getAlignment().getGroups())
-      {
-        if (sg.getColourScheme() != null)
-        {
-          oldgroupColours.put(sg, sg.getColourScheme());
-        }
-      }
-    }
+
+    saveInitialState();
+
     frame = new JInternalFrame();
     frame.setContentPane(this);
     frame.setLayer(JLayeredPane.PALETTE_LAYER);
@@ -158,6 +159,43 @@ public class AnnotationColourChooser extends AnnotationRowFilter
     frame.pack();
   }
 
+  /**
+   * Saves the global and group colour schemes as they are when the dialog is
+   * opened, so they can be restored on Cancel. Note we also save the threshold
+   * value for each annotation, in case this gets modified.
+   */
+  void saveInitialState()
+  {
+    oldcs = av.getGlobalColourScheme();
+    if (av.getAlignment().getGroups() != null)
+    {
+      oldgroupColours = new HashMap<>();
+      for (SequenceGroup sg : ap.av.getAlignment().getGroups())
+      {
+        if (sg.getColourScheme() != null)
+        {
+          oldgroupColours.put(sg, sg.getColourScheme());
+        }
+      }
+    }
+
+    /*
+     * save any existing annotation threshold settings; note we make a copy
+     * of each in case the current threshold value gets amended
+     */
+    oldThresholds = new HashMap<>();
+    AlignmentAnnotation[] anns = av.getAlignment().getAlignmentAnnotation();
+    if (anns != null)
+    {
+      for (AlignmentAnnotation ann : anns)
+      {
+        GraphLine thresh = ann.getThreshold();
+        oldThresholds.put(ann,
+                thresh == null ? null : new GraphLine(thresh));
+      }
+    }
+  }
+
   @Override
   protected void jbInit()
   {
@@ -326,6 +364,11 @@ public class AnnotationColourChooser extends AnnotationRowFilter
         sg.setColourScheme(oldgroupColours.get(sg));
       }
     }
+    for (Entry<AlignmentAnnotation, GraphLine> entry : oldThresholds
+            .entrySet())
+    {
+      entry.getKey().setThreshold(entry.getValue());
+    }
   }
 
   @Override
index f13cb10..25f6b8e 100644 (file)
@@ -424,6 +424,22 @@ public abstract class AnnotationRowFilter extends JPanel
     return annotationLabels.get(ann);
   }
 
+  /**
+   * Configures controls for
+   * <ul>
+   * <li>OK and Cancel buttons</li>
+   * <li>annotations drop-down list</li>
+   * <li>choice of No/Above/Below threshold</li>
+   * <li>threshold</li>
+   * <ul>
+   * <li>slider</li>
+   * <li>input text field</li>
+   * <li>'As Percentage' checkbox</li>
+   * </ul>
+   * </ul>
+   * Sub-classes are responsible for where (and whether) to place these fields,
+   * and for creation and population of the annotations combobox.
+   */
   protected void jbInit()
   {
     ok.setOpaque(false);