JAL-1164 regression on JAL-1292 use bitset to mark graphGroup as rendered
[jalview.git] / src / jalview / viewmodel / AlignmentViewport.java
index d65486d..6f3a2af 100644 (file)
@@ -40,7 +40,9 @@ import jalview.workers.AlignCalcManager;
 import jalview.workers.ConsensusThread;
 import jalview.workers.StrucConsensusThread;
 
+import java.awt.Color;
 import java.util.ArrayList;
+import java.util.BitSet;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
@@ -594,6 +596,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    * 
    * @return null or the currently selected sequence region
    */
+  @Override
   public SequenceGroup getSelectionGroup()
   {
     return selectionGroup;
@@ -606,6 +609,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    *          - group holding references to sequences in this alignment view
    * 
    */
+  @Override
   public void setSelectionGroup(SequenceGroup sg)
   {
     selectionGroup = sg;
@@ -781,6 +785,8 @@ public abstract class AlignmentViewport implements AlignViewportI
 
   protected boolean showConsensus = true;
 
+  Hashtable sequenceColours;
+
   /**
    * Property change listener for changes in alignment
    * 
@@ -1054,6 +1060,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    * 
    * @return array of references to sequence objects
    */
+  @Override
   public SequenceI[] getSequenceSelection()
   {
     SequenceI[] sequences = null;
@@ -1076,6 +1083,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    * 
    * @return String[]
    */
+  @Override
   public jalview.datamodel.CigarArray getViewAsCigars(
           boolean selectedRegionOnly)
   {
@@ -1092,6 +1100,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    *          boolean true to just return the selected view
    * @return AlignmentView
    */
+  @Override
   public jalview.datamodel.AlignmentView getAlignmentView(
           boolean selectedOnly)
   {
@@ -1110,6 +1119,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    *          is true)
    * @return AlignmentView
    */
+  @Override
   public jalview.datamodel.AlignmentView getAlignmentView(
           boolean selectedOnly, boolean markGroups)
   {
@@ -1125,6 +1135,7 @@ public abstract class AlignmentViewport implements AlignViewportI
    * 
    * @return String[]
    */
+  @Override
   public String[] getViewAsString(boolean selectedRegionOnly)
   {
     String[] selection = null;
@@ -1406,7 +1417,7 @@ public abstract class AlignmentViewport implements AlignViewportI
     int charHeight = getCharHeight();
     if (aa != null)
     {
-      boolean graphgrp[] = null;
+      BitSet graphgrp = new BitSet();
       for (int i = 0; i < aa.length; i++)
       {
         if (aa[i] == null)
@@ -1420,17 +1431,13 @@ public abstract class AlignmentViewport implements AlignViewportI
         }
         if (aa[i].graphGroup > -1)
         {
-          if (graphgrp == null)
-          {
-            graphgrp = new boolean[aa.length];
-          }
-          if (graphgrp[aa[i].graphGroup])
+          if (graphgrp.get(aa[i].graphGroup))
           {
             continue;
           }
           else
           {
-            graphgrp[aa[i].graphGroup] = true;
+            graphgrp.set(aa[i].graphGroup);
           }
         }
         aa[i].height = 0;
@@ -1535,4 +1542,60 @@ public abstract class AlignmentViewport implements AlignViewportI
     oldrfs.clear();
   }
 
+  @Override
+  public Color getSequenceColour(SequenceI seq)
+  {
+    Color sqc=Color.white;
+    if (sequenceColours != null)
+    {
+      sqc = (Color) sequenceColours.get(seq);
+      if (sqc == null) {
+        sqc = Color.white;
+      }
+    }
+    return sqc;
+  }
+
+  @Override
+  public void setSequenceColour(SequenceI seq, Color col)
+  {
+    if (sequenceColours == null)
+    {
+      sequenceColours = new Hashtable();
+    }
+
+    if (col == null)
+    {
+      sequenceColours.remove(seq);
+    }
+    else
+    {
+      sequenceColours.put(seq, col);
+    }
+  }
+
+  @Override
+  public void updateSequenceIdColours()
+  {
+    if (sequenceColours == null)
+    {
+      sequenceColours = new Hashtable();
+    }
+    for (SequenceGroup sg : alignment.getGroups())
+    {
+      if (sg.idColour != null)
+      {
+        for (SequenceI s : sg.getSequences(getHiddenRepSequences()))
+        {
+          sequenceColours.put(s, sg.idColour);
+        }
+      }
+    }
+  }
+
+  @Override
+  public void clearSequenceColours()
+  {
+    sequenceColours = null;
+  };
 }