JAL-3148 show/hide features on structure independent of alignment
[jalview.git] / src / jalview / structures / models / AAStructureBindingModel.java
index fc82827..0b19d51 100644 (file)
@@ -46,6 +46,8 @@ import java.util.Arrays;
 import java.util.BitSet;
 import java.util.List;
 
+import org.springframework.web.filter.ShallowEtagHeaderFilter;
+
 /**
  * 
  * A base class to hold common function for protein structure model binding.
@@ -74,6 +76,12 @@ public abstract class AAStructureBindingModel
    */
   private ColourSchemeI colourScheme;
   
+  /*
+   * flag for whether to include feature colouring, if using a Jalview colour
+   * scheme (independently of whether features are shown on alignment)
+   */
+  private boolean showFeatures;
+  
   private StructureSelectionManager ssm;
 
   /*
@@ -350,7 +358,7 @@ public abstract class AAStructureBindingModel
 
   public void setColourBy(ColourBy option)
   {
-       colourBy = option;
+        colourBy = option;
   }
   
   public boolean isColourBySequence()
@@ -360,7 +368,7 @@ public abstract class AAStructureBindingModel
   
   protected boolean isJalviewColourScheme()
   {
-       return colourBy == ColourBy.Jalview;
+        return colourBy == ColourBy.Jalview;
   }
 
   protected void addSequenceAndChain(int pe, SequenceI[] seq,
@@ -773,19 +781,22 @@ public abstract class AAStructureBindingModel
    * 
    * @param cs
    * @param ap
+   * @param showFeats
    */
-  public void setJalviewColourScheme(ColourSchemeI cs, AlignmentViewPanel ap)
+  public void setJalviewColourScheme(ColourSchemeI cs, AlignmentViewPanel ap,
+          boolean showFeats)
   {
     colourBy = ColourBy.Jalview;
     colourScheme = cs;
+    showFeatures = showFeats;
     
-    if (cs == null || cs.isSimple()) 
+    if (!showFeats && (cs == null || cs.isSimple())) 
     {
       setSimpleColourScheme(cs);
     } 
     else
     {
-      colourBySequence(ap, new SequenceRenderer(ap.getAlignViewport(), cs));
+      colourBySequence(ap, new SequenceRenderer(ap.getAlignViewport(), cs), showFeatures);
     }
   }
 
@@ -819,7 +830,7 @@ public abstract class AAStructureBindingModel
   public abstract void setBackgroundColour(Color col);
 
   protected abstract StructureMappingcommandSet[] getColourBySequenceCommands(
-          String[] files, SequenceRendererI sr, AlignmentViewPanel avp);
+          String[] files, SequenceRendererI sr, AlignmentViewPanel avp, boolean showFeatures);
 
   protected abstract void colourBySequence(
           StructureMappingcommandSet[] colourBySequenceCommands);
@@ -831,20 +842,21 @@ public abstract class AAStructureBindingModel
 
   public void colourByCharge()
   {
-       colourBy = ColourBy.ChargeAndCysteine;
+    colourBy = ColourBy.ChargeAndCysteine;
   }
 
-  public void colourBySequence(AlignmentViewPanel alignmentv)
+  public void colourBySequence(AlignmentViewPanel alignmentv, boolean showFeatures)
   {
-       colourBySequence(alignmentv, alignmentv.getSequenceRenderer());
+    colourBySequence(alignmentv, alignmentv.getSequenceRenderer(), showFeatures);
   }
 
   /**
    * Colours any structures associated with sequences in the given alignment view
    * using the getFeatureRenderer() and getSequenceRenderer() renderers
    */
-  public void colourBySequence(AlignmentViewPanel alignmentv, SequenceRendererI sr)
+  public void colourBySequence(AlignmentViewPanel alignmentv, SequenceRendererI sr, boolean showFeats)
   {
+    showFeatures = showFeats;
     if (!isLoadingFinished())
     {
       return;
@@ -856,7 +868,7 @@ public abstract class AAStructureBindingModel
     String[] files = getStructureFiles();
 
     StructureMappingcommandSet[] colourBySequenceCommands = getColourBySequenceCommands(
-            files, sr, alignmentv);
+            files, sr, alignmentv, showFeatures);
     colourBySequence(colourBySequenceCommands);
   }
 
@@ -888,7 +900,7 @@ public void updateColours(Object source) {
     {
       return;
     }
-    if (colourScheme == null || colourScheme.isSimple())
+    if (!showFeatures && (colourScheme == null || colourScheme.isSimple()))
     {
       return;
     }
@@ -897,11 +909,13 @@ public void updateColours(Object source) {
     {
       if (isColourBySequence())
       {
-           colourBySequence(ap, new SequenceRenderer(ap.getAlignViewport()));
+        colourBySequence(ap, new SequenceRenderer(ap.getAlignViewport()), 
+                showFeatures);
       } 
       else
       {
-        colourBySequence(ap, new SequenceRenderer(ap.getAlignViewport(), colourScheme));
+        colourBySequence(ap, new SequenceRenderer(ap.getAlignViewport(), 
+                colourScheme), showFeatures);
       }
     }
   }