JAL-2371 CollectionColourScheme wraps ColourSchemeI
[jalview.git] / src / jalview / viewmodel / AlignmentViewport.java
index 0171fd1..0803773 100644 (file)
@@ -43,6 +43,8 @@ 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.schemes.ColourSchemeI;
 import jalview.schemes.PIDColourScheme;
 import jalview.structure.CommandListener;
@@ -597,7 +599,7 @@ public abstract class AlignmentViewport implements AlignViewportI,
 
   protected boolean ignoreGapsInConsensusCalculation = false;
 
-  protected ColourSchemeI globalColourScheme = null;
+  protected CollectionColourScheme globalColourScheme;
 
   @Override
   public void setGlobalColourScheme(ColourSchemeI cs)
@@ -609,7 +611,16 @@ public abstract class AlignmentViewport implements AlignViewportI,
     // - 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
-    globalColourScheme = cs;
+
+    /*
+     * only instantiate colour scheme once, thereafter update it
+     */
+    if (globalColourScheme == null)
+    {
+      globalColourScheme = new CollectionColourScheme();
+    }
+    globalColourScheme.setColourScheme(cs);
+
     boolean recalc = false;
     if (cs != null)
     {
@@ -618,20 +629,21 @@ public abstract class AlignmentViewport implements AlignViewportI,
               || cs instanceof Blosum62ColourScheme)
       {
         recalc = true;
-        cs.setThreshold(viewStyle.getThreshold(),
+        globalColourScheme.setThreshold(viewStyle.getThreshold(),
                 ignoreGapsInConsensusCalculation);
       }
       else
       {
-        cs.setThreshold(0, ignoreGapsInConsensusCalculation);
+        globalColourScheme
+                .setThreshold(0, ignoreGapsInConsensusCalculation);
       }
       if (recalc)
       {
-        cs.setConsensus(hconsensus);
-        cs.setConservation(hconservation);
+        globalColourScheme.setConsensus(hconsensus);
+        globalColourScheme.setConservation(hconservation);
       }
-      cs.setConservationApplied(getConservationSelected());
-      cs.alignmentChanged(alignment, hiddenRepSequences);
+      globalColourScheme.setConservationApplied(getConservationSelected());
+      globalColourScheme.alignmentChanged(alignment, hiddenRepSequences);
     }
     if (getColourAppliesToAllGroups())
     {
@@ -639,31 +651,33 @@ public abstract class AlignmentViewport implements AlignViewportI,
       {
         if (cs == null)
         {
-          sg.cs = null;
+          sg.setColourScheme(null);
           continue;
         }
-        sg.cs = cs.getInstance(sg, getHiddenRepSequences());
+        CollectionColourScheme groupColour = new CollectionColourScheme(cs.getInstance(sg,
+                getHiddenRepSequences()));
+        sg.setGroupColourScheme(groupColour);
         sg.setConsPercGaps(ConsPercGaps);
         if (getAbovePIDThreshold() || cs instanceof PIDColourScheme
                 || cs instanceof Blosum62ColourScheme)
         {
-          sg.cs.setThreshold(viewStyle.getThreshold(),
+          groupColour.setThreshold(viewStyle.getThreshold(),
                   isIgnoreGapsConsensus());
           recalc = true;
         }
         else
         {
-          sg.cs.setThreshold(0, isIgnoreGapsConsensus());
+          groupColour.setThreshold(0, isIgnoreGapsConsensus());
         }
 
         if (getConservationSelected())
         {
-          sg.cs.setConservationApplied(true);
+          groupColour.setConservationApplied(true);
           recalc = true;
         }
         else
         {
-          sg.cs.setConservation(null);
+          groupColour.setConservation(null);
           // sg.cs.setThreshold(0, getIgnoreGapsConsensus());
         }
         if (recalc)
@@ -672,7 +686,7 @@ public abstract class AlignmentViewport implements AlignViewportI,
         }
         else
         {
-          sg.cs.alignmentChanged(sg, hiddenRepSequences);
+          groupColour.alignmentChanged(sg, hiddenRepSequences);
         }
       }
     }
@@ -681,6 +695,13 @@ public abstract class AlignmentViewport implements AlignViewportI,
   @Override
   public ColourSchemeI getGlobalColourScheme()
   {
+    return globalColourScheme == null ? null : globalColourScheme
+            .getColourScheme();
+  }
+
+  @Override
+  public CollectionColourSchemeI getViewportColourScheme()
+  {
     return globalColourScheme;
   }
 
@@ -1859,7 +1880,7 @@ public abstract class AlignmentViewport implements AlignViewportI,
    */
   void resetAllColourSchemes()
   {
-    ColourSchemeI cs = globalColourScheme;
+    CollectionColourScheme cs = globalColourScheme;
     if (cs != null)
     {
       cs.alignmentChanged(alignment, hiddenRepSequences);