X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fcontroller%2FAlignViewController.java;h=bc7f21269a8e46c0b34ee604a8227ea8509d7a34;hb=499d28231522cf0f831b4d3acf944f00c8ece3a4;hp=9451c3b8445e5e67a5be1a51729a73ed2759385f;hpb=18332294de98caa446556a67f78192de80e484e9;p=jalview.git diff --git a/src/jalview/controller/AlignViewController.java b/src/jalview/controller/AlignViewController.java index 9451c3b..bc7f212 100644 --- a/src/jalview/controller/AlignViewController.java +++ b/src/jalview/controller/AlignViewController.java @@ -33,6 +33,7 @@ import jalview.datamodel.SequenceCollectionI; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; +import jalview.io.DataSourceType; import jalview.io.FeaturesFile; import jalview.util.MessageManager; @@ -243,10 +244,6 @@ public class AlignViewController implements AlignViewControllerI SequenceFeature[] sfs = sq.getSequenceFeatures(); if (sfs != null) { - /* - * check whether the feature start/end (base 1) - * overlaps the selection start/end - */ int ist = sq.findIndex(sq.getStart()); int iend = sq.findIndex(sq.getEnd()); if (iend < startPosition || ist > endPosition) @@ -264,29 +261,54 @@ public class AlignViewController implements AlignViewControllerI // - findIndex wastes time by starting from first character and // counting - int i = sq.findIndex(sf.getBegin()); - int j = sq.findIndex(sf.getEnd()); - if (j < startPosition || i > endPosition) + int sfStartCol = sq.findIndex(sf.getBegin()); + int sfEndCol = sq.findIndex(sf.getEnd()); + + if (sf.isContactFeature()) + { + /* + * 'contact' feature - check for 'start' or 'end' + * position within the selected region + */ + if (sfStartCol >= startPosition + && sfStartCol <= endPosition) + { + bs.set(sfStartCol - 1); + sequenceHasFeature = true; + } + if (sfEndCol >= startPosition && sfEndCol <= endPosition) + { + bs.set(sfEndCol - 1); + sequenceHasFeature = true; + } + continue; + } + + /* + * contiguous feature - select feature positions (if any) + * within the selected region + */ + if (sfStartCol > endPosition || sfEndCol < startPosition) { // feature is outside selected region continue; } sequenceHasFeature = true; - if (i < startPosition) + if (sfStartCol < startPosition) { - i = startPosition; + sfStartCol = startPosition; } - if (i < ist) + if (sfStartCol < ist) { - i = ist; + sfStartCol = ist; } - if (j > endPosition) + if (sfEndCol > endPosition) { - j = endPosition; + sfEndCol = endPosition; } - for (; i <= j; i++) + for (; sfStartCol <= sfEndCol; sfStartCol++) { - bs.set(i - 1); // convert to base 0 + bs.set(sfStartCol - 1); // convert to base 0 } } } @@ -349,7 +371,7 @@ public class AlignViewController implements AlignViewControllerI } @Override - public boolean parseFeaturesFile(String file, String protocol, + public boolean parseFeaturesFile(String file, DataSourceType protocol, boolean relaxedIdMatching) { boolean featuresFile = false;