JAL-2405 set context on selection group for tailored colour options
[jalview.git] / src / jalview / viewmodel / AlignmentViewport.java
index a9d3b77..e5c7b4c 100644 (file)
@@ -42,11 +42,9 @@ import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceCollectionI;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
-import jalview.schemes.Blosum62ColourScheme;
-import jalview.schemes.CollectionColourScheme;
-import jalview.schemes.CollectionColourSchemeI;
+import jalview.renderer.ResidueShader;
+import jalview.renderer.ResidueShaderI;
 import jalview.schemes.ColourSchemeI;
-import jalview.schemes.PIDColourScheme;
 import jalview.structure.CommandListener;
 import jalview.structure.StructureSelectionManager;
 import jalview.structure.VamsasSource;
@@ -599,7 +597,7 @@ public abstract class AlignmentViewport implements AlignViewportI,
 
   protected boolean ignoreGapsInConsensusCalculation = false;
 
-  protected CollectionColourSchemeI globalColourScheme;
+  protected ResidueShaderI residueShading;
 
   @Override
   public void setGlobalColourScheme(ColourSchemeI cs)
@@ -607,37 +605,32 @@ public abstract class AlignmentViewport implements AlignViewportI,
     // TODO: logic refactored from AlignFrame changeColour -
     // TODO: autorecalc stuff should be changed to rely on the worker system
     // check to see if we should implement a changeColour(cs) method rather than
-    // put th logic in here
+    // put the logic in here
     // - means that caller decides if they want to just modify state and defer
     // calculation till later or to do all calculations in thread.
     // via changecolour
 
     /*
-     * only instantiate colour scheme once, thereafter update it
+     * only instantiate alignment colouring once, thereafter update it;
      * this means that any conservation or PID threshold settings
      * persist when the alignment colour scheme is changed
      */
-    if (globalColourScheme == null)
+    if (residueShading == null)
     {
-      globalColourScheme = new CollectionColourScheme();
+      residueShading = new ResidueShader(viewStyle);
     }
-    globalColourScheme.setColourScheme(cs);
+    residueShading.setColourScheme(cs);
 
-    // boolean recalc = false;
-    // TODO: do threshold and increment belong in ViewStyle or colour scheme?
-    // problem: groups need this but do not currently have a ViewStyle
+    // TODO: do threshold and increment belong in ViewStyle or ResidueShader?
+    // ...problem: groups need these, but do not currently have a ViewStyle
 
     if (cs != null)
     {
-      if (getConservationSelected() || getAbovePIDThreshold()
-              || cs instanceof PIDColourScheme
-              || cs instanceof Blosum62ColourScheme)
+      if (getConservationSelected())
       {
-        globalColourScheme.setConservation(hconservation);
-        globalColourScheme
-                .setConservationApplied(getConservationSelected());
+        residueShading.setConservation(hconservation);
       }
-      globalColourScheme.alignmentChanged(alignment, hiddenRepSequences);
+      residueShading.alignmentChanged(alignment, hiddenRepSequences);
     }
 
     /*
@@ -665,14 +658,14 @@ public abstract class AlignmentViewport implements AlignViewportI,
   @Override
   public ColourSchemeI getGlobalColourScheme()
   {
-    return globalColourScheme == null ? null : globalColourScheme
+    return residueShading == null ? null : residueShading
             .getColourScheme();
   }
 
   @Override
-  public CollectionColourSchemeI getViewportColourScheme()
+  public ResidueShaderI getResidueShading()
   {
-    return globalColourScheme;
+    return residueShading;
   }
 
   protected AlignmentAnnotation consensus;
@@ -932,7 +925,7 @@ public abstract class AlignmentViewport implements AlignViewportI,
     hconsensus = null;
     hcomplementConsensus = null;
     // colour scheme may hold reference to consensus
-    globalColourScheme = null;
+    residueShading = null;
     // TODO remove listeners from changeSupport?
     changeSupport = null;
     setAlignment(null);
@@ -1090,6 +1083,10 @@ public abstract class AlignmentViewport implements AlignViewportI,
   public void setSelectionGroup(SequenceGroup sg)
   {
     selectionGroup = sg;
+    if (sg != null)
+    {
+      sg.setContext(alignment);
+    }
   }
 
   public void setHiddenColumns(ColumnSelection colsel)
@@ -1202,9 +1199,9 @@ public abstract class AlignmentViewport implements AlignViewportI,
     if (ap != null)
     {
       updateConsensus(ap);
-      if (globalColourScheme != null)
+      if (residueShading != null)
       {
-        globalColourScheme.setThreshold(globalColourScheme.getThreshold(),
+        residueShading.setThreshold(residueShading.getThreshold(),
                 ignoreGapsInConsensusCalculation);
       }
     }
@@ -1840,7 +1837,7 @@ public abstract class AlignmentViewport implements AlignViewportI,
       selectionGroup.setEndRes(alWidth - 1);
     }
 
-    resetAllColourSchemes();
+    updateAllColourSchemes();
     calculator.restartWorkers();
     // alignment.adjustSequenceAnnotations();
   }
@@ -1848,17 +1845,17 @@ public abstract class AlignmentViewport implements AlignViewportI,
   /**
    * reset scope and do calculations for all applied colourschemes on alignment
    */
-  void resetAllColourSchemes()
+  void updateAllColourSchemes()
   {
-    CollectionColourSchemeI cs = globalColourScheme;
-    if (cs != null)
+    ResidueShaderI rs = residueShading;
+    if (rs != null)
     {
-      cs.alignmentChanged(alignment, hiddenRepSequences);
+      rs.alignmentChanged(alignment, hiddenRepSequences);
 
-      cs.setConsensus(hconsensus);
-      if (cs.conservationApplied())
+      rs.setConsensus(hconsensus);
+      if (rs.conservationApplied())
       {
-        cs.setConservation(Conservation.calculateConservation("All",
+        rs.setConservation(Conservation.calculateConservation("All",
                 alignment.getSequences(), 0, alignment.getWidth(), false,
                 getConsPercGaps(), false));
       }