Merge branch 'develop' into features/JAL-2446NCList features/JAL-653_JAL-1766_htslib_refseqsupport
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Tue, 21 Mar 2017 11:07:15 +0000 (11:07 +0000)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Tue, 21 Mar 2017 11:07:15 +0000 (11:07 +0000)
Conflicts:
src/jalview/datamodel/Sequence.java
src/jalview/gui/OverviewPanel.java

1  2 
src/jalview/datamodel/Sequence.java
src/jalview/datamodel/SequenceI.java
src/jalview/gui/SeqCanvas.java

@@@ -22,7 -22,6 +22,7 @@@ package jalview.datamodel
  
  import jalview.analysis.AlignSeq;
  import jalview.api.DBRefEntryI;
 +import jalview.datamodel.features.SequenceFeatures;
  import jalview.util.Comparison;
  import jalview.util.DBRefUtils;
  import jalview.util.MapList;
@@@ -82,8 -81,6 +82,8 @@@ public class Sequence extends ASequenc
    /** array of sequence features - may not be null for a valid sequence object */
    public SequenceFeature[] sequenceFeatures;
  
 +  private SequenceFeatures sequenceFeatureStore;
 +
    /**
     * Creates a new Sequence object.
     * 
      this.sequence = sequence2;
      this.start = start2;
      this.end = end2;
 +    sequenceFeatureStore = new SequenceFeatures();
      parseId();
      checkValidRange();
    }
    }
  
    @Override
-   public synchronized void addSequenceFeature(SequenceFeature sf)
+   public synchronized boolean addSequenceFeature(SequenceFeature sf)
    {
      if (sequenceFeatures == null && datasetSequence != null)
      {
-       datasetSequence.addSequenceFeature(sf);
-       return;
+       return datasetSequence.addSequenceFeature(sf);
      }
      if (sequenceFeatures == null)
      {
      {
        if (sequenceFeatures[i].equals(sf))
        {
-         return;
+         return false;
        }
      }
  
      temp[sequenceFeatures.length] = sf;
  
      sequenceFeatures = temp;
 +
 +    sequenceFeatureStore.add(sf);
+     return true;
    }
  
    @Override
      }
    }
  
 +  @Override
 +  public List<SequenceFeature> findFeatures(String type, int from, int to)
 +  {
 +    if (datasetSequence != null)
 +    {
 +      return datasetSequence.findFeatures(type, from, to);
 +    }
 +    return sequenceFeatureStore.findFeatures(type, from, to);
 +  }
  }
@@@ -337,7 -337,14 +337,14 @@@ public interface SequenceI extends ASeq
     */
    public void addDBRef(DBRefEntry entry);
  
-   public void addSequenceFeature(SequenceFeature sf);
+   /**
+    * Adds the given sequence feature and returns true, or returns false if it is
+    * already present on the sequence
+    * 
+    * @param sf
+    * @return
+    */
+   public boolean addSequenceFeature(SequenceFeature sf);
  
    public void deleteFeature(SequenceFeature sf);
  
     *         list
     */
    public List<DBRefEntry> getPrimaryDBRefs();
 +
 +  /**
 +   * Returns a (possibly empty) list of sequence features of the given type that
 +   * overlap the range from-to (inclusive)
 +   * 
 +   * @param type
 +   * @param from
 +   * @param to
 +   * @return
 +   */
 +  List<SequenceFeature> findFeatures(String type, int from, int to);
  }
@@@ -26,6 -26,7 +26,7 @@@ import jalview.datamodel.SequenceGroup
  import jalview.datamodel.SequenceI;
  import jalview.renderer.ScaleRenderer;
  import jalview.renderer.ScaleRenderer.ScaleMark;
+ import jalview.viewmodel.ViewportRanges;
  
  import java.awt.BasicStroke;
  import java.awt.BorderLayout;
@@@ -279,10 -280,11 +280,11 @@@ public class SeqCanvas extends JCompone
      gg.copyArea(horizontal * charWidth, vertical * charHeight, imgWidth,
              imgHeight, -horizontal * charWidth, -vertical * charHeight);
  
-     int sr = av.startRes;
-     int er = av.endRes;
-     int ss = av.startSeq;
-     int es = av.endSeq;
+     ViewportRanges ranges = av.getRanges();
+     int sr = ranges.getStartRes();
+     int er = ranges.getEndRes();
+     int ss = ranges.getStartSeq();
+     int es = ranges.getEndSeq();
      int transX = 0;
      int transY = 0;
  
      {
        ss = es - vertical;
  
-       if (ss < av.startSeq)
+       if (ss < ranges.getStartSeq())
        { // ie scrolling too fast, more than a page at a time
-         ss = av.startSeq;
+         ss = ranges.getStartSeq();
        }
        else
        {
-         transY = imgHeight - (vertical * charHeight);
+         transY = imgHeight - ((vertical + 1) * charHeight);
        }
      }
      else if (vertical < 0)
      {
        es = ss - vertical;
  
-       if (es > av.endSeq)
+       if (es > ranges.getEndSeq())
        {
-         es = av.endSeq;
+         es = ranges.getEndSeq();
        }
      }
  
      gg.setColor(Color.white);
      gg.fillRect(0, 0, imgWidth, imgHeight);
  
+     ViewportRanges ranges = av.getRanges();
      if (av.getWrapAlignment())
      {
-       drawWrappedPanel(gg, getWidth(), getHeight(), av.startRes);
+       drawWrappedPanel(gg, getWidth(), getHeight(), ranges.getStartRes());
      }
      else
      {
-       drawPanel(gg, av.startRes, av.endRes, av.startSeq, av.endSeq, 0);
+       drawPanel(gg, ranges.getStartRes(), ranges.getEndRes(),
+               ranges.getStartSeq(), ranges.getEndSeq(), 0);
      }
  
      g.drawImage(lcimg, 0, 0, this);
  
      av.setWrappedWidth(cWidth);
  
-     av.endRes = av.startRes + cWidth;
+     av.getRanges().setEndRes(av.getRanges().getStartRes() + cWidth);
  
      int endx;
      int ypos = hgap;
  
      // / First draw the sequences
      // ///////////////////////////
-     for (int i = startSeq; i < endSeq; i++)
+     for (int i = startSeq; i <= endSeq; i++)
      {
        nextSeq = av.getAlignment().getSequenceAt(i);
        if (nextSeq == null)
  
        if (av.isShowSequenceFeatures())
        {
 -        fr.drawSequence(g, nextSeq, startRes, endRes, offset
 +        fr.drawSequence(g, nextSeq, startRes,
 +                endRes, offset
                  + ((i - startSeq) * charHeight));
        }
  
          int top = -1;
          int bottom = -1;
  
-         for (i = startSeq; i < endSeq; i++)
+         for (i = startSeq; i <= endSeq; i++)
          {
            sx = (group.getStartRes() - startRes) * charWidth;
            sy = offset + ((i - startSeq) * charHeight);