JAL-4046 JAL-3993 patch for 2.11.2.4 release
[jalview.git] / src / jalview / gui / SliderPanel.java
index 0c4e03e..37ab219 100755 (executable)
  */
 package jalview.gui;
 
+import jalview.analysis.Conservation;
 import jalview.datamodel.SequenceGroup;
 import jalview.jbgui.GSliderPanel;
 import jalview.renderer.ResidueShaderI;
 import jalview.util.MessageManager;
 
+import java.awt.event.ActionEvent;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.beans.PropertyVetoException;
+import java.util.List;
 
 import javax.swing.JInternalFrame;
 import javax.swing.JLayeredPane;
@@ -97,15 +100,15 @@ public class SliderPanel extends GSliderPanel
 
     if (forConservation)
     {
-      label.setText(MessageManager
-              .getString("label.enter_value_increase_conservation_visibility"));
+      label.setText(MessageManager.getString(
+              "label.enter_value_increase_conservation_visibility"));
       slider.setMinimum(0);
       slider.setMaximum(100);
     }
     else
     {
-      label.setText(MessageManager
-              .getString("label.enter_percentage_identity_above_which_colour_residues"));
+      label.setText(MessageManager.getString(
+              "label.enter_percentage_identity_above_which_colour_residues"));
       slider.setMinimum(0);
       slider.setMaximum(100);
     }
@@ -115,7 +118,7 @@ public class SliderPanel extends GSliderPanel
       @Override
       public void stateChanged(ChangeEvent evt)
       {
-        valueField.setText(slider.getValue() + "");
+        valueField.setText(String.valueOf(slider.getValue()));
         valueChanged(slider.getValue());
       }
     });
@@ -125,12 +128,12 @@ public class SliderPanel extends GSliderPanel
       @Override
       public void mouseReleased(MouseEvent evt)
       {
-        ap.paintAlignment(true);
+        ap.paintAlignment(true, true);
       }
     });
 
     slider.setValue(value);
-    valueField.setText(value + "");
+    valueField.setText(String.valueOf(value));
   }
 
   /**
@@ -160,19 +163,23 @@ public class SliderPanel extends GSliderPanel
     else
     {
       sliderPanel = (SliderPanel) conservationSlider.getContentPane();
-      sliderPanel.valueField.setText(String.valueOf(rs.getConservationInc()));
+      sliderPanel.valueField
+              .setText(String.valueOf(rs.getConservationInc()));
       sliderPanel.cs = rs;
       sliderPanel.ap = ap;
       sliderPanel.slider.setValue(rs.getConservationInc());
     }
 
     conservationSlider.setTitle(MessageManager.formatMessage(
-            "label.conservation_colour_increment",
-            new String[] { source == null ? BACKGROUND : source }));
+            "label.conservation_colour_increment", new String[]
+            { source == null ? BACKGROUND : source }));
 
-    if (ap.av.getAlignment().getGroups() != null)
+    List<SequenceGroup> groups = ap.av.getAlignment().getGroups();
+    if (groups != null && !groups.isEmpty())
     {
       sliderPanel.setAllGroupsCheckEnabled(true);
+      sliderPanel.allGroupsCheck
+              .setSelected(ap.av.getColourAppliesToAllGroups());
     }
     else
     {
@@ -226,16 +233,16 @@ public class SliderPanel extends GSliderPanel
     if (!conservationSlider.isVisible())
     {
       Desktop.addInternalFrame(conservationSlider,
-              conservationSlider.getTitle(), 420, 90, false);
-      conservationSlider
-              .addInternalFrameListener(new InternalFrameAdapter()
-              {
-                @Override
-                public void internalFrameClosed(InternalFrameEvent e)
-                {
-                  conservationSlider = null;
-                }
-              });
+              conservationSlider.getTitle(), true, FRAME_WIDTH,
+              FRAME_HEIGHT, false, true);
+      conservationSlider.addInternalFrameListener(new InternalFrameAdapter()
+      {
+        @Override
+        public void internalFrameClosed(InternalFrameEvent e)
+        {
+          conservationSlider = null;
+        }
+      });
       conservationSlider.setLayer(JLayeredPane.PALETTE_LAYER);
     }
   }
@@ -252,8 +259,8 @@ public class SliderPanel extends GSliderPanel
    * 
    * @return
    */
-  public static int setPIDSliderSource(AlignmentPanel ap,
-          ResidueShaderI rs, String source)
+  public static int setPIDSliderSource(AlignmentPanel ap, ResidueShaderI rs,
+          String source)
   {
     int threshold = rs.getThreshold();
 
@@ -276,8 +283,8 @@ public class SliderPanel extends GSliderPanel
     }
 
     PIDSlider.setTitle(MessageManager.formatMessage(
-            "label.percentage_identity_threshold",
-            new String[] { source == null ? BACKGROUND : source }));
+            "label.percentage_identity_threshold", new String[]
+            { source == null ? BACKGROUND : source }));
 
     if (ap.av.getAlignment().getGroups() != null)
     {
@@ -302,8 +309,8 @@ public class SliderPanel extends GSliderPanel
 
     if (!PIDSlider.isVisible())
     {
-      Desktop.addInternalFrame(PIDSlider, PIDSlider.getTitle(), 420, 90,
-              false);
+      Desktop.addInternalFrame(PIDSlider, PIDSlider.getTitle(), true,
+              FRAME_WIDTH, FRAME_HEIGHT, false, true);
       PIDSlider.setLayer(JLayeredPane.PALETTE_LAYER);
       PIDSlider.addInternalFrameListener(new InternalFrameAdapter()
       {
@@ -331,13 +338,14 @@ public class SliderPanel extends GSliderPanel
     {
       ap.av.setThreshold(percent);
     }
-    updateColourScheme(percent, cs);
+    updateColourScheme(percent, cs, null);
 
     if (allGroupsCheck.isSelected())
     {
-      for (SequenceGroup sg : ap.av.getAlignment().getGroups())
+      List<SequenceGroup> groups = ap.av.getAlignment().getGroups();
+      for (SequenceGroup sg : groups)
       {
-        updateColourScheme(percent, sg.getGroupColourScheme());
+        updateColourScheme(percent, sg.getGroupColourScheme(), sg);
       }
     }
 
@@ -350,8 +358,10 @@ public class SliderPanel extends GSliderPanel
    * 
    * @param percent
    * @param scheme
+   * @param sg
    */
-  protected void updateColourScheme(int percent, ResidueShaderI scheme)
+  protected void updateColourScheme(int percent, ResidueShaderI scheme,
+          SequenceGroup sg)
   {
     if (scheme == null)
     {
@@ -359,6 +369,20 @@ public class SliderPanel extends GSliderPanel
     }
     if (forConservation)
     {
+      if (!scheme.conservationApplied() && sg != null)
+      {
+        /*
+         * first time the colour scheme has had Conservation shading applied
+         * - compute conservation
+         */
+        Conservation c = new Conservation("Group", sg.getSequences(null),
+                sg.getStartRes(), sg.getEndRes());
+        c.calculate();
+        c.verdict(false, ap.av.getConsPercGaps());
+        sg.cs.setConservation(c);
+
+      }
+      scheme.setConservationApplied(true);
       scheme.setConservationInc(percent);
     }
     else
@@ -434,8 +458,8 @@ public class SliderPanel extends GSliderPanel
 
   static int getValue(JInternalFrame slider)
   {
-    return slider == null ? 0 : ((SliderPanel) slider.getContentPane())
-            .getValue();
+    return slider == null ? 0
+            : ((SliderPanel) slider.getContentPane()).getValue();
   }
 
   public static int getPIDValue()