Allow for frame insets
[jalview.git] / src / jalview / datamodel / Sequence.java
index ff7ec32..a0a858a 100755 (executable)
@@ -20,6 +20,7 @@ package jalview.datamodel;
 
 
 import java.util.*;
+import jalview.analysis.AlignSeq;
 
 
 /**
@@ -47,10 +48,6 @@ public class Sequence implements SequenceI
   /** DOCUMENT ME!! */
   public SequenceFeature[] sequenceFeatures;
 
-  /** This array holds hidden sequences
-   * of which this sequence is the representitive member of a group
-   */
-  SequenceGroup hiddenSequences;
 
   /**
    * Creates a new Sequence object.
@@ -415,7 +412,10 @@ public class Sequence implements SequenceI
     // JBPNote - this is an incomplete copy.
     SequenceI nseq = new Sequence(this.getName(), seq, nstart, nend);
     nseq.setDescription(description);
-    nseq.setDatasetSequence(getDatasetSequence());
+    if (datasetSequence!=null)
+        nseq.setDatasetSequence(datasetSequence);
+    else
+        nseq.setDatasetSequence(this);
     return nseq;
   }
 
@@ -569,9 +569,31 @@ public class Sequence implements SequenceI
       System.arraycopy(sequence,j,tmp,i,sequence.length-j);
     }
 
+    if (this.datasetSequence != null)
+    {
+      for (int s = i; s < j; s++)
+      {
+        if (jalview.schemes.ResidueProperties.aaIndex[sequence[s]] != 23)
+        {
+
+          Sequence ds = new Sequence(name,
+                                     AlignSeq.extractGaps(
+                                         jalview.util.Comparison.GapChars,
+                                         this.getSequenceAsString()
+                                     ),
+                                     start,
+                                     end);
+          ds.setDescription(description);
+        }
+        break;
+      }
+    }
+
     sequence = tmp;
+
   }
 
+
   /**
    * DOCUMENT ME!
    *
@@ -686,28 +708,35 @@ public class Sequence implements SequenceI
     this.annotation.addElement(annotation);
   }
 
-  public SequenceGroup getHiddenSequences()
-  {
-    return hiddenSequences;
-  }
 
-  public void addHiddenSequence(SequenceI seq)
-  {
-    if (hiddenSequences == null)
-    {
-      hiddenSequences = new SequenceGroup();
-    }
-    hiddenSequences.addSequence(seq, false);
+  /**
+   * test if this is a valid candidate for another
+   * sequence's dataset sequence.
+   *
+   */
+  private boolean isValidDatasetSequence() {
+      if (datasetSequence!=null)
+          return false;
+      for (int i=0;i<sequence.length; i++)
+          if (jalview.util.Comparison.isGap(sequence[i]))
+              return false;
+      return true;
+  }
+  /* (non-Javadoc)
+   * @see jalview.datamodel.SequenceI#deriveSequence()
+   */
+  public SequenceI deriveSequence() {
+      SequenceI seq = new Sequence(name, sequence, start, end);
+      seq.setDescription(description);
+      if (datasetSequence!=null) {
+          seq.setDatasetSequence(datasetSequence);
+      } else {
+          if (isValidDatasetSequence())
+              seq.setDatasetSequence(this);
+      }
+      return seq;
   }
 
-  public void showHiddenSequence(SequenceI seq)
-  {
-    hiddenSequences.deleteSequence(seq, false);
-    if (hiddenSequences.getSize(false) < 1)
-    {
-      hiddenSequences = null;
-    }
-  }
 }